a4c8b301eb
- Add patch to make iscsiadm complain and exit when run as user instead of hang spinning for the database lock - Add patch to make iscsiadm start iscsid when needed (rh 436175 related) - Don't start iscsi service when network not yet up (in case of using NM) add NM dispatcher script to start iscsi service once network is up
147 lines
3.6 KiB
Bash
Executable File
147 lines
3.6 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# iscsi: log into iSCSI targets
|
|
#
|
|
# chkconfig: 345 13 89
|
|
# description: Logs into iSCSI targets needed at system startup
|
|
|
|
# Note we should have $network in Required-Start/Stop but we don't because if
|
|
# we would require network chkconfig will put us directly after NetworkManager
|
|
# when using NM, which will make our see if the network is up test succeed
|
|
# while NM is actually still configuring the network. By not requiring network
|
|
# chkconfig will use the chkconfig header to determine our start prio, starting
|
|
# us after the old network service, but before NM (netfs does this the same).
|
|
|
|
### BEGIN INIT INFO
|
|
# Provides: iscsi
|
|
# Required-Start: iscsid
|
|
# Required-Stop: iscsid
|
|
# Default-Start: 3 4 5
|
|
# Default-Stop: 0 1 2 6
|
|
# Short-Description: Starts and stops login and scanning of iSCSI devices.
|
|
# Description: iscsi provides the iSCSI state machine for software iscsi/iser
|
|
# and partial offloaded hardware. iscsi logs into and scans
|
|
# for iSCSI devices, and shuts them down when stopped.
|
|
### END INIT INFO
|
|
|
|
# Source function library.
|
|
. /etc/rc.d/init.d/functions
|
|
|
|
exec="/sbin/iscsiadm"
|
|
prog="iscsi"
|
|
config="/etc/iscsi/initiatorname.iscsi"
|
|
lockfile=/var/lock/subsys/$prog
|
|
iscsid_lockfile=/var/lock/subsys/${prog}_iscsid
|
|
|
|
start() {
|
|
[ -x $exec ] || exit 5
|
|
[ -f $config ] || exit 6
|
|
|
|
# if the network isn't up yet exit cleanly, NetworkManager will call us
|
|
# again when the network is up
|
|
[ ! -f /var/lock/subsys/network -a ! -f /var/lock/subsys/NetworkManager ] && exit 0
|
|
|
|
# if no nodes are setup to startup automatically exit cleanly
|
|
grep -qrs "node.startup = automatic" /var/lib/iscsi/nodes
|
|
[ $? -eq 0 ] || exit 0
|
|
|
|
# this script is normally called from startup so log into
|
|
# nodes marked node.startup=automatic
|
|
echo -n $"Starting $prog: "
|
|
$exec -m node --loginall=automatic 2>&1 > /dev/null | grep iscsiadm
|
|
|
|
# <sigh> iscsiadm does not always give a non 0 exit status in case of
|
|
# error so we grep for any messages to stderr and see those as errors too
|
|
if [ ${PIPESTATUS[0]} -ne 0 -o ${PIPESTATUS[1]} -eq 0 ]; then
|
|
failure $"Starting $prog"
|
|
echo
|
|
return 1
|
|
fi
|
|
|
|
success $"Starting $prog"
|
|
touch $lockfile
|
|
echo
|
|
return 0
|
|
}
|
|
|
|
stop() {
|
|
echo -n $"Stopping $prog: "
|
|
$exec -m node --logoutall=automatic 2>&1 > /dev/null | grep iscsiadm
|
|
|
|
# <sigh> iscsiadm does not always give a non 0 exit status in case of
|
|
# error so we grep for any messages to stderr and see those as errors too
|
|
if [ ${PIPESTATUS[0]} -ne 0 -o ${PIPESTATUS[1]} -eq 0 ]; then
|
|
failure $"Stopping $prog"
|
|
echo
|
|
return 1
|
|
fi
|
|
|
|
success $"Stopping $prog"
|
|
rm -f $lockfile
|
|
echo
|
|
return 0
|
|
}
|
|
|
|
restart() {
|
|
stop
|
|
start
|
|
}
|
|
|
|
reload() {
|
|
return 3
|
|
}
|
|
|
|
force_reload() {
|
|
restart
|
|
}
|
|
|
|
rh_status() {
|
|
[ -f $lockfile ] || return 3
|
|
|
|
declare -a iparams=( $(iscsiadm -m session 2>/dev/null | egrep "tcp|iser") )
|
|
if [[ -z "${iparams[*]}" ]]; then
|
|
# no sessions
|
|
return 2
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
rh_status_q() {
|
|
rh_status >/dev/null 2>&1
|
|
}
|
|
|
|
|
|
case "$1" in
|
|
start)
|
|
rh_status_q && exit 0
|
|
$1
|
|
;;
|
|
stop)
|
|
rh_status_q || exit 0
|
|
$1
|
|
;;
|
|
restart)
|
|
$1
|
|
;;
|
|
reload)
|
|
rh_status_q || exit 7
|
|
$1
|
|
;;
|
|
force-reload)
|
|
force_reload
|
|
;;
|
|
status)
|
|
rh_status
|
|
;;
|
|
condrestart|try-restart)
|
|
rh_status_q || exit 0
|
|
restart
|
|
;;
|
|
*)
|
|
echo $"Usage: $0
|
|
{start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
|
|
exit 2
|
|
esac
|
|
exit $?
|