diff --git a/etc/initd/boot.suse b/etc/initd/boot.suse index df64e21..83875e2 100644 --- a/etc/initd/boot.suse +++ b/etc/initd/boot.suse @@ -4,36 +4,37 @@ # ### BEGIN INIT INFO # Provides: iscsiboot -# Required-Start: boot.proc +# Required-Start: $null # Should-Start: -# Required-Stop: +# Required-Stop: $null # Should-Stop: # Default-Start: B # Default-Stop: -# Short-Description: Starts the iSCSI initiator daemon -# +# Short-Description: iSCSI initiator daemon root-fs support +# Description: Starts the iSCSI initiator daemon if the +# root-filesystem is on an iSCSI device +# ### END INIT INFO ISCSIADM=/sbin/iscsiadm -PID_FILE=/var/run/iscsi.pid CONFIG_FILE=/etc/iscsid.conf DAEMON=/sbin/iscsid -ARGS="-c $CONFIG_FILE -p $PID_FILE" +ARGS="-c $CONFIG_FILE" # Source LSB init functions . /etc/rc.status # -# This service is run right after booting. So all activated targets -# must be enabled during mkinitrd run and thus should not be removed -# when the open-iscsi service is stopped. +# This service is run right after booting. So all targets activated +# during mkinitrd run should not be removed when the open-iscsi +# service is stopped. # iscsi_mark_root_nodes() { $ISCSIADM -m session 2> /dev/null | while read t num i target ; do ip=${i%%:*} - STARTUP=`$ISCSIADM -m node -p $ip -T $target | grep "node.conn\[0\].startup" | cut -d' ' -f3` - if [ "$STARTUP" != "onboot" ] ; then + STARTUP=`$ISCSIADM -m node -p $ip -T $target 2> /dev/null | grep "node.conn\[0\].startup" | cut -d' ' -f3` + if [ "$STARTUP" -a "$STARTUP" != "onboot" ] ; then $ISCSIADM -m node -p $ip -T $target -o update -n node.conn[0].startup -v onboot fi done @@ -50,13 +51,12 @@ fi case "$1" in start) - [ ! -d /var/lib/open-iscsi ] && mkdir -p /var/lib/open-iscsi echo -n "Starting iSCSI initiator for the root device: " startproc $DAEMON $ARGS rc_status -v iscsi_mark_root_nodes ;; - stop) + stop|restart|reload) rc_failed 0 ;; status) @@ -68,13 +68,8 @@ case "$1" in rc_status -v fi ;; - restart) - $0 stop - sleep 1 - $0 start - ;; *) - echo "Usage: $0 {start|stop|status|restart}" + echo "Usage: $0 {start|stop|status|restart|reload}" exit 1 ;; esac diff --git a/etc/initd/initd.suse b/etc/initd/initd.suse index 22901af..9c1dbfb 100644 --- a/etc/initd/initd.suse +++ b/etc/initd/initd.suse @@ -10,15 +10,16 @@ # Should-Stop: # Default-Start: 3 5 # Default-Stop: -# Short-Description: Starts and stops the iSCSI client initiator +# Short-Description: iSCSI initiator daemon +# Description: The iSCSI initator is used to create and +# manage iSCSI connections to a iSCSI Target. # ### END INIT INFO -PID_FILE=/var/run/iscsi.pid CONFIG_FILE=/etc/iscsi/iscsid.conf DAEMON=/sbin/iscsid ISCSIADM=/sbin/iscsiadm -ARGS="-c $CONFIG_FILE -p $PID_FILE" +ARGS="-c $CONFIG_FILE -n" # Source LSB init functions . /etc/rc.status @@ -101,41 +102,8 @@ iscsi_list_all_nodes() done } -iscsi_discover_all_targets() -{ - # Strip off any existing ID information - RAW_NODE_LIST=`iscsiadm -m node | sed -nre 's/^(\[[0-9a-f]*\] )?(.*)$/\2/p'` - # Obtain IPv4 list - IPV4_NODE_LIST=`echo "$RAW_NODE_LIST" | sed -nre 's/^([0-9]{1,3}(\.[0-9]{1,3}){3}):[^: ]* (.*)$/\1 \3/p'` - # Now obtain IPv6 list - IPV6_NODE_LIST=`echo "$RAW_NODE_LIST" | sed -nre 's/^([0-9a-f]{1,4}(:[0-9a-f]{0,4}){6}:[0-9a-f]{1,4}):[^: ]* (.*)$/\1 \3/p'` - - DISC_TARGETS="" - while read NODE_ADDR NODE_NAME; do - [ -z "$NODE_ADDR" -a -z "$NODE_NAME" ] && continue - NODE_ATTRS=`iscsiadm -m node -p "$NODE_ADDR" -T "$NODE_NAME"` - NODE_STATUS=`echo "$NODE_ATTRS" | sed -nre 's/^.*node\.conn\[0\]\.startup = ([a-z]*).*$/\1/p'` - - if [ "$NODE_STATUS" == 'automatic' ]; then - DISC_TARGETS=`echo "$DISC_TARGETS" | sed -re '/'"$NODE_ADDR"'/!{s/(.*)/\1 '"$NODE_ADDR"'/}'` - fi - done < <(echo "$IPV4_NODE_LIST"; echo "$IPV6_NODE_LIST") - - for TARGET_ADDR in $DISC_TARGETS; do - echo -n "Attempting discovery on target at ${TARGET_ADDR}: " - iscsiadm -m discovery -t st -p "$TARGET_ADDR" > /dev/null 2>&1 - if [ "$?" -ne 0 ]; then - rc_failed 1 - rc_status -v - return 1 - fi - rc_status -v - done -} - case "$1" in start) - [ ! -d /var/lib/iscsi ] && mkdir -p /var/lib/iscsi if checkproc $DAEMON ; then RETVAL=0 else @@ -147,24 +115,19 @@ case "$1" in rc_status -v fi if [ "$RETVAL" == "0" ]; then - iscsi_discover_all_targets - RETVAL=$? - fi - if [ "$RETVAL" == "0" ]; then iscsi_login_all_nodes fi ;; stop) iscsi_umount_all_luns + echo -n "Stopping iSCSI initiator service: " if iscsi_logout_all_nodes ; then killproc -KILL $DAEMON RETVAL=$? else RETVAL=1 fi - echo -n "Stopping iSCSI initiator service: " if [ "$RETVAL" == "0" ]; then - rm -f $PID_FILE status=0 modprobe -r iscsi_tcp if [ "$?" -ne "0" -a "$?" -ne "1" ]; then @@ -190,7 +153,7 @@ case "$1" in rc_status -v fi ;; - restart) + restart|reload) $0 stop RETVAL=$? if [ "$RETVAL" != "0" ]; then @@ -201,7 +164,7 @@ case "$1" in $0 start ;; *) - echo "Usage: $0 {start|stop|status|restart}" + echo "Usage: $0 {start|stop|status|restart|reload}" exit 1 ;; esac