#!/sbin/openrc-run # # Copyright (C) 2008 Mark Buechler # Copyright (C) 2009 Bart Van Assche # Copyright (C) 2010 Scott Bowe # This software is made available under the GPLv2 license. # # System startup script for the SCST core functionality. # # Customized for gentoo linux by Scott Bowe. # # Note: on most Linux distributions /bin/sh is a soft link to /bin/bash, while # on a default Ubuntu setup /bin/sh is a soft link to /bin/dash ! opts="${opts} try_restart reload force_reload" depend() { use logger } DEFAULTFILE="/etc/conf.d/scst" SCST_CFG=/etc/scst.conf MODPROBE="/sbin/modprobe" RMMOD="/sbin/rmmod" if [ -f $DEFAULTFILE ]; then . $DEFAULTFILE fi # Modules to load/unload. # # !!! DON'T ADD HERE TARGET DRIVERS, WHICH IMMEDIATELLY START ACCEPTING # !!! NEW CONNECTIONS, BECAUSE AT THIS POINT ACCESS CONTROL HASN'T CONFIGURED # !!! YET! # SCST_MODULES="scst scst_disk scst_vdisk" # Return values according to LSB for all commands but status: # 0 - success # 1 - generic or unspecified error # 2 - invalid or excess argument(s) # 3 - unimplemented feature (e.g. "reload") # 4 - insufficient privilege # 5 - program is not installed # 6 - program is not configured # 7 - program is not running # checkconfig() { if [ ! -f $SCST_CFG ] ; then eerror "Please create $SCST_CFG" return 1 fi return 0 } checkinstall() { if [ ! -x `which scstadmin` ] ; then eerror "scstadmin is not intalled" return 1 fi return 0 } start() { ebegin "Loading and configuring the mid-level SCSI target SCST" eindent checkconfig checkinstall || return $? ret=0 for module in ${SCST_MODULES}; do einfo "Loading SCST module ${module}..." if ! modprobe "${module}"; then eerror "${module} failed to load" eend $? "Failed to load SCST" return $? fi done einfo "Configuring SCST..." eindent if [ -f $SCST_CFG ]; then if scstadmin -config $SCST_CFG >/dev/null 2>&1; then einfo "SCST config was loaded" else eend $? "SCST config could not be loaded" return $? fi else einfo "SCST configuration file $SCST_CFG missing, skipping" return 0 fi eoutdent eoutdent einfo "SCST loaded!!!" eend $? } stop() { ## Stop the service. ebegin "Stopping the mid-level SCSI target SCST" eindent reverse_list="" for module in ${SCST_MODULES}; do reverse_list="${module} ${reverse_list}" done for module in ${reverse_list}; do einfo "Unloading ${module}" if [ -e "/sys/module/${module}" ] && ! rmmod "${module}"; then eindent eend $? "Failed to unload ${module}" return $? fi done eoutdent einfo "SCST unloaded!!!" eend $? } restart() { ## Stop and restart the service if the service is already running, ## otherwise start the service. stop sleep 3 start } try_restart() { ## Restart the service if the service is already running. status >/dev/null 2>&1 && restart } reload() { ## Cause the configuration of the service to be reloaded without ## actually stopping and restarting the service. einfo "Reloading SCST configuration" eindent if scstadmin -config $SCST_CFG >/dev/null 2>&1; then ret=0 ebegin "SCST config reloaded" else eend $? "SCST config could not be releaded" exit 1 fi } force_reload() { ## Cause the configuration to be reloaded if the service supports this, ## otherwise restart the service if it is running. einfo "Reloading SCST configuration" eindent if scstadmin -config $SCST_CFG >/dev/null 2>&1; then ret=0 ebegin "SCST config reloaded" else restart fi } status() { ## Print the current status of the service. einfo "SCST status: " eindent for module in ${SCST_MODULES}; do if [ ! -e "/sys/module/${module}" ]; then einfo "${module} not loaded" ret=3 eend $ret return $ret fi done ret=0 ebegin "SCST modules loaded OK" eend $ret }