diff options
author | cperciva <cperciva@FreeBSD.org> | 2013-10-22 16:09:44 +0000 |
---|---|---|
committer | cperciva <cperciva@FreeBSD.org> | 2013-10-22 16:09:44 +0000 |
commit | 287864b1a7317cf7568bd46c04a058a453c45509 (patch) | |
tree | 91ea014ef91994cbe7cb0862b12717ed1bcf1d4b | |
parent | bb4ca793bf3f1958efd8b4cf91d06caf0ff9feab (diff) | |
download | FreeBSD-src-287864b1a7317cf7568bd46c04a058a453c45509.zip FreeBSD-src-287864b1a7317cf7568bd46c04a058a453c45509.tar.gz |
MFC r256775,r256776:
Add support for "first boot" rc.d scripts.
Document this new functionality in rc.conf(5) and rc(8).
Bump __FreeBSD_version so that ports can make use of this.
Approved by: re (gjb)
-rw-r--r-- | etc/defaults/rc.conf | 3 | ||||
-rw-r--r-- | etc/rc | 24 | ||||
-rw-r--r-- | share/man/man5/rc.conf.5 | 19 | ||||
-rw-r--r-- | share/man/man8/rc.8 | 21 | ||||
-rw-r--r-- | sys/sys/param.h | 2 |
5 files changed, 64 insertions, 5 deletions
diff --git a/etc/defaults/rc.conf b/etc/defaults/rc.conf index f330638..6b037f3 100644 --- a/etc/defaults/rc.conf +++ b/etc/defaults/rc.conf @@ -619,6 +619,9 @@ quotacheck_flags="-a" # Check all file system quotas (if enabled) accounting_enable="NO" # Turn on process accounting (or NO). ibcs2_enable="NO" # Ibcs2 (SCO) emulation loaded at startup (or NO). ibcs2_loaders="coff" # List of additional Ibcs2 loaders (or NO). +firstboot_sentinel="/firstboot" # Scripts with "firstboot" keyword are run if + # this file exists. Should be on a R/W filesystem so + # the file can be deleted after the boot completes. # Emulation/compatibility services provided by /etc/rc.d/abi sysvipc_enable="NO" # Load System V IPC primitives at startup (or NO). @@ -82,10 +82,15 @@ if [ `/sbin/sysctl -n security.jail.jailed` -eq 1 ]; then fi fi +# If the firstboot sentinel doesn't exist, we want to skip firstboot scripts. +if ! [ -e ${firstboot_sentinel} ]; then + skip_firstboot="-s firstboot" +fi + # Do a first pass to get everything up to $early_late_divider so that # we can do a second pass that includes $local_startup directories # -files=`rcorder ${skip} /etc/rc.d/* 2>/dev/null` +files=`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* 2>/dev/null` _rc_elem_done=' ' for _rc_elem in ${files}; do @@ -107,7 +112,13 @@ case ${local_startup} in *) find_local_scripts_new ;; esac -files=`rcorder ${skip} /etc/rc.d/* ${local_rc} 2>/dev/null` +# The firstboot sentinel might be on a newly mounted filesystem; look for it +# again and unset skip_firstboot if we find it. +if [ -e ${firstboot_sentinel} ]; then + skip_firstboot="" +fi + +files=`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* ${local_rc} 2>/dev/null` for _rc_elem in ${files}; do case "$_rc_elem_done" in *" $_rc_elem "*) continue ;; @@ -116,6 +127,15 @@ for _rc_elem in ${files}; do run_rc_script ${_rc_elem} ${_boot} done +# Remove the firstboot sentinel, and reboot if it was requested. +if [ -e ${firstboot_sentinel} ]; then + rm ${firstboot_sentinel} + if [ -e ${firstboot_sentinel}-reboot ]; then + rm ${firstboot_sentinel}-reboot + kill -INT 1 + fi +fi + echo '' date exit 0 diff --git a/share/man/man5/rc.conf.5 b/share/man/man5/rc.conf.5 index 799f535..2a0f3ba 100644 --- a/share/man/man5/rc.conf.5 +++ b/share/man/man5/rc.conf.5 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd October 12, 2013 +.Dd October 19, 2013 .Dt RC.CONF 5 .Os .Sh NAME @@ -3675,6 +3675,23 @@ and if is set to .Dq Li YES , this specifies a list of additional iBCS2 loaders to enable. +.It Va firstboot_sentinel +.Pq Vt str +This variable specifies the full path to a +.Dq first boot +sentinel file. +If a file exists with this path, +.Pa rc.d +scripts with the +.Dq firstboot +keyword will be run on startup and the sentinel file will be deleted +after the boot process completes. +The sentinel file must be located on a writable file system which is +mounted no later than +.Va early_late_divider +to function properly. +The default is +.Pa /firstboot . .It Va linux_enable .Pq Vt bool Set to diff --git a/share/man/man8/rc.8 b/share/man/man8/rc.8 index 32d0ade..cfeb0e6 100644 --- a/share/man/man8/rc.8 +++ b/share/man/man8/rc.8 @@ -35,7 +35,7 @@ .\" @(#)rc.8 8.2 (Berkeley) 12/11/93 .\" $FreeBSD$ .\" -.Dd September 23, 2013 +.Dd October 19, 2013 .Dt RC 8 .Os .Sh NAME @@ -129,6 +129,13 @@ and add (only allow vnet-enabled jails) to the list of KEYWORDS to skip in .Xr rcorder 8 . .It +If the file +.Va ${firstboot_sentinel} +does not exist, add +.Dq Li firstboot +to the list of KEYWORDS to skip in +.Xr rcorder 8 . +.It Invoke .Xr rcorder 8 to order the files in @@ -156,6 +163,11 @@ Stop processing when the script that is the value of the .Va $early_late_divider has been run. .It +Check again to see if the file +.Va ${firstboot_sentinel} +exists (in case it is located on a newly mounted file system) +and adjust the list of KEYWORDs to skip appropriately. +.It Re-run .Xr rcorder 8 , this time including the scripts in the @@ -164,6 +176,13 @@ directories. Ignore everything up to the .Va $early_late_divider , then start executing the scripts as described above. +.It +If the file +.Va ${firstboot_sentinel} +exists, delete it. +If the file +.Va ${firstboot_sentinel}-reboot +also exists (because it was created by a script), then delete it and reboot. .El .Ss Operation of Nm rc.shutdown .Bl -enum diff --git a/sys/sys/param.h b/sys/sys/param.h index 09b3e5b..2dc5c9e 100644 --- a/sys/sys/param.h +++ b/sys/sys/param.h @@ -58,7 +58,7 @@ * in the range 5 to 9. */ #undef __FreeBSD_version -#define __FreeBSD_version 1000500 /* Master, propagated to newvers */ +#define __FreeBSD_version 1000501 /* Master, propagated to newvers */ /* * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD, |