From a6391f44ee6c68d674ae8425983467b971710d5d Mon Sep 17 00:00:00 2001 From: William Hubbs Date: Sat, 25 Apr 2015 15:37:52 -0500 Subject: [PATCH] mtab: move toward requiring /etc/mtab to be a symbolic link This changes the mtab service in the following way: - If /etc/mtab is a symbolic link, success is returned. - If /etc is not writable, we warn that we could not update /etc/mtab and return success. - If /etc/mtab does not exist, we create a symbolic link from /etc/mtab to /proc/self/mounts. - Otherwise, we warn that updating /etc/mtab as a file is deprecated and continue to update it after outputting instructions to the user for how to move it to a symbolic link. --- init.d/mtab.in | 46 ++++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/init.d/mtab.in b/init.d/mtab.in index e38d33e7..3ac39edc 100644 --- a/init.d/mtab.in +++ b/init.d/mtab.in @@ -12,28 +12,30 @@ depend() start() { - if [ -L /etc/mtab ]; then - return 0 - fi - + [ -L /etc/mtab ] && return 0 + local rc=0 ebegin "Updating /etc/mtab" - vewarn "The support for updating /etc/mtab as a file is" - vewarn "deprecated and will be removed in the future." - vewarn "Please run the following command as root on your system." - vewarn - vewarn "ln -snf /proc/self/mounts /etc/mtab" - if ! echo 2>/dev/null >/etc/mtab; then - ewend 1 "/etc/mtab is not updateable" - return 0 + if ! checkpath -W /etc; then + rc=1 + elif [ ! -e /etc/mtab ]; then + ln -snf /proc/self/mounts /etc/mtab + else + ewarn "The support for updating /etc/mtab as a file is" + ewarn "deprecated and will be removed in the future." + ewarn "Please run the following command as root on your system." + ewarn + ewarn "ln -snf /proc/self/mounts /etc/mtab" + ewarn + + # With / as tmpfs we cannot umount -at tmpfs in localmount as that + # makes / readonly and dismounts all tmpfs even if in use which is + # not good. Luckily, umount uses /etc/mtab instead of /proc/mounts + # which allows this hack to work. + grep -v "^[! ]* / tmpfs " /proc/mounts > /etc/mtab + + # Remove stale backups + rm -f /etc/mtab~ /etc/mtab~~ fi - - # With / as tmpfs we cannot umount -at tmpfs in localmount as that - # makes / readonly and dismounts all tmpfs even if in use which is - # not good. Luckily, umount uses /etc/mtab instead of /proc/mounts - # which allows this hack to work. - grep -v "^[! ]* / tmpfs " /proc/mounts > /etc/mtab - - # Remove stale backups - rm -f /etc/mtab~ /etc/mtab~~ - eend 0 + eend $rc "/etc is not writable; unable to create /etc/mtab" + return 0 }