I'm attaching a patch against version 2.0.865-1.  This is somewhat
based on Guido's work, but adds much new functionality.  As suggested, I
did not break out iscsistart into a separate package.  Instead, I kept
it part of open-iscsi and gated including it in the initramfs by
the /etc/iscsi/iscsi.initramfs file.  This is fully documented in the
updated README.Debian.  With this, I can netboot a diskless client
directly into an iscsi root disk.  Thanks,

        Alex


diff -u open-iscsi-2.0.865/debian/changelog open-iscsi-2.0.865/debian/changelog
--- open-iscsi-2.0.865/debian/changelog
+++ open-iscsi-2.0.865/debian/changelog
@@ -1,3 +1,11 @@
+open-iscsi (2.0.865-1.aw1) unstable; urgency=low
+
+  * Include iscsistart for use in initramfs
+  * Add initramfs scripts to make iSCSI root easy
+  * Based on patch by Guido Guenther <[EMAIL PROTECTED]> 
+
+ -- Alex Williamson <[EMAIL PROTECTED]>  Sun, 24 Feb 2008 19:53:47 -0700
+
 open-iscsi (2.0.865-1) unstable; urgency=low
 
   * New upstream release
diff -u open-iscsi-2.0.865/debian/rules open-iscsi-2.0.865/debian/rules
--- open-iscsi-2.0.865/debian/rules
+++ open-iscsi-2.0.865/debian/rules
@@ -112,6 +112,13 @@
 	install -m 755 usr/iscsid $(CURDIR)/debian/open-iscsi/usr/sbin
 	install -m 644 etc/iscsid.conf $(CURDIR)/debian/open-iscsi/etc/iscsi
 	install -m 644 debian/initiatorname.iscsi $(CURDIR)/debian/open-iscsi/etc/iscsi/initiatorname.iscsi
+	install -m 755 usr/iscsistart $(CURDIR)/debian/open-iscsi/usr/sbin
+
+	# initramfs stuff
+	install -m 755 debian/extra/initramfs.hook \
+		$(CURDIR)/debian/open-iscsi/usr/share/initramfs-tools/hooks/iscsi
+	install -m 755 debian/extra/initramfs.local-top \
+		$(CURDIR)/debian/open-iscsi/usr/share/initramfs-tools/scripts/local-top/iscsi
 
 	dh_install -s
 
diff -u open-iscsi-2.0.865/debian/dirs open-iscsi-2.0.865/debian/dirs
--- open-iscsi-2.0.865/debian/dirs
+++ open-iscsi-2.0.865/debian/dirs
@@ -6,0 +7,2 @@
+/usr/share/initramfs-tools/hooks/
+/usr/share/initramfs-tools/scripts/local-top/
diff -u open-iscsi-2.0.865/debian/open-iscsi.postinst open-iscsi-2.0.865/debian/open-iscsi.postinst
--- open-iscsi-2.0.865/debian/open-iscsi.postinst
+++ open-iscsi-2.0.865/debian/open-iscsi.postinst
@@ -1,5 +1,14 @@
 #!/bin/sh
 
+update_initramfs()
+{
+    if [ -x /usr/sbin/update-initramfs ] && \
+       [ -e /etc/initramfs-tools/initramfs.conf ] && \
+       [ -e /etc/iscsi/iscsi.initramfs ]; then
+        update-initramfs -u
+    fi
+}
+
 case "$1" in
     configure)
 	# Move old configuration from /etc/ into /etc/iscsi/
@@ -18,6 +27,8 @@
 		mkdir /var/lib/open-iscsi
 		chmod 700   /var/lib/open-iscsi
 	fi
+
+	update_initramfs
     ;;
 
     abort-upgrade|abort-remove|abort-deconfigure)
