Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:GA
lio-utils.216
0112-lio-utils-Add-init-script-for-SUSE.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0112-lio-utils-Add-init-script-for-SUSE.patch of Package lio-utils.216
From 9afa36a336ff203e34ae774998019b1ff84a05bc Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> Date: Tue, 9 Oct 2012 13:51:12 -0700 Subject: lio-utils: Add init script for SUSE Signed-off-by: Hannes Reinecke <hare@suse.de> Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com> --- scripts/rc.target.suse | 403 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 403 insertions(+) create mode 100644 scripts/rc.target.suse diff --git a/scripts/rc.target.suse b/scripts/rc.target.suse new file mode 100644 index 0000000..5e49f8f --- /dev/null +++ b/scripts/rc.target.suse @@ -0,0 +1,403 @@ +#!/bin/bash +# +# Filename: /etc/init.d/target +# target: Bring up/down target_core_mod and iscsi_target_mod v3.0 +# +# Bring up/down iscsi target networking +# +# chkconfig: 2345 18 01 +# description: Target_Core_Mod + LIO-target + ConfigFS v3.x +# config: /etc/sysconfig/target +# +######################################################################### +# + +# For SuSE, the following information is read by "insserv" program and the +# start/stoplinks are installed at appropriate runlevels. +# The network interface and logger has to be up for starting target service + +### BEGIN INIT INFO +# Provides: target +# Required-Start: $network $syslog +# Required-Stop: $network $syslog +# Default-Start: 2 3 5 +# Default-Stop: 0 1 6 +# Description: TCM/ConfigFS and LIO-Target +### END INIT INFO + +# Source function library. +. /etc/rc.status + +######################################################################### +# Our product file definitions + +MODNAME="target_core_mod" + +TCM_CFS_DIR="/sys/kernel/config/target/core" +LIO_CFS_DIR="/sys/kernel/config/target/iscsi" +FILE_TCFG="/etc/sysconfig/target" +LOCK_TARGET="/var/lock/subsys/target" +LOG_EVENT="/var/log/iscsi/target.log" +TCM_NODE="/usr/sbin/tcm_node" +LIO_NODE="/usr/sbin/lio_node" +TCM_FABRIC="/usr/sbin/tcm_fabric" +SEMA_TARGET="/var/crash/target.fault" +CONFIGFS_SCRIPT_DIR="/etc/target" +TCM_CONFIGFS_SCRIPT="/etc/target/tcm_start.sh" +LIO_CONFIGFS_SCRIPT="/etc/target/lio_start.sh" + +######################################################################### +# Allows saving command & arguments into a file for subsequent debugging +# Enable: Set DEBUG=1 Disable: Set DEBUG=0 + +DEBUG=0 +LOGFILE=/tmp/tgtctl.dbug + +if [ $DEBUG ]; then + echo "$0 $*" >> $LOGFILE +fi +######################################################################### + +ARGS_CHECK=2 +ARGS_COUNT=$# + +cd / # to avoid making the CWD unmountable + +######################################################################### + +PATH="/sbin:/bin:/usr/sbin:/usr/bin:$PATH" +RETVAL=0 + +function tcm_check() { + local RETVAL=0 + + if [ ! -f ${TCM_NODE} ]; then + echo "${TCM_NODE} does not exist" + RETVAL=1 + rc_failed $RETVAL + return $RETVAL + fi + + if [ ! -f ${LIO_NODE} ]; then + echo "${LIO_NODE} does not exist" + RETVAL=1 + rc_failed $RETVAL + return $RETVAL + fi + + if [ ! -d /var/target/pr ]; then + echo "/var/target/pr does not exist" + RETVAL=1 + rc_failed $RETVAL + return $RETVAL + fi + + if [ ! -d /var/target/alua ]; then + echo "/var/target/alua does not exist" + RETVAL=1 + rc_failed $RETVAL + fi + return $RETVAL +} + +function run_fabric_cfs_ops() { + for i in $( ls $CONFIGFS_SCRIPT_DIR); do + + CONFIGFS_SCRIPT_PATH="$CONFIGFS_SCRIPT_DIR/$i" + if [ ! -f $CONFIGFS_SCRIPT_PATH ]; then + continue + fi + # target core is handled in run_tcm_cfs_ops() + if [ $i == "tcm_start.sh" ]; then + continue + fi + # iscsi-target fabric module is handled in run_lio_target_cfs_ops() + if [ $i == "lio_start.sh" ]; then + continue + fi + # Skip RPM package save+orig+new + if [[ $i =~ ".rpmsave" ]]; then + continue + fi + + if [[ $i =~ ".rpmorig" ]]; then + continue + fi + + if [[ $i =~ ".rpmnew" ]]; then + continue + fi + # Skip dpkg dist + if [[ $i =~ ".dpkg-dist" ]]; then + continue + fi + # Skip emacs state files + if [[ $i =~ ~$ ]]; then + continue + fi + + echo -n $"Calling ConfigFS script $CONFIGFS_SCRIPT_PATH: " + sh ${CONFIGFS_SCRIPT_PATH} > /dev/null 2>&1 + if [ $RET != 0 ]; then + rc_failed 1 + fi + rc_status -v + done +} + +function run_lio_target_cfs_ops() { + if [ -f $LIO_CONFIGFS_SCRIPT ]; then + echo -n $"Calling $LIO_CONFIGFS_SCRIPT for iscsi_target_mod: " + sh ${LIO_CONFIGFS_SCRIPT} > /dev/null 2>&1 + RET=$? + if [ $RET != 0 ]; then + rc_failed 1 + fi + rc_status -v + fi +} + +function run_tcm_cfs_ops() { + if [ -f $TCM_CONFIGFS_SCRIPT ]; then + echo -n $"Calling $TCM_CONFIGFS_SCRIPT for target_core_mod: " + sh ${TCM_CONFIGFS_SCRIPT} > /dev/null 2>&1 + RET=$? + if [ $RET != 0 ]; then + rc_failed 1 + fi + rc_status -v + fi + + run_lio_target_cfs_ops + run_fabric_cfs_ops +} + +function check_configfs_mount() { + if [ ! -d /sys/kernel/config ]; then + modprobe configfs + mount -t configfs configfs /sys/kernel/config + RET=$? + if [ $RET != 0 ]; then + echo -n "ERROR: Unable to mount configfs on /sys/kernel/config" + rc_failed 1 + rc_exit + fi + fi +} + +function unload_lio_mode() { + echo -n "Unload Linux-iSCSI.org Fabric module" + rmmod iscsi_target_mod + rc_status -v +} + +function load_tcm_mod() { + check_configfs_mount + RETVAL=$? + if [ $RETVAL != 0 ]; then + rc_failed 1 + return 1 + fi + + echo -n $"Loading target_core_mod/ConfigFS core: " + modprobe -q ${MODNAME} > /dev/null + rc_status -v + + return 0 +} + +function shutdown_fabrics() { + + echo -n $"Unloading fabric/configfs: " + ${TCM_FABRIC} --unloadall + rc_status -v +} + +function shutdown_lio_mod () { + if [ -d /sys/kernel/config/target/iscsi/ ]; then + echo -n $"Unloading LIO-Target/ConfigFS fabric: " + ${LIO_NODE} --unload + rc_status -v + fi +} + +function unload_tcm_mod() { + local RETVAL=0 + if [ -d /sys/kernel/config/target ] ; then + shutdown_fabrics + shutdown_lio_mod + + echo -n $"Unloading target_core_mod/ConfigFS core: " + $TCM_NODE --unload + sleep 1 + RETVAL=$? + if [ $RETVAL != 0 ] ; then + rc_failed 1 + fi + rc_status -v + fi + return $RETVAL +} + +start () { + if [ -d ${TCM_CFS_DIR} ]; then + echo -n "target_core_mod/ConfigFS core already loaded" + rc_status -v + return 0 + fi + if test "x `lsmod | grep ${MODNAME} | awk '{ if ($$1 == "${MODNAME}") print $$1 }'`" == x ; then + return 0 + else + if [ -e ${LOCK_TARGET} ]; then + rm -f ${LOCK_TARGET} + fi + fi + +# Prevent multiple driver panics from hanging system (probably via scsi or target driver). +# HINT: Most likely cause is a problem within '/etc/iscsi/install.target'. +# Save a backup of the file, then NULL'd it to troubleshoot this variant. + if [ -e ${SEMA_TARGET} ]; then + RETVAL=1 + echo -n "See ${SEMA_TARGET}" + rc_failed $RETVAL + return $RETVAL + fi + +# Put message in semaphore file to aid in troubleshooting should +# the file still exist during a subsequent boot. + echo "$0: Created: " `date` > ${SEMA_TARGET} + echo "$0: " >> ${SEMA_TARGET} + echo "$0: This file has been created as a result of a potentially" >> ${SEMA_TARGET} + echo "$0: recursive module startup problem. Probable cause is an" >> ${SEMA_TARGET} + echo "$0: iSCSI device configuration problem which finds its way" >> ${SEMA_TARGET} + echo "$0: catastrophically into the Target Core Stack." >> ${SEMA_TARGET} + echo "$0: " >> ${SEMA_TARGET} + echo "$0: You must remove /var/crash/target.fault before attempting" >> ${SEMA_TARGET} + echo "$0: to start again." >> ${SEMA_TARGET} + echo "$0: " >> ${SEMA_TARGET} + echo "$0: Continued startup problems might be researched by saving" >> ${SEMA_TARGET} + echo "$0: off the current /etc/iscsi/install.target file and then" >> ${SEMA_TARGET} + echo "$0: replacing it with a dummy file which contains no entries." >> ${SEMA_TARGET} + echo "$0: If bootup is then successful, contact the iSCSI Target" >> ${SEMA_TARGET} + echo "$0: Stack manufacturer for assistance with problems within" >> ${SEMA_TARGET} + echo "$0: the target configuration file." >> ${SEMA_TARGET} + + if [ -e ${LOCK_TARGET} ]; then + rm -f ${SEMA_TARGET} + RETVAL=1 + echo -n "ERROR, target_core_mod already active" + rc_failed $RETVAL + return $RETVAL + fi + + load_tcm_mod + if [ $RETVAL != 0 ]; then + rm -f ${SEMA_TARGET} + return $RETVAL + fi + + sleep 1 + + ${PGM_SET_TNAME} + RETVAL=$? + if [ $RETVAL == 2 ]; then + rm -f ${SEMA_TARGET} + unload_tcm_mod + return $RETVAL + fi + + run_tcm_cfs_ops $1 + touch ${LOCK_TARGET} + rm -f ${SEMA_TARGET} + + return $RETVAL +} + +stop () { + rm -f ${SEMA_TARGET} + + if [ ! -d /sys/kernel/config/target ] ; then + echo -n "target_core_mod/ConfigFS core already unloaded" + rc_status -v + return; + fi + unload_tcm_mod + RET=$? + if [ $RET == 0 ]; then + rm -f ${LOCK_TARGET} + fi + return $RET +} + +function lio_version () { + if [ ! -d ${LIO_CFS_DIR} ]; then + exit 1 + fi + + lio_node --version +} + +function lio_status () { + if [ ! -d ${LIO_CFS_DIR} ]; then + exit 1 + fi + + lio_node --listendpoints +} + +function tcm_version () { + if [ ! -d ${TCM_CFS_DIR} ]; then + exit 1 + fi + + tcm_node --version +} + +function tcm_status () { + if [ ! -d ${TCM_CFS_DIR} ]; then + exit 1 + fi + + echo "[---------------------------] TCM/ConfigFS Status [----------------------------]" + tcm_node --listhbas + + echo "" + echo "[---------------------------] LIO-Target Status [----------------------------]" + lio_status + + echo "" + tcm_version + lio_version + rc_status -v +} + +restart () { + stop + start + RETVAL=$? +} + +case "$1" in + start) + if tcm_check ; then + start + fi + ;; + stop) + if tcm_check ; then + stop + fi + ;; + status) + tcm_status + RETVAL=$? + ;; + restart|reload) + restart + ;; + *) + echo $"Usage: $0 {start|startbak|stop|status|restart}" + exit 1 +esac + +rc_exit -- 1.8.1.4
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor