Commit Graph

106 Commits

Author SHA1 Message Date
christos b224530c28 Use more concise shell syntax:
1. for i in $* -> for i
2. foo=$* -> foo="$@"
2003-06-03 14:00:45 +00:00
lukem ef98b9ddca Fix logic error I introduced recently into mount_critical_filesystems().
Noted by kilbi@rad.rwth-aachen.de in [bin/19703].
2003-01-05 22:59:35 +00:00
lukem dd2a7e0da5 'if ! command;' is not POSIX sh, even though our /bin/sh supports it 2003-01-05 11:40:29 +00:00
lukem 15388316f6 Change how internal boolean variables are used to:
if ! ${_somevar:-false}; then
		_somevar=true
	fi
(Consisent, slightly quicker, and slightly cleaner)
2003-01-04 15:27:43 +00:00
abs 9f39802939 Append ' - see rc.conf(5)' to unset variable warning:
/etc/rc.d/fu: WARNING: $fu is not set properly - see rc.conf(5).
Add a note to rc.conf that third party packages may test for additional
variables.
2002-08-26 17:46:57 +00:00
grant 36ae72d99a add test for /usr/bin/logger in warn/err. 2002-07-25 14:34:46 +00:00
atatat 7fe5615355 Add systrace(1) support to rc.subr. Most services (eg, ${name} is
inetd) started from rc can now be run under systrace by setting
${name}_systrace to a set of flags to be passed to systrace.  Note
that policies need to generated before you do this.
2002-07-08 16:14:53 +00:00
lukem a40243df30 When using backup_uses_rcs=YES in backup_file(), after checking the file
in and setting -kb, check it out again, since the initial check in
trashes any RCSIDs (because -kb wasn't set at that time).

This stops the annoying situation where you add a new file (e.g, "foo")
which contains an RCSID and you get *two* notifications of differences
in two successives runs of /etc/security; the first when the file is
initially checked in and a second when diff finds the RCSID is different
(contains "foo.conf,v 1.1" instead of "foo,v 1.66").
2002-05-21 12:31:01 +00:00
lukem 892c0453dd consistently set rc_(fast|force)=yes 2002-04-18 07:18:05 +00:00
lukem 5ee7ac8886 Replace $critical_filesystems_beforenet with $critical_filesystems_local .
Replace  $critical_filesystems            with  $critical_filesystems_remote .

The new names are now consistent with the type argument that
mount_critical_filesystems() is called with, and allows for other types to
be easily supported by that function.

For backwards compatibility purposes, if the now obsolete variable is defined
(even empty), it takes precedence over the new form, and you will be warned.
If you want to stop the warnings, update your rc.conf(5) settings!
2002-03-27 08:53:39 +00:00
lukem 1a286b1407 - Rename a bunch of "internal" run_rc_command() variables and officially
make them "externally" available:
	Previous	Current		Purpose
	--------	-------		-------
	_arg		rc_arg		Argument to command, after fast/force
					processing performed (and prefix
					removed)

	_flags		rc_flags	Flags to start the default command
					with.  Defaults to ${name}_flags,
					unless overridden by $flags from the
					environment.  This variable may be
					changed by the precmd method.

	_pid		rc_pid		PID of command (if appropriate).

	_rc_run_fast	rc_fast		Not empty is "fast" was provided.

	_rc_run_force	rc_force	Not empty is "force" was provided.

- Use rc_flags instead of _flags or ${name}_flags in various rc.d scripts,
  so that $flags from the environment overrides ${name}_flags from rc.conf(5).
  Fixes [bin/15800].
2002-03-22 04:16:38 +00:00
lukem d40d675711 - Add run_rc_command() control variable $command_interpreter
If set, the first line of $command is read, the leading #! is
  removed, whitespace is normalised, the first word is checked
  against $command_interpreter, and the result is used as the
  string to match in the ps(1) output.
  This code isn't infallable, but works for common cases such as
	#!/bin/sh
	#!  /usr/pkg/bin/perl  -w
  This helps solve the problem described in [bin/15563], and by
  Ed Ravin on tech-userlevel.

- Move the common elements of check_process() and check_pidfile() into
  _find_processes(), and call appropriately.
2002-03-21 12:21:00 +00:00
lukem 9bcc098690 Use ${_arg}_postcmd even if we're not using the default ${_arg}_cmd method. 2002-03-13 06:58:34 +00:00
lukem 9cfa003dc7 Implement ${_arg}_postcmd support, which is run if a default
start/stop/reload/restart operation succeeds (i.e, zero exit code).
Code from Lubomir Sedlacik <salo@Xtrmntr.org>.
2002-03-13 04:50:08 +00:00
lukem 80ce7c6cb7 Fixes derived from [bin/15563] submitted by Ron Roskens:
- Don't su(1) to ${name}_user if running as that user.
- Support $procname as the name of the process to search for.
  Defaults to the value of $command.
2002-02-25 12:49:33 +00:00
lukem 5bf3bfa2bb fix spelo. crank copyright year 2002-02-25 08:11:23 +00:00
lukem 04784cf374 Don't run "status" as if "force" is set, thus reverting part of rev 1.29.
I can't remember the rationale for why I made that change in the first place,
and there's been some good arguments presented to me as to why the rcvar
should be checked before status is run.
2002-02-25 07:12:47 +00:00
lukem 0ccd65df49 run_rc_script() improvements:
- always unset the variables used by run_rc_command() before sourcing an
  rc.d script, rather than just when rc_fast_and_loose is in effect.
  this allows run_rc_command() to be used in .sh scripts (with care).
- remove comment describing now-former limitation of .sh scripts.
- make the rc_fast_and_loose check only after the `` not *.sh / not scratch
  / script-is-executable '' checks.  rc_fast_and_loose now behaves a lot more
  like the normal operation, in that it skips scratch files and
  non-executable files
2002-02-25 06:58:14 +00:00
lukem 50b7dbcb07 Add reverse_list(), which prints the reverse of the list of words.
Doesn't attempt to handle words with whitespace, etc.
2001-11-19 03:18:32 +00:00
lukem 50aa483991 Improve run_rc_script():
- Skip files that end with `~', `#', `.OLD' or `.orig', as these are usually
  scratch or backup files created by programs, and we don't want to start them.
- Only try and run non `.sh' files if they're executable.

Per discussions with Andrew Brown, and closing his PR [bin/9981].
2001-06-18 06:53:45 +00:00
atatat 87c8919798 When using rcs to track backups, force the rcs archive to be unlocked,
use only non-strict locking, and leave the archives unlocked after
checking in changes.
2001-05-10 14:04:22 +00:00
lukem 4c9bb3bc3f * change wait_for_pids() to spin forever (rather than just ~ 65 seconds).
* change the default `stop' case to wait_for_pids after kill $sig_stop.
  this means that "/etc/rc.d/foo stop" won't return until the service
  has shut down. third party scripts that implement their own stop mechanism
  should offer this functionality as well.
* in the default restart case, don't bother doing `$0 poll' in between
  stop & start, because of the change above. (XXX: deprecate poll ?)
2001-05-09 16:40:59 +00:00
lukem ab72f65dcd Don't try and use single quotes in the RHS of a ${ :+ } expansion
because /bin/sh needs a different syntax than ksh (and bash, etc).
Use a more obvious and less error prone method. (This complicated
use of ${:+} was only used to build the su command when running as
a separate user, but could always cause problems.)
Problem noted by Hubert Feyrer in conjunction with /etc/rc.d/sshd.
2001-05-07 07:07:11 +00:00
lukem 8490f0b0c0 * provide wait_for_pids(), which spins until all the given pids don't exist
* run_rc_command():
	- add support for "poll", which by default, uses wait_for_pids() on
	  the list of matching processes
	- in the "restart" case, call "poll" between "stop" and "start"

this fixes the situation where certain services (e.g, amd, squid) would
take a bit longer to shutdown after receiving the kill signal to shutdown,
and "/etc/rc.d/foo restart" would fail in the `start' phase.
2001-04-18 01:31:40 +00:00
lukem f6a33791bb clarify that ${name}_groups is comma separated 2001-04-06 06:48:35 +00:00
atatat 2811b1707a Provide the capability of storing backups via RCS instead of just a
"current" and a "last" (which is useless if you wanna know what you
changed last week).  Set the default to on.
2001-04-04 03:17:19 +00:00
lukem c47a806047 various speed-ups (and related work):
- only load rc.conf if $_rc_conf_loaded is not set
- use case instead of if for various string comparisons
- print the date at the start of the boot as well as at the end
- if $rc_fast_and_loose is set, always run the rc.d scripts in the
  current shell rather than in a subshell. this is not on by default
  because it's potentially dangerous (a rogue command could terminate
  the boot), but it is provided as an optional speedup for people
  with slow machines that have an expensive fork
2001-02-28 16:49:18 +00:00
lukem be9b3eeabc * always run `status'; i.e, ignore the setting of $rcvar just like `rcvar' does.
* don't barf if `force' is used and $rcvar isn't set by the script
* only do the guts of `restart' once, by setting _rc_restart_done after the
  first run through. this stops scripts which call run_rc_command more than
  once (such as nfslocking) from doing the ``stop everything/start everything''
  sequence n times.
2000-11-17 03:47:43 +00:00
lukem fa16fd6f70 when doing `status', return non-zero if the program isn't running.
request by thorpej.
2000-11-06 00:08:30 +00:00
lukem 9046e7c099 when running `forcerestart', call the underlying `stop' and `start'
with the `force' prefix as well
2000-11-05 23:48:14 +00:00
lukem 0c70e530af use ${foo##*/} instead of `basename $foo`. as suggested (with minor variation)
by Toru Nishimura <nisimura@itc.aist-nara.ac.jp>
2000-10-07 07:36:56 +00:00
lukem 60d3ee1b34 remove unnecessary leading `$' on warnings printed for $required_dirs
and $required_files.
2000-10-01 10:10:18 +00:00
lukem bd11504cb2 - only perform the checkyesno on the variable named in $rcvar (rather than
implicitly using $name if $rcvar isn't set), and always perform this check,
  even when using start_cmd (et al).
  this check is performed before the pidcmd
  is run, speeding up scripts that weren't going to be run anyway.
  this should speed up booting slow systems.

- take advantage of the above and remove
	start_precmd="checkyesno foo"
  in scripts that use start_cmd.

- explicitly set rcvar=foo in the rc.d/foo scripts which have an equivalent
  rc.conf entry

- fix `rcvar' and `restart' when $rcvar isn't set.
  these above changes fix PR [bin/11027].

- when doing `force*', ignore the return value of *_precmd.
  this fixes PR [bin/10781].

- rename what sysdb provides from `databases' to `sysdb', to reflect
  the name of the script.

- improve the comments in rc.subr
2000-09-19 13:04:38 +00:00
lukem a96d29c7e3 support ${name}_nice even when using ${name}_chroot. per discussion with mrg... 2000-08-19 08:47:43 +00:00
lukem 0847f3e3f5 add support for ${name}_chroot, which chroot(8)s before running the command.
allow changing the user credentials to ${name}_user, ${name}_group,
and ${name}_groups as part of this. if ${name}_chroot is used, the following
variables won't work: ${name}_chdir and ${name}_nice.
[requested by mrg; whipped up in a few minutes on his terminal :-]
2000-08-17 11:07:10 +00:00
lukem acae4fe558 in err() and warn() put a : between the ERROR/WARNING label and the message 2000-07-20 23:12:44 +00:00
fvdl 5b8623bec6 Add and rc.conf.d directory. If a config file for command X exists
(/etc/rc.conf.d/X), then it is sourced in addition of /etc/rc.conf

This means that the base system will still use rc.conf, but that
3rd party scripts can use rc.conf.d
2000-06-09 14:27:57 +00:00
lukem 2c25ae21eb Implement load_rc_config(), which takes the config name as an argument.
Currently this just loads /etc/rc.conf, but this will make it easier
for us and users to modify the config mechanism without modifying all
of /etc/rc.d/*.
2000-05-13 08:23:45 +00:00
lukem eabbaa2f0c implement three new variables for run_rc_command:
- ${name}_chdir	directory to cd to before running ${command}
    - ${name}_nice	nice level to run ${command} at
    - ${name}_user	user to run ${command} as

based on [misc/9954] by Dave Sainty <dave@dtsp.co.nz>, except that it works :)
2000-05-13 03:07:17 +00:00
lukem c8ddd6124a - prefix some more local variables with `_' (when you have a convention,
stick to it :-)
- simplify run_rc_script (no need to support fast* or force* here...)
- clarify some comments
2000-04-30 13:16:47 +00:00
lukem 0c2e1a2b7e change run_rc_command() to take the list of extra commands supported
from a variable ($extra_commands) as opposed to from $2-* on the
argument list. it's cleaner; and allows for the possibility of
multiple command arguments being passed to run_rc_command() in the
future.
2000-04-30 12:19:07 +00:00
lukem 0c5f67f0ac in check_pidfile and check_process, also match "(" + `basename prog` + ")" .
noted by veego@
2000-04-28 01:40:09 +00:00
lukem 0716b4f382 don't bother checking rc_configured each time run_rc_command executes; once in /etc/rc is enough 2000-04-26 15:06:46 +00:00
lukem caa2beb10e revert previous; the fast-start functionality already existed, and
works at multi-user boot. (starting /etc/rc after single user boot
doesn't exhibit this fast start behaviour).
2000-04-22 03:01:22 +00:00
simonb 5e6480feca Add an "rc_fastboot" variable check in rc.subr, that if set adds
"fast" to the start of the run_rc_command arg.

/etc/rc calls each rc.d script with rc_fastboot=yes so that rc.subr
aware scripts to use "faststart" to skip the process running check.
2000-04-19 04:26:22 +00:00
lukem 6096ea59cd * add:
check_pidfile	parse a pidfile for a pid, checking that the
			process is running, and print the matching pid
    check_process	print a list of running pids that match the procname
    run_rc_command	kitchen sink function to simplify creation of
			rc.d scripts
    run_rc_script	invoke an rc.d script appropriately
    rc_usage		print a usage string for an rc.d script
    err			similar to err(3)
    warn		similar to warn(3)
* add copyright
* remove islocalfs(); nothing uses it
2000-03-10 11:39:27 +00:00
drochner db20439533 repair diskless startup: "netstart" needs "sysctl" and "awk" now, thus
"/usr" must be mounted. mount_critical_filesystems() didn't mount it,
even if listed in "critical_filesystems", if it is nfs.
Solution: introduce another rc.conf variable
"critical_filesystems_beforenet" which contains filesystems to be mounted
before "netstart".
Perhaps "netstart" should be split up, but this would make things even
more complex...
1999-07-07 21:24:56 +00:00
nathanw 5e40cf296d Move the knowledge that /usr and /var should be mounted early from
rc.subr to the default rc.conf.
While this is no longer necessary to supress noise,
it increases the clarity of the situation and removes
one more bit of what should be adjustable configuration
from scripts that site admins shouldn't have to edit.

Addresses PRs misc/7406 and (partially) bin/7491.
1999-04-28 23:32:29 +00:00
cjs 1a3bfc2c1b When checking local status, jJust ignore not-found filesystems, rather
than printing an error, just as we do when we try to mount it.
1999-04-13 02:15:49 +00:00
cjs 668efbbcec Change mount_critical_filesystems() so that if given an argument
of "local" it will not mount filesystem types it identifies as
network file systems (currently just nfs). Call the function twice,
before networking starts with arg "local", after networking starts
with arg "network". Remove critfs_require_network as is now redundant.
1999-04-01 03:58:44 +00:00
mellon 8572695519 - Move critical filesystem mounting code into a shell function and put
that in rc.subr.
- Support critfs_require_network rc.conf variable.
1999-03-24 18:59:47 +00:00
lukem 77eeaedfe8 improve description comment 1998-02-28 22:56:11 +00:00
lukem 79201de07b * add synonyms for "yes": "true", "on", and "1"
* add synonyms for "no": "false", "off", and "0"
* remove unnecessary trailing semicolons (this is sh, not C)
1998-02-28 22:54:02 +00:00
lukem 6b18196f4c convert 'if .. else .. fi' into a 'case .. esac', and allow for any
uppercase/lowercase variations of 'yes' and 'no'. fixes [misc/4887]
sent in by "John F. Woods" <jfw@jfwhome.funhouse.com>
1998-01-26 04:36:26 +00:00
cjs ebb2301a41 Prune unused function. 1997-08-30 03:34:29 +00:00
cjs c3b0e18db8 Split rc.conf variables for starting programs into two: an on/off
switch and a set of flags. Get rid of DEFAULT flags entirely. Print
warnings if on/off switches are not set, or are set incorrectly.
Add a shell function to simplify this on/off switch testing.
1997-08-29 02:24:04 +00:00