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)
This commit is contained in:
parent
bb4ca793bf
commit
287864b1a7
@ -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).
|
||||
|
24
etc/rc
24
etc/rc
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user