diff options
Diffstat (limited to 'beagle/debian-rfs/lib/init/mount-functions.sh')
| -rw-r--r-- | beagle/debian-rfs/lib/init/mount-functions.sh | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/beagle/debian-rfs/lib/init/mount-functions.sh b/beagle/debian-rfs/lib/init/mount-functions.sh new file mode 100644 index 0000000..007d127 --- /dev/null +++ b/beagle/debian-rfs/lib/init/mount-functions.sh @@ -0,0 +1,165 @@ +# +# Functions used by several mount* scripts in initscripts package +# +# Sourcer must source /lib/lsb/init-functions.sh + +# $1: directory +is_empty_dir() { + for FILE in $1/* $1/.* + do + case "$FILE" in + "$1/.*") return 0 ;; + "$1/*"|"$1/."|"$1/..") continue ;; + *) return 1 ;; + esac + done + return 0 +} + + +selinux_enabled () { + which selinuxenabled >/dev/null 2>&1 && selinuxenabled +} + + +# Called before mtab is writable to mount kernel and device file systems. +# $1: file system type +# $2: alternative file system type (or empty string if none) +# $3: mount point +# $4: mount device name +# $5... : extra mount program options +domount () { + MTPT="$3" + KERNEL="$(uname -s)" + # Figure out filesystem type + FSTYPE= + if [ "$1" = proc ] + then + case "$KERNEL" in + Linux|GNU) FSTYPE=proc ;; + *FreeBSD) FSTYPE=linprocfs ;; + *) FSTYPE=procfs ;; + esac + elif [ "$1" = tmpfs ] + then # always accept tmpfs, to mount /lib/init/rw before /proc + FSTYPE=$1 + elif grep -E -qs "$1\$" /proc/filesystems + then + FSTYPE=$1 + elif grep -E -qs "$2\$" /proc/filesystems + then + FSTYPE=$2 + fi + + if [ ! "$FSTYPE" ] + then + if [ "$2" ] + then + log_warning_msg "Filesystem types '$1' and '$2' are not supported. Skipping mount." + else + log_warning_msg "Filesystem type '$1' is not supported. Skipping mount." + fi + return + fi + + # We give file system type as device name if not specified as + # an argument + if [ "$4" ] ; then + DEVNAME=$4 + else + DEVNAME=$FSTYPE + fi + + # Get the options from /etc/fstab. + OPTS= + if [ -f /etc/fstab ] + then + exec 9<&0 </etc/fstab + + while read TAB_DEV TAB_MTPT TAB_FSTYPE TAB_OPTS TAB_REST + do + case "$TAB_DEV" in (""|\#*) continue ;; esac + [ "$MTPT" = "$TAB_MTPT" ] || continue + [ "$FSTYPE" = "$TAB_FSTYPE" ] || continue + case "$TAB_OPTS" in + noauto|*,noauto|noauto,*|*,noauto,*) + exec 0<&9 9<&- + return + ;; + ?*) + OPTS="-o$TAB_OPTS" + ;; + esac + break + done + + exec 0<&9 9<&- + fi + + if [ ! -d "$MTPT" ] + then + log_warning_msg "Mount point '$MTPT' does not exist. Skipping mount." + return + fi + + if mountpoint -q "$MTPT" + then + return # Already mounted + fi + + if [ "$VERBOSE" != "no" ]; then + is_empty_dir "$MTPT" >/dev/null 2>&1 || log_warning_msg "Files under mount point '$MTPT' will be hidden." + fi + mount -n -t $FSTYPE $5 $OPTS $DEVNAME $MTPT + if [ "$FSTYPE" = "tmpfs" -a -x /sbin/restorecon ]; then + /sbin/restorecon $MTPT + fi +} + +# +# Preserve /var/run and /var/lock mountpoints +# +pre_mountall () +{ + # We may end up mounting something over top of /var, either directly + # or because /var is a symlink to something that's mounted. So keep + # copies of the /var/run and /var/lock mounts elsewhere on the root + # filesystem so they can be moved back. + if [ yes = "$RAMRUN" ] ; then + mkdir /lib/init/rw/var.run + mount -n --bind /var/run /lib/init/rw/var.run + fi + if [ yes = "$RAMLOCK" ] ; then + mkdir /lib/init/rw/var.lock + mount -n --bind /var/lock /lib/init/rw/var.lock + fi +} + +# +# Restore /var/run and /var/lock mountpoints if something was mounted +# as /var/. Avoid mounting them back over themselves if nothing was +# mounted as /var/ by checking if /var/run/ and /var/lock/ are still +# mount points. Enabling RAMRUN and RAMLOCK while listing /var/run or +# /var/lock in /etc/fstab is not supported. +# +post_mountall () +{ + if [ yes = "$RAMRUN" ] ; then + [ -d /var/run ] || mkdir /var/run + if mountpoint -q /var/run ; then + umount /lib/init/rw/var.run + else + mount -n --move /lib/init/rw/var.run /var/run + fi + rmdir /lib/init/rw/var.run + fi + if [ yes = "$RAMLOCK" ] ; then + [ -d /var/lock ] || mkdir /var/lock + if mountpoint -q /var/lock ; then + umount /lib/init/rw/var.lock + else + mount -n --move /lib/init/rw/var.lock /var/lock + fi + rmdir /lib/init/rw/var.lock + fi +} |
