diff options
-rw-r--r-- | init.d/mtab.in | 44 |
1 files changed, 23 insertions, 21 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 - fi + 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 + # 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 + # Remove stale backups + rm -f /etc/mtab~ /etc/mtab~~ + fi + eend $rc "/etc is not writable; unable to create /etc/mtab" + return 0 } |