summaryrefslogtreecommitdiff
path: root/static/netbsd/man8/rc.subr.8
diff options
context:
space:
mode:
Diffstat (limited to 'static/netbsd/man8/rc.subr.8')
-rw-r--r--static/netbsd/man8/rc.subr.8865
1 files changed, 865 insertions, 0 deletions
diff --git a/static/netbsd/man8/rc.subr.8 b/static/netbsd/man8/rc.subr.8
new file mode 100644
index 00000000..93d49d24
--- /dev/null
+++ b/static/netbsd/man8/rc.subr.8
@@ -0,0 +1,865 @@
+.\" $NetBSD: rc.subr.8,v 1.32 2021/01/10 19:26:31 riastradh Exp $
+.\"
+.\" Copyright (c) 2002-2011 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" This code is derived from software contributed to The NetBSD Foundation
+.\" by Luke Mewburn.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+.\" POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd December 17, 2012
+.Dt RC.SUBR 8
+.Os
+.Sh NAME
+.Nm rc.subr
+.Nd functions used by system shell scripts
+.Sh SYNOPSIS
+.Bl -item
+.It
+.Li . /etc/rc.subr
+.It
+.Ic backup_file Ar action Ar file Ar current Ar backup
+.It
+.Ic basename Ar file Op Ar suffix
+.It
+.Ic checkyesno Ar var
+.It
+.Ic check_pidfile Ar pidfile Ar procname Op Ar interpreter
+.It
+.Ic check_process Ar procname Op Ar interpreter
+.It
+.Ic collapse_backslash_newline
+.It
+.Ic dirname Ar file
+.It
+.Ic err Ar exitval Ar message
+.It
+.Ic load_rc_config Ar command
+.It
+.Ic load_rc_config_var Ar command Ar var
+.It
+.Ic mount_critical_filesystems Ar type
+.It
+.Ic no_rc_postprocess Ar command Op Ar arguments
+.It
+.Ic print_rc_metadata Ar string
+.It
+.Ic print_rc_normal Oo Fl n Oc Ar string
+.It
+.Ic rc_usage Ar command Op Ar ...
+.It
+.Ic reverse_list Ar item Op Ar ...
+.It
+.Ic run_rc_command Ar argument [parameters]
+.It
+.Ic run_rc_script Ar file Ar argument
+.It
+.Ic stop_boot
+.It
+.Ic twiddle
+.It
+.Ic wait_for_pids Op Ar pid Op Ar ...
+.It
+.Ic warn Ar message
+.It
+.Ic yesno_to_truefalse Ar var
+.El
+.Sh DESCRIPTION
+.Nm
+contains commonly used shell script functions which are used by
+various scripts such as
+.Xr rc 8 ,
+and the periodic system services which are controlled by
+.Xr daily.conf 5 ,
+.Xr monthly.conf 5 ,
+.Xr security.conf 5 ,
+and
+.Xr weekly.conf 5 .
+.Pp
+The
+.Nm
+functions are accessed by sourcing
+.Pa /etc/rc.subr
+into the current shell.
+.Pp
+The following shell functions are available:
+.Bl -tag -width 4n
+.It Ic backup_file Ar action Ar file Ar current Ar backup
+Make a backup copy of
+.Ar file
+into
+.Ar current .
+If the
+.Xr rc.conf 5
+variable
+.Sy backup_uses_rcs
+is
+.Sq YES ,
+use
+.Xr rcs 1
+to archive the previous version of
+.Ar current ,
+otherwise save the previous version of
+.Ar current
+as
+.Ar backup .
+.Pp
+.Ar action
+may be one of the following:
+.Bl -tag -width remove
+.It Sy add
+.Ar file
+is now being backed up by or possibly re-entered into this backup mechanism.
+.Ar current
+is created, and if necessary, the
+.Xr rcs 1
+files are created as well.
+.It Sy update
+.Ar file
+has changed and needs to be backed up.
+If
+.Ar current
+exists, it is copied to
+.Ar backup
+or checked into
+.Xr rcs 1
+(if the repository file is old),
+and then
+.Ar file
+is copied to
+.Ar current .
+.It Sy remove
+.Ar file
+is no longer being tracked by this backup mechanism.
+If
+.Xr rcs 1
+is being used, an empty file is checked in and
+.Ar current
+is removed,
+otherwise
+.Ar current
+is moved to
+.Ar backup .
+.El
+.It Ic basename Ar file Op Ar suffix
+Just like
+.Xr basename 1 ,
+except implemented using shell built-in commands, and usable before the
+.Pa /usr/bin
+direcory is available.
+.It Ic checkyesno Ar var
+Return 0 if
+.Ar var
+is defined to
+.Sq YES ,
+.Sq TRUE ,
+.Sq ON ,
+or
+.Sq 1 .
+Return 1 if
+.Ar var
+is defined to
+.Sq NO ,
+.Sq FALSE ,
+.Sq OFF ,
+or
+.Sq 0 .
+Otherwise, warn that
+.Ar var
+is not set correctly.
+The values are case insensitive.
+.Pp
+Note that the warning message shown by this function when
+.Ar var
+is not set references a manual page where the user can find more information.
+Its name is picked up from the
+.Sy rcvar_manpage
+variable.
+.It Ic check_pidfile Ar pidfile Ar procname Op Ar interpreter
+Parses the first word of the first line of
+.Ar pidfile
+for a PID, and ensures that the process with that PID
+is running and its first argument matches
+.Ar procname .
+Prints the matching PID if successful, otherwise nothing.
+If
+.Ar interpreter
+is provided, parse the first line of
+.Ar procname ,
+ensure that the line is of the form
+.Dl #! interpreter [...]
+and use
+.Ar interpreter
+with its optional arguments and
+.Ar procname
+appended as the process string to search for.
+.It Ic check_process Ar procname Op Ar interpreter
+Prints the PIDs of any processes that are running with a first
+argument that matches
+.Ar procname .
+.Ar interpreter
+is handled as per
+.Ic check_pidfile .
+.It Ic collapse_backslash_newline
+Copy input to output, collapsing
+.Ao backslash Ac Ns Ao newline Ac
+to nothing, but leaving other backslashes alone.
+.Ic dirname Ar file
+Just like
+.Xr dirname 1 ,
+except implemented using shell built-in commands, and usable before the
+.Pa /usr/bin
+direcory is available.
+.It Ic err Ar exitval Ar message
+Display an error message to
+.Em stderr ,
+log it to the system log
+using
+.Xr logger 1 ,
+and
+.Cm exit
+with an exit value of
+.Ar exitval .
+The error message consists of the script name
+(from
+.Sy $0 ) ,
+followed by
+.Dq ": ERROR: " ,
+and then
+.Ar message .
+.It Ic load_rc_config Ar command
+Source in the
+.Xr rc.conf 5
+configuration files for
+.Ar command .
+First,
+.Pa /etc/rc.conf
+is sourced if it has not yet been read in.
+Then,
+.Pa /etc/rc.conf.d/ Ns Ar command
+is sourced if it is an existing file.
+The latter may also contain other variable assignments to override
+.Ic run_rc_command
+arguments defined by the calling script, to provide an easy
+mechanism for an administrator to override the behaviour of a given
+.Xr rc.d 8
+script without requiring the editing of that script.
+.It Ic load_rc_config_var Ar command Ar var
+Read the
+.Xr rc.conf 5
+variable
+.Ar var
+for
+.Ar command
+and set in the current shell, using
+.Ic load_rc_config
+in a sub-shell to prevent unwanted side effects from other variable
+assignments.
+.It Ic mount_critical_filesystems Ar type
+Go through a list of critical file systems,
+as found in the
+.Xr rc.conf 5
+variable
+.Sy critical_filesystems_ Ns Ar type ,
+mounting each one that
+is not currently mounted.
+.It Ic no_rc_postprocess Ar command Op Ar arguments
+Execute the specified command with the specified arguments,
+in such a way that its output bypasses the post-processor that
+.Xr rc 8
+uses for most commands.
+This implies that the output will not appear in the
+.Pa /var/run/rc.log
+file, and will appear on the console regardless of the
+value of
+.Va rc_silent .
+This is expected to be useful for interactive commands,
+and this mechanism is automatically used by
+.Ic run_rc_command
+when a script contains the
+.Xr rcorder 8
+keyword
+.Dq interactive .
+.Pp
+If invoked from a context that does not appear to be under the control of
+.Xr rc 8 ,
+then the command is executed without special treatment.
+.It Ic print_rc_metadata Ar string
+Print the specified
+.Ar string
+in such a way that it should be handled as meta-data by the
+.Xr rc 8
+post-processor.
+If invoked from a context that does not appear to be under the control of
+.Xr rc 8 ,
+then the
+.Ar string
+is discarded.
+.Pp
+Any
+.Xr rc.d 8
+script may invoke this function with an argument that begins with
+.Dq note: ,
+followed by one line of arbitrary text;
+the text will be logged by
+.Xr rc 8
+but will not be displayed on the console.
+.Pp
+The use of arguments that do not begin with
+.Dq note:
+is reserved for internal use by
+.Xr rc 8
+and
+.Nm .
+.It Ic print_rc_normal Oo Fl n Oc Ar string
+Print the specified
+.Ar string
+in such a way that it should be handled as normal output by the
+.Xr rc 8
+post-processor.
+If invoked from a context that does not appear to be under the control of
+.Xr rc 8 ,
+then the
+.Ar string
+is printed to standard output.
+.Pp
+If the
+.Fl n
+flag is specified, then the string is printed without a newline.
+.Pp
+Intended use cases include:
+.Bl -bullet
+.It
+An rc.d script can use
+.Dq Sy print_rc_normal Fl n
+to print a partial line in such a way that it appears
+immediately instead of being buffered by
+.Xr rc 8 Ap s
+post-processor.
+.It
+An rc.d script that is run via the
+.Sy no_rc_postprocess
+function (so most of its output is invisible to
+.Xr rc 8 Ap s
+post-processor) can use
+.Sy print_rc_normal
+to force some of its output to be seen by the post-processor.
+.El
+.It Ic rc_usage Ar command Op Ar ...
+Print a usage message for
+.Sy $0 ,
+with
+.Ar commands
+being the list of valid arguments
+prefixed by
+.Dq "[fast|force|one]" .
+.It Ic reverse_list Ar item Op Ar ...
+Print the list of
+.Ar items
+in reverse order.
+.It Ic run_rc_command Ar argument Op Ar parameter ...
+Run the
+.Ar argument
+method for the current
+.Xr rc.d 8
+script, based on the settings of various shell variables.
+.Ic run_rc_command
+is extremely flexible, and allows fully functional
+.Xr rc.d 8
+scripts to be implemented in a small amount of shell code.
+The optional set of parameters is passed verbatim to the command, but not to its
+pre/post hooks.
+.Pp
+.Ar argument
+is searched for in the list of supported commands, which may be one
+of:
+.Bl -tag -width restart -offset indent
+.It Sy start
+Start the service.
+This should check that the service is to be started as specified by
+.Xr rc.conf 5 .
+Also checks if the service is already running and refuses to start if
+it is.
+This latter check is not performed by standard
+.Nx
+scripts if the system is starting directly to multi-user mode, to
+speed up the boot process.
+.It Sy stop
+If the service is to be started as specified by
+.Xr rc.conf 5 ,
+stop the service.
+This should check that the service is running and complain if it's not.
+.It Sy restart
+Perform a
+.Sy stop
+then a
+.Sy start .
+Defaults to displaying the process ID of the program (if running).
+.It Sy rcvar
+Display which
+.Xr rc.conf 5
+variables are used to control the startup of the service (if any).
+.El
+.Pp
+If
+.Sy pidfile
+or
+.Sy procname
+is set, also support:
+.Bl -tag -width restart -offset indent
+.It Sy poll
+Wait for the command to exit.
+.It Sy status
+Show the status of the process.
+.El
+.Pp
+Other supported commands are listed in the optional variable
+.Sy extra_commands .
+.Pp
+.Ar argument
+may have one of the following prefixes which alters its operation:
+.Bl -tag -width "Prefix" -offset indent
+.It Sy fast
+Skip the check for an existing running process,
+and sets
+.Sy rc_fast=YES .
+.It Sy force
+Skip the checks for
+.Sy rcvar
+being set to yes,
+and sets
+.Sy rc_force=YES .
+This ignores
+.Ar argument Ns Sy _precmd
+returning non-zero, and ignores any of the
+.Sy required_*
+tests failing, and always returns a zero exit status.
+.It Sy one
+Skip the checks for
+.Sy rcvar
+being set to yes, but performs all the other prerequisite tests.
+.El
+.Pp
+.Ic run_rc_command
+uses the following shell variables to control its behaviour.
+Unless otherwise stated, these are optional.
+.Bl -tag -width procname -offset indent
+.It Sy name
+The name of this script.
+This is not optional.
+.It Sy rcvar
+The value of
+.Sy rcvar
+is checked with
+.Ic checkyesno
+to determine if this method should be run.
+.It Sy rcvar_manpage
+The manual page containing information about
+.Sy rcvar .
+It will be part of the warning message shown when
+.Sy rcvar
+is undefined.
+Defaults to
+.Xr rc.conf 5 .
+.It Sy command
+Full path to the command.
+Not required if
+.Ar argument Ns Sy _cmd
+is defined for each supported keyword.
+.It Sy command_args
+Optional arguments and/or shell directives for
+.Sy command .
+.It Sy command_interpreter
+.Sy command
+is started with
+.Dl #! command_interpreter [...]
+which results in its
+.Xr ps 1
+command being
+.Dl command_interpreter [...] command
+so use that string to find the PID(s) of the running command
+rather than
+.Ql command .
+.It Sy extra_commands
+Extra commands/keywords/arguments supported.
+.It Sy pidfile
+Path to pid file.
+Used to determine the PID(s) of the running command.
+If
+.Sy pidfile
+is set, use
+.Dl check_pidfile $pidfile $procname
+to find the PID.
+Otherwise, if
+.Sy command
+is set, use
+.Dl check_process $procname
+to find the PID.
+.It Sy procname
+Process name to check for.
+Defaults to the value of
+.Sy command .
+.It Sy required_dirs
+Check for the existence of the listed directories
+before running the default start method.
+.It Sy required_files
+Check for the readability of the listed files
+before running the default start method.
+.It Sy required_vars
+Perform
+.Ic checkyesno
+on each of the list variables
+before running the default start method.
+.It Sy ${name}_chdir
+Directory to
+.Ic cd
+to before running
+.Sy command ,
+if
+.Sy ${name}_chroot
+is not provided.
+.It Sy ${name}_chroot
+Directory to
+.Xr chroot 8
+to before running
+.Sy command .
+Only supported after
+.Pa /usr
+is mounted.
+.It Sy ${name}_env
+List of additional or modified environment variables to set
+when starting
+.Sy command .
+.It Sy ${name}_flags
+Arguments to call
+.Sy command
+with.
+This is usually set in
+.Xr rc.conf 5 ,
+and not in the
+.Xr rc.d 8
+script.
+The environment variable
+.Sq Ev flags
+can be used to override this.
+.It Sy ${name}_nice
+.Xr nice 1
+level to run
+.Sy command
+as.
+Only supported after
+.Pa /usr
+is mounted.
+.It Sy ${name}_user
+User to run
+.Sy command
+as, using
+.Xr chroot 8 .
+if
+.Sy ${name}_chroot
+is set, otherwise
+uses
+.Xr su 1 .
+Only supported after
+.Pa /usr
+is mounted.
+.It Sy ${name}_group
+Group to run the chrooted
+.Sy command
+as.
+.It Sy ${name}_groups
+Comma separated list of supplementary groups to run the chrooted
+.Sy command
+with.
+.It Ar argument Ns Sy _cmd
+Shell commands which override the default method for
+.Ar argument .
+.It Ar argument Ns Sy _precmd
+Shell commands to run just before running
+.Ar argument Ns Sy _cmd
+or the default method for
+.Ar argument .
+If this returns a non-zero exit code, the main method is not performed.
+If the default method is being executed, this check is performed after
+the
+.Sy required_*
+checks and process (non-)existence checks.
+.It Ar argument Ns Sy _postcmd
+Shell commands to run if running
+.Ar argument Ns Sy _cmd
+or the default method for
+.Ar argument
+returned a zero exit code.
+.It Sy sig_stop
+Signal to send the processes to stop in the default
+.Sy stop
+method.
+Defaults to
+.Dv SIGTERM .
+.It Sy sig_reload
+Signal to send the processes to reload in the default
+.Sy reload
+method.
+Defaults to
+.Dv SIGHUP .
+.El
+.Pp
+For a given method
+.Ar argument ,
+if
+.Ar argument Ns Sy _cmd
+is not defined, then a default method is provided by
+.Sy run_rc_command :
+.Bl -tag -width "argument" -offset indent
+.It Sy Argument
+.Sy Default method
+.It Sy start
+If
+.Sy command
+is not running and
+.Ic checkyesno Sy rcvar
+succeeds, start
+.Sy command .
+.It Sy stop
+Determine the PIDs of
+.Sy command
+with
+.Ic check_pidfile
+or
+.Ic check_process
+(as appropriate),
+.Ic kill Sy sig_stop
+those PIDs, and run
+.Ic wait_for_pids
+on those PIDs.
+.It Sy reload
+Similar to
+.Sy stop ,
+except that it uses
+.Sy sig_reload
+instead, and doesn't run
+.Ic wait_for_pids .
+.It Sy restart
+Runs the
+.Sy stop
+method, then the
+.Sy start
+method.
+.It Sy status
+Show the PID of
+.Sy command ,
+or some other script specific status operation.
+.It Sy poll
+Wait for
+.Sy command
+to exit.
+.It Sy rcvar
+Display which
+.Xr rc.conf 5
+variable is used (if any).
+This method always works, even if the appropriate
+.Xr rc.conf 5
+variable is set to
+.Sq NO .
+.El
+.Pp
+The following variables are available to the methods
+(such as
+.Ar argument Ns Sy _cmd )
+as well as after
+.Ic run_rc_command
+has completed:
+.Bl -tag -width "rc_flags" -offset indent
+.It Sy rc_arg
+Argument provided to
+.Sy run_rc_command ,
+after fast and force processing has been performed.
+.It Sy rc_flags
+Flags to start the default command with.
+Defaults to
+.Sy ${name}_flags ,
+unless overridden by the environment variable
+.Sq Ev flags .
+This variable may be changed by the
+.Ar argument Ns Sy _precmd
+method.
+.It Sy rc_pid
+PID of
+.Sy command
+(if appropriate).
+.It Sy rc_fast
+Not empty if
+.Dq fast
+prefix was used.
+.It Sy rc_force
+Not empty if
+.Dq force
+prefix was used.
+.El
+.It Ic run_rc_script Ar file Ar argument
+Start the script
+.Ar file
+with an argument of
+.Ar argument ,
+and handle the return value from the script.
+.Pp
+Various shell variables are unset before
+.Ar file
+is started:
+.Bd -ragged -offset indent
+.Sy name ,
+.Sy command ,
+.Sy command_args ,
+.Sy command_interpreter ,
+.Sy extra_commands ,
+.Sy pidfile ,
+.Sy rcvar ,
+.Sy required_dirs ,
+.Sy required_files ,
+.Sy required_vars ,
+.Ar argument Ns Sy _cmd ,
+.Ar argument Ns Sy _precmd .
+.Ar argument Ns Sy _postcmd .
+.Ed
+.Pp
+The startup behaviour of
+.Ar file
+depends upon the following checks:
+.Bl -enum
+.It
+If
+.Ar file
+ends in
+.Pa .sh ,
+it is sourced into the current shell.
+.It
+If
+.Ar file
+appears to be a backup or scratch file
+(e.g., with a suffix of
+.Sq ~ ,
+.Sq # ,
+.Sq .OLD ,
+or
+.Sq .orig ) ,
+ignore it.
+.It
+If
+.Ar file
+is not executable, ignore it.
+.It
+If the
+.Xr rc.conf 5
+variable
+.Sy rc_fast_and_loose
+is empty,
+source
+.Ar file
+in a sub shell,
+otherwise source
+.Ar file
+into the current shell.
+.It
+If
+.Ar file
+contains the
+.Xr rcorder 8
+keyword
+.Dq interactive ,
+then the command is executed using
+.Ic no_rc_postprocess .
+.El
+.It Ic stop_boot
+Prevent booting to multiuser mode.
+If the
+.Sy autoboot
+variable is
+.Sq yes ,
+then a
+.Sy SIGTERM
+signal is sent to the parent
+process (which is assumed to be
+.Xr rc 8 ) .
+Otherwise, the shell exits with status
+.Li 1 .
+.It Ic twiddle
+Display one of the characters
+.Sq \&/ , \&- , \&\e , \&| ,
+followed by a backspace.
+Repeated calls to this function will create the appearance of a spinning
+symbol, as a different character is displayed on each call.
+Output is to
+.Pa /dev/tty ,
+so this function may be useful even inside a script whose output
+has been redirected.
+.It Ic wait_for_pids Op Ar pid Op Ar ...
+Wait until all of the provided
+.Ar pids
+don't exist any more, printing the list of outstanding
+.Ar pids
+every two seconds.
+.It Ic warn Ar message
+Display a warning message to
+.Em stderr
+and log it to the system log
+using
+.Xr logger 1 .
+The warning message consists of the script name
+(from
+.Sy $0 ) ,
+followed by
+.Dq ": WARNING: " ,
+and then
+.Ar message .
+.It Ic yesno_to_truefalse Ar var
+Change the value of the specified variable from any of the
+forms acceptable to the
+.Ic checkyesno
+function, to
+.Dq true
+or
+.Dq false .
+.El
+.Sh FILES
+.Bl -tag -width /etc/rc.subr -compact
+.It Pa /etc/rc.subr
+The
+.Nm
+file resides in
+.Pa /etc .
+.El
+.Sh SEE ALSO
+.Xr rc.conf 5 ,
+.Xr rc 8
+.Sh HISTORY
+.Nm
+appeared in
+.Nx 1.3 .
+The
+.Xr rc.d 8
+support functions appeared in
+.Nx 1.5 .
+Support for the
+.Xr rc 8
+post-processor appeared in
+.Nx 6.0 .