diff options
Diffstat (limited to 'sh/runscript.sh')
-rwxr-xr-x | sh/runscript.sh | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/sh/runscript.sh b/sh/runscript.sh new file mode 100755 index 00000000..6b679c21 --- /dev/null +++ b/sh/runscript.sh @@ -0,0 +1,74 @@ +#!/bin/sh +# Shell wrapper for runscript +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +. /etc/init.d/functions.sh +. "${RC_LIBDIR}"/sh/rc-functions.sh + +# Support LiveCD foo +if [ -r /sbin/livecd-functions.sh ] ; then + . /sbin/livecd-functions.sh + livecd_read_commandline +fi + +if [ -z "$1" -o -z "$2" ] ; then + eerror "${SVCNAME}: not enough arguments" + exit 1 +fi + +[ "${RC_DEBUG}" = "yes" ] && set -x + +# If we're net.eth0 or openvpn.work then load net or openvpn config +rc_c=${SVCNAME%%.*} +if [ -n "${rc_c}" -a "${rc_c}" != "${SVCNAME}" ] ; then + if [ -e "/etc/conf.d/${rc_c}.${RC_SOFTLEVEL}" ] ; then + . "/etc/conf.d/${rc_c}.${RC_SOFTLEVEL}" + elif [ -e "/etc/conf.d/${rc_c}" ] ; then + . "/etc/conf.d/${rc_c}" + fi +fi +unset rc_c + +# Overlay with our specific config +if [ -e "/etc/conf.d/${SVCNAME}.${RC_SOFTLEVEL}" ] ; then + . "/etc/conf.d/${SVCNAME}.${RC_SOFTLEVEL}" +elif [ -e "/etc/conf.d/${SVCNAME}" ] ; then + . "/etc/conf.d/${SVCNAME}" +fi + +# Load any system overrides +[ -e /etc/rc.conf ] && . /etc/rc.conf + +# Apply any ulimit defined +[ -n "${RC_ULIMIT}" ] && ulimit ${RC_ULIMIT} + +# Load our script +. $1 + +shift + +while [ -n "$1" ] ; do + # See if we have the required function and run it + for rc_x in start stop ${opts} ; do + if [ "${rc_x}" = "$1" ] ; then + if type "$1" >/dev/null 2>/dev/null ; then + unset rc_x + "$1" || exit $? + shift + continue 2 + else + if [ "${rc_x}" = "start" -o "${rc_x}" = "stop" ] ; then + exit 0 + else + eerror "${SVCNAME}: function \`$1' defined but does not exist" + exit 1 + fi + fi + fi + done + eerror "${SVCNAME}: unknown function \`$1'" + exit 1 +done + +# vim: set ts=4 : |