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