Commit Graph

143 Commits

Author SHA1 Message Date
adrian
1f2ea82d25 Enforce consistent limits of daemons run from rc.subr:
* Allow the user to configure the login class to use in rc.conf
  by using {daemon}_login_class, which;
* Use the daemon class by default;
* .. and then use 'limits' to set the login class so it works both
  via init at startup (which runs this in 'daemon' class) and via
  whichever root environment (eg command line, other daemons, etc.)

Reviewed by:	dteske
Differential Revision:	https://reviews.freebsd.org/D3630
2015-09-27 04:03:11 +00:00
ngie
b62835a630 Update the comment about handling old-style rc(5) scripts
The old-style (*.sh) scripts in /etc/rc.d are explicitly ignored, whereas
other scripts ending in .sh are permitted
2015-08-05 03:03:57 +00:00
jilles
5c500bdd46 rc.subr: Allow rc.conf.d with multi-directory local_startup.
I also changed ${...%*/rc.d} to ${...%/rc.d} since the shortest match always
has an empty string for the asterisk.

PR:		201641
Submitted by:	Jamie Landeg-Jones (original version)
MFC after:	1 week
2015-08-01 22:00:25 +00:00
des
48aea3a5cf Allow load_rc_config to be called without a service name.
MFC after:	1 week
2014-12-01 12:17:42 +00:00
hrs
106faa1462 Add env and prepend to _rc_namevarlist. 2014-10-12 02:42:36 +00:00
hrs
77616d41a2 Add ${name}_env and ${name}_prepend. ${name}_env is an argument list which
will be passed to env(1).  ${name}_prepend is simply prepended to the command
line for $command.
2014-10-11 23:49:27 +00:00
hrs
fd6a7f8ca9 Resurrect set_rcvar() as a function to define a rc.conf variable.
It defines a variable and its default value in load_rc_config() just after
rc.conf is loaded.  "rcvar" command shows the current and the default values.

This is an attempt to solve a problem that rc.d scripts from third-party
software do not have entries in /etc/defaults/rc.conf.  The fact that
load_rc_config() reads rc.conf only once and /etc/rc invokes the function
before running rc.d scripts made developers confused for a long time because
load_rc_config() just before run_rc_command() in each rc.d script overrides
variables only when the script is directly invoked, not from /etc/rc.

Variables defined in set_rcvar are always set in load_rc_config() after
loading rc.conf.  An rc.d script can now be written in a self-contained
manner regarding the related variables as follows:

---
name=foo
rcvar=foo_enable

set_rcvar foo_enable	YES	"Enable $name"
set_rcvar foo_flags	"-s"	"Flags to $name"

...

load_rc_config $name
run_rc_command "$@"
---
2014-10-02 01:16:30 +00:00
hrs
de7f3e3c40 Do not set net.inet.ip.{sourceroute,accept_sourceroute} in a vnet jail.
The following warnings were displayed:

 sysctl: net.inet.ip.sourceroute=0: Operation not permitted
 sysctl: net.inet.ip.accept_sourceroute=0: Operation not permitted
