aboutsummaryrefslogtreecommitdiffstats
path: root/networking-layer/recipes-daemons/iscsi-initiator-utils/files/initd.debian
blob: 43fb34813a4fd234efd5bbadc9f47a4a6c669f11 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#! /bin/sh
### BEGIN INIT INFO
# Provides:
# Required-Start:
# Required-Stop:
# Default-Start:
# Default-Stop:
# Short-Description: Starts and stops the iSCSI initiator services and logins to default targets
### END INIT INFO
#set -x
PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/iscsid
ADM=/usr/sbin/iscsiadm
PIDFILE=/var/run/iscsid.pid

[ -x "$DAEMON" ] || exit 0

if [ ! -d /sys/class/ ]; then
  echo "Failure:" "iSCSI requires a mounted sysfs, not started."
  exit 1
fi

nodestartup_re='s/^node\.conn\[0]\.startup[ 	]*=[ 	]*//p'

RETVAL=0

start() {
	echo "Starting iSCSI initiator service" "iscsid"
	modprobe -q iscsi_tcp 2>/dev/null || :
	modprobe -q ib_iser 2>/dev/null || :
	if [ ! -f /etc/iscsi/initiatorname.iscsi ]; then
		INITIATORNAME=$(iscsi-iname)
		cat >/etc/iscsi/initiatorname.iscsi <<EOF
## DO NOT EDIT OR REMOVE THIS FILE!
## If you remove this file, the iSCSI daemon will not start.
## If you change the InitiatorName, existing access control lists
## may reject this initiator.  The InitiatorName must be unique
## for each iSCSI initiator.  Do NOT duplicate iSCSI InitiatorNames.
InitiatorName=$INITIATORNAME
EOF
	fi

	# Fix label for /etc/iscsi/initiatorname.iscsi if SELinux was enabled
	test ! -x /sbin/restorecon || /sbin/restorecon -F /etc/iscsi/initiatorname.iscsi

	start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON
	RETVAL=$?
	starttargets
}

starttargets() {
	echo "Setting up iSCSI targets"
	$ADM -m node --loginall=automatic
}

stoptargets() {
	echo "Disconnecting iSCSI targets"
	sync
	$ADM -m node --logoutall=all
	RETVAL=$?
	#if RETVAL is 21, means no active sessions, consider ok
	if [ "$RETVAL" = "21" ]; then
		RETVAL=0
	fi
}

stop() {
	stoptargets
	if [ $RETVAL -ne 0 ]; then
		echo "Failure:" "Could not stop all targets, try again later"
		return $RETVAL
	fi

	echo "Stopping iSCSI initiator service"
	start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON
	rm -f $PIDFILE
	status=0
	modprobe -r ib_iser 2>/dev/null
	if [ "$?" -ne "0" -a "$?" -ne "1" ]; then
		status=1
	fi
	modprobe -r iscsi_tcp 2>/dev/null
	if [ "$?" -ne "0" -a "$?" -ne "1" ]; then
		status=1
	fi
}

restart() {
	stop
	if [ $RETVAL -ne 0 ]; then
		echo "Failure:" "Stopping iSCSI initiator service failed, not starting"
		return $RETVAL
	fi
	start
}

restarttargets() {
	stoptargets
	if [ $RETVAL -ne 0 ]; then
		echo "Failure:" "Could not stop all targets, try again later"
		return $RETVAL
	fi
	starttargets
}

status() {
	#XXX FIXME: what to do here?
	#status iscsid
	# list active sessions
	echo Current active iSCSI sessions:
	$ADM -m session
}

case "$1" in
	start|starttargets|stop|stoptargets|restart|restarttargets|status)
		$1
		;;
	*)
		echo "Usage: $0 {start|stop|restart|status}"
		exit 1
		;;
esac
exit $RETVAL