Subject: Re: rc local [UPDATE]
To: None <tech-userlevel@NetBSD.org>
From: None <tlaronde@polynum.com>
List: tech-userlevel
Date: 03/19/2007 21:25:04
--tThc/1wpZn/ma/RB
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
I have updated the proposal according to concerns raised:
- by Greg Troxel for the lack of consistency: no pkgsrc
handling;
- by Joerg Sonnenberger for the handling of two services sharing
the same basename.
Hence I have extended the logic to add:
/etc/rc.d.pkgsrc/
/etc/rc.defaults.pkgsrc
and have added a check in /etc/security for identical basenames (since,
if files in /etc/rc.d/* are left alone mtree(8) will not protest, but
with a single variable set in /etc/rc.conf several scripts can be run
(this may be a security concern; this may be also an administration
decision---this is an option that may be sensible in some cases).
I "reply" to my previous post so that people can read only the diff.
As usual, this is only FWIW. But the paragraph on a possible pkgsrc
policy can be, IMHO, of some interest to others as well as the Security
added one (perhaps not everybody knows about the `nostart' keyword).
On Sun, Mar 18, 2007 at 03:08:14PM +0100, tlaronde@polynum.com wrote:
> Hello,
>
> Here is a set of patches to modify slightly rc framework local
> additions.
>
> Rationale
> ---------
>
> The rc(8) framework offers several facilities, two important ones being
> to launch services in topological order (via rcorder(8)), and to shut
> down properly these services in reverse order when shutdown(8) is
> invoked.
>
> At the moment, the comments in /etc/rc.local do not emphasize the fact
> that local daemons launched via this file will be launched when
> /etc/rc.d/local is called with the start action, that is not mandatorily
> at the better time for these daemons.
> Furthermore, the sibling script /etc/rc.shutdown.local is not
> advertised, while this is the script invoked when /etc/rc.d/local is
> called with the stop action (i.e., for example, by shutdown(8)). It is
> hence the natural place to put clean stopping actions for services
> launched in /etc/rc.local. But a better practice for daemons is to have
> rc.d compliant scripts.
>
> One of the strength of the actual NetBSD etc/ organization is that it
> insulates NetBSD provided stuff from local overwrites and additions.
> /etc/rc.conf shall lists only the specific for this very site, the diff
> from the defaults set in /etc/defaults/rc.conf.
>
> If one wants to modify the behavior of a NetBSD provided service (i.e. a
> script put in /etc/rc.d/), the /etc/rc.conf.d/ is provided.
>
> Hence putting additional services in /etc/rc.d/ is perhaps not the best
> maintenance option:
> 1) postinstall(8) may suppress scripts in /etc/rc.d/ or an upgrade
> may add scripts there. What if a local addition happens to provide
> such a named script?
> 2) the actual framework provides a great maintenance principle: the
> "coup d'oeil": in one glance, looking at dedicated places, one
> easily knows what are the very specifics of this site, the diffs from
> a default install. Putting local additions in /etc/rc.d/ makes it
> hard to find, after some time, what is a default provided by NetBSD
> and a local addition. It does not scale.
>
> Hence putting local added daemons in a dedicated directory is cleaner,
> and actually straightforward: a one line diff to rc(8).
Allowing too the pkgsrc framework to have a dedicated dir in /etc to
store the provided service files, and an uniq file to document the
settings for the added packages, à la /etc/defaults/rc.conf, would ease
the administration provided that:
- pkgsrc is the only one to handle the /etc/rc.defaults.pkgsrc and
/etc/rc.d.pkgsrc/: local overwrites and local decisions take place
in the local dedicated places
- by default, all the pkgsrc installed files have the:
# KEYWORD: nostart
hence rcorder(8) as called by rc(8) will skip these files (with the
`nostart' keyword files are parsed by rcorder(8) but not returned so
no further action is done on these)
- furthermore, the default settings for the service is: service=NO
to enable a pkgsrc service, the administrator has to:
- alternatively, remove the `nostart' keyword from the
/etc/rc.d.pkgsrc/, or copy it in /etc/rc.d.local (read, and
adjust removing the `nostart' keyword
- set service=YES in /etc/rc.conf
>
> Putting the maintenance reflexion a little further, one sees that if the
> NetBSD provided services defaults are clearly documented in
> /etc/defaults/rc.conf, local additions will not have that, or these
> defaults will end in /etc/rc.conf, putting a lot of verbosity and
> masking the real, raw diffs: if one needs to start grepping all around
> to find what is launched and what is not, we loose the "coup d'oeil"
> facility.
>
> Furthermore, say in a network (in a domain), an administrator may have
> configuration habits. It would be simpler to have in /etc/rc.conf only
> what makes this very node different from:
> a) the default NetBSD;
> b) the default domain configuration.
c) for documentation only, pkgsrc adds the relevant information for
an added service in /etc/rc.defaults.pkgsrc
>
> Hence the introduction of /etc/rc.defaults.local that shall document, à
> la /etc/defaults/rc.conf, the setting of local added services in
> /etc/rc.d.local/, and provide a domain wide default configuration.
and the introduction of /etc/rc.defaults.pkgsrc and /etc/rc.d.pkgsrc/
for pkgsrc framework (the addition of a package by pkgsrc shall be a
`platonic' decision: no further action is done by default, and the
administrator is the only one to decide, finally, to enable or not the
added service).
>
> Tree and namespace principles
> -----------------------------
>
> Joerg Sonnenberger and Thor Lancelot Simon have rightfully reacted
> against some of my early naming scheme proposals (I do not claim that
> they have voiced for or against this proposal; I just give them the
> credit that they did not find the naming scheme correct).
>
> So here are the principles adopted:
>
> 1) All local "hooks" are visible at the /etc/ root, whether files or
> directories;
>
> 2) All names are built appending ".local" to them, since the emphasis
2) All names are built appending ".local" or ".pkgsrc" to them,
since the emphasis
> must be put not on the nature of a link (a file or a directory '.d') but
> on the fact that these are local versions of standard facilities.
> There is also prior art since the script sourced by /etc/rc.d/local
> stop is called "/etc/rc.shutdown.local"
>
> Added files and directories
> ---------------------------
>
/etc/rc.d.pkgsrc # directory for pkgsrc added services
/etc/rc.defaults.pkgsrc # documentation of the settings for the added
# services, the default being NO.
> /etc/rc.d.local # directory for local added services
> /etc/rc.defaults.local # domain wide variables setting à la
> # /etc/defaults/rc.conf. Sourced, if readable,
> # in /etc/rc.conf.
> /etc/rc.shutdown.local # missing template for script sourced when
> # /etc/rc.d/local stop
>
Security
--------
rcorder(8) is invoked by rc(8) with the skip `nostart' keyword files
argument. Hence, if all the files found in the directories are
processed, the `nostart' are not returned---this speed up a bit, or at
least does not slow down even more the processing time for added pkgsrc
scripts.
Since the files/scripts are returned by their pathnames, a single
variable representing the basename of a service can be used to run
several scripts (several pathnames).
This may be or not a security concern (an administrator can decide that
no pkgsrc default script will ever be run, and that he puts all the
scripts (customized copies) in /etc/rc.d.local/, using the original
service name (example: /etc/rc.d.pkgsrc/pgsql has the nostart keyword;
a /etc/rc.d.local.pgsql exists and /etc/rc.conf has pgsql=YES).
But since there may be a problem, /etc/security has been modified to
deliver the information about duplicate basenames of _runnable_ services
(skip the nostart ones).
> Caveats
> -------
>
> I have diffed against 3.1. This should not cause problem except
> for rc.conf(5) that has, obviously, changed in head. But should applies
> nonetheless.
>
> I am not an english native speaker so, assuming that my proposal makes
> some sense, the comments in the scripts and the man pages modifications
> should be reviewed and enhanced.
>
> Thanks for your time.
> --
> Thierry Laronde (Alceste) <tlaronde +AT+ polynum +dot+ com>
> http://www.kergis.com/
> Key fingerprint = 0FF7 E906 FBAF FE95 FD89 250D 52B1 AE95 6006 F40C
> diff -ru /usr/src/distrib/sets/lists/base/mi ./distrib/sets/lists/base/mi
> --- /usr/src/distrib/sets/lists/base/mi 2006-11-27 15:25:18.000000000 +0100
> +++ ./distrib/sets/lists/base/mi 2007-03-18 13:21:34.000000000 +0100
> @@ -89,6 +89,7 @@
> ./etc/release etc-sys-etc
> ./etc/rc.conf.d base-sys-root
> ./etc/rc.d base-sys-root
> +./etc/rc.d.local base-sys-root
> ./etc/skel base-sys-root
> ./etc/sliphome base-slip-root
> ./etc/ssh base-sys-root
> diff -ru /usr/src/etc/changelist ./etc/changelist
> --- /usr/src/etc/changelist 2001-10-13 16:22:11.000000000 +0200
> +++ ./etc/changelist 2007-03-18 13:19:30.000000000 +0100
> @@ -10,4 +10,5 @@
> # /etc/raid*.conf
> # /etc/rc.d/*
> # /etc/rc.conf.d/*
> +# /etc/rc.d.local/*
> #
> diff -ru /usr/src/etc/mtree/NetBSD.dist ./etc/mtree/NetBSD.dist
> --- /usr/src/etc/mtree/NetBSD.dist 2006-05-26 14:17:03.000000000 +0200
> +++ ./etc/mtree/NetBSD.dist 2007-03-18 13:20:24.000000000 +0100
> @@ -42,6 +42,7 @@
> ./etc/racoon
> ./etc/rc.conf.d
> ./etc/rc.d
> +./etc/rc.d.local
> ./etc/skel
> ./etc/sliphome
> ./etc/ssh
> diff -ru /usr/src/etc/rc ./etc/rc
> --- /usr/src/etc/rc 2003-01-04 16:27:43.000000000 +0100
> +++ ./etc/rc 2007-03-17 20:25:33.000000000 +0100
> @@ -37,7 +37,8 @@
>
> date
>
> -files=$(rcorder -s nostart ${rc_rcorder_flags} /etc/rc.d/*)
> +files=$(rcorder -s nostart ${rc_rcorder_flags} /etc/rc.d/* \
> + /etc/rc.d.local/*)
>
> for _rc_elem in $files; do
> run_rc_script $_rc_elem start
> diff -ru /usr/src/etc/rc.conf ./etc/rc.conf
> --- /usr/src/etc/rc.conf 2000-10-14 19:01:29.000000000 +0200
> +++ ./etc/rc.conf 2007-03-18 12:24:45.000000000 +0100
> @@ -13,9 +13,17 @@
> . /etc/defaults/rc.conf
> fi
>
> +# Load local domain wide defaults in from /etc/rc.defaults.local (if
> +# it's readable).
> +# These can be overridden too below.
> +#
> +if [ -r /etc/rc.defaults.local ]; then
> + . /etc/rc.defaults.local
> +fi
> +
> # If this is not set to YES, the system will drop into single-user mode.
> #
> rc_configured=NO
>
> -# Add local overrides below
> +# Add site specific overrides below
> #
> diff -ru /usr/src/etc/rc.local ./etc/rc.local
> --- /usr/src/etc/rc.local 2002-07-23 12:48:01.000000000 +0200
> +++ ./etc/rc.local 2007-03-18 12:20:10.000000000 +0100
> @@ -1,22 +1,43 @@
> -# $NetBSD: rc.local,v 1.30 2002/07/23 10:48:01 wennmach Exp $
> +# $Id$
> # originally from: @(#)rc.local 8.3 (Berkeley) 4/28/94
> #
> -# This file is (nearly) the last thing invoked by /etc/rc during a
> -# normal boot, via /etc/rc.d/local.
> +# This file is what is invoked by /etc/rc.d/local when given the start
> +# action.
> #
> -# It is intended to be edited locally to add site-specific boot-time
> -# actions, such as starting locally installed daemons.
> +# So actions declared here will take place in the boot process at the
> +# place assigned by rcorder(8) to /etc/rc.d/local, that is relatively
> +# late in the booting process.
> #
> -# An alternative option is to create site-specific /etc/rc.d scripts.
> +# It is intended to be edited locally to add site-specific user
> +# interface tuning, such as audio output etc. but is not limited to
> +# that.
> +#
> +# While you can add local daemons here, it is better practice to use
> +# the rc framework since, as mentioned above, this file will be treated
> +# at a time matching /etc/rc.d/local requisites, and this order may or
> +# may not match your daemons requisites.
> +# Furthermore, by placing rc compliant scripts in /etc/rc.d.local/,
> +# local services will be cleanly and in the correct order stopped by
> +# the rc framework when shutdown(8) is used.
> +#
> +# The sibling file /etc/rc.shutdown.local is what is invoked by
> +# etc/rc.d/local when given the stop action (this is the case when
> +# shutdown(8) is used). So if you have decided to launch specific
> +# services here, you might be interested in stopping them cleanly by
> +# adding the required actions in this file.
> #
>
> -echo -n 'Starting local daemons:'
> +echo -n 'Starting site specific user interface tuning:'
>
> -# Add your local daemons here.
> +# Add your tuning here
> #
>
> -#if [ -f /usr/pkg/etc/rc.d/apache ]; then
> -# /usr/pkg/etc/rc.d/apache start
> -#fi
> +# audio stuff
> +#audioctl -d /dev/sound0 -w play=44100,2,16,slinear_le
> +#mixerctl -w outputs.master=191,191
> +
> +# set font to vt220iso8x16 (latin1)
> +#for device in /dev/ttyE1 /dev/ttyE2 /dev/ttyE3 /dev/ttyE4; do
> +# wsconsctl -f $device -dw font=vt220iso8x16
> +#done
>
> -echo '.'
> diff -ru /usr/src/etc/security ./etc/security
> --- /usr/src/etc/security 2006-11-27 15:25:25.000000000 +0100
> +++ ./etc/security 2007-03-18 13:18:35.000000000 +0100
> @@ -901,11 +901,13 @@
> # /etc/raid*.conf
> # /etc/rc.d/*
> # /etc/rc.conf.d/*
> + # /etc/rc.d.local/*
> #
> echo "/etc/ifconfig.*"
> echo "/etc/raid*.conf"
> echo "/etc/rc.d/*"
> echo "/etc/rc.conf.d/*"
> + echo "/etc/rc.d.local/*"
>
> # Add /etc/changelist
> #
> diff -ru /usr/src/share/man/man5/rc.conf.5 ./share/man/man5/rc.conf.5
> --- /usr/src/share/man/man5/rc.conf.5 2006-11-27 15:29:56.000000000 +0100
> +++ ./share/man/man5/rc.conf.5 2007-03-18 14:08:48.000000000 +0100
> @@ -32,7 +32,7 @@
> .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> .\" SUCH DAMAGE.
> .\"
> -.Dd March 27, 2006
> +.Dd March 18, 2007
> .Dt RC.CONF 5
> .Os
> .Sh NAME
> @@ -61,7 +61,7 @@
> variables that may be set, the values to which each may be set,
> a brief description of what each variable does, and a reference to
> relevant manual pages.
> -Third party packages may test for additional variables.
> +Third party packages may test for additional variables.
> .Pp
> Most variables are one of two types: enabling variables or flags
> variables.
> @@ -87,9 +87,19 @@
> reads
> .Pa /etc/defaults/rc.conf
> (if it is readable)
> -to obtain default values for various variables, and the end-user
> +to obtain default values for various variables and
> +.Pa /etc/rc.defaults.local
> +(if it is readable)
> +for domain wide local various variables (including, probably, the ones
> +used for services put in
> +.Pa /etc/rc.d.local/
> +) and the end-user
> may override these by appending appropriate entries to the end of
> .Nm .
> +Variables set in
> +.Pa /etc/rc.defaults.local
> +shall respect the overall rc framework, but only the standard
> +configuration is discussed below.
> .Pp
> .Xr rc.d 8
> scripts that use
> diff -ru /usr/src/share/man/man8/rc.8 ./share/man/man8/rc.8
> --- /usr/src/share/man/man8/rc.8 2004-01-06 15:46:11.000000000 +0100
> +++ ./share/man/man8/rc.8 2007-03-18 14:14:45.000000000 +0100
> @@ -34,18 +34,20 @@
> .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
> .\" POSSIBILITY OF SUCH DAMAGE.
> .\"
> -.Dd January 6, 2004
> +.Dd March 18, 2006
> .Dt RC 8
> .Os
> .Sh NAME
> .Nm rc ,
> .Nm rc.shutdown ,
> -.Nm rc.d/
> +.Nm rc.d/,
> +.Nm rc.d.local/
> .Nd startup and shutdown scripts
> .Sh SYNOPSIS
> .Nm rc
> .Nm rc.shutdown
> .Nm rc.d/
> +.Nm rc.d.local/
> .Sh DESCRIPTION
> .Nm
> is the command script which controls the startup of various services,
> @@ -68,8 +70,13 @@
> .Nm rc.d/
> is the directory which contains various
> .Xr sh 1
> -scripts, one for each service,
> -which are called by
> +scripts, one for each standard provided service,
> +and
> +.Nm rc.d.local/
> +is the directory which contains various
> +.Xr sh 1
> +scripts for local added services,
> +which are all called by
> .Nm
> at startup,
> .Nm rc.shutdown
> @@ -91,6 +98,8 @@
> .Sy ( rc_fast=yes ) ,
> which prevents the
> .Nm rc.d
> +or
> +.Nm rc.d.local
> scripts from performing the check for already running processes
> (thus speeding up the boot process).
> This
> @@ -103,6 +112,9 @@
> .Xr rcorder 8
> to order the files in
> .Pa /etc/rc.d/
> +and
> +.Pa /etc/rc.d.local/
> +
> that do not have a
> .Dq nostart
> keyword (refer to
> @@ -135,6 +147,8 @@
> .Xr rcorder 8
> to order the files in
> .Pa /etc/rc.d/
> +and
> +.Pa /etc/rc.d.local/
> that have a
> .Dq shutdown
> keyword (refer to
> @@ -231,6 +245,9 @@
> Note that this should be used extremely sparingly!
> .El
> .Pp
> +The following description applies as well to scripts put in
> +.Pa /etc/rc.d.local/ .
> +.Pp
> Each script should contain
> .Xr rcorder 8
> keywords, especially an appropriate
> @@ -307,7 +324,9 @@
> Startup script called by
> .Xr init 8 .
> .It Pa /etc/rc.d/
> -Directory containing control scripts for each service.
> +Directory containing control scripts for each standard service.
> +.It Pa /etc/rc.d.local/
> +Directory containing control scripts for each locally added service.
> .It Pa /etc/rc.shutdown
> Shutdown script called by
> .Xr shutdown 8 .
> --- /usr/src/etc/rc.shutdown.local 1970-01-01 01:00:00.000000000 +0100
> +++ etc/rc.shutdown.local 2007-03-18 12:22:30.000000000 +0100
> @@ -0,0 +1,9 @@
> +# $Id$
> +#
> +# This file is what is invoked by /etc/rc.d/local when given the stop
> +# action. This is automatically the case when shutdown(8) is used.
> +#
> +# So you can place here whatever action you may see fit when shutting
> +# down and specifically, if you have launched some services in
> +# /etc/rc.local, you can add here actions to stop them cleanly.
> +#
--
Thierry Laronde (Alceste) <tlaronde +AT+ polynum +dot+ com>
http://www.kergis.com/
Key fingerprint = 0FF7 E906 FBAF FE95 FD89 250D 52B1 AE95 6006 F40C
--tThc/1wpZn/ma/RB
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename=diff
diff -ur /usr/src/distrib/sets/lists/base/mi ./distrib/sets/lists/base/mi
--- /usr/src/distrib/sets/lists/base/mi 2006-11-27 15:25:18.000000000 +0100
+++ ./distrib/sets/lists/base/mi 2007-03-19 20:49:09.000000000 +0100
@@ -89,6 +89,8 @@
./etc/release etc-sys-etc
./etc/rc.conf.d base-sys-root
./etc/rc.d base-sys-root
+./etc/rc.d.pkgsrc base-sys-root
+./etc/rc.d.local base-sys-root
./etc/skel base-sys-root
./etc/sliphome base-slip-root
./etc/ssh base-sys-root
diff -ur /usr/src/etc/changelist ./etc/changelist
--- /usr/src/etc/changelist 2001-10-13 16:22:11.000000000 +0200
+++ ./etc/changelist 2007-03-19 13:23:29.000000000 +0100
@@ -10,4 +10,6 @@
# /etc/raid*.conf
# /etc/rc.d/*
# /etc/rc.conf.d/*
+# /etc/rc.d.pkgsrc/*
+# /etc/rc.d.local/*
#
diff -ur /usr/src/etc/mtree/NetBSD.dist ./etc/mtree/NetBSD.dist
--- /usr/src/etc/mtree/NetBSD.dist 2006-05-26 14:17:03.000000000 +0200
+++ ./etc/mtree/NetBSD.dist 2007-03-19 13:20:31.000000000 +0100
@@ -42,6 +42,8 @@
./etc/racoon
./etc/rc.conf.d
./etc/rc.d
+./etc/rc.d.local
+./etc/rc.d.pkgsrc
./etc/skel
./etc/sliphome
./etc/ssh
diff -ur /usr/src/etc/rc ./etc/rc
--- /usr/src/etc/rc 2003-01-04 16:27:43.000000000 +0100
+++ ./etc/rc 2007-03-19 19:39:55.000000000 +0100
@@ -37,7 +37,9 @@
date
-files=$(rcorder -s nostart ${rc_rcorder_flags} /etc/rc.d/*)
+files=$(rcorder -s nostart ${rc_rcorder_flags} /etc/rc.d/* \
+ /etc/rc.d.pkgsrc/* \
+ /etc/rc.d.local/*)
for _rc_elem in $files; do
run_rc_script $_rc_elem start
diff -ur /usr/src/etc/rc.conf ./etc/rc.conf
--- /usr/src/etc/rc.conf 2000-10-14 19:01:29.000000000 +0200
+++ ./etc/rc.conf 2007-03-19 13:21:50.000000000 +0100
@@ -13,9 +13,25 @@
. /etc/defaults/rc.conf
fi
+# Load the defaults in from /etc/rc.defaults.pkgsrc (if it's readable).
+# These can be overridden below and by default all pkgsrc services are
+# set to NO.
+#
+if [ -r /etc/rc.defaults.pkgsrc ]; then
+ . /etc/rc.defaults.pkgsrc
+fi
+
+# Load local domain wide defaults in from /etc/rc.defaults.local (if
+# it's readable).
+# These can be overridden too below.
+#
+if [ -r /etc/rc.defaults.local ]; then
+ . /etc/rc.defaults.local
+fi
+
# If this is not set to YES, the system will drop into single-user mode.
#
rc_configured=NO
-# Add local overrides below
+# Add site specific overrides below
#
diff -ur /usr/src/etc/rc.local ./etc/rc.local
--- /usr/src/etc/rc.local 2002-07-23 12:48:01.000000000 +0200
+++ ./etc/rc.local 2007-03-19 20:44:10.000000000 +0100
@@ -1,22 +1,47 @@
-# $NetBSD: rc.local,v 1.30 2002/07/23 10:48:01 wennmach Exp $
+# $Id: rc.local,v 1.2 2007/03/19 19:44:10 tlaronde Exp $
# originally from: @(#)rc.local 8.3 (Berkeley) 4/28/94
#
-# This file is (nearly) the last thing invoked by /etc/rc during a
-# normal boot, via /etc/rc.d/local.
+# This file is what is invoked by /etc/rc.d/local when given the start
+# action.
#
-# It is intended to be edited locally to add site-specific boot-time
-# actions, such as starting locally installed daemons.
+# So actions declared here will take place in the boot process at the
+# place assigned by rcorder(8) to /etc/rc.d/local, that is relatively
+# late in the booting process.
#
-# An alternative option is to create site-specific /etc/rc.d scripts.
+# It is intended to be edited locally to add site-specific user
+# interface tuning, such as audio output etc. but is not limited to
+# that.
+#
+# While you can add local daemons here, it is better practice to use
+# the rc framework since, as mentioned above, this file will be treated
+# at a time matching /etc/rc.d/local requisites, and this order may or
+# may not match your daemons requisites.
+# Furthermore, by placing rc compliant scripts in /etc/rc.d.local/,
+# local services will be cleanly and in the correct order stopped by
+# the rc framework when shutdown(8) is used.
+#
+# The sibling file /etc/rc.shutdown.local is what is invoked by
+# etc/rc.d/local when given the stop action (this is the case when
+# shutdown(8) is used). So if you have decided to launch specific
+# services here, you might be interested in stopping them cleanly by
+# adding the required actions in this file.
+#
+# See rc(8) and rcorder(8) for more information.
#
-echo -n 'Starting local daemons:'
+echo -n 'Starting site specific user interface tuning:'
-# Add your local daemons here.
+# Add your tuning here
#
-#if [ -f /usr/pkg/etc/rc.d/apache ]; then
-# /usr/pkg/etc/rc.d/apache start
-#fi
+# audio stuff
+#
+#audioctl -d /dev/sound0 -w play=44100,2,16,slinear_le
+#mixerctl -w outputs.master=191,191
+
+# set font to vt220iso8x16 (latin1)
+#
+#for device in /dev/ttyE1 /dev/ttyE2 /dev/ttyE3 /dev/ttyE4; do
+# wsconsctl -f $device -dw font=vt220iso8x16
+#done
-echo '.'
diff -ur /usr/src/etc/security ./etc/security
--- /usr/src/etc/security 2006-11-27 15:25:25.000000000 +0100
+++ ./etc/security 2007-03-19 20:32:07.000000000 +0100
@@ -60,6 +60,9 @@
PKGS=pkgs.$$
CHANGEFILES=changefiles.$$
SPECIALSPEC=specialspec.$$
+RC0=rc.d.$$
+RC1=rc.d.pkgsrc.$$
+RC2=rc.d.local.$$
# migrate_file old new
@@ -901,11 +904,15 @@
# /etc/raid*.conf
# /etc/rc.d/*
# /etc/rc.conf.d/*
+ # /etc/rc.d.pkgsrc/*
+ # /etc/rc.d.local/*
#
echo "/etc/ifconfig.*"
echo "/etc/raid*.conf"
echo "/etc/rc.d/*"
echo "/etc/rc.conf.d/*"
+ echo "/etc/rc.d.pkgsrc/*"
+ echo "/etc/rc.d.local/*"
# Add /etc/changelist
#
@@ -931,6 +938,35 @@
esac
done >> $CHANGEFILES
CHANGELIST="$CHANGEFILES $CHANGELIST"
+
+ # Since there are three directories holding rc scripts, the same
+ # basename for a service can be found in more than one directory.
+ # This may be a security concern---this can be an administration
+ # decision too. At least give the information.
+ #
+ # We do consider only services returned by rcorder(8) called with
+ # the skip `nostart' argument---as done by rc(8).
+ #
+ # rcorder(8) should not fail since it would mean that the system
+ # will not execute any rc script on next boot. But...
+ #
+ rcorder -s nostart /etc/rc.d/* \
+ /etc/rc.d.pkgsrc/* \
+ /etc/rc.d.local/* >$OUTPUT || exit 1
+ cat $OUTPUT | sed 's,^\(.*\)/\([^/]*\)$,\2 \1,' \
+ | sort -k 1 \
+ | sed -n -e '\; /etc/rc\.d$;'w$RC0 \
+ -e '\; /etc/rc\.d\.pkgsrc$;'w$RC1 \
+ -e '\; /etc/rc\.d\.local$;'w$RC2
+
+ # then join by pair
+ join $RC0 $RC1 >$OUTPUT
+ join $RC0 $RC2 >>$OUTPUT
+ join $RC1 $RC2 >>$OUTPUT
+ if [ -s $OUTPUT ] ; then
+ printf "\nChecking identical service names in /etc/rc.d*:\n"
+ cat $OUTPUT | sort -k 1
+ fi
fi
# Special case backups, including the master password file and
diff -ur /usr/src/share/man/man5/rc.conf.5 ./share/man/man5/rc.conf.5
--- /usr/src/share/man/man5/rc.conf.5 2006-11-27 15:29:56.000000000 +0100
+++ ./share/man/man5/rc.conf.5 2007-03-19 13:31:02.000000000 +0100
@@ -32,7 +32,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd March 27, 2006
+.Dd March 18, 2007
.Dt RC.CONF 5
.Os
.Sh NAME
@@ -61,7 +61,7 @@
variables that may be set, the values to which each may be set,
a brief description of what each variable does, and a reference to
relevant manual pages.
-Third party packages may test for additional variables.
+Third party packages may test for additional variables.
.Pp
Most variables are one of two types: enabling variables or flags
variables.
@@ -87,9 +87,24 @@
reads
.Pa /etc/defaults/rc.conf
(if it is readable)
-to obtain default values for various variables, and the end-user
+to obtain default values for various variables,
+.Pa /etc/rc.defaults.pkgsrc
+(if it is readable)
+for pkgsrc added services variables and
+.Pa /etc/rc.defaults.local
+(if it is readable)
+for domain wide local various variables (including, probably, the ones
+used for services put in
+.Pa /etc/rc.d.local/
+) and the end-user
may override these by appending appropriate entries to the end of
.Nm .
+Variables set in
+.Pa /etc/rc.defaults.pkgsrc
+and
+.Pa /etc/rc.defaults.local
+shall respect the overall rc framework, but only the standard
+configuration is discussed below.
.Pp
.Xr rc.d 8
scripts that use
diff -ur /usr/src/share/man/man8/rc.8 ./share/man/man8/rc.8
--- /usr/src/share/man/man8/rc.8 2004-01-06 15:46:11.000000000 +0100
+++ ./share/man/man8/rc.8 2007-03-19 13:28:23.000000000 +0100
@@ -34,18 +34,22 @@
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
-.Dd January 6, 2004
+.Dd March 18, 2006
.Dt RC 8
.Os
.Sh NAME
.Nm rc ,
.Nm rc.shutdown ,
-.Nm rc.d/
+.Nm rc.d/,
+.Nm rc.d.pkgsrc/,
+.Nm rc.d.local/
.Nd startup and shutdown scripts
.Sh SYNOPSIS
.Nm rc
.Nm rc.shutdown
.Nm rc.d/
+.Nm rc.d.pkgsrc/
+.Nm rc.d.local/
.Sh DESCRIPTION
.Nm
is the command script which controls the startup of various services,
@@ -68,8 +72,17 @@
.Nm rc.d/
is the directory which contains various
.Xr sh 1
-scripts, one for each service,
-which are called by
+scripts, one for each standard provided service,
+.Nm rc.d.pkgsrc/
+is the directory which contains various
+.Xr sh 1
+scripts for pkgsrc added services,
+and
+.Nm rc.d.local/
+is the directory which contains various
+.Xr sh 1
+scripts for local added services,
+which are all called by
.Nm
at startup,
.Nm rc.shutdown
@@ -90,7 +103,10 @@
and enable a flag
.Sy ( rc_fast=yes ) ,
which prevents the
-.Nm rc.d
+.Nm rc.d,
+.Nm rc.d.pkgsrc
+or
+.Nm rc.d.local
scripts from performing the check for already running processes
(thus speeding up the boot process).
This
@@ -102,7 +118,11 @@
Invoke
.Xr rcorder 8
to order the files in
-.Pa /etc/rc.d/
+.Pa /etc/rc.d/ ,
+.Pa /etc/rc.d.pkgsrc/
+and
+.Pa /etc/rc.d.local/
+
that do not have a
.Dq nostart
keyword (refer to
@@ -134,7 +154,10 @@
Invoke
.Xr rcorder 8
to order the files in
-.Pa /etc/rc.d/
+.Pa /etc/rc.d/ ,
+.Pa /etc/rc.d.pkgsrc/
+and
+.Pa /etc/rc.d.local/
that have a
.Dq shutdown
keyword (refer to
@@ -231,6 +254,11 @@
Note that this should be used extremely sparingly!
.El
.Pp
+The following description applies as well to scripts put in
+.Pa /etc/rc.d.pkgsrc/
+and
+.Pa /etc/rc.d.local/ .
+.Pp
Each script should contain
.Xr rcorder 8
keywords, especially an appropriate
@@ -307,7 +335,11 @@
Startup script called by
.Xr init 8 .
.It Pa /etc/rc.d/
-Directory containing control scripts for each service.
+Directory containing control scripts for each standard service.
+.It Pa /etc/rc.d.pkgsrc/
+Directory containing control scripts for each pkgsrc added service.
+.It Pa /etc/rc.d.local/
+Directory containing control scripts for each locally added service.
.It Pa /etc/rc.shutdown
Shutdown script called by
.Xr shutdown 8 .
--- /usr/src/etc/rc.shutdown.local 1970-01-01 01:00:00.000000000 +0100
+++ etc/rc.shutdown.local 2007-03-19 20:44:06.000000000 +0100
@@ -0,0 +1,11 @@
+# $Id: rc.shutdown.local,v 1.2 2007/03/19 19:44:06 tlaronde Exp $
+#
+# This file is what is invoked by /etc/rc.d/local when given the stop
+# action. This is automatically the case when shutdown(8) is used.
+#
+# So you can place here whatever action you may see fit when shutting
+# down and specifically, if you have launched some services in
+# /etc/rc.local, you can add here actions to stop them cleanly.
+#
+# See rc(8) and rcorder(8) for more information.
+#
--- /usr/src/etc/rc.defaults.pkgsrc 1970-01-01 01:00:00.000000000 +0100
+++ etc/rc.defaults.pkgsrc 2007-03-19 20:44:02.000000000 +0100
@@ -0,0 +1,14 @@
+# $Id: rc.defaults.pkgsrc,v 1.1 2007/03/19 19:44:02 tlaronde Exp $
+#
+# /etc/rc.defaults.pkgsrc --
+# description of variables settings for pkgsrc added services.
+# This file is under the responsability of the sole pkgsrc framework.
+#
+# The services shall default to NO (being explicitely launched by
+# setting them to YES in /etc/rc.conf.
+#
+# Since this file is sourced in /etc/rc.conf, a pkg_delete(8) should
+# suppress the chunk describing the settings for the deleted package.
+#
+# see rc.conf(5) for more information.
+#
--- /usr/src/etc/rc.defaults.local 1970-01-01 01:00:00.000000000 +0100
+++ etc/rc.defaults.local 2007-03-18 20:29:06.000000000 +0100
@@ -0,0 +1,12 @@
+# $Id: rc.defaults.local,v 1.1 2007/03/18 19:29:06 tlaronde Exp $
+#
+# /etc/rc.defaults.local --
+# default configuration for local (domain) nodes, setting variables
+# belonging to NetBSD provided services, pkgsrc selected services
+# and local added services placed in /etc/rc.d.local/
+#
+# This file is intended for setting a domain wide configuration, the
+# site specificities being set in /etc/rc.conf.
+#
+# see rc.conf(5) for more information.
+#
--tThc/1wpZn/ma/RB--