Blob Blame History Raw
#!/bin/bash
#
# /etc/init.d/iscsi
#
### BEGIN INIT INFO
# Provides:          iscsiboot
# Required-Start:
# Should-Start:      boot.multipath
# Required-Stop:
# Should-Stop:
# Default-Start:     B
# Default-Stop:      
# 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
CONFIG_FILE=/etc/iscsid.conf
DAEMON=/sbin/iscsid
ARGS="-c $CONFIG_FILE"

# Source LSB init functions
. /etc/rc.status

#
# 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 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
}

# Reset status of this service
rc_reset

# We only need to start this for root on iSCSI
if ! grep -q iscsi_tcp /proc/modules ; then
    rc_failed 6
    rc_exit
fi

case "$1" in
    start)
	echo -n "Starting iSCSI initiator for the root device: "
	startproc $DAEMON $ARGS
	rc_status -v
	iscsi_mark_root_nodes
	;;
    stop|restart|reload)
	rc_failed 0
	;;
    status)
	echo -n "Checking for iSCSI initiator service: "
	if checkproc $DAEMON ; then
	    rc_status -v
	else
	    rc_failed 3
	    rc_status -v
	fi
	;;
    *)
	echo "Usage: $0 {start|stop|status|restart|reload}"
	exit 1
	;;
esac
rc_exit