diff -u open-iscsi-2.0.865/debian/README.Debian open-iscsi-2.0.865/debian/README.Debian
--- open-iscsi-2.0.865/debian/README.Debian
+++ open-iscsi-2.0.865/debian/README.Debian
@@ -13,0 +14,35 @@
+
+The Debian open-iscsi package now supports root filesystem on iSCSI.  Support
+for this is controlled by the existence of the /etc/iscsi/iscsi.initramfs file.
+There are two ways to include iSCSI boot support in your initramfs:
+
+1) Touch /etc/iscsi/iscsi.initramfs and provide options on the command line.
+   This provides flexibility, but if passwords are used, is not very secure.
+   Available boot line options:
+   	iscsi_initiator, iscsi_target_name, iscsi_target_ip,
+	iscsi_target_port, iscsi_target_group, iscsi_username,
+	iscsi_password, iscsi_in_username, iscsi_in_password
+   See iscsistart --help for a description of each option
+
+2) Provide iSCSI option in /etc/iscsi/iscsi.initramfs.
+   Available options:
+   	ISCSI_INITIATOR, ISCSI_TARGET_NAME, ISCSI_TARGET_IP,
+	ISCSI_TARGET_PORT, ISCSI_TARGET_GROUP, ISCSI_USERNAME
+	ISCSI_PASSWORD, ISCSI_IN_USERNAME, ISCSI_IN_PASSWORD
+
+   Example Syntax:
+
+   ISCSI_TARGET_NAME=iqn.2008-01.com.example:storage.foo
+   ISCSI_TARGET_IP=192.168.1.1
+
+   Remember to set proper permissions if username/passwords are used.
+
+If both facilities are used, command line options overwrite iscsi.initramfs
+options.  Also remember that iSCSI requires a working network device, so
+you'll need to get networking started via an ip= boot option (ex. ip=dhcp).
+You also won't want to restart the device during boot, so set it to manual
+mode in /etc/networking/interfaces.  Leave BOOT=local set in
+/etc/initramfs-tools/initramfs.conf and provide a root=/dev/sd* device as
+the iSCSI disk will look like a local disk.
+
+ -- Alex Williamson <[EMAIL PROTECTED]>, Sun, 24 Feb 2008 20:49:31 -0700
diff -u open-iscsi-2.0.865/debian/manpages open-iscsi-2.0.865/debian/manpages
--- open-iscsi-2.0.865/debian/manpages
+++ open-iscsi-2.0.865/debian/manpages
@@ -3,0 +4 @@
+debian/iscsistart.8
only in patch2:
unchanged:
--- open-iscsi-2.0.865.orig/debian/extra/initramfs.hook
+++ open-iscsi-2.0.865/debian/extra/initramfs.hook
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+PREREQ="udev"
+
+prereqs()
+{
+	echo "$PREREQ"
+}
+
+case $1 in
+# get pre-requisites
+prereqs)
+	prereqs
+	exit 0
+	;;
+esac
+
+if [ ! -e /etc/iscsi/iscsi.initramfs ]; then
+	exit 0
+fi
+
+# Hooks for loading iscsi bits into the initramfs
+. /usr/share/initramfs-tools/hook-functions
+
+copy_exec /usr/sbin/iscsistart /sbin
+cp /etc/iscsi/initiatorname.iscsi $DESTDIR/etc
+cp /etc/iscsi/iscsi.initramfs $DESTDIR/etc
+
+for x in crc32c libcrc32c iscsi_tcp libiscsi scsi_transport_iscsi; do
+	manual_add_modules ${x}
+done
only in patch2:
unchanged:
--- open-iscsi-2.0.865.orig/debian/extra/initramfs.local-top
+++ open-iscsi-2.0.865/debian/extra/initramfs.local-top
@@ -0,0 +1,100 @@
+#!/bin/sh
+
+PREREQ=""
+
+prereqs()
+{
+	echo "$PREREQ"
+}
+
+case $1 in
+# get pre-requisites
+prereqs)
+	prereqs
+	exit 0
+	;;
+esac
+
+do_iscsi_login ()
+{
+	# Bring in the main config
+	. /conf/initramfs.conf
+	for conf in conf/conf.d/*; do
+		[ -f ${conf} ] && . ${conf}
+	done
+	. /scripts/functions
+
+	configure_networking
+
+	modprobe iscsi_tcp
+	modprobe crc32c
+
+	if [ -z $ISCSI_INITIATOR ]; then
+		. /etc/initiatorname.iscsi
+		ISCSI_INITIATOR=$InitiatorName
+	fi
+
+	if [ -z $ISCSI_TARGET_PORT ]; then
+		ISCSI_TARGET_PORT=3260
+	fi
+
+	if [ -z $ISCSI_TARGET_GROUP ]; then
+		ISCSI_TARGET_GROUP=1
+	fi
+
+	iscsistart -i $ISCSI_INITIATOR -t $ISCSI_TARGET_NAME	\
+		   -g $ISCSI_TARGET_GROUP -a $ISCSI_TARGET_IP	\
+		   -p $ISCSI_TARGET_PORT $ISCSI_USERNAME	\
+		   $ISCSI_PASSWORD $ISCSI_IN_USERNAME $ISCSI_IN_PASSWORD
+}
+
+parse_iscsi_ops ()
+{
+	. /etc/iscsi.initramfs
+
+	for x in $(cat /proc/cmdline); do
+		case ${x} in
+        	iscsi_initiator=*)
+                	ISCSI_INITIATOR="${x#iscsi_initiator=}"
+                	;;
+        	iscsi_target_name=*)
+                	ISCSI_TARGET_NAME="${x#iscsi_target_name=}"
+                	;;
+        	iscsi_target_ip=*)
+                	ISCSI_TARGET_IP="${x#iscsi_target_ip=}"
+                	;;
+        	iscsi_target_port=*)
+                	ISCSI_TARGET_PORT="${x#iscsi_target_port=}"
+                	;;
+		iscsi_target_group=*)
+			ISCSI_TARGET_GROUP="${x#iscsi_target_group=}"
+			;;
+		iscsi_username=*)
+			ISCSI_USERNAME="-u ${x#iscsi_username=}"
+			;;
+		iscsi_password=*)
+			ISCSI_PASSWORD="-w ${x#iscsi_password=}"
+			;;
+		iscsi_in_username=*)
+			ISCSI_IN_USERNAME="-U ${x#iscsi_in_username=}"
+			;;
+		iscsi_in_password=*)
+			ISCSI_IN_PASSWORD="-W ${x#iscsi_in_password=}"
+			;;
+		esac
+	done
+}
+
+if [ ! -x /sbin/iscsistart ]; then
+	exit 0
+fi
+
+parse_iscsi_ops
+
+if [ -z $ISCSI_TARGET_NAME ] || [ -z $ISCSI_TARGET_IP ]; then
+	exit 0
+fi
+
+do_iscsi_login
+
+exit 0
only in patch2:
unchanged:
--- open-iscsi-2.0.865.orig/debian/iscsistart.8
+++ open-iscsi-2.0.865/debian/iscsistart.8
@@ -0,0 +1,54 @@
+.TH "iscsistart" "8" "February 2008" "open-iscsi" "Debian Distribution" 
+.PP 
+.SH "NAME" 
+iscsistart \- iSCSI boot utility
+.PP 
+.SH "SYNOPSIS" 
+.PP 
+iscsistart
+.PP 
+.SH "DESCRIPTION"
+.PP
+iscsistart is used for attaching to iSCSI targets during bootup.
+.PP
+.SH "OPTIONS"
+.TP
+\fB\-i\fR, \fB\-\-initiatorname=name\fR
+set InitiatorName to name (Required)
+.TP
+\fB\-t\fR, \fB\-\-targetname=name\fR
+set TargetName to name (Required)
+.TP
+\fB\-g\fR, \fB\-\-tgpt=N\fR
+set target portal group tag to N (Required)
+.TP
+\fB\-a\fR, \fB\-\-address=A.B.C.D\fR
+set IP addres to A.B.C.D (Required)
+.TP
+\fB\-p\fR, \fB\-\-port=N\fR
+set port to N (Default 3260)
+.TP
+\fB\-u\fR, \fB\-\-username=N\fR
+set username to N (optional)
+.TP
+\fB\-w\fR, \fB\-\-password=N\fR
+set password to N (optional)
+.TP
+\fB\-U\fR, \fB\-\-username_in=N\fR
+set incoming username to N (optional)
+.TP
+\fB\-W\fR, \fB\-\-password_in=N\fR
+set incoming password to N (optional)
+.TP
+\fB\-d\fR, \fB\-\-debug debuglevel\fR
+print debugging information 
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+display this help and exit
+.TP
+\fB\-v\fR, \fB\-\-version\fR
+display version and exit
+.PP
+.SH "AUTHOR" 
+This manpage was written by Alex Williamson <[EMAIL PROTECTED]>, 2008
+.PP 

Reply via email to