PKGBUILDs/aur/open-iscsi/open-iscsi
2012-05-30 16:52:47 -04:00

154 lines
4.1 KiB
Bash

#!/bin/bash
. /etc/rc.conf
. /etc/rc.d/functions
# general config
[ -f /etc/conf.d/open-iscsi ] && . /etc/conf.d/open-iscsi
# Set defaults if settings are missing
[ -z "${ISCSID_ARGS}" ] && ISCSID_ARGS=""
[ -z "$SEC_BEFORE_MOUNT" ] && SEC_BEFORE_MOUNT=2
[ -z "$ISCSIADM_EXTRAARGS" ] && ISCSIADM_EXTRAARGS=""
DAEMON_NAME="open-iscsi"
ISCSIADM=/sbin/iscsiadm
PIDFILE=/var/run/iscsid.pid
case "$1" in
start)
modprobe -q iscsi_tcp &>/dev/null
modprobe -q ib_iser &>/dev/null
stat_busy "Starting Open-iSCSI daemon"
/sbin/iscsid ${ISCSID_ARGS}
if [ $? -ne 0 ]; then
stat_fail
exit 2
else
add_daemon $DAEMON_NAME
stat_done
fi
if [ -n "$SERVER" ]; then
stat_busy "Discovering targets"
$ISCSIADM -m discovery -t sendtargets -p $SERVER $ISCSIADM_EXTRAARGS > /dev/null
if [ $? -ne 0 ]; then
stat_fail
exit 3
else
stat_done
fi
stat_busy "Login to all portals"
$ISCSIADM -m node -L all > /dev/null
if [ $? -ne 0 ]; then
stat_fail
exit 4
else
stat_done
fi
if [[ "$MOUNT" != "" ]]; then
# wait n seconds to settle
sleep $SEC_BEFORE_MOUNT
status "Mounting devices"
for MTPT in ${MOUNT[@]}; do
stat_busy "mounting $MTPT"
mount $MTPT
sleep 1
if [ $? -eq 0 ]; then
stat_done
else
stat_fail
fi
done
else
status "No devices to mount defined"
fi
fi
;;
stop)
if [[ "$MOUNT" != "" ]]; then
status "Unmounting devices"
# unmounting in reverse order
LEN=${#MOUNT[@]}
while [ $LEN -ne 0 ]; do
let LEN=$LEN-1;
UMOUNT="$UMOUNT ${MOUNT[$LEN]}";
done
for MTPT in $UMOUNT; do
MOUNTED=$(mount|grep -c `/usr/bin/readlink -mns $MTPT`)
if [ $MOUNTED -ne 0 ]; then
stat_busy "unmounting $MTPT"
umount $MTPT
sleep 1
if [ $? -eq 0 ]; then
stat_done
else
stat_fail
exit 5
fi
else
status "$MTPT not mounted"
fi
done
sleep 2
else
status "No devices to unmount defined"
fi
$ISCSIADM -m session $> /dev/null
if [ $? -eq 0 ]; then
stat_busy "Logout to all portals"
$ISCSIADM -m node -U all > /dev/null
if [ $? -ne 0 ]; then
stat_fail
exit 6
else
stat_done
fi
fi
stat_busy "Stopping Open-iSCSI daemon"
[ -f $PIDFILE ] && kill -9 `cat $PIDFILE` &> /dev/null
if [ $? -ne 0 ]; then
stat_fail
else
rm -f $PIDFILE
killall iscsid > /dev/null
rm_daemon $DAEMON_NAME
stat_done
fi
;;
status)
status "Open-iSCSI status"
ck_daemon $DAEMON_NAME
status "Available portals on node"
echo
echo -ne " "
/sbin/iscsiadm -m node
echo
status "Connected portals for this session"
echo
echo -ne " "
/sbin/iscsiadm -m session
echo
;;
statusv)
status "Open-iSCSI status"
ck_daemon $DAEMON_NAME
status "Detailed session info"
echo
$ISCSIADM -m session -P 2
echo
;;
restart)
$0 stop
sleep 2
$0 start
;;
*)
echo "usage: $0 {start|stop|status|statusv|restart}"
;;
esac
exit 0