aboutsummaryrefslogtreecommitdiff
path: root/init.d/devfs.in
diff options
context:
space:
mode:
authorWilliam Hubbs <w.d.hubbs@gmail.com>2013-12-01 16:31:02 -0600
committerWilliam Hubbs <w.d.hubbs@gmail.com>2014-01-05 11:17:05 -0600
commit8352082eb6582d6e7adc26fc64dfd2255eadf2a7 (patch)
tree5ab9cc19faa82d90e85e3787f39b5983c2df3bb5 /init.d/devfs.in
parent3470eda3f5cea437a6de132b1ead3f27effd3902 (diff)
devfs: add code to mount /dev
All Linux systems need /dev to be set up,so add code to devfs to do this. The process devfs follows is below. 1. If static_dev is yes, nothing is done. 2. if /dev is an entry in fstab it is mounted or remounted based on that entry. 3. If /dev is not in fstab, it attempts to mount /dev as a devtmpfs or tmpfs depending on which is defined in the kernel; devtmpfs is preferred. 4. If neither devtmpfs nor tmpfs is defined, it assumes the user wants static /dev and prints a warning. X-Gentoo-Bug: 492694 X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=492694
Diffstat (limited to 'init.d/devfs.in')
-rw-r--r--init.d/devfs.in70
1 files changed, 66 insertions, 4 deletions
diff --git a/init.d/devfs.in b/init.d/devfs.in
index 5c167b02..7fba8820 100644
--- a/init.d/devfs.in
+++ b/init.d/devfs.in
@@ -2,15 +2,71 @@
# Copyright (c) 2007-2008 Roy Marples <roy@marples.name>
# Released under the 2-clause BSD license.
-description="Mount system critical filesystems in /dev."
+description="Set up the /dev directory"
-depend() {
- use dev-mount
+depend()
+{
+ provide dev-mount
before dev
keyword -prefix -vserver -lxc
}
-start() {
+mount_dev()
+{
+ local action=--mount devfstype msg=Mounting
+ # Some devices require exec, Bug #92921
+ local mountopts="exec,nosuid,mode=0755"
+ if yesno ${static_dev:-no}; then
+ einfo "Using static /dev"
+ return 0
+ fi
+ if mountinfo -q /dev; then
+ action=--remount
+ mountopts="remount,$mountopts"
+ msg=Remounting
+ fi
+ if fstabinfo -q /dev; then
+ ebegin "$msg /dev according to @SYSCONFDIR@/fstab"
+ fstabinfo -q $action /dev
+ eend $?
+ return 0
+ fi
+ if grep -q devtmpfs /proc/filesystems; then
+ devfstype=devtmpfs
+ mountopts="$mountopts,size=10M"
+ elif grep -q tmpfs /proc/filesystems; then
+ devfstype=tmpfs
+ mountopts="$mountopts,size=10M"
+ fi
+ if [ -n "$devfstype" ]; then
+ ebegin "$msg $devfstype on /dev"
+ mount -n -t $devfstype -o $mountopts dev /dev
+ eend $?
+ else
+ ewarn "This kernel does not have devtmpfs or tmpfs support."
+ ewarn "Assuming you want static /dev. If this is not the case,"
+ ewarn "please set the CONFIG_DEVTMPFS or CONFIG_TMPFS option"
+ ewarn "in your kernel."
+ fi
+}
+
+seed_dev()
+{
+ # Seed /dev with some things that we know we need
+
+ # creating /dev/console, /dev/tty and /dev/tty1 to be able to write
+ # to $CONSOLE with/without bootsplash before udevd creates it
+ [ -c /dev/console ] || mknod -m 600 /dev/console c 5 1
+ [ -c /dev/tty1 ] || mknod -m 620 /dev/tty1 c 4 1
+ [ -c /dev/tty ] || mknod -m 666 /dev/tty c 5 0
+
+ # udevd will dup its stdin/stdout/stderr to /dev/null
+ # and we do not want a file which gets buffered in ram
+ [ -c /dev/null ] || mknod -m 666 /dev/null c 1 3
+
+ # so udev can add its start-message to dmesg
+ [ -c /dev/kmsg ] || mknod -m 660 /dev/kmsg c 1 11
+
# Mount required stuff as user may not have then in /etc/fstab
for x in \
"mqueue /dev/mqueue 1777 ,nodev mqueue" \
@@ -34,5 +90,11 @@ start() {
eend $?
fi
done
+}
+
+start()
+{
+ mount_dev
+ seed_dev
return 0
}