preliminary patch for umountroot: instead of remounting ro only /, extend the same treatment to any mountpoint still mentioned in /proc/mounts
remount_ro(){
local MTPT=$1
[ "$VERBOSE" = no ] || log_action_begin_msg "Mounting $MPT read-only"
MOUNT_FORCE_OPT=
[ "$(uname -s)" = "GNU/kFreeBSD" ] && MOUNT_FORCE_OPT=-f
# This:
# mount -n -o remount,ro /
# will act on a bind mount of / if there is one.
# See #339023 and the comment in checkroot.sh
mount $MOUNT_FORCE_OPT -n -o remount,ro -t dummytype dummydev $MTPT 2>/dev/null \
|| mount $MOUNT_FORCE_OPT -n -o remount,ro dummydev $MTPT 2>/dev/null \
|| mount $MOUNT_FORCE_OPT -n -o remount,ro $MTPT
ES=$?
[ "$VERBOSE" = no ] || log_action_end_msg $ES
}
do_stop () {
# These directories must exist on the root filesystem as they are
# targets for system mountpoints. We've just unmounted all other
# filesystems, so either they are mounted now (in which case the
# mount point exists) or we can make the mountpoint.
for dir in /proc /sys /var/run /var/lock; do
mkdir -p $dir || true
done
exec 9<&0 </proc/mounts
REG_MTPTS=""
TMPFS_MTPTS=""
while read DEV MTPT FSTYPE REST
do
case "$MTPT" in /proc|/dev|/.dev|/dev/pts|/dev/shm|/proc/*|/sys|/var/run|/var/lock) continue
;;
esac
case "$FSTYPE" in proc|procfs|linprocfs|devfs|sysfs|usbfs|usbdevfs|devpts) continue
;;
*) remount_ro $MTPT
;;
esac
done
exec 0<&9 9<&-
}
preliminary patch for umountroot: instead of remounting ro only /, extend the same treatment to any mountpoint still mentioned in /proc/mounts
remount_ro(){ begin_msg "Mounting $MPT read-only" FORCE_OPT=
local MTPT=$1
[ "$VERBOSE" = no ] || log_action_
MOUNT_
[ "$(uname -s)" = "GNU/kFreeBSD" ] && MOUNT_FORCE_OPT=-f
# This:
# mount -n -o remount,ro /
# will act on a bind mount of / if there is one.
# See #339023 and the comment in checkroot.sh
mount $MOUNT_FORCE_OPT -n -o remount,ro -t dummytype dummydev $MTPT 2>/dev/null \
|| mount $MOUNT_FORCE_OPT -n -o remount,ro dummydev $MTPT 2>/dev/null \
|| mount $MOUNT_FORCE_OPT -n -o remount,ro $MTPT
ES=$?
[ "$VERBOSE" = no ] || log_action_end_msg $ES
}
do_stop () {
/proc| /dev|/. dev|/dev/ pts|/dev/ shm|/proc/ *|/sys| /var/run| /var/lock)
continue
proc| procfs| linprocfs| devfs|sysfs| usbfs|usbdevfs| devpts)
continue
remount_ ro $MTPT
# These directories must exist on the root filesystem as they are
# targets for system mountpoints. We've just unmounted all other
# filesystems, so either they are mounted now (in which case the
# mount point exists) or we can make the mountpoint.
for dir in /proc /sys /var/run /var/lock; do
mkdir -p $dir || true
done
exec 9<&0 </proc/mounts
REG_MTPTS=""
TMPFS_MTPTS=""
while read DEV MTPT FSTYPE REST
do
case "$MTPT" in
;;
esac
case "$FSTYPE" in
;;
*)
;;
esac
done
exec 0<&9 9<&-
}