[Pkg-sysvinit-commits] r1332 - in sysvinit/trunk/debian: . initscripts initscripts/doc initscripts/etc/init.d
Kel Modderman
kelmo-guest at alioth.debian.org
Tue Jun 23 10:36:20 UTC 2009
Author: kelmo-guest
Date: 2009-06-23 10:36:19 +0000 (Tue, 23 Jun 2009)
New Revision: 1332
Added:
sysvinit/trunk/debian/initscripts/etc/init.d/mtab.sh
Modified:
sysvinit/trunk/debian/NEWS
sysvinit/trunk/debian/changelog
sysvinit/trunk/debian/initscripts/conffiles
sysvinit/trunk/debian/initscripts/doc/README.Debian
sysvinit/trunk/debian/initscripts/etc/init.d/checkfs.sh
sysvinit/trunk/debian/initscripts/etc/init.d/checkroot.sh
sysvinit/trunk/debian/initscripts/postinst
sysvinit/trunk/debian/initscripts/postrm
sysvinit/trunk/debian/initscripts/preinst
Log:
Revert r1330, reinstate mtab.sh.
Modified: sysvinit/trunk/debian/NEWS
===================================================================
--- sysvinit/trunk/debian/NEWS 2009-05-16 18:17:37 UTC (rev 1331)
+++ sysvinit/trunk/debian/NEWS 2009-06-23 10:36:19 UTC (rev 1332)
@@ -1,28 +1,3 @@
-sysvinit (2.86.ds1-62) unstable; urgency=low
-
- In version 2.86.ds1-62 of the initscripts package, /etc/mtab is replaced
- with a symlink to /proc/mounts and /etc/init.d/mtab.sh is removed.
-
- With linux < 2.6.26, /proc/mounts lacks information present in /etc/mtab
- such as additional mount options. Thus a symlink breaks things like
- discquotas which rely on parsing the additional mount options.
-
- With linux >= 2.6.26, /proc/mounts contains all of the information in
- /etc/mtab, plus more. The mount system call can now pass all of the mount
- options to the kernel, so no information is missing in /proc/mounts. This
- has obviously useful benefits such as read-only root, and the state in
- /etc/mtab never gets out of sync with reality.
-
- Additionally, with the addition of per-process namespaces with CLONE_NEWNS
- to clone(2), each process has its own set of mounts, and as such a
- system-wide /etc/mtab is useless: it's only valid in one of the potentially
- many namespaces and can quickly get into a horrible mess. At this point,
- /etc/mtab *must* be a symlink to avoid breakage. Note that /proc/mounts is
- now a symlink to /proc/self/mounts for this reason: each process has
- potentially different mounts.
-
- -- Kel Modderman <kel at otaku42.de> Wed, 13 May 2009 03:17:02 +1000
-
sysvinit (2.86.ds1-10) unstable; urgency=low
In version 2.86.ds1-10 of the initscripts package the shell function
Modified: sysvinit/trunk/debian/changelog
===================================================================
--- sysvinit/trunk/debian/changelog 2009-05-16 18:17:37 UTC (rev 1331)
+++ sysvinit/trunk/debian/changelog 2009-06-23 10:36:19 UTC (rev 1332)
@@ -59,25 +59,6 @@
* Exclude proc from mount_all_local() function of mountall.sh by
supplying noproc to the -t cli argument. Thanks Mike Hommey for
the patch. (Closes: #425199)
- * Remove /etc/init.d/mtab.sh and have initscript preinst maintainer script
- create a symlink to /proc/mounts. (Closes: #494001)
- Thanks to Roger Leigh <rleigh at codelibre.net>
- - remove debian/initscripts/etc/init.d/mtab.sh
- - eliminate /etc/init.d/mtab.sh in debian/initscripts/preinst, save a copy
- if locally modified
- - remove /etc/init.d/mtab.sh from debian/initscripts/conffiles
- - clean up /etc/init.d/mtab.sh and /etc/init.d/mtab.sh.dpkg-old in
- debian/initscripts/postrm
- - purge mtab.sh from runlevel configuration in debian/initscripts/postinst
- - create a symlink from /etc/mtab -> /proc mounts if the system is Linux,
- /etc/mtab exists, /etc/mtab is not a symlink and /proc/mounts exists
- - do not mention mtab.sh in debian/initscripts/doc/README.Debian
- - remove mtab from Should-Start field of LSB information in
- debian/initscripts/etc/init.d/checkfs.sh
- - check /etc/mtab is a symlink and attempt to create a link to
- /proc/mounts if it is not in debian/initscripts/etc/init.d/checkroot.sh
- - document the reason for removal of /etc/mtab in favour of a symink to
- /proc/mounts in debian/NEWS
* Update debian/NOTES to reflect current affairs:
- sourcing of .sh scripts no longer required by policy nor implimented,
remove section which tracked 'exit' bugs
@@ -86,7 +67,7 @@
- "Don't use bash" section removed since umountfs seems to have been
converted to policy compliant sh code already
- -- Kel Modderman <kel at otaku42.de> Sun, 17 May 2009 04:14:58 +1000
+ -- Kel Modderman <kel at otaku42.de> Tue, 23 Jun 2009 20:32:05 +1000
sysvinit (2.86.ds1-61) unstable; urgency=low
Modified: sysvinit/trunk/debian/initscripts/conffiles
===================================================================
--- sysvinit/trunk/debian/initscripts/conffiles 2009-05-16 18:17:37 UTC (rev 1331)
+++ sysvinit/trunk/debian/initscripts/conffiles 2009-06-23 10:36:19 UTC (rev 1332)
@@ -14,6 +14,7 @@
/etc/init.d/mountoverflowtmp
/etc/init.d/mountdevsubfs.sh
/etc/init.d/mountkernfs.sh
+/etc/init.d/mtab.sh
/etc/init.d/rc.local
/etc/init.d/reboot
/etc/init.d/rmnologin
Modified: sysvinit/trunk/debian/initscripts/doc/README.Debian
===================================================================
--- sysvinit/trunk/debian/initscripts/doc/README.Debian 2009-05-16 18:17:37 UTC (rev 1331)
+++ sysvinit/trunk/debian/initscripts/doc/README.Debian 2009-06-23 10:36:19 UTC (rev 1332)
@@ -46,8 +46,8 @@
sysfs /sys sysfs rw,nosuid,nodev,noexec 0 0
The reason is that the entry in fstab needs to match the entry
-generated by the mountkernfs.sh script. If it does not, the system
-will complain with this message during boot:
+generated by the mountkernfs.sh and mtab.sh scripts. If it does not,
+the system will complain with this message during boot:
Will now mount local filesystems:mount: /sys already mounted or /sys busy
mount: according to mtab, sysfs is already mounted on /sys
Modified: sysvinit/trunk/debian/initscripts/etc/init.d/checkfs.sh
===================================================================
--- sysvinit/trunk/debian/initscripts/etc/init.d/checkfs.sh 2009-05-16 18:17:37 UTC (rev 1331)
+++ sysvinit/trunk/debian/initscripts/etc/init.d/checkfs.sh 2009-06-23 10:36:19 UTC (rev 1332)
@@ -3,7 +3,7 @@
# Provides: checkfs
# Required-Start: checkroot
# Required-Stop:
-# Should-Start: cryptdisks
+# Should-Start: mtab cryptdisks
# Default-Start: S
# Default-Stop:
# Short-Description: Check all filesystems.
Modified: sysvinit/trunk/debian/initscripts/etc/init.d/checkroot.sh
===================================================================
--- sysvinit/trunk/debian/initscripts/etc/init.d/checkroot.sh 2009-05-16 18:17:37 UTC (rev 1331)
+++ sysvinit/trunk/debian/initscripts/etc/init.d/checkroot.sh 2009-06-23 10:36:19 UTC (rev 1332)
@@ -39,6 +39,7 @@
# device node,
# 2) Swap that is on a md device or a file that may be on a md
# device,
+ # 3) The mount parameters for a devfs filesystem.
#
exec 9<&0 </etc/fstab
@@ -51,6 +52,7 @@
rootcheck=no
swap_on_lv=no
swap_on_file=no
+ devfs=
while read DEV MTPT FSTYPE OPTS DUMP PASS JUNK
do
@@ -73,6 +75,11 @@
[ "$FSTYPE" = "swap" ] && swap_on_file=yes
;;
*)
+ # Devfs definition ?
+ if [ "$FSTYPE" = "devfs" ] && [ "$MTPT" = "/dev" ] && mountpoint -q /dev
+ then
+ devfs="-t $FSTYPE $DEV $MTPT"
+ fi
;;
esac
[ "$MTPT" != "/" ] && continue
@@ -332,17 +339,42 @@
fi
#
- # If /etc/mtab is not a symlink, attempt to symlink it to /proc/mounts
- # on Linux. See #494001
+ # We only create/modify /etc/mtab if the location where it is
+ # stored is writable. If /etc/mtab is a symlink into /proc/
+ # then it is not writable.
#
- if [ Linux = "$KERNEL" ] && [ ! -L /etc/mtab ] && [ -f /proc/mounts ]
- then
- if touch /etc/mtab >/dev/null 2>&1
+ INIT_MTAB_FILE=no
+ MTAB_PATH="$(readlink -f /etc/mtab || :)"
+ case "$MTAB_PATH" in
+ /proc/*)
+ ;;
+ /*)
+ if touch "$MTAB_PATH" >/dev/null 2>&1
then
- rm -f /etc/mtab && ln -s /proc/mounts /etc/mtab
+ :> "$MTAB_PATH"
+ rm -f ${MTAB_PATH}~
+ INIT_MTAB_FILE=yes
+ fi
+ ;;
+ "")
+ [ -L /etc/mtab ] && MTAB_PATH="$(readlink /etc/mtab)"
+ if [ "$MTAB_PATH" ]
+ then
+ log_failure_msg "Cannot initialize ${MTAB_PATH}."
else
- log_warning_msg "cannot symlink /etc/mtab to /proc/mounts"
+ log_failure_msg "Cannot initialize /etc/mtab."
fi
+ ;;
+ *)
+ log_failure_msg "Illegal mtab location '${MTAB_PATH}'."
+ ;;
+ esac
+
+ if [ "$INIT_MTAB_FILE" = yes ]
+ then
+ [ "$roottype" != none ] &&
+ mount -f -o $rootopts -t $roottype $fstabroot /
+ [ "$devfs" ] && mount -f $devfs
fi
#
Added: sysvinit/trunk/debian/initscripts/etc/init.d/mtab.sh
===================================================================
--- sysvinit/trunk/debian/initscripts/etc/init.d/mtab.sh (rev 0)
+++ sysvinit/trunk/debian/initscripts/etc/init.d/mtab.sh 2009-06-23 10:36:19 UTC (rev 1332)
@@ -0,0 +1,180 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides: mtab
+# Required-Start: checkroot
+# Required-Stop:
+# Default-Start: S
+# Default-Stop:
+# Short-Description: Update mtab file.
+# Description: Update the mount program's mtab file after
+# all local filesystems have been mounted.
+### END INIT INFO
+
+#
+# The main purpose of this script is to update the mtab file to reflect
+# the fact that virtual filesystems were mounted early on, before mtab
+# was writable.
+#
+
+PATH=/lib/init:/sbin:/bin
+. /lib/init/vars.sh
+
+TTYGRP=5
+TTYMODE=620
+[ -f /etc/default/devpts ] && . /etc/default/devpts
+
+TMPFS_SIZE=
+[ -f /etc/default/tmpfs ] && . /etc/default/tmpfs
+
+KERNEL="$(uname -s)"
+
+. /lib/lsb/init-functions
+. /lib/init/mount-functions.sh
+
+# $1 - fstype
+# $2 - mount point
+# $3 - mount name/device
+# $4 - mount options
+domtab ()
+{
+ # Directory present?
+ if [ ! -d $2 ]
+ then
+ return
+ fi
+
+ # Not mounted?
+ if ! mountpoint -q $2 < /dev/null
+ then
+ return
+ fi
+
+ if [ -n "$3" ]
+ then
+ NAME="$3"
+ else
+ NAME="$1"
+ fi
+
+ # Already recorded?
+ if ! grep -E -sq "^([^ ]+) +$2 +" /etc/mtab < /dev/null
+ then
+ mount -f -t $1 $OPTS $4 $NAME $2 < /dev/null
+ fi
+}
+
+do_start () {
+ DO_MTAB=""
+ MTAB_PATH="$(readlink -f /etc/mtab || :)"
+ case "$MTAB_PATH" in
+ /proc/*)
+ # Assume that /proc/ is not writable
+ ;;
+ /*)
+ # Only update mtab if it is known to be writable
+ # Note that the touch program is in /usr/bin
+ #if ! touch "$MTAB_PATH" >/dev/null 2>&1
+ #then
+ # return
+ #fi
+ ;;
+ "")
+ [ -L /etc/mtab ] && MTAB_PATH="$(readlink /etc/mtab)"
+ if [ "$MTAB_PATH" ]
+ then
+ log_failure_msg "Cannot initialize ${MTAB_PATH}."
+ else
+ log_failure_msg "Cannot initialize /etc/mtab."
+ fi
+ ;;
+ *)
+ log_failure_msg "Illegal mtab location '${MTAB_PATH}'."
+ ;;
+ esac
+
+ #
+ # Initialize mtab file if necessary
+ #
+ if [ ! -f /etc/mtab ]
+ then
+ :> /etc/mtab
+ chmod 644 /etc/mtab
+ fi
+ if selinux_enabled && which restorecon >/dev/null 2>&1 && [ -r /etc/mtab ]
+ then
+ restorecon /etc/mtab
+ fi
+
+ # S02mountkernfs.sh
+ RW_OPT=
+ [ "${RW_SIZE:=$TMPFS_SIZE}" ] && RW_OPT=",size=$RW_SIZE"
+ domtab tmpfs /lib/init/rw tmpfs -omode=0755,nosuid$RW_OPT
+
+ domtab proc /proc "proc" -onodev,noexec,nosuid
+ if grep -E -qs "sysfs\$" /proc/filesystems
+ then
+ domtab sysfs /sys sysfs -onodev,noexec,nosuid
+ fi
+ if [ yes = "$RAMRUN" ] ; then
+ RUN_OPT=
+ [ "${RUN_SIZE:=$TMPFS_SIZE}" ] && RUN_OPT=",size=$RUN_SIZE"
+ domtab tmpfs /var/run "varrun" -omode=0755,nosuid$RUN_OPT
+ fi
+ if [ yes = "$RAMLOCK" ] ; then
+ LOCK_OPT=
+ [ "${LOCK_SIZE:=$TMPFS_SIZE}" ] && LOCK_OPT=",size=$LOCK_SIZE"
+ domtab tmpfs /var/lock "varlock" -omode=1777,nodev,noexec,nosuid$LOCK_OPT
+ fi
+ if [ -d /proc/bus/usb ]
+ then
+ domtab usbfs /proc/bus/usb "procbususb"
+ fi
+
+ # S03udev
+ domtab tmpfs /dev "udev" -omode=0755
+
+ # S04mountdevsubfs
+ SHM_OPT=
+ [ "${SHM_SIZE:=$TMPFS_SIZE}" ] && SHM_OPT=",size=$SHM_SIZE"
+ domtab tmpfs /dev/shm tmpfs -onosuid,nodev$SHM_OPT
+ domtab devpts /dev/pts "devpts" -onoexec,nosuid,gid=$TTYGRP,mode=$TTYMODE
+
+ # Add everything else in /proc/mounts into /etc/mtab, with
+ # special exceptions.
+ exec 9<&0 0</proc/mounts
+ while read FDEV FDIR FTYPE FOPTS REST
+ do
+ case "$FDIR" in
+ /lib/modules/*/volatile)
+ FDEV="lrm"
+ ;;
+ /dev/.static/dev)
+ # Not really useful to show in 'df',
+ # and it isn't accessible for non-root
+ # users.
+ continue
+ ;;
+ esac
+ domtab "$FTYPE" "$FDIR" "$FDEV" "-o$FOPTS"
+ done
+ exec 0<&9 9<&-
+}
+
+case "$1" in
+ start|"")
+ do_start
+ ;;
+ restart|reload|force-reload)
+ echo "Error: argument '$1' not supported" >&2
+ exit 3
+ ;;
+ stop)
+ # No-op
+ ;;
+ *)
+ echo "Usage: mountall-mtab.sh [start|stop]" >&2
+ exit 3
+ ;;
+esac
+
+:
Modified: sysvinit/trunk/debian/initscripts/postinst
===================================================================
--- sysvinit/trunk/debian/initscripts/postinst 2009-05-16 18:17:37 UTC (rev 1331)
+++ sysvinit/trunk/debian/initscripts/postinst 2009-06-23 10:36:19 UTC (rev 1332)
@@ -107,14 +107,6 @@
update-rc.d -f sendsigs remove >/dev/null 2>&1 || :
fi
-# In 2.86.ds1-62, the mtab.sh script was removed and /etc/mtab was
-# replaced with a symbolic link to /proc/mounts on Linux.
-if dpkg --compare-versions "$PREV_VER" lt "2.86.ds1-62"
-then
- update-rc.d -f mtab.sh remove >/dev/null 2>&1 || :
-fi
-
-
#
# Okay, we could do this with update-rc.d, but that would probably
# be pretty slow. This way we win some speed.
@@ -127,6 +119,7 @@
updatercd mountdevsubfs.sh start 4 S .
updatercd bootlogd start 5 S .
updatercd checkroot.sh start 10 S .
+updatercd mtab.sh start 12 S .
updatercd checkfs.sh start 30 S .
updatercd mountall.sh start 35 S .
updatercd mountall-bootclean.sh start 36 S .
@@ -168,24 +161,6 @@
done
#
-# In 2.86.ds1-62 the mtab.sh script was removed and /etc/mtab
-# replaced with a symbolic link to /proc/mounts on Linux.
-#
-# The reason for this is that /etc/mtab requires a writable root
-# filesystem, and does not support per-process namespaces. Since
-# Linux 2.6.26, /proc/mounts contains all the information that
-# /etc/mtab provided (such as extra mount options), and it is a
-# symlink to /proc/self/mounts to support per-process namespaces.
-#
-if [ "$(uname -s)" = "Linux" ]
-then
- if [ -f /etc/mtab ] && [ ! -L /etc/mtab ] && [ -f /proc/mounts ]
- then
- rm -f /etc/mtab && ln -s /proc/mounts /etc/mtab
- fi
-fi
-
-#
# Create /var/run and /var/lock on the root partition to make sure
# they are available when RAMRUN or RAMLOCK is enabled.
# If mount fail (like in a vserver environment), just clean up and ignore
Modified: sysvinit/trunk/debian/initscripts/postrm
===================================================================
--- sysvinit/trunk/debian/initscripts/postrm 2009-05-16 18:17:37 UTC (rev 1331)
+++ sysvinit/trunk/debian/initscripts/postrm 2009-06-23 10:36:19 UTC (rev 1332)
@@ -14,9 +14,7 @@
/etc/init.d/bootclean \
/etc/init.d/bootclean.dpkg-old \
/etc/init.d/bootclean.sh \
- /etc/init.d/bootclean.sh.dpkg-old \
- /etc/init.d/mtab.sh \
- /etc/init.d/mtab.sh.dpkg-old
+ /etc/init.d/bootclean.sh.dpkg-old
#
# Remove configuration files
Modified: sysvinit/trunk/debian/initscripts/preinst
===================================================================
--- sysvinit/trunk/debian/initscripts/preinst 2009-05-16 18:17:37 UTC (rev 1331)
+++ sysvinit/trunk/debian/initscripts/preinst 2009-06-23 10:36:19 UTC (rev 1332)
@@ -50,13 +50,6 @@
eliminate_conffile "/etc/init.d/bootclean"
fi
#
- # In 2.86.ds1-62, the mtab.sh script was removed and /etc/mtab was
- # replaced with a symbolic link to /proc/mounts on Linux.
- #
- if [ "$2" ] && dpkg --compare-versions "$2" lt "2.86.ds1-62" ; then
- eliminate_conffile "/etc/init.d/mtab.sh"
- fi
- #
# Move conflicting log _file_ if present
#
[ -f /var/log/fsck ] && mv -f /var/log/fsck /var/log/fsck.dpkg-old
More information about the Pkg-sysvinit-commits
mailing list