diff options
author | William Hubbs <w.d.hubbs@gmail.com> | 2015-04-25 15:37:52 -0500 |
---|---|---|
committer | William Hubbs <w.d.hubbs@gmail.com> | 2015-04-25 16:37:09 -0500 |
commit | a6391f44ee6c68d674ae8425983467b971710d5d (patch) | |
tree | 2a8f745829dce81c791154931e8e2e1fd79fb667 /init.d/mtab.in | |
parent | a8c6dbac96a20eb35ce55befe0e64d89dd30de4d (diff) |
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.
Diffstat (limited to 'init.d/mtab.in')
-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 } |