diff options
Diffstat (limited to 'sh/rc-help.sh')
-rwxr-xr-x | sh/rc-help.sh | 262 |
1 files changed, 262 insertions, 0 deletions
diff --git a/sh/rc-help.sh b/sh/rc-help.sh new file mode 100755 index 00000000..97ca53f4 --- /dev/null +++ b/sh/rc-help.sh @@ -0,0 +1,262 @@ +#!/bin/sh +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +if [ "${RC_NOCOLOR}" = "yes" ] ; then + unset BLUE GREEN OFF CYAN +else + BLUE="\033[34;01m" + GREEN="\033[32;01m" + OFF="\033[0m" + CYAN="\033[36;01m" +fi + +myscript=$1 +if [ -z "${myscript}" ] ; then + echo "Please execute an init.d script" + exit 1 +fi + +if [ -L "${myscript}" ] ; then + SERVICE=$(readlink "${myscript}") +else + SERVICE=${myscript} +fi +SERVICE=${SERVICE##*/} + +if [ "$2" = "help" ] ; then + BE_VERBOSE="yes" + NL="\n" +else + BE_VERBOSE="no" + NL= +fi + +default_opts="start stop restart pause zap" +extra_opts="$(. "${myscript}" 2>/dev/null ; echo "${opts}")" + +if [ "${BE_VERBOSE}" = "yes" ] ; then +printf " +${GREEN}Gentoo RC-Scripts; ${BLUE}http://www.gentoo.org/${OFF} + Copyright 1999-2007 Gentoo Foundation; Distributed under the GPL +" +fi + +printf "Usage: ${CYAN}${SERVICE}${OFF} [ ${GREEN}flags${OFF} ] < ${GREEN}options${OFF} > + +${CYAN}Normal Options:${OFF}" + +if [ "${BE_VERBOSE}" = "yes" ] ; then +printf " + ${GREEN}start${OFF} + Start service, as well as the services it depends on (if not already + started). + + ${GREEN}stop${OFF} + Stop service, as well as the services that depend on it (if not already + stopped). + + ${GREEN}restart${OFF} + Restart service, as well as the services that depend on it. + + Note to developers: If this function is replaced with a custom one, + 'svc_start' and 'svc_stop' should be used instead of 'start' and + 'stop' to restart the service. This is so that the dependencies + can be handled correctly. Refer to the portmap rc-script for an + example. + + ${GREEN}conditionalrestart|condrestart${OFF} + Same as 'restart', but only if the service has already been started. + + ${GREEN}pause${OFF} + Same as 'stop', but the services that depends on it, will not be + stopped. This is useful for stopping a network interface without + stopping all the network services that depend on 'net'. + + ${GREEN}zap${OFF} + Reset a service that is currently stopped, but still marked as started, + to the stopped state. Basically for killing zombie services. + + ${GREEN}status${OFF} + Prints \"status: started\" if the service is running, else it + prints \"status: stopped\". + + Note that if the '--quiet' flag is given, it will return true if the + service is running, else false. + + ${GREEN}ineed|iuse${OFF} + List the services this one depends on. Consult the section about + dependencies for more info on the different types of dependencies. + + ${GREEN}needsme|usesme${OFF} + List the services that depend on this one. Consult the section about + dependencies for more info on the different types of dependencies. + + ${GREEN}broken${OFF} + List the missing or broken dependencies of type 'need' this service + depends on. +" + +else + +printf " ${GREEN}${default_opts}${OFF} + Default init.d options. +" + +fi + +if [ -n "${extra_opts}" ] ; then +printf " +${CYAN}Additional Options:${OFF}${NL} + ${GREEN}${extra_opts}${OFF} + Extra options supported by this init.d script. +" +fi + +printf " +${CYAN}Flags:${OFF}${NL} + ${GREEN}--ifstarted${OFF} Only do actions if service started + ${GREEN}--nodeps${OFF} Don't stop or start any dependencies + ${GREEN}--quiet${OFF} + Suppress output to stdout, except if:${NL} + 1) It is a warning, then output to stdout + 2) It is an error, then output to stderr${NL} + ${GREEN}--verbose${OFF} Output extra information + ${GREEN}--debug${OFF} Output debug information + ${GREEN}--nocolor${OFF} Suppress the use of colors +" + +if [ "${BE_VERBOSE}" = "yes" ] ; then +printf " +${CYAN}Dependencies:${OFF} + + This is the heart of the Gentoo RC-Scripts, as it determines the order + in which services gets started, and also to some extend what services + get started in the first place. + + The following example demonstrates how to use dependencies in + rc-scripts: + + depend() { + need foo bar + use ray + } + + Here we have foo and bar as dependencies of type 'need', and ray of + type 'use'. You can have as many dependencies of each type as needed, as + long as there is only one entry for each type, listing all its dependencies + on one line only. + + ${GREEN}need${OFF} + These are all the services needed for this service to start. If any + service in the 'need' line is not started, it will be started even if it + is not in the current, or 'boot' runlevel, and then this service will be + started. If any services in the 'need' line fails to start or is + missing, this service will never be started. + + ${GREEN}use${OFF} + This can be seen as representing optional services this service depends on + that are not critical for it to start. For any service in the 'use' line, + it must be added to the 'boot' or current runlevel to be considered a + valid 'use' dependency. It can also be used to determine startup order. + + ${GREEN}before${OFF} + This, together with the 'after' dependency type, can be used to control + startup order. In core, 'before' and 'after' do not denote a dependency, + but should be used for order changes that will only be honoured during + a change of runlevel. All services listed will get started *after* the + current service. In other words, this service will get started *before* + all listed services. + + ${GREEN}after${OFF} + All services listed will be started *before* the current service. Have a + look at 'before' for more info. + + ${GREEN}provide${OFF} + This is not really a dependency type, rather it will enable you to create + virtual services. This is useful if there is more than one version of + a specific service type, system loggers or crons for instance. Just + have each system logger provide 'logger', and make all services in need + of a system logger depend on 'logger'. This should make things much more + generic. + + Note that the 'need', 'use', 'before', and 'after' dependency types accept + an '*' as an argument. Having: + + depend() { + before * + } + + will make the service start first in the current runlevel, and: + + depend() { + after * + } + + will make the service the last to start. + + You should however be careful how you use this, as I really will not + recommend using it with the 'need' or 'use' dependency type ... you have + been warned! + +${CYAN}'net' Dependency and 'net.*' Services:${OFF} + + Example: + + depend() { + need net + } + + This is a special dependency of type 'need'. It represents a state where + a network interface or interfaces besides lo is up and active. Any service + starting with 'net.' will be treated as a part of the 'net' dependency, + if: + + 1. It is part of the 'boot' runlevel + 2. It is part of the current runlevel + + A few examples are the /etc/init.d/net.eth0 and /etc/init.d/net.lo services. +" +fi + +printf " +${CYAN}Configuration files:${OFF} +" + +if [ "${BE_VERBOSE}" = "yes" ] ; then +printf " + There are two files which will be sourced for possible configuration by + the rc-scripts. They are (sourced from top to bottom): +" +fi + +printf " /etc/conf.d/${SERVICE}${NL} /etc/rc.conf" + +if [ "${BE_VERBOSE}" = "yes" ] ; then +printf " + You can add extra dependencies to ${SERVICE} by adding some variables to + /etc/conf.d/${SERVICE} + RC_NEED=\"openvpn ntpd\" + RC_USE=\"dns\" + + This makes ${SERVICE} need openvpn and ntpd, while it just uses dns. + + A good example of this is nfsmount needing openvpn if the nfs mounts in + /etc/fstab are over the vpn link. +" +fi + +if [ "${BE_VERBOSE}" = "yes" ] ; then +printf "\n +${CYAN}Management:${OFF} + + Services are added and removed via the 'rc-update' tool. Running it without + arguments should give sufficient help. +" +else +printf "\n +For more info, please run '${myscript} help'. +" +fi + +exit 0 |