2014-09-13 18:54:15 +00:00
hrs
2246480926 - Use $local_startup to load rc.conf.d/* scripts.
- Document support of rc.conf.d/<dir>/* introduced in r270392.

Discussed with:	bapt
2014-08-27 09:19:22 +00:00
bapt
56ed7afe46 Allow to configure services from ${LOCALBASE}/etc/rc.conf.d
Reviewed by:	bdrewery
MFC after:	1 week
Relnotes:	yes
2014-08-26 22:33:34 +00:00
des
5c129e9d8b Add support for /etc/rc.conf.d/<service> subdirectories. This is
particularly useful for services such as "network" (netif) where each
interface can now have its own separate configuration file.
Add /etc/rc.conf.d to the mtree file so it is always present.

MFC after:	3 days
2014-08-23 10:51:37 +00:00
dteske
6b8b017a4a Loosen the processing of *_IF_aliasN vars to be less strict. Previously,
the first alias had to be _alias0 and processing stopped at the first non-
defined variable (preventing gaps). Allowing gaps gives the administrator
the ability to group aliases in an adhoc manner and also lifts the
requirement to renumber aliases simply to comment-out an existing one.
Aliases are processed in numerical ascending order.

Discussed on:	-rc
MFC after:	1 week
2014-04-07 22:40:29 +00:00
hrs
f8b617128e - Update rc.d/jail to use a jail(8) configuration file instead of
command line options.  The "jail_<jname>_*" rc.conf(5) variables for
  per-jail configuration are automatically converted to
  /var/run/jail.<jname>.conf before the jail(8) utility is invoked.
  This is transparently backward compatible.

- Fix a minor bug in jail(8) which prevented it from returning false
  when jail -r failed.

Approved by:	re (glebius)
2013-10-10 09:32:27 +00:00
des
b1d537a11d Add a setup script for unbound(8) called local-unbound-setup. It
generates a configuration suitable for running unbound as a caching
forwarding resolver, and configures resolvconf(8) to update unbound's
list of forwarders in addition to /etc/resolv.conf.  The initial list
is taken from the existing resolv.conf, which is rewritten to point to
localhost.  Alternatively, a list of forwarders can be provided on the
command line.

To assist this script, add an rc.subr command called "enabled" which
does nothing except return 0 if the service is enabled and 1 if it is
not, without going through the usual checks.  We should consider doing
the same for "status", which is currently pointless.

Add an rc script for unbound, called local_unbound.  If there is no
configuration file, the rc script runs local-unbound-setup to generate
one.

Note that these scripts place the unbound configuration files in
/var/unbound rather than /etc/unbound.  This is necessary so that
unbound can reload its configuration while chrooted.  We should
probably provide symlinks in /etc.

Approved by:	re (blanket)
2013-09-23 04:36:51 +00:00
avg
08dd09547b rc.subr: disabling globbing while processing devfs rules
The rules themselves typically have shell-like patterns and it is
incorrect when they get replaced with matching filesystem entries.

Shell magic by:	jilles
MFC after:	2 weeks
2013-03-28 08:13:52 +00:00
smh
5f83c0049f Allow perl scripts to be used in rc.d scripts
PR:		conf/117027
Reviewed by:	pjd (mentor)
Approved by:	hrs
MFC after:	2 weeks
2013-01-10 11:08:22 +00:00
hrs
f5a468d92e Do not put "already running" message when rc_quiet=yes.
PR:	bin/165477
2012-11-20 04:45:04 +00:00
hrs
c8437905c2 Add check_namevarlist() to check if ${name}_var is reserved in rc.subr or not. 2012-11-17 18:11:10 +00:00
hrs
5f66363588 Add setfib(1) support for services as <name>_fib in rc.conf. 2012-10-27 19:09:09 +00:00
crees
ae492a84ba Allow spaces in _chroot
Noticed by:	adj (IRC/#bsdports)
Approved by:	hrs
MFC after:	1 month
2012-10-27 17:43:30 +00:00
kevlo
c587547ed2 Whitespace nit 2012-07-13 06:46:09 +00:00
delphij
ec9c1986ab Put the signal trap output to standard error instead of standard output.
Without this change, pressing ^T could result in rc.d script putting
junk strings like:

	Script <filename> running

in configuration files when redirecting standard output to these files.

MFC after:	2 weeks
2012-02-18 00:46:18 +00:00
dougb
5abebddb43 Fix various issues with the NFS and RPC related scripts:
1. Add new functionality to the force_depend method to incorporate the
   tests for whether the service is enabled and/or already running.
2. Add a new option to bypass checking only that the service is enabled
   at boot time, and always check if it is running.
3. Use this new functionality to greatly simplify the rc.d scripts that
   use force_depend.
4. Add a force_depend for statd in lockd
5. Remove the check that either nfs_server or nfs_client is _enable'd
   from statd and lockd. This was always overkill, and prevented using
   the {one|force}start options, as well as stop'ing on the command line.
6. The yp* scripts had some of their arguments in various weird orders.
   Bring them into line with the model.
7. If mountd fails to create /var/db/mountdtab, err out.

Ideas, suggestions, and/or review from delphij and jilles.
Pointy hats are completely my responsibility however.
2012-02-14 10:51:24 +00:00
dougb
0db22183d9 If we're booting there is no need to waste time determining if the service
is running or not.

PR:		conf/150752
Submitted by:	YIN Xiaofeng <75394094@qq.com>
2012-01-20 10:31:27 +00:00
dougb
9d0dd43b7c Now that its callers have been udpated, remove set_rcvar().
The concept of set_rcvar() was nice in theory, but the forks
it creates are a drag on the startup process, which is especially
noticeable on slower systems, such as embedded ones.
2012-01-14 08:59:02 +00:00
rea
c797a8475b rc.d: document 'quiet' prefix and fix dhclient/devd interaction
Document the current semantics of the 'quiet' command prefix
in the rc.subr(8).

Fix dhclient rc.d script: it should not call err() for
non-DHCP-enabled interface when it is called from devd, because the
latter just blindly calls 'service dhclient quietstart' on each "link
up" event.

Since the 'quietstart' will silence the message "Cannot 'start' <foo>.
Set <foo>_enable to YES in /etc/rc.conf or use 'onestart' instead of
'start'." and running dhclient on the non-DHCP-enabled interface is
the same thing as running the service <foo> without <foo>_enable set,
such modification is in sync with the current semantics of the 'quiet'
prefix.

Approved by: glebius
Reviewed by: freebsd-rc list
MFC after:	2 weeks
2012-01-12 06:48:11 +00:00
dougb
12b863c4be There is no longer a need to abstract ${rcvar_manpage} as we are not
attempting to maintain compatibility with NetBSD for some years now.
2012-01-08 20:25:29 +00:00
uqs
a6f0acec24 Spelling fixes for etc/ 2012-01-07 16:10:32 +00:00
jilles
f1ed8a086f rc.d: Eliminate some unnecessary non-POSIX constructs:
* set - ...
 * empty braces
 * ^ in character class
2011-11-08 23:02:32 +00:00
jilles
7747419ea7 rc.subr: Make sure all functions are under if [ -z "${_rc_subr_loaded}" ]. 2011-06-19 15:23:32 +00:00
jilles
9440cb3b03 rc.subr: Eliminate a fork from check_kern_features, like r223227.
MFC after:	2 weeks
2011-06-19 11:42:48 +00:00
jilles
784b156550 rc.subr: Eliminate about 100 forks from the boot sequence.
With the current sh, placing eval in a command substitution always results
in a fork(), even if it is the only command and only executes a single
simple command. Therefore, avoid it where it can be avoided easily.

Side effect: values starting with a hyphen and all whitespace are preserved.
The values are defaults and names for rc.conf variables and messages to be
given about obsolete ones.

MFC after:	2 weeks
2011-06-18 11:05:30 +00:00
hrs
3a786b5d67 Add a helper function to check kern.features.* sysctls.
Discussed with:	dougb
2011-06-11 21:40:37 +00:00
dougb
867006828a As previously advertised, remove the error message for enable_quotas
prior to 9.0-RELEASE.

This change should not be MFC'ed.
2011-04-23 17:37:14 +00:00
dougb
e90e1b5c2c Improve the error handling for the new get_pidfile_from_conf() 2011-04-23 05:24:17 +00:00
dougb
d05cc95927 Introduce to rc.subr get_pidfile_from_conf(). It does just what it sounds
like, determines the path to a pid file as it is specified in a conf file.

Use the new feature for rc.d/named and rc.d/devd, the 2 services in the
base that list their pid files in their conf files.

Remove the now-obsolete named_pidfile, and warn users if they have it set.
2011-04-23 04:26:31 +00:00
dougb
91c215d2a6 The change in r206686 to allow the stop argument to work for a service
that is running even though not _enable'd had an annoying side effect.
If the service was already started at boot time by another means when
the related script came around again in rcorder it would start again,
regardless of _enable, because there was a valid pid. [1]

So, split the test into 2 parts, one for (!rcvar && !stop), and one
for (stop && !valid_pid). This preserves the behavior from r206686
while preventing the undesired side effect.

PR:		conf/156427 [1]
Submitted by:	Eugene Grosbein <eugen@grosbein.pp.ru> [1]
2011-04-17 22:31:36 +00:00
dougb
66c4acf134 Revert r219578 2011-03-13 16:27:36 +00:00
dougb
1a54928233 Use the allexport option in load_rc_config() in order to avoid having
to repeatedly read the conf files. Depending on what is enabled the
files are being read anywhere from 15, 30, or more times currently.
By loading the values in the environment this is reduced to 1, with
perhaps a couple more, again depending on what is enabled.

The speed-up for boot and shutdown is negligible when rc.conf is
on local disk, noticable when accessing files over NFS, and dramatic
when pulling rc.conf values from a database.

This change also includes a minor optimization to the conditional
for $_rc_conf_loaded.
2011-03-12 21:13:08 +00:00
jh
89c67ba43c Warn if rules could not be read from a ruleset file. Now at least
something gets logged if the file has syntax errors.

PR:		conf/91342
Silence on:	freebsd-rc
2011-01-07 10:59:22 +00:00
dougb
a8c3aca2c4 Fix silly typo on my part (s/quotas_enable/quota_enable/)
Submitted by:	ed
2010-08-14 22:28:07 +00:00
dougb
50862398d5 Give people some warning before removing enable_quotas 2010-08-14 18:58:05 +00:00
dougb
01137d9339 If a service is running, make 'stop' work even if ${name}_enable
is not set.

PR:		conf/130414
Submitted by:	Dominic Fandrey <kamikaze@bsdforen.de>
Reviewed by:	freebsd-rc@
2010-04-15 21:18:24 +00:00
dougb
e9fbee49d7 In wait_for_pids(), pwait(1) can return when the process exits, but
still exists as a zombie. The 'kill -0' test in this function can
therefore return true even if the process isn't actually running.
This could lead to wait_for_pids() printing an endless string of the
pid number until the zombie finally exits.

Solve this problem by moving the sleep up to after the 'kill -0' test, but
only after we've run through the function once already. In the common case
(only one pid in the list) this will always do the right thing. On the rare
occasion that there is more than one pid in the list this will sleep 1
second per zombie process which will allow that process, and any other
in the list a chance to exit.

While I'm here, local'ize the variables that this function uses.
2010-04-06 05:20:46 +00:00
emaste
32a77ae063 Convert to 2-clause license, from NetBSD rc.subr r1.70.
Submitted by:	Alex Kozlov
Obtained from:	NetBSD
2010-01-26 13:23:31 +00:00
emaste
5bc56187b3 Remove vestigial NetBSD compatibility shim. 2010-01-25 20:59:04 +00:00
dougb
fbaf5bc859 Update the comments about files ending in .sh
Prompted by:	Alex Kozlov <spam@rm-rf.kiev.ua>
2009-12-27 06:27:09 +00:00
dougb
332c778a14 Delete some trailing whitespace 2009-12-27 06:25:03 +00:00
jilles
6cf4c85327 rc.subr: Use pwait in wait_for_pids.
This waits for the requested process(es) to terminate, rather than polling
with an interval of 2 seconds.

If pwait is not available, the old method is used.

PR:		conf/132766
Reviewed by:	dougb
2009-12-21 22:16:07 +00:00
ed
caa1413c37 Fix qouting in a comment, to make it look more consistent
Submitted by:	Jille Timmermans <jille quis cx>
MFC after:	1 week
2009-10-18 19:51:06 +00:00