#!/sbin/openrc-run # Copyright (c) 2007-2008 Roy Marples # Released under the 2-clause BSD license. description="Set up the /dev directory" depend() { provide dev-mount before dev keyword -prefix -systemd-nspawn -vserver -lxc } mount_dev() { local action=--mount devfstype msg=Mounting # Some devices require exec, Bug #92921 local mountopts="exec,nosuid,mode=0755" if yesno ${skip_mount_dev:-no} ; then einfo "/dev will not be mounted due to user request" 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 /etc/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, and there" ewarn "is no entry for /dev in fstab." ewarn "This means /dev will not be mounted." ewarn "To avoid this message, set CONFIG_DEVTMPFS or CONFIG_TMPFS to y" ewarn "in your kernel configuration or see /etc/conf.d/devfs" fi return 0 } 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 # extra symbolic links not provided by default [ -e /dev/fd ] || ln -snf /proc/self/fd /dev/fd [ -e /dev/stdin ] || ln -snf /proc/self/fd/0 /dev/stdin [ -e /dev/stdout ] || ln -snf /proc/self/fd/1 /dev/stdout [ -e /dev/stderr ] || ln -snf /proc/self/fd/2 /dev/stderr [ -e /proc/kcore ] && ln -snf /proc/kcore /dev/core # Mount required directories as user may not have them in /etc/fstab for x in \ "mqueue /dev/mqueue 1777 ,nodev mqueue" \ "devpts /dev/pts 0755 ,gid=5,mode=0620 devpts" \ "tmpfs /dev/shm 1777 ,nodev,mode=1777 shm" \ ; do set -- $x grep -Eq "[[:space:]]+$1$" /proc/filesystems || continue mountinfo -q $2 && continue if [ ! -d $2 ]; then mkdir -m $3 -p $2 >/dev/null 2>&1 || \ ewarn "Could not create $2!" fi if [ -d $2 ]; then ebegin "Mounting $2" if ! fstabinfo --mount $2; then mount -n -t $1 -o noexec,nosuid$4 $5 $2 fi eend $? fi done } restorecon_dev() { if [ -x /sbin/restorecon ]; then ebegin "Restoring SELinux contexts in /dev" restorecon -rF /dev >/dev/null 2>&1 eend $? fi return 0 } start() { mount_dev seed_dev restorecon_dev return 0 }