git-svn-id: svn+ssh://svnintern.kmrc.de/projects/gentoo/iwm-overlay@9467 cbe59ace-07ea-0310-918e-868702b5370d
		
			
				
	
	
		
			167 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			D
		
	
	
	
	
	
			
		
		
	
	
			167 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			D
		
	
	
	
	
	
#!/sbin/runscript
 | 
						|
# Copyright 1999-2005 Gentoo Technologies, Inc.
 | 
						|
# Distributed under the terms of the GNU General Public License, v2 or later
 | 
						|
# $Header: /var/cvsroot/gentoo-x86/sys-block/open-iscsi/files/iscsid-init.d,v 1.4 2006/03/07 08:26:46 robbat2 Exp $
 | 
						|
 | 
						|
PID_FILE=/var/run/iscsid.pid
 | 
						|
CONFIG_FILE=/etc/iscsi/iscsid.conf
 | 
						|
DUMP_DIR=/etc/iscsi
 | 
						|
DUMP_NODE="${DUMP_DIR}/node.dump"
 | 
						|
DUMP_DISCOVERY="${DUMP_DIR}/discovery.dump"
 | 
						|
INITIATORNAME=/etc/iscsi/initiatorname.iscsi
 | 
						|
DAEMON=/usr/sbin/iscsid
 | 
						|
ADM=/usr/sbin/iscsiadm
 | 
						|
NAME="iSCSI initiator service"
 | 
						|
if [ -x "/usr/bin/udevinfo" ] ; then
 | 
						|
	UDEVINFO=/usr/bin/udevinfo
 | 
						|
else
 | 
						|
	UDEVINFO="/sbin/udevadm info"
 | 
						|
fi
 | 
						|
 | 
						|
depend() {
 | 
						|
	after modules
 | 
						|
	use net
 | 
						|
	before apache2 heimdal-kadmind heimdal-kdc mit-krb5kadmind mit-krb5kdc mysql postgresql radiusd samba slapd slurpd
 | 
						|
	before zope*
 | 
						|
}
 | 
						|
 | 
						|
checkconfig() {
 | 
						|
	if [ ! -f $CONFIG_FILE ]; then
 | 
						|
		eerror "Config file $CONFIG_FILE does not exist!"
 | 
						|
		return 1
 | 
						|
	fi
 | 
						|
	if [ ! -f $INITIATORNAME -o -z "$(egrep '^InitiatorName=' "${INITIATORNAME}")" ]; then
 | 
						|
		eerror "$INITIATORNAME should contain a string with your initiatior name, eg:"
 | 
						|
		eerror "InitiatorName=iqn.2005-09.tld.domainname.hostname:initiator-name"
 | 
						|
		eerror "Initiator name file does not exist!"
 | 
						|
		return 1
 | 
						|
	fi
 | 
						|
}
 | 
						|
 | 
						|
do_modules() {
 | 
						|
	msg="$1"
 | 
						|
	shift
 | 
						|
	modules="$1"
 | 
						|
	shift
 | 
						|
	opts="$@"
 | 
						|
	for m in ${modules}; do
 | 
						|
		ebegin "${msg} - ${m}"
 | 
						|
		modprobe ${opts} $m
 | 
						|
		ret=$?
 | 
						|
		eend $ret
 | 
						|
		[ $ret -ne 0 ] && return $ret
 | 
						|
	done
 | 
						|
	return 0
 | 
						|
}
 | 
						|
 | 
						|
start() {
 | 
						|
	checkconfig || return 1
 | 
						|
	if [ -n "${LOAD_MODULES}" ] ; then
 | 
						|
		do_modules 'Loading iSCSI modules' "${LOAD_MODULES}"
 | 
						|
	fi
 | 
						|
	ret=$?
 | 
						|
	[ $ret -ne 0 ] && return 1
 | 
						|
	ebegin "Starting ${NAME}"
 | 
						|
	start-stop-daemon --start --exec $DAEMON --quiet -- -i $INITIATORNAME
 | 
						|
	ret=$?
 | 
						|
	eend $ret
 | 
						|
 | 
						|
	ebegin "Logging in to all automatic nodes"
 | 
						|
	${ADM} -m node -L automatic
 | 
						|
	ret=$?
 | 
						|
	eend $ret
 | 
						|
 | 
						|
	sleep 5
 | 
						|
 | 
						|
	einfo "Mounting all disks with entries in /etc/fstab"
 | 
						|
 | 
						|
	NUM_PARTS=0
 | 
						|
	ISCSI_SESSION="`iscsiadm -m session -P 3 2>/dev/null | grep 'Attached scsi disk ' | grep 'State: running$'`"
 | 
						|
	if [ "x${?}" == "x0" ] ; then
 | 
						|
		DISKS="`echo ${ISCSI_SESSION} | awk '{ print }' | sed -e 's@Attached scsi disk @@g' -e 's@State: running@@g'`"
 | 
						|
 | 
						|
		for DISK in ${DISKS} ; do
 | 
						|
			(( NUM_PARTS += 1 ))
 | 
						|
			PARTITIONS[NUM_PARTS]="`find /dev -name \"${DISK}[0-9]*\" | grep -v '\.udev/'` ${PARTITIONS}"
 | 
						|
		done
 | 
						|
        fi
 | 
						|
 | 
						|
	for PARTITION in ${PARTITIONS[@]} ; do
 | 
						|
		IN_FSTAB=""
 | 
						|
 | 
						|
		PART_LABEL_RAW="`${UDEVINFO} -q env -n ${PARTITION} 2>/dev/null | grep '^ID_FS_LABEL='`"
 | 
						|
		if [ "${PART_LABEL_RAW}x" != "x" ] ; then
 | 
						|
			PART_LABEL="`echo ${PART_LABEL_RAW} | awk -F '=' '{ print $2; }'`"
 | 
						|
			IN_FSTAB="`grep ${PART_LABEL} /etc/fstab`"
 | 
						|
		fi
 | 
						|
 | 
						|
		if [ "x${IN_FSTAB}" != "x" ] ; then
 | 
						|
			ebegin "Mounting disk ${PART_LABEL}"
 | 
						|
				mount -s /dev/disk/by-label/${PART_LABEL}
 | 
						|
			eend $?
 | 
						|
		fi
 | 
						|
	done
 | 
						|
 | 
						|
	if [ "${#PARTITIONS[*]}" == "0" ] ; then
 | 
						|
		einfo "No automatic nodes or attached disks found!"
 | 
						|
		ret=0
 | 
						|
	fi
 | 
						|
 | 
						|
	return $?
 | 
						|
}
 | 
						|
	
 | 
						|
stop() {
 | 
						|
	NETDEV_GREP="`grep _netdev /etc/mtab`"
 | 
						|
 | 
						|
	if [ "x${?}" == "x0" ] ; then
 | 
						|
		ebegin "Unmounting all disks with entries in /etc/mtab"
 | 
						|
 | 
						|
		ISCSI_MOUNTS="`echo ${NETDEV_GREP} | awk '{ print $1; }'`"
 | 
						|
		for ISCSI_MOUNT in "${ISCSI_MOUNTS}" ; do
 | 
						|
			umount ${ISCSI_MOUNT}
 | 
						|
		done
 | 
						|
 | 
						|
		ret=$?
 | 
						|
		eend $ret
 | 
						|
	fi
 | 
						|
 | 
						|
	ebegin "Logging out of all nodes"
 | 
						|
	${ADM} -m node -U all
 | 
						|
	ret=$?
 | 
						|
	eend $ret
 | 
						|
 | 
						|
	ebegin "Stopping ${NAME}"
 | 
						|
	start-stop-daemon --signal HUP --stop --quiet --exec $DAEMON #--pidfile $PID_FILE
 | 
						|
	eend $?
 | 
						|
 | 
						|
	# ugly, but pid file is not removed by iscsid
 | 
						|
	rm -f $PID_FILE
 | 
						|
	
 | 
						|
	do_modules 'Removing iSCSI modules' 'iscsi_tcp scsi_transport_iscsi' '-r'
 | 
						|
	ret=$?
 | 
						|
	return $ret
 | 
						|
}
 | 
						|
 | 
						|
opts="${opts} dump"
 | 
						|
 | 
						|
dump() {
 | 
						|
	einfo "Starting dump of iscsid database (nodes)"
 | 
						|
	NODELIST="$(iscsiadm -m node |  awk -F '[\\[\\]]' '{print $2}')"
 | 
						|
	[ -f ${DUMP_NODE} ] && mv -f ${DUMP_NODE} ${DUMP_NODE}.old
 | 
						|
	for i in $NODELIST ; do
 | 
						|
		echo "# $(iscsiadm -m node | egrep "^\[$i\]")" >>${DUMP_NODE}
 | 
						|
		iscsiadm -m node --record=$i >>${DUMP_NODE}
 | 
						|
		echo >>${DUMP_NODE}
 | 
						|
	done
 | 
						|
	einfo "Starting dump of iscsid database (discovery)"
 | 
						|
	DISCOVERYLIST="$(iscsiadm -m discovery |  awk -F '[\\[\\]]' '{print $2}')"
 | 
						|
	[ -f ${DUMP_DISCOVERY} ] && mv -f ${DUMP_DISCOVERY} ${DUMP_DISCOVERY}.old
 | 
						|
	for i in $DISCOVERYLIST ; do
 | 
						|
		echo "# $(iscsiadm -m discovery | egrep "^\[$i\]")" >>${DUMP_DISCOVERY}
 | 
						|
		iscsiadm -m discovery --record=$i >>${DUMP_DISCOVERY}
 | 
						|
		echo >>${DUMP_DISCOVERY}
 | 
						|
	done
 | 
						|
 | 
						|
	einfo "Config dumped to ${DUMP_DIR}/"
 | 
						|
}
 |