122 lines
3.1 KiB
Plaintext
122 lines
3.1 KiB
Plaintext
|
#!/sbin/openrc-run
|
||
|
# Copyright (c) 2007-2008 Roy Marples <roy@marples.name>
|
||
|
# 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
|
||
|
}
|