On Sat, May 23, 2009 at 21:00:16 -0400, David Dillow wrote: > Warren, Andreas, and I were discussing possible mechanisms for > configuring NFS, NBD, iSCSI, etc going forward, and it was suggested > that we try to document the current ways it is done, and how we may want > to go forward. > For what it's worth, the attached initramfs scripts are included in the nbd-client and open-iscsi Debian packages. Cheers, Julien
#!/bin/sh # We don't have any prerequisites case $1 in prereqs) exit 0 ;; esac . /scripts/functions log_begin_msg "Setting up nbd-client" for x in $(cat /proc/cmdline); do # We don't need to redo what all of what /init already did... case $x in nbdroot=*,*,*) nbdroot="${x#nbdroot=}" nbdsrv=$(echo "$nbdroot" | sed -e "s/,.*$//") nbdport=$(echo "$nbdroot" | sed -e "s/,([^,]*),.*$/\1/") nbdbasedev=$(echo "$nbdroot" | sed -e "s/^.*,//") nbdrootdev=/dev/$nbdbasedev ;; nbdroot=*,*) nbdroot="${x#nbdroot=}" nbdsrv=$(echo "$nbdroot" | sed -e "s/,[^,]*$//") nbdport=$(echo "$nbdroot" | sed -e "s/^[^,]*,//") ;; ip=*) IPOPTS="${x#ip=}" ;; root=/dev/nbd*) nbdrootdev="${x#root=}" nbdbasedev="${x#root=/dev/}" ;; esac done nbdrootdev=${nbdrootdev%p*} nbdbasedev=${nbdbasedev%p*} if [ -z "$nbdport" -o -z "$nbdrootdev" ] then log_failure_msg "Insufficient information to set up nbd, quitting (nbdsrv=$nbdsrv nbdport=$nbdport nbdroot=$nbdroot root=$nbdrootdev)" exit 0 fi DEVICE=eth0 configure_networking if [ -z "$nbdsrv" ] then nbdsrv=${ROOTSERVER} fi if [ -z "$nbdsrv" ] then log_failure_msg "Insufficient information to set up nbd, quitting (nbdsrv=$nbdsrv nbdport=$nbdport nbdroot=$nbdroot root=$nbdrootdev)" exit 0 fi /sbin/nbd-client $nbdsrv $nbdport $nbdrootdev -persist # This should be removed once the cfq scheduler no longer deadlocks nbd # devices if grep '\[cfq\]' /sys/block/$nbdbasedev/queue/scheduler >/dev/null then echo deadline > /sys/block/$nbdbasedev/queue/scheduler fi
#!/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