From 8b9349208696e5caed1a8b34f066cec4ee642194 Mon Sep 17 00:00:00 2001 From: William Hubbs Date: Sun, 26 Apr 2015 13:31:49 -0500 Subject: convert all references from runscript to openrc-run --- sh/.gitignore | 2 +- sh/Makefile | 4 +- sh/openrc-run.sh.in | 353 ++++++++++++++++++++++++++++++++++++++++++++++++++ sh/rc-functions.sh.in | 2 +- sh/runscript.sh.in | 353 -------------------------------------------------- 5 files changed, 357 insertions(+), 357 deletions(-) create mode 100644 sh/openrc-run.sh.in delete mode 100644 sh/runscript.sh.in (limited to 'sh') diff --git a/sh/.gitignore b/sh/.gitignore index c83b730b..f814f4a0 100644 --- a/sh/.gitignore +++ b/sh/.gitignore @@ -1,7 +1,7 @@ functions.sh gendepends.sh rc-functions.sh -runscript.sh +openrc-run.sh cgroup-release-agent.sh init.sh init-early.sh diff --git a/sh/Makefile b/sh/Makefile index 8f742dc8..ee9d74de 100644 --- a/sh/Makefile +++ b/sh/Makefile @@ -1,8 +1,8 @@ DIR= ${LIBEXECDIR}/sh SRCS= init.sh.in functions.sh.in gendepends.sh.in \ - rc-functions.sh.in runscript.sh.in tmpfiles.sh.in ${SRCS-${OS}} + openrc-run.sh.in rc-functions.sh.in tmpfiles.sh.in ${SRCS-${OS}} INC= rc-mount.sh functions.sh rc-functions.sh -BIN= gendepends.sh init.sh runscript.sh tmpfiles.sh ${BIN-${OS}} +BIN= gendepends.sh init.sh openrc-run.sh tmpfiles.sh ${BIN-${OS}} INSTALLAFTER= _installafter diff --git a/sh/openrc-run.sh.in b/sh/openrc-run.sh.in new file mode 100644 index 00000000..a6d2c0b8 --- /dev/null +++ b/sh/openrc-run.sh.in @@ -0,0 +1,353 @@ +#!@SHELL@ +# Shell wrapper for openrc-run + +# Copyright (c) 2007-2009 Roy Marples +# Released under the 2-clause BSD license. + +verify_boot() +{ + if [ ! -e ${RC_SVCDIR}/softlevel ]; then + eerror "You are attempting to run an openrc service on a" + eerror "system which openrc did not boot." + eerror "You may be inside a chroot or you may have used" + eerror "another initialization system to boot this system." + eerror "In this situation, you will get unpredictable results!" + eerror + eerror "If you really want to do this, issue the following command:" + eerror "touch ${RC_SVCDIR}/softlevel" + exit 1 + fi + return 0 +} + +sourcex() +{ + if [ "$1" = "-e" ]; then + shift + [ -e "$1" ] || return 1 + fi + if ! . "$1"; then + eerror "$RC_SVCNAME: error loading $1" + exit 1 + fi +} + +sourcex "@LIBEXECDIR@/sh/functions.sh" +sourcex "@LIBEXECDIR@/sh/rc-functions.sh" +[ "$RC_SYS" != "PREFIX" ] && sourcex -e "@LIBEXECDIR@/sh/rc-cgroup.sh" + +# Support LiveCD foo +if sourcex -e "/sbin/livecd-functions.sh"; then + livecd_read_commandline +fi + +if [ -z "$1" -o -z "$2" ]; then + eerror "$RC_SVCNAME: not enough arguments" + exit 1 +fi + +# So daemons know where to recall us if needed +RC_SERVICE="$1" ; export RC_SERVICE +shift + +# Compat +SVCNAME=$RC_SVCNAME ; export SVCNAME + +# Dependency function +config() { + [ -n "$*" ] && echo "config $*" +} +need() { + [ -n "$*" ] && echo "need $*" +} +use() { + [ -n "$*" ] && echo "use $*" +} +before() { + [ -n "$*" ] && echo "before $*" +} +after() { + [ -n "$*" ] && echo "after $*" +} +provide() { + [ -n "$*" ] && echo "provide $*" +} +keyword() { + [ -n "$*" ] && echo "keyword $*" +} + +# Describe the init script to the user +describe() +{ + if [ -n "$description" ]; then + einfo "$description" + else + ewarn "No description for $RC_SVCNAME" + fi + + local svc= desc= + for svc in ${extra_commands:-$opts} $extra_started_commands \ + $extra_stopped_commands; do + eval desc=\$description_$svc + if [ -n "$desc" ]; then + einfo "$HILITE$svc$NORMAL: $desc" + else + ewarn "$HILITE$svc$NORMAL: no description" + fi + done +} + +# Report status +_status() +{ + if service_stopping; then + ewarn "status: stopping" + return 4 + elif service_starting; then + ewarn "status: starting" + return 8 + elif service_inactive; then + ewarn "status: inactive" + return 16 + elif service_started; then + if service_crashed; then + eerror "status: crashed" + return 32 + fi + einfo "status: started" + return 0 + else + einfo "status: stopped" + return 3 + fi +} + +# Template start / stop / status functions +start() +{ + [ -n "$command" ] || return 0 + local _background= + ebegin "Starting ${name:-$RC_SVCNAME}" + if yesno "${command_background}"; then + if [ -z "${pidfile}" ]; then + eend 1 "command_background option used but no pidfile specified" + return 1 + fi + _background="--background --make-pidfile" + fi + if yesno "$start_inactive"; then + local _inactive=false + service_inactive && _inactive=true + mark_service_inactive + fi + eval start-stop-daemon --start \ + --exec $command \ + ${chroot:+--chroot} $chroot \ + ${procname:+--name} $procname \ + ${pidfile:+--pidfile} $pidfile \ + $_background $start_stop_daemon_args \ + -- $command_args + if eend $? "Failed to start $RC_SVCNAME"; then + service_set_value "command" "${command}" + [ -n "${chroot}" ] && service_set_value "chroot" "${chroot}" + [ -n "${pidfile}" ] && service_set_value "pidfile" "${pidfile}" + [ -n "${procname}" ] && service_set_value "procname" "${procname}" + return 0 + fi + if yesno "$start_inactive"; then + if ! $_inactive; then + mark_service_stopped + fi + fi + return 1 +} + +stop() +{ + local startcommand="$(service_get_value "command")" + local startchroot="$(service_get_value "chroot")" + local startpidfile="$(service_get_value "pidfile")" + local startprocname="$(service_get_value "procname")" + command="${startcommand:-$command}" + chroot="${startchroot:-$chroot}" + pidfile="${startpidfile:-$pidfile}" + procname="${startprocname:-$procname}" + [ -n "$command" -o -n "$procname" -o -n "$pidfile" ] || return 0 + ebegin "Stopping ${name:-$RC_SVCNAME}" + start-stop-daemon --stop \ + ${retry:+--retry} $retry \ + ${command:+--exec} $command \ + ${procname:+--name} $procname \ + ${pidfile:+--pidfile} $chroot$pidfile \ + ${stopsig:+--signal} $stopsig + eend $? "Failed to stop $RC_SVCNAME" +} + +status() +{ + _status +} + +yesno $RC_DEBUG && set -x + +_conf_d=${RC_SERVICE%/*}/../conf.d +# If we're net.eth0 or openvpn.work then load net or openvpn config +_c=${RC_SVCNAME%%.*} +if [ -n "$_c" -a "$_c" != "$RC_SVCNAME" ]; then + if ! sourcex -e "$_conf_d/$_c.$RC_RUNLEVEL"; then + sourcex -e "$_conf_d/$_c" + fi +fi +unset _c + +# Overlay with our specific config +if ! sourcex -e "$_conf_d/$RC_SVCNAME.$RC_RUNLEVEL"; then + sourcex -e "$_conf_d/$RC_SVCNAME" +fi +unset _conf_d + +# Load any system overrides +sourcex -e "@SYSCONFDIR@/rc.conf" + +# Set verbose mode +if yesno "${rc_verbose:-$RC_VERBOSE}"; then + EINFO_VERBOSE=yes + export EINFO_VERBOSE +fi + +for _cmd; do + if [ "$_cmd" != status -a "$_cmd" != describe ]; then + # Apply any ulimit defined + [ -n "${rc_ulimit:-$RC_ULIMIT}" ] && \ + ulimit ${rc_ulimit:-$RC_ULIMIT} + # Apply cgroups settings if defined + if [ "$(command -v cgroup_add_service)" = \ + "cgroup_add_service" ] + then + if [ -d /sys/fs/cgroup -a ! -w /sys/fs/cgroup ]; then + eerror "No permission to apply cgroup settings" + break + fi + cgroup_add_service /sys/fs/cgroup/openrc + cgroup_add_service /sys/fs/cgroup/systemd/system + fi + [ "$(command -v cgroup_set_limits)" = \ + "cgroup_set_limits" ] && \ + cgroup_set_limits + break + fi +done + +# Load our script +sourcex "$RC_SERVICE" + +for _d in $required_dirs; do + if [ ! -d $_d ]; then + eerror "$RC_SVCNAME: \`$_d' is not a directory" + exit 1 + fi +done +unset _d + +for _f in $required_files; do + if [ ! -r $_f ]; then + eerror "$RC_SVCNAME: \`$_f' is not readable" + exit 1 + fi +done +unset _f + +if [ -n "$opts" ]; then + ewarn "Use of the opts variable is deprecated and will be" + ewarn "removed in the future." + ewarn "Please use extra_commands, extra_started_commands or extra_stopped_commands." +fi + +while [ -n "$1" ]; do + # Special case depend + if [ "$1" = depend ]; then + shift + + # Enter the dir of the init script to fix the globbing + # bug 412677 + cd ${RC_SERVICE%/*} + _depend + cd / + continue + fi + # See if we have the required function and run it + for _cmd in describe start stop status ${extra_commands:-$opts} \ + $extra_started_commands $extra_stopped_commands + do + if [ "$_cmd" = "$1" ]; then + if [ "$(command -v "$1")" = "$1" ]; then + # If we're in the background, we may wish to + # fake some commands. We do this so we can + # "start" ourselves from inactive which then + # triggers other services to start which + # depend on us. + # A good example of this is openvpn. + if yesno $IN_BACKGROUND; then + for _cmd in $in_background_fake; do + if [ "$_cmd" = "$1" ]; then + shift + continue 3 + fi + done + fi + # Check to see if we need to be started before + # we can run this command + for _cmd in $extra_started_commands; do + if [ "$_cmd" = "$1" ]; then + if verify_boot && ! service_started; then + eerror "$RC_SVCNAME: cannot \`$1' as it has not been started" + exit 1 + fi + fi + done + # Check to see if we need to be stopped before + # we can run this command + for _cmd in $extra_stopped_commands; do + if [ "$_cmd" = "$1" ]; then + if verify_boot && ! service_stopped; then + eerror "$RC_SVCNAME: cannot \`$1' as it has not been stopped" + exit 1 + fi + fi + done + unset _cmd + case $1 in + start|stop|status) verify_boot;; + esac + if [ "$(command -v "$1_pre")" = "$1_pre" ] + then + "$1"_pre || exit $? + fi + "$1" || exit $? + if [ "$(command -v "$1_post")" = "$1_post" ] + then + "$1"_post || exit $? + fi + [ "$(command -v cgroup_cleanup)" = "cgroup_cleanup" -a \ + "$1" = "stop" ] && \ + yesno "${rc_cgroup_cleanup}" && \ + cgroup_cleanup + shift + continue 2 + else + if [ "$_cmd" = "start" -o "$_cmd" = "stop" ] + then + shift + continue 2 + else + eerror "$RC_SVCNAME: function \`$1' defined but does not exist" + exit 1 + fi + fi + fi + done + eerror "$RC_SVCNAME: unknown function \`$1'" + exit 1 +done + +exit 0 diff --git a/sh/rc-functions.sh.in b/sh/rc-functions.sh.in index d52b82e1..911d65ac 100644 --- a/sh/rc-functions.sh.in +++ b/sh/rc-functions.sh.in @@ -85,7 +85,7 @@ get_bootparam() return 1 } -# Called from runscript.sh or gendepends.sh +# Called from openrc-run.sh or gendepends.sh _depend() { depend local _rc_svcname=$(shell_var "$RC_SVCNAME") _deptype= _depends= diff --git a/sh/runscript.sh.in b/sh/runscript.sh.in deleted file mode 100644 index 4c472603..00000000 --- a/sh/runscript.sh.in +++ /dev/null @@ -1,353 +0,0 @@ -#!@SHELL@ -# Shell wrapper for runscript - -# Copyright (c) 2007-2009 Roy Marples -# Released under the 2-clause BSD license. - -verify_boot() -{ - if [ ! -e ${RC_SVCDIR}/softlevel ]; then - eerror "You are attempting to run an openrc service on a" - eerror "system which openrc did not boot." - eerror "You may be inside a chroot or you may have used" - eerror "another initialization system to boot this system." - eerror "In this situation, you will get unpredictable results!" - eerror - eerror "If you really want to do this, issue the following command:" - eerror "touch ${RC_SVCDIR}/softlevel" - exit 1 - fi - return 0 -} - -sourcex() -{ - if [ "$1" = "-e" ]; then - shift - [ -e "$1" ] || return 1 - fi - if ! . "$1"; then - eerror "$RC_SVCNAME: error loading $1" - exit 1 - fi -} - -sourcex "@LIBEXECDIR@/sh/functions.sh" -sourcex "@LIBEXECDIR@/sh/rc-functions.sh" -[ "$RC_SYS" != "PREFIX" ] && sourcex -e "@LIBEXECDIR@/sh/rc-cgroup.sh" - -# Support LiveCD foo -if sourcex -e "/sbin/livecd-functions.sh"; then - livecd_read_commandline -fi - -if [ -z "$1" -o -z "$2" ]; then - eerror "$RC_SVCNAME: not enough arguments" - exit 1 -fi - -# So daemons know where to recall us if needed -RC_SERVICE="$1" ; export RC_SERVICE -shift - -# Compat -SVCNAME=$RC_SVCNAME ; export SVCNAME - -# Dependency function -config() { - [ -n "$*" ] && echo "config $*" -} -need() { - [ -n "$*" ] && echo "need $*" -} -use() { - [ -n "$*" ] && echo "use $*" -} -before() { - [ -n "$*" ] && echo "before $*" -} -after() { - [ -n "$*" ] && echo "after $*" -} -provide() { - [ -n "$*" ] && echo "provide $*" -} -keyword() { - [ -n "$*" ] && echo "keyword $*" -} - -# Describe the init script to the user -describe() -{ - if [ -n "$description" ]; then - einfo "$description" - else - ewarn "No description for $RC_SVCNAME" - fi - - local svc= desc= - for svc in ${extra_commands:-$opts} $extra_started_commands \ - $extra_stopped_commands; do - eval desc=\$description_$svc - if [ -n "$desc" ]; then - einfo "$HILITE$svc$NORMAL: $desc" - else - ewarn "$HILITE$svc$NORMAL: no description" - fi - done -} - -# Report status -_status() -{ - if service_stopping; then - ewarn "status: stopping" - return 4 - elif service_starting; then - ewarn "status: starting" - return 8 - elif service_inactive; then - ewarn "status: inactive" - return 16 - elif service_started; then - if service_crashed; then - eerror "status: crashed" - return 32 - fi - einfo "status: started" - return 0 - else - einfo "status: stopped" - return 3 - fi -} - -# Template start / stop / status functions -start() -{ - [ -n "$command" ] || return 0 - local _background= - ebegin "Starting ${name:-$RC_SVCNAME}" - if yesno "${command_background}"; then - if [ -z "${pidfile}" ]; then - eend 1 "command_background option used but no pidfile specified" - return 1 - fi - _background="--background --make-pidfile" - fi - if yesno "$start_inactive"; then - local _inactive=false - service_inactive && _inactive=true - mark_service_inactive - fi - eval start-stop-daemon --start \ - --exec $command \ - ${chroot:+--chroot} $chroot \ - ${procname:+--name} $procname \ - ${pidfile:+--pidfile} $pidfile \ - $_background $start_stop_daemon_args \ - -- $command_args - if eend $? "Failed to start $RC_SVCNAME"; then - service_set_value "command" "${command}" - [ -n "${chroot}" ] && service_set_value "chroot" "${chroot}" - [ -n "${pidfile}" ] && service_set_value "pidfile" "${pidfile}" - [ -n "${procname}" ] && service_set_value "procname" "${procname}" - return 0 - fi - if yesno "$start_inactive"; then - if ! $_inactive; then - mark_service_stopped - fi - fi - return 1 -} - -stop() -{ - local startcommand="$(service_get_value "command")" - local startchroot="$(service_get_value "chroot")" - local startpidfile="$(service_get_value "pidfile")" - local startprocname="$(service_get_value "procname")" - command="${startcommand:-$command}" - chroot="${startchroot:-$chroot}" - pidfile="${startpidfile:-$pidfile}" - procname="${startprocname:-$procname}" - [ -n "$command" -o -n "$procname" -o -n "$pidfile" ] || return 0 - ebegin "Stopping ${name:-$RC_SVCNAME}" - start-stop-daemon --stop \ - ${retry:+--retry} $retry \ - ${command:+--exec} $command \ - ${procname:+--name} $procname \ - ${pidfile:+--pidfile} $chroot$pidfile \ - ${stopsig:+--signal} $stopsig - eend $? "Failed to stop $RC_SVCNAME" -} - -status() -{ - _status -} - -yesno $RC_DEBUG && set -x - -_conf_d=${RC_SERVICE%/*}/../conf.d -# If we're net.eth0 or openvpn.work then load net or openvpn config -_c=${RC_SVCNAME%%.*} -if [ -n "$_c" -a "$_c" != "$RC_SVCNAME" ]; then - if ! sourcex -e "$_conf_d/$_c.$RC_RUNLEVEL"; then - sourcex -e "$_conf_d/$_c" - fi -fi -unset _c - -# Overlay with our specific config -if ! sourcex -e "$_conf_d/$RC_SVCNAME.$RC_RUNLEVEL"; then - sourcex -e "$_conf_d/$RC_SVCNAME" -fi -unset _conf_d - -# Load any system overrides -sourcex -e "@SYSCONFDIR@/rc.conf" - -# Set verbose mode -if yesno "${rc_verbose:-$RC_VERBOSE}"; then - EINFO_VERBOSE=yes - export EINFO_VERBOSE -fi - -for _cmd; do - if [ "$_cmd" != status -a "$_cmd" != describe ]; then - # Apply any ulimit defined - [ -n "${rc_ulimit:-$RC_ULIMIT}" ] && \ - ulimit ${rc_ulimit:-$RC_ULIMIT} - # Apply cgroups settings if defined - if [ "$(command -v cgroup_add_service)" = \ - "cgroup_add_service" ] - then - if [ -d /sys/fs/cgroup -a ! -w /sys/fs/cgroup ]; then - eerror "No permission to apply cgroup settings" - break - fi - cgroup_add_service /sys/fs/cgroup/openrc - cgroup_add_service /sys/fs/cgroup/systemd/system - fi - [ "$(command -v cgroup_set_limits)" = \ - "cgroup_set_limits" ] && \ - cgroup_set_limits - break - fi -done - -# Load our script -sourcex "$RC_SERVICE" - -for _d in $required_dirs; do - if [ ! -d $_d ]; then - eerror "$RC_SVCNAME: \`$_d' is not a directory" - exit 1 - fi -done -unset _d - -for _f in $required_files; do - if [ ! -r $_f ]; then - eerror "$RC_SVCNAME: \`$_f' is not readable" - exit 1 - fi -done -unset _f - -if [ -n "$opts" ]; then - ewarn "Use of the opts variable is deprecated and will be" - ewarn "removed in the future." - ewarn "Please use extra_commands, extra_started_commands or extra_stopped_commands." -fi - -while [ -n "$1" ]; do - # Special case depend - if [ "$1" = depend ]; then - shift - - # Enter the dir of the init script to fix the globbing - # bug 412677 - cd ${RC_SERVICE%/*} - _depend - cd / - continue - fi - # See if we have the required function and run it - for _cmd in describe start stop status ${extra_commands:-$opts} \ - $extra_started_commands $extra_stopped_commands - do - if [ "$_cmd" = "$1" ]; then - if [ "$(command -v "$1")" = "$1" ]; then - # If we're in the background, we may wish to - # fake some commands. We do this so we can - # "start" ourselves from inactive which then - # triggers other services to start which - # depend on us. - # A good example of this is openvpn. - if yesno $IN_BACKGROUND; then - for _cmd in $in_background_fake; do - if [ "$_cmd" = "$1" ]; then - shift - continue 3 - fi - done - fi - # Check to see if we need to be started before - # we can run this command - for _cmd in $extra_started_commands; do - if [ "$_cmd" = "$1" ]; then - if verify_boot && ! service_started; then - eerror "$RC_SVCNAME: cannot \`$1' as it has not been started" - exit 1 - fi - fi - done - # Check to see if we need to be stopped before - # we can run this command - for _cmd in $extra_stopped_commands; do - if [ "$_cmd" = "$1" ]; then - if verify_boot && ! service_stopped; then - eerror "$RC_SVCNAME: cannot \`$1' as it has not been stopped" - exit 1 - fi - fi - done - unset _cmd - case $1 in - start|stop|status) verify_boot;; - esac - if [ "$(command -v "$1_pre")" = "$1_pre" ] - then - "$1"_pre || exit $? - fi - "$1" || exit $? - if [ "$(command -v "$1_post")" = "$1_post" ] - then - "$1"_post || exit $? - fi - [ "$(command -v cgroup_cleanup)" = "cgroup_cleanup" -a \ - "$1" = "stop" ] && \ - yesno "${rc_cgroup_cleanup}" && \ - cgroup_cleanup - shift - continue 2 - else - if [ "$_cmd" = "start" -o "$_cmd" = "stop" ] - then - shift - continue 2 - else - eerror "$RC_SVCNAME: function \`$1' defined but does not exist" - exit 1 - fi - fi - fi - done - eerror "$RC_SVCNAME: unknown function \`$1'" - exit 1 -done - -exit 0 -- cgit v1.2.3