From a12dbdc6c93a7d63591610378e3e570b7c7d2143 Mon Sep 17 00:00:00 2001 From: Roy Marples Date: Sun, 2 Mar 2008 21:13:21 +0000 Subject: Don't check for root in prefix. --- init.d/localmount.in | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 init.d/localmount.in (limited to 'init.d/localmount.in') diff --git a/init.d/localmount.in b/init.d/localmount.in new file mode 100644 index 0000000..bc16f70 --- /dev/null +++ b/init.d/localmount.in @@ -0,0 +1,87 @@ +#!/sbin/runscript +# Copyright 2007-2008 Roy Marples +# All rights reserved. Released under the 2-clause BSD license. + +description="Mounts disks and swap according to /etc/fstab." + +depend() +{ + need fsck + use modules mtab + keyword nojail noprefix +} + +start() +{ + # Mount local filesystems in /etc/fstab. + local types="noproc" x= + for x in ${net_fs_list}; do + types="${types},${x}" + done + + ebegin "Mounting local filesystems" + mount -at "${types}" + eend $? "Some local filesystem failed to mount" + + # Always return 0 - some local mounts may not be critical for boot + return 0 +} + +stop() +{ + # Don't unmount anything for VPS systems + [ "${RC_SYS}" = "VPS" ] && return 0 + + # We never unmount / or /dev or $RC_SVCDIR + local x= no_umounts="/|/dev|/dev/.*|${RC_SVCDIR}" + + # RC_NO_UMOUNTS is an env var that can be set by plugins + OIFS=${IFS} SIFS=${IFS-y} + IFS=$IFS: + for x in ${no_umounts} ${RC_NO_UMOUNTS}; do + no_umounts="${no_umounts}|${x}" + done + if [ "${SIFS}" = "y" ]; then + IFS=$OIFS + else + unset IFS + fi + + if [ "${RC_UNAME}" = "Linux" ]; then + no_umounts="${no_umounts}|/proc|/proc/.*|/sys|/sys/.*" + fi + no_umounts="^(${no_umounts})$" + + # Flush all pending disk writes now + sync; sync + + # Try to unmount all tmpfs filesystems not in use, else a deadlock may + # occure, bug #13599. + # As $RC_SVCDIR may also be tmpfs we cd to it to lock it + cd "${RC_SVCDIR}" + umount -a -t tmpfs 2>/dev/null + + . "${RC_LIBDIR}"/sh/rc-mount.sh + + # Umount loopback devices + einfo "Unmounting loopback devices" + eindent + do_unmount "umount -d" --skip-point-regex "${no_umounts}" \ + --node-regex "^/dev/loop" + eoutdent + + # Now everything else, except network filesystems as the + # network should be down by this point. + einfo "Unmounting filesystems" + eindent + local fs= + for x in ${net_fs_list}; do + fs="${fs}${fs:+|}${x}" + done + [ -n "${fs}" ] && fs="^(${fs})$" + do_unmount "umount" --skip-point-regex "${no_umounts}" \ + ${fs:+--skip-fstype-regex} ${fs} --nonetdev + eoutdent + + return 0 +} -- cgit v1.2.3