summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--etc/rc55
-rw-r--r--etc/rc.shutdown51
2 files changed, 104 insertions, 2 deletions
diff --git a/etc/rc b/etc/rc
index eb6aec1..25f07a1 100644
--- a/etc/rc
+++ b/etc/rc
@@ -46,12 +46,63 @@ stty status '^T'
trap : 2
trap : 3 # shouldn't be needed
-bootmode=$1
-
HOME=/
PATH=/sbin:/bin:/usr/sbin:/usr/bin
export HOME PATH
+# If there is a global system configuration file, suck it in.
+# XXX - The only purpose of duplicating it here is to catch rc_ng="YES"
+#
+if [ -r /etc/defaults/rc.conf ]; then
+ . /etc/defaults/rc.conf
+ source_rc_confs
+elif [ -r /etc/rc.conf ]; then
+ . /etc/rc.conf
+fi
+
+# Diskless setups have to depend on a different mechanism since
+# their config files haven't been retargeted yet.
+#
+[ -e /.rcng_yes ] && rc_ng="YES"
+
+case ${rc_ng} in
+[Yy][Ee][Ss])
+ . /etc/rc.subr
+
+ # Load system configuration files. The 'XXX' is there because
+ # the function requires an argument that we don't need to use.
+ #
+ load_rc_config 'XXX'
+
+ if [ "$1" = autoboot ]; then
+ autoboot=yes
+ _boot="faststart"
+ rc_fast=yes # run_rc_command(): do fast booting
+ export autoboot
+ export rc_fast
+ else
+ autoboot=no
+ _boot="start"
+ fi
+
+ os=`eval ${CMD_OSTYPE}`
+ files=`rcorder -k ${os} -s nostart /etc/rc.d/*`
+
+ for _rc_elem in ${files}; do
+ run_rc_script ${_rc_elem} ${_boot}
+ done
+
+ echo ''
+ date
+ exit 0
+ ;;
+*)
+ # fall-through to the old rc scripts
+ ;;
+esac
+
+bootmode=$1
+
# BOOTP diskless boot. We have to run the rc file early in order to
# retarget various config files.
#
diff --git a/etc/rc.shutdown b/etc/rc.shutdown
index 25c1e42..0f4bd3d 100644
--- a/etc/rc.shutdown
+++ b/etc/rc.shutdown
@@ -44,6 +44,7 @@ PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin
export HOME PATH
# If there is a global system configuration file, suck it in.
+# XXX - It's only purpose is to catch rc_ng="YES".
#
if [ -r /etc/defaults/rc.conf ]; then
. /etc/defaults/rc.conf
@@ -52,6 +53,56 @@ elif [ -r /etc/rc.conf ]; then
. /etc/rc.conf
fi
+case ${rc_ng} in
+[Yy][Ee][Ss])
+ . /etc/rc.subr
+
+ load_rc_config 'XXX'
+
+ # If requested, start a watchdog timer in the background which
+ # will terminate rc.shutdown if rc.shutdown doesn't complete
+ # within the specified time.
+ #
+ _rcshutdown_watchdog=
+ if [ -n "$rcshutdown_timeout" ]; then
+ debug "Initiating watchdog timer."
+ sleep $rcshutdown_timeout && (
+ _msg="$rcshutdown_timeout second watchdog" \
+ " timeout expired. Shutdown terminated."
+ logger -t rc.shutdown "$_msg"
+ echo "$_msg"
+ date
+ kill -KILL $$ >/dev/null 2>&1
+ ) &
+ _rcshutdown_watchdog=$!
+ fi
+
+ # Determine the shutdown order of the /etc/rc.d scripts,
+ # and perform the operation
+ # XXX - rcorder(8) with multiple -k switches works as a logical OR,
+ # so, we can't do this: rcorder -k shutdown -k FreeBSD.
+ #
+ files=`eval grep -l \'^# KEYWORD:.*FreeBSD\' \`rcorder -k shutdown /etc/rc.d/*\``
+
+ for _rc_elem in `reverse_list $files`; do
+ debug "run_rc_script $_rc_elem stop"
+ run_rc_script $_rc_elem stop
+ done
+
+ # Terminate the background watchdog timer (if it is running)
+ #
+ if [ -n "$_rcshutdown_watchdog" ]; then
+ kill -TERM $_rcshutdown_watchdog >/dev/null 2>&1
+ fi
+
+ echo '.'
+ exit 0
+ ;;
+*)
+ # fall-through to the old rc scripts
+ ;;
+esac
+
# reverse_list list
# print the list in reverse order
#
OpenPOWER on IntegriCloud