svn commit: r256916 - in stable/10: etc etc/defaults share/man/man5 share/man/man8 sys/sys

Colin Percival cperciva at FreeBSD.org
Tue Oct 22 16:09:45 UTC 2013


Author: cperciva
Date: Tue Oct 22 16:09:44 2013
New Revision: 256916
URL: http://svnweb.freebsd.org/changeset/base/256916

Log:
  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)

Modified:
  stable/10/etc/defaults/rc.conf
  stable/10/etc/rc
  stable/10/share/man/man5/rc.conf.5
  stable/10/share/man/man8/rc.8
  stable/10/sys/sys/param.h
Directory Properties:
  stable/10/etc/   (props changed)
  stable/10/share/man/man5/   (props changed)
  stable/10/share/man/man8/   (props changed)
  stable/10/sys/   (props changed)

Modified: stable/10/etc/defaults/rc.conf
==============================================================================
--- stable/10/etc/defaults/rc.conf	Tue Oct 22 15:53:29 2013	(r256915)
+++ stable/10/etc/defaults/rc.conf	Tue Oct 22 16:09:44 2013	(r256916)
@@ -619,6 +619,9 @@ quotacheck_flags="-a"	# Check all file s
 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).

Modified: stable/10/etc/rc
==============================================================================
--- stable/10/etc/rc	Tue Oct 22 15:53:29 2013	(r256915)
+++ stable/10/etc/rc	Tue Oct 22 16:09:44 2013	(r256916)
@@ -82,10 +82,15 @@ if [ `/sbin/sysctl -n security.jail.jail
 	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

Modified: stable/10/share/man/man5/rc.conf.5
==============================================================================
--- stable/10/share/man/man5/rc.conf.5	Tue Oct 22 15:53:29 2013	(r256915)
+++ stable/10/share/man/man5/rc.conf.5	Tue Oct 22 16:09:44 2013	(r256916)
@@ -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

Modified: stable/10/share/man/man8/rc.8
==============================================================================
--- stable/10/share/man/man8/rc.8	Tue Oct 22 15:53:29 2013	(r256915)
+++ stable/10/share/man/man8/rc.8	Tue Oct 22 16:09:44 2013	(r256916)
@@ -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 
 .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

Modified: stable/10/sys/sys/param.h
==============================================================================
--- stable/10/sys/sys/param.h	Tue Oct 22 15:53:29 2013	(r256915)
+++ stable/10/sys/sys/param.h	Tue Oct 22 16:09:44 2013	(r256916)
@@ -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,


More information about the svn-src-all mailing list