aboutsummaryrefslogtreecommitdiff
path: root/init.d/romount.in
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2008-11-03 15:31:01 +0000
committerRoy Marples <roy@marples.name>2008-11-03 15:31:01 +0000
commit0af7d5bc204cd6b7d03f22aacf4072c5f526c0ee (patch)
treeaa819c4140f8c34bd3814ae5894a8b6214fff914 /init.d/romount.in
parent895c4f41492199d6aee75bb6c5a935134d67c29e (diff)
Add a new shutdown runlevel, Gentoo #224537.
Split halt.sh into halt, killprocs, romount and savecache services. The reboot runlevel is removed but mapped to shutdown. The halt script should be moved to the sysvinit package.
Diffstat (limited to 'init.d/romount.in')
-rw-r--r--init.d/romount.in43
1 files changed, 43 insertions, 0 deletions
diff --git a/init.d/romount.in b/init.d/romount.in
new file mode 100644
index 00000000..d1adaad2
--- /dev/null
+++ b/init.d/romount.in
@@ -0,0 +1,43 @@
+#!@PREFIX@/sbin/runscript
+# Copyright 2007-2008 Roy Marples <roy@marples.name>
+# All rights reserved. Released under the 2-clause BSD license.
+
+depend()
+{
+ need killprocs savecache
+ keywords noopenvz novserver
+}
+
+start()
+{
+ # Flush all pending disk writes now
+ sync; sync
+
+ ebegin "Remounting remaining filesystems read-only"
+ # We need the do_unmount function
+ . "${RC_LIBDIR}"/sh/rc-mount.sh
+ eindent
+ local m="/dev|/dev/.*|/proc|/proc.*|/sys|/sys/.*|${RC_SVCDIR}" x= fs=
+ # RC_NO_UMOUNTS is an env var that can be set by plugins
+ local OIFS=$IFS SIFS=${IFS-y} IFS=$IFS
+ IFS=$IFS:
+ for x in ${no_umounts} ${RC_NO_UMOUNTS}; do
+ m="${m}|${x}"
+ done
+ if [ "${SIFS}" = y ]; then
+ IFS=$OIFS
+ else
+ unset IFS
+ fi
+ m="^(${m})$"
+ fs=
+ for x in ${net_fs_list}; do
+ fs="${fs}${fs:+|}${x}"
+ done
+ [ -n "${fs}" ] && fs="^(${fs})$"
+ do_unmount "mount -n -o remount,ro" \
+ --skip-point-regex "${m}" \
+ ${fs:+--skip-fstype-regex} ${fs} --nonetdev
+ eoutdent
+ eend $?
+}