#!/sbin/openrc-run # Copyright 1999-2019 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # shellcheck shell=sh # Default configuration fike : "${tgtd_conf:=/etc/tgt/targets.conf}" pidfile="/var/run/${RC_SVCNAME}.pid" command="/usr/sbin/tgtd" command_args_background="--pid-file ${pidfile} ${tgtd_opts}" extra_commands="forcedstop" extra_started_commands="forcedreload reload" depend() { use net } start_post() { # We need to wait for 1 second before do anything with tgtd. sleep 1 # Put tgtd into "offline" state until all the targets are configured. # We don't want initiators to (re)connect and fail the connection # if configuration is not ready. tgtadm --op update --mode sys --name State -v offline # Configure the targets. if [ ! -r "${tgtd_conf}" ]; then ewarn "Configuration file '${tgtd_conf}' not found!" ewarn "Leaving ${SVCNAME} running in 'offline' state." eend 0 else ebegin "Loading target configuration" tgt-admin --update ALL -c "${tgtd_conf}" retval=$? if [ $retval -ne 0 ]; then eerror "Could not load configuration!" stop exit $? fi eend $retval # Put tgtd into "ready" state. ebegin "Onlining targets. Accepting connections" tgtadm --op update --mode sys --name State -v ready eend $? fi } stop() { ebegin "Stopping ${SVCNAME}" # We need to force shutdown if system is restarting # or shutting down. if [ "$RC_RUNLEVEL" = "shutdown" ] ; then forcedstop else # Remove all targets. Only remove targets which are not in use. tgt-admin --update ALL -c /dev/null >/dev/null 2>&1 retval=$? if [ $retval -eq 107 ] ; then einfo "tgtd is not running" else # tgtd will exit if all targets were removed. tgtadm --op delete --mode system >/dev/null 2>&1 retval=$? if [ $retval -ne 0 ] ; then eerror "WARNING: Some initiators are still connected - could not stop tgtd" fi fi fi eend $retval } forcedstop() { # NOTE: Forced shutdown of the iscsi target may cause data corruption # for initiators that are connected. ewarn "WARNING: Force-stopping target framework daemon" for i in 5 4 3 2 1; do einfo "Continuing in $i seconds..." sleep 1 done # Offline everything first. May be needed if we're rebooting, but # expect the initiators to reconnect cleanly when we boot again # (i.e. we don't want them to reconnect to a tgtd which is still # onlineg, but the target is gone). tgtadm --op update --mode sys --name State -v offline >/dev/null 2>&1 retval=$? if [ $retval -eq 107 ] ; then einfo "tgtd is not running" else # Offline all targets tgt-admin --offline ALL # Remove all targets, even if they are still in use. tgt-admin --update ALL -c /dev/null -f # tgtd shuts down after all targets are removed. tgtadm --op delete --mode system retval=$? if [ $retval -ne 0 ] ; then eerror "Failed to shutdown tgtd" eend 1 fi fi eend $retval } reload() { ebegin "Updating target framework daemon configuration" # Update configuration for targets. Only targets which # are not in use will be updated. tgt-admin --update ALL -c "${tgtd_conf}" >/dev/null 2>&1 retval=$? if [ $retval -eq 107 ]; then ewarn "WARNING: tgtd is not running" fi eend $retval } forcedreload() { ebegin "Updating target framework daemon configuration" ewarn "WARNING: Force-updating running configuration!" # Update configuration for targets, even those in use. tgt-admin --update ALL -f -c "${tgtd_conf}" >/dev/null 2>&1 retval=$? if [ $retval -eq 107 ]; then ewarn "WARNING: tgtd is not running" fi eend $retval } status_post() { einfo "Run 'tgt-admin -s' to see detailed target info." }