Remove building with NOCRYPTO option
[minix.git] / share / man / man8 / rc.subr.8
blob2fac9b80d71d45622813a4a2fbd44e59e517fa68
1 .\"     $NetBSD: rc.subr.8,v 1.31 2012/12/18 13:14:34 wiz Exp $
2 .\"
3 .\" Copyright (c) 2002-2011 The NetBSD Foundation, Inc.
4 .\" All rights reserved.
5 .\"
6 .\" This code is derived from software contributed to The NetBSD Foundation
7 .\" by Luke Mewburn.
8 .\"
9 .\" Redistribution and use in source and binary forms, with or without
10 .\" modification, are permitted provided that the following conditions
11 .\" are met:
12 .\" 1. Redistributions of source code must retain the above copyright
13 .\"    notice, this list of conditions and the following disclaimer.
14 .\" 2. Redistributions in binary form must reproduce the above copyright
15 .\"    notice, this list of conditions and the following disclaimer in the
16 .\"    documentation and/or other materials provided with the distribution.
17 .\"
18 .\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
19 .\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20 .\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 .\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
22 .\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 .\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 .\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 .\" POSSIBILITY OF SUCH DAMAGE.
29 .\"
30 .Dd December 17, 2012
31 .Dt RC.SUBR 8
32 .Os
33 .Sh NAME
34 .Nm rc.subr
35 .Nd functions used by system shell scripts
36 .Sh SYNOPSIS
37 .Bl -item
38 .It
39 .Li . /etc/rc.subr
40 .It
41 .Ic backup_file Ar action Ar file Ar current Ar backup
42 .It
43 .Ic basename Ar file Op Ar suffix
44 .It
45 .Ic checkyesno Ar var
46 .It
47 .Ic check_pidfile Ar pidfile Ar procname Op Ar interpreter
48 .It
49 .Ic check_process Ar procname Op Ar interpreter
50 .It
51 .Ic collapse_backslash_newline
52 .It
53 .Ic dirname Ar file
54 .It
55 .Ic err Ar exitval Ar message
56 .It
57 .Ic load_rc_config Ar command
58 .It
59 .Ic load_rc_config_var Ar command Ar var
60 .It
61 .Ic mount_critical_filesystems Ar type
62 .It
63 .Ic no_rc_postprocess Ar command Op Ar arguments
64 .It
65 .Ic print_rc_metadata Ar string
66 .It
67 .Ic print_rc_normal Oo Fl n Oc Ar string
68 .It
69 .Ic rc_usage Ar command Op Ar ...
70 .It
71 .Ic reverse_list Ar item Op Ar ...
72 .It
73 .Ic run_rc_command Ar argument [parameters]
74 .It
75 .Ic run_rc_script Ar file Ar argument
76 .It
77 .Ic stop_boot
78 .It
79 .Ic twiddle
80 .It
81 .Ic wait_for_pids Op Ar pid Op Ar ...
82 .It
83 .Ic warn Ar message
84 .It
85 .Ic yesno_to_truefalse Ar var
86 .El
87 .Sh DESCRIPTION
88 .Nm
89 contains commonly used shell script functions which are used by
90 various scripts such as
91 .Xr rc 8 ,
92 and the periodic system services which are controlled by
93 .Xr daily.conf 5 ,
94 .Xr monthly.conf 5 ,
95 .Xr security.conf 5 ,
96 and
97 .Xr weekly.conf 5 .
98 .Pp
99 The
101 functions are accessed by sourcing
102 .Pa /etc/rc.subr
103 into the current shell.
105 The following shell functions are available:
106 .Bl -tag -width 4n
107 .It Ic backup_file Ar action Ar file Ar current Ar backup
108 Make a backup copy of
109 .Ar file
110 into
111 .Ar current .
112 If the
113 .Xr rc.conf 5
114 variable
115 .Sy backup_uses_rcs
117 .Sq YES ,
119 .Xr rcs 1
120 to archive the previous version of
121 .Ar current ,
122 otherwise save the previous version of
123 .Ar current
125 .Ar backup .
127 .Ar action
128 may be one of the following:
129 .Bl -tag -width remove
130 .It Sy add
131 .Ar file
132 is now being backed up by or possibly re-entered into this backup mechanism.
133 .Ar current
134 is created, and if necessary, the
135 .Xr rcs 1
136 files are created as well.
137 .It Sy update
138 .Ar file
139 has changed and needs to be backed up.
141 .Ar current
142 exists, it is copied to
143 .Ar backup
144 or checked into
145 .Xr rcs 1
146 (if the repository file is old),
147 and then
148 .Ar file
149 is copied to
150 .Ar current .
151 .It Sy remove
152 .Ar file
153 is no longer being tracked by this backup mechanism.
155 .Xr rcs 1
156 is being used, an empty file is checked in and
157 .Ar current
158 is removed,
159 otherwise
160 .Ar current
161 is moved to
162 .Ar backup .
164 .Ic basename Ar file Op Ar suffix
165 Just like
166 .Xr basename 1 ,
167 except implemented using shell built-in commands, and usable before the
168 .Pa /usr/bin
169 direcory is available.
170 .It Ic checkyesno Ar var
171 Return 0 if
172 .Ar var
173 is defined to
174 .Sq YES ,
175 .Sq TRUE ,
176 .Sq ON ,
178 .Sq 1 .
179 Return 1 if
180 .Ar var
181 is defined to
182 .Sq NO ,
183 .Sq FALSE ,
184 .Sq OFF ,
186 .Sq 0 .
187 Otherwise, warn that
188 .Ar var
189 is not set correctly.
190 The values are case insensitive.
192 Note that the warning message shown by this function when
193 .Ar var
194 is not set references a manual page where the user can find more information.
195 Its name is picked up from the
196 .Sy rcvar_manpage
197 variable.
198 .It Ic check_pidfile Ar pidfile Ar procname Op Ar interpreter
199 Parses the first word of the first line of
200 .Ar pidfile
201 for a PID, and ensures that the process with that PID
202 is running and its first argument matches
203 .Ar procname .
204 Prints the matching PID if successful, otherwise nothing.
206 .Ar interpreter
207 is provided, parse the first line of
208 .Ar procname ,
209 ensure that the line is of the form
210 .Dl #! interpreter [...]
211 and use
212 .Ar interpreter
213 with its optional arguments and
214 .Ar procname
215 appended as the process string to search for.
216 .It Ic check_process Ar procname Op Ar interpreter
217 Prints the PIDs of any processes that are running with a first
218 argument that matches
219 .Ar procname .
220 .Ar interpreter
221 is handled as per
222 .Ic check_pidfile .
223 .It Ic collapse_backslash_newline
224 Copy input to output, collapsing
225 .Ao backslash Ac Ns Ao newline Ac
226 to nothing, but leaving other backslashes alone.
227 .Ic dirname Ar file
228 Just like
229 .Xr dirname 1 ,
230 except implemented using shell built-in commands, and usable before the
231 .Pa /usr/bin
232 direcory is available.
233 .It Ic err Ar exitval Ar message
234 Display an error message to
235 .Em stderr ,
236 log it to the system log
237 using
238 .Xr logger 1 ,
240 .Cm exit
241 with an exit value of
242 .Ar exitval .
243 The error message consists of the script name
244 (from
245 .Sy $0 ) ,
246 followed by
247 .Dq ": ERROR: " ,
248 and then
249 .Ar message .
250 .It Ic load_rc_config Ar command
251 Source in the
252 .Xr rc.conf 5
253 configuration files for
254 .Ar command .
255 First,
256 .Pa /etc/rc.conf
257 is sourced if it has not yet been read in.
258 Then,
259 .Pa /etc/rc.conf.d/ Ns Ar command
260 is sourced if it is an existing file.
261 The latter may also contain other variable assignments to override
262 .Ic run_rc_command
263 arguments defined by the calling script, to provide an easy
264 mechanism for an administrator to override the behaviour of a given
265 .Xr rc.d 8
266 script without requiring the editing of that script.
267 .It Ic load_rc_config_var Ar command Ar var
268 Read the
269 .Xr rc.conf 5
270 variable
271 .Ar var
273 .Ar command
274 and set in the current shell, using
275 .Ic load_rc_config
276 in a sub-shell to prevent unwanted side effects from other variable
277 assignments.
278 .It Ic mount_critical_filesystems Ar type
279 Go through a list of critical file systems,
280 as found in the
281 .Xr rc.conf 5
282 variable
283 .Sy critical_filesystems_ Ns Ar type ,
284 mounting each one that
285 is not currently mounted.
286 .It Ic no_rc_postprocess Ar command Op Ar arguments
287 Execute the specified command with the specified arguments,
288 in such a way that its output bypasses the post-processor that
289 .Xr rc 8
290 uses for most commands.
291 This implies that the output will not appear in the
292 .Pa /var/run/rc.log
293 file, and will appear on the console regardless of the
294 value of
295 .Va rc_silent .
296 This is expected to be useful for interactive commands,
297 and this mechanism is automatically used by
298 .Ic run_rc_command
299 when a script contains the
300 .Xr rcorder 8
301 keyword
302 .Dq interactive .
304 If invoked from a context that does not appear to be under the control of
305 .Xr rc 8 ,
306 then the command is executed without special treatment.
307 .It Ic print_rc_metadata Ar string
308 Print the specified
309 .Ar string
310 in such a way that it should be handled as meta-data by the
311 .Xr rc 8
312 post-processor.
313 If invoked from a context that does not appear to be under the control of
314 .Xr rc 8 ,
315 then the
316 .Ar string
317 is discarded.
320 .Xr rc.d 8
321 script may invoke this function with an argument that begins with
322 .Dq note: ,
323 followed by one line of arbitrary text;
324 the text will be logged by
325 .Xr rc 8
326 but will not be displayed on the console.
328 The use of arguments that do not begin with
329 .Dq note:
330 is reserved for internal use by
331 .Xr rc 8
333 .Nm .
334 .It Ic print_rc_normal Oo Fl n Oc Ar string
335 Print the specified
336 .Ar string
337 in such a way that it should be handled as normal output by the
338 .Xr rc 8
339 post-processor.
340 If invoked from a context that does not appear to be under the control of
341 .Xr rc 8 ,
342 then the
343 .Ar string
344 is printed to standard output.
346 If the
347 .Fl n
348 flag is specified, then the string is printed without a newline.
350 Intended use cases include:
351 .Bl -bullet
353 An rc.d script can use
354 .Dq Sy print_rc_normal Fl n
355 to print a partial line in such a way that it appears
356 immediately instead of being buffered by
357 .Xr rc 8 Ap s
358 post-processor.
360 An rc.d script that is run via the
361 .Sy no_rc_postprocess
362 function (so most of its output is invisible to
363 .Xr rc 8 Ap s
364 post-processor) can use
365 .Sy print_rc_normal
366 to force some of its output to be seen by the post-processor.
368 .It Ic rc_usage Ar command Op Ar ...
369 Print a usage message for
370 .Sy $0 ,
371 with
372 .Ar commands
373 being the list of valid arguments
374 prefixed by
375 .Dq "[fast|force|one]" .
376 .It Ic reverse_list Ar item Op Ar ...
377 Print the list of
378 .Ar items
379 in reverse order.
380 .It Ic run_rc_command Ar argument Op Ar parameter ...
381 Run the
382 .Ar argument
383 method for the current
384 .Xr rc.d 8
385 script, based on the settings of various shell variables.
386 .Ic run_rc_command
387 is extremely flexible, and allows fully functional
388 .Xr rc.d 8
389 scripts to be implemented in a small amount of shell code.
390 The optional set of parameters is passed verbatim to the command, but not to its
391 pre/post hooks.
393 .Ar argument
394 is searched for in the list of supported commands, which may be one
396 .Bl -tag -width restart -offset indent
397 .It Sy start
398 Start the service.
399 This should check that the service is to be started as specified by
400 .Xr rc.conf 5 .
401 Also checks if the service is already running and refuses to start if
402 it is.
403 This latter check is not performed by standard
405 scripts if the system is starting directly to multi-user mode, to
406 speed up the boot process.
407 .It Sy stop
408 If the service is to be started as specified by
409 .Xr rc.conf 5 ,
410 stop the service.
411 This should check that the service is running and complain if it's not.
412 .It Sy restart
413 Perform a
414 .Sy stop
415 then a
416 .Sy start .
417 Defaults to displaying the process ID of the program (if running).
418 .It Sy rcvar
419 Display which
420 .Xr rc.conf 5
421 variables are used to control the startup of the service (if any).
425 .Sy pidfile
427 .Sy procname
428 is set, also support:
429 .Bl -tag -width restart -offset indent
430 .It Sy poll
431 Wait for the command to exit.
432 .It Sy status
433 Show the status of the process.
436 Other supported commands are listed in the optional variable
437 .Sy extra_commands .
439 .Ar argument
440 may have one of the following prefixes which alters its operation:
441 .Bl -tag -width "Prefix" -offset indent
442 .It Sy fast
443 Skip the check for an existing running process,
444 and sets
445 .Sy rc_fast=YES .
446 .It Sy force
447 Skip the checks for
448 .Sy rcvar
449 being set to yes,
450 and sets
451 .Sy rc_force=YES .
452 This ignores
453 .Ar argument Ns Sy _precmd
454 returning non-zero, and ignores any of the
455 .Sy required_*
456 tests failing, and always returns a zero exit status.
457 .It Sy one
458 Skip the checks for
459 .Sy rcvar
460 being set to yes, but performs all the other prerequisite tests.
463 .Ic run_rc_command
464 uses the following shell variables to control its behaviour.
465 Unless otherwise stated, these are optional.
466 .Bl -tag -width procname -offset indent
467 .It Sy name
468 The name of this script.
469 This is not optional.
470 .It Sy rcvar
471 The value of
472 .Sy rcvar
473 is checked with
474 .Ic checkyesno
475 to determine if this method should be run.
476 .It Sy rcvar_manpage
477 The manual page containing information about
478 .Sy rcvar .
479 It will be part of the warning message shown when
480 .Sy rcvar
481 is undefined.
482 Defaults to
483 .Xr rc.conf 5 .
484 .It Sy command
485 Full path to the command.
486 Not required if
487 .Ar argument Ns Sy _cmd
488 is defined for each supported keyword.
489 .It Sy command_args
490 Optional arguments and/or shell directives for
491 .Sy command .
492 .It Sy command_interpreter
493 .Sy command
494 is started with
495 .Dl #! command_interpreter [...]
496 which results in its
497 .Xr ps 1
498 command being
499 .Dl command_interpreter [...] command
500 so use that string to find the PID(s) of the running command
501 rather than
502 .Ql command .
503 .It Sy extra_commands
504 Extra commands/keywords/arguments supported.
505 .It Sy pidfile
506 Path to pid file.
507 Used to determine the PID(s) of the running command.
509 .Sy pidfile
510 is set, use
511 .Dl check_pidfile $pidfile $procname
512 to find the PID.
513 Otherwise, if
514 .Sy command
515 is set, use
516 .Dl check_process $procname
517 to find the PID.
518 .It Sy procname
519 Process name to check for.
520 Defaults to the value of
521 .Sy command .
522 .It Sy required_dirs
523 Check for the existence of the listed directories
524 before running the default start method.
525 .It Sy required_files
526 Check for the readability of the listed files
527 before running the default start method.
528 .It Sy required_vars
529 Perform
530 .Ic checkyesno
531 on each of the list variables
532 before running the default start method.
533 .It Sy ${name}_chdir
534 Directory to
535 .Ic cd
536 to before running
537 .Sy command ,
539 .Sy ${name}_chroot
540 is not provided.
541 .It Sy ${name}_chroot
542 Directory to
543 .Xr chroot 8
544 to before running
545 .Sy command .
546 Only supported after
547 .Pa /usr
548 is mounted.
549 .It Sy ${name}_env
550 List of additional or modified environment variables to set
551 when starting
552 .Sy command .
553 .It Sy ${name}_flags
554 Arguments to call
555 .Sy command
556 with.
557 This is usually set in
558 .Xr rc.conf 5 ,
559 and not in the
560 .Xr rc.d 8
561 script.
562 The environment variable
563 .Sq Ev flags
564 can be used to override this.
565 .It Sy ${name}_nice
566 .Xr nice 1
567 level to run
568 .Sy command
570 Only supported after
571 .Pa /usr
572 is mounted.
573 .It Sy ${name}_user
574 User to run
575 .Sy command
576 as, using
577 .Xr chroot 8 .
579 .Sy ${name}_chroot
580 is set, otherwise
581 uses
582 .Xr su 1 .
583 Only supported after
584 .Pa /usr
585 is mounted.
586 .It Sy ${name}_group
587 Group to run the chrooted
588 .Sy command
590 .It Sy ${name}_groups
591 Comma separated list of supplementary groups to run the chrooted
592 .Sy command
593 with.
594 .It Ar argument Ns Sy _cmd
595 Shell commands which override the default method for
596 .Ar argument .
597 .It Ar argument Ns Sy _precmd
598 Shell commands to run just before running
599 .Ar argument Ns Sy _cmd
600 or the default method for
601 .Ar argument .
602 If this returns a non-zero exit code, the main method is not performed.
603 If the default method is being executed, this check is performed after
605 .Sy required_*
606 checks and process (non-)existence checks.
607 .It Ar argument Ns Sy _postcmd
608 Shell commands to run if running
609 .Ar argument Ns Sy _cmd
610 or the default method for
611 .Ar argument
612 returned a zero exit code.
613 .It Sy sig_stop
614 Signal to send the processes to stop in the default
615 .Sy stop
616 method.
617 Defaults to
618 .Dv SIGTERM .
619 .It Sy sig_reload
620 Signal to send the processes to reload in the default
621 .Sy reload
622 method.
623 Defaults to
624 .Dv SIGHUP .
627 For a given method
628 .Ar argument ,
630 .Ar argument Ns Sy _cmd
631 is not defined, then a default method is provided by
632 .Sy run_rc_command :
633 .Bl -tag -width "argument" -offset indent
634 .It Sy Argument
635 .Sy Default method
636 .It Sy start
638 .Sy command
639 is not running and
640 .Ic checkyesno Sy rcvar
641 succeeds, start
642 .Sy command .
643 .It Sy stop
644 Determine the PIDs of
645 .Sy command
646 with
647 .Ic check_pidfile
649 .Ic check_process
650 (as appropriate),
651 .Ic kill Sy sig_stop
652 those PIDs, and run
653 .Ic wait_for_pids
654 on those PIDs.
655 .It Sy reload
656 Similar to
657 .Sy stop ,
658 except that it uses
659 .Sy sig_reload
660 instead, and doesn't run
661 .Ic wait_for_pids .
662 .It Sy restart
663 Runs the
664 .Sy stop
665 method, then the
666 .Sy start
667 method.
668 .It Sy status
669 Show the PID of
670 .Sy command ,
671 or some other script specific status operation.
672 .It Sy poll
673 Wait for
674 .Sy command
675 to exit.
676 .It Sy rcvar
677 Display which
678 .Xr rc.conf 5
679 variable is used (if any).
680 This method always works, even if the appropriate
681 .Xr rc.conf 5
682 variable is set to
683 .Sq NO .
686 The following variables are available to the methods
687 (such as
688 .Ar argument Ns Sy _cmd )
689 as well as after
690 .Ic run_rc_command
691 has completed:
692 .Bl -tag -width "rc_flags" -offset indent
693 .It Sy rc_arg
694 Argument provided to
695 .Sy run_rc_command ,
696 after fast and force processing has been performed.
697 .It Sy rc_flags
698 Flags to start the default command with.
699 Defaults to
700 .Sy ${name}_flags ,
701 unless overridden by the environment variable
702 .Sq Ev flags .
703 This variable may be changed by the
704 .Ar argument Ns Sy _precmd
705 method.
706 .It Sy rc_pid
707 PID of
708 .Sy command
709 (if appropriate).
710 .It Sy rc_fast
711 Not empty if
712 .Dq fast
713 prefix was used.
714 .It Sy rc_force
715 Not empty if
716 .Dq force
717 prefix was used.
719 .It Ic run_rc_script Ar file Ar argument
720 Start the script
721 .Ar file
722 with an argument of
723 .Ar argument ,
724 and handle the return value from the script.
726 Various shell variables are unset before
727 .Ar file
728 is started:
729 .Bd -ragged -offset indent
730 .Sy name ,
731 .Sy command ,
732 .Sy command_args ,
733 .Sy command_interpreter ,
734 .Sy extra_commands ,
735 .Sy pidfile ,
736 .Sy rcvar ,
737 .Sy required_dirs ,
738 .Sy required_files ,
739 .Sy required_vars ,
740 .Ar argument Ns Sy _cmd ,
741 .Ar argument Ns Sy _precmd .
742 .Ar argument Ns Sy _postcmd .
745 The startup behaviour of
746 .Ar file
747 depends upon the following checks:
748 .Bl -enum
751 .Ar file
752 ends in
753 .Pa .sh ,
754 it is sourced into the current shell.
757 .Ar file
758 appears to be a backup or scratch file
759 (e.g., with a suffix of
760 .Sq ~ ,
761 .Sq # ,
762 .Sq .OLD ,
764 .Sq .orig ) ,
765 ignore it.
768 .Ar file
769 is not executable, ignore it.
771 If the
772 .Xr rc.conf 5
773 variable
774 .Sy rc_fast_and_loose
775 is empty,
776 source
777 .Ar file
778 in a sub shell,
779 otherwise source
780 .Ar file
781 into the current shell.
784 .Ar file
785 contains the
786 .Xr rcorder 8
787 keyword
788 .Dq interactive ,
789 then the command is executed using
790 .Ic no_rc_postprocess .
792 .It Ic stop_boot
793 Prevent booting to multiuser mode.
794 If the
795 .Sy autoboot
796 variable is
797 .Sq yes ,
798 then a
799 .Sy SIGTERM
800 signal is sent to the parent
801 process (which is assumed to be
802 .Xr rc 8 ) .
803 Otherwise, the shell exits with status
804 .Li 1 .
805 .It Ic twiddle
806 Display one of the characters
807 .Sq \&/ , \&- , \&\e , \&| ,
808 followed by a backspace.
809 Repeated calls to this function will create the appearance of a spinning
810 symbol, as a different character is displayed on each call.
811 Output is to
812 .Pa /dev/tty ,
813 so this function may be useful even inside a script whose output
814 has been redirected.
815 .It Ic wait_for_pids Op Ar pid Op Ar ...
816 Wait until all of the provided
817 .Ar pids
818 don't exist any more, printing the list of outstanding
819 .Ar pids
820 every two seconds.
821 .It Ic warn Ar message
822 Display a warning message to
823 .Em stderr
824 and log it to the system log
825 using
826 .Xr logger 1 .
827 The warning message consists of the script name
828 (from
829 .Sy $0 ) ,
830 followed by
831 .Dq ": WARNING: " ,
832 and then
833 .Ar message .
834 .It Ic yesno_to_truefalse Ar var
835 Change the value of the specified variable from any of the
836 forms acceptable to the
837 .Ic checkyesno
838 function, to
839 .Dq true
841 .Dq false .
843 .Sh FILES
844 .Bl -tag -width /etc/rc.subr -compact
845 .It Pa /etc/rc.subr
848 file resides in
849 .Pa /etc .
851 .Sh SEE ALSO
852 .Xr rc.conf 5 ,
853 .Xr rc 8
854 .Sh HISTORY
856 appeared in
857 .Nx 1.3 .
859 .Xr rc.d 8
860 support functions appeared in
861 .Nx 1.5 .
862 Support for the
863 .Xr rc 8
864 post-processor appeared in
865 .Nx 6.0 .