#! /bin/sh ### BEGIN INIT INFO # Provides: mountvirtfs # Required-Start: # Required-Stop: # Default-Start: S # Default-Stop: # Short-Description: Mount virtual (kernel) file systems. # Description: Mount all the virtual filesystems the kernel # provides and that are required by default. # # This script can be called several times without # damage; it tries to mount the virtual filesystems # only if not mounted yet, and only updates /etc/mtab # if it is writable and there is a need to. # # This functionality was previously provided by # mountkernfs from the glibc package. ### END INIT INFO # # Version: @(#)mountvirtfs 2.85-23 29-Jul-2004 miquels # # Script needs to be robust and continue when parts fail, # so we're not setting the "-e" flag. #set -e PATH=/lib/init:/bin:/sbin . /lib/init/functions.sh TTYGRP=5 TTYMODE=620 if [ -f /etc/default/devpts ] then . /etc/default/devpts fi TMPFS_SIZE= if [ -f /etc/default/tmpfs ] then . /etc/default/tmpfs fi KERNEL=`uname -s` umask 022 domount () { # Directory present ? if [ ! -d $3 ] then return fi # Do we support this filesystem type ? TYPE= if [ "$1" = proc ] then case "$KERNEL" in Linux|GNU) TYPE=proc ;; *FreeBSD) TYPE=linprocfs ;; *) TYPE=procfs ;; esac elif grep -E -qs "$1\$" /proc/filesystems then TYPE=$1 elif grep -E -qs "$2\$" /proc/filesystems then TYPE=$2 fi if [ "$TYPE" = "" ] then return fi # # Get the options from /etc/fstab. # OPTS= if [ -f /etc/fstab ] then exec 9<&0 0 /dev/null 2>&1 then DO_MTAB=Yes MOUNT_N= fi ;; esac if [ -n "$DO_MTAB" ] && [ ! -f /etc/mtab ] then :> /etc/mtab fi if selinux_enabled && [ -x /sbin/restorecon ] && [ -r /etc/mtab ]; then /sbin/restorecon /etc/mtab fi # Mount standard /proc and /sys. domount proc "" /proc domount sysfs "" /sys # Mount /dev/pts. Create master ptmx node if needed. # # As of 2.5.68, devpts is not automounted when using devfs. So we # mount devpts if it is compiled in (older devfs didn't require it # to be compiled in at all). # if [ "$KERNEL" = Linux ] then # # Since kernel 2.5.something, devfs doesn't include # a standard /dev/pts directory anymore. So if devfs # is mounted on /dev we need to create that directory # manually. # if grep -qs '/dev devfs' /proc/mounts then if [ ! -d /dev/pts ] then mkdir /dev/pts fi fi if [ -d /dev/pts ] then if dir_writable /dev && [ ! -c /dev/ptmx ] then mknod --mode=666 /dev/ptmx c 5 2 fi domount devpts "" /dev/pts -ogid=$TTYGRP,mode=$TTYMODE fi fi # Mount tmpfs. # # Around kernel version 2.3.3x, a memory based filesystem was # introduced to support POSIX shared memory, called shmfs. # Later this filesystem was extended for general usage - # provided you set the CONFIG_TMPFS compile option and mount # it as type tmpfs. # # Early in the 2.4 kernel series, shmfs was renamed to tmpfs, but # you could mount it using both type shmfs and tmpfs. Starting # at kernel version 2.5.44, the shmfs alias was dropped. # # Confusingly, in kernels 2.3.x - 2.5.43 where both shmfs and # tmpfs are present, disabling CONFIG_TMPFS actually removes # support for shmfs, but tmpfs is still listed in /proc/filesystems # to support SYSV and POSIX shared memory, and it should still be # mounted under /dev/shm. # # Recommendation: always enable CONFIG_TMPFS and always mount # using the tmpfs type. Forget about shmfs. # # Tmpfs can be used as memory filesystem, so you can limit tmpfs # max size using /etc/default/tmpfs to prevent tmpfs from using # up all system memory. # if [ -n "$TMPFS_SIZE" ] then tmpfs_opt="-osize=${TMPFS_SIZE}" fi domount tmpfs shmfs /dev/shm $tmpfs_opt # Mount usbfs/usbdevfs if /proc/bus/usb is present. # # Usbfs/usbdevfs is used for USB related binaries/libraries. # "usbfs" and "usbdevfs" are the exact same filesystem. # "usbdevfs" was renamed to "usbfs" by linux usb developers, # because people sometimes mistook it as a part of devfs. Usbfs # will be superseded by other filesystems (e.g. sysfs), and when # it becomes obsolete the mount action below should be removed. # if [ -d /proc/bus/usb ] then domount usbfs usbdevfs /proc/bus/usb fi } case "$1" in start) do_start ;; restart|reload|force-reload) echo "Error: argument '$1' not supported" >&2 exit 3 ;; stop) ;; *) echo "Usage: $0 start|stop" >&2 exit 3 ;; esac