summaryrefslogtreecommitdiff
path: root/init.d/mount-ro.in
diff options
context:
space:
mode:
Diffstat (limited to 'init.d/mount-ro.in')
-rw-r--r--init.d/mount-ro.in45
1 files changed, 45 insertions, 0 deletions
diff --git a/init.d/mount-ro.in b/init.d/mount-ro.in
new file mode 100644
index 0000000..e39384a
--- /dev/null
+++ b/init.d/mount-ro.in
@@ -0,0 +1,45 @@
+#!@PREFIX@/sbin/runscript
+# Copyright 2007-2008 Roy Marples <roy@marples.name>
+# All rights reserved. Released under the 2-clause BSD license.
+
+description="Re-mount filesytems read-only for a clean reboot."
+
+depend()
+{
+ need killprocs savecache
+ keyword noprefix 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 $?
+}