blob: 07519188eed2031d6432e26ee45919484787018d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
udev_version() {
local version=0
if [[ -x /sbin/udev ]] ; then
version=$(/sbin/udev -V)
# We need it without a leading '0', else bash do the wrong thing
version=${version##0}
# Older udev's will print nothing
[[ -z ${version} ]] && version=0
fi
echo "${version}"
}
populate_udev() {
# Now populate /dev
/sbin/udevstart
# Not provided by sysfs but needed
ln -snf /proc/self/fd /dev/fd
ln -snf fd/0 /dev/stdin
ln -snf fd/1 /dev/stdout
ln -snf fd/2 /dev/stderr
[[ -e /proc/kcore ]] && ln -snf /proc/kcore /dev/core
# Create nodes that udev can't
[[ -x /sbin/dmsetup ]] && /sbin/dmsetup mknodes &>/dev/null
[[ -x /sbin/lvm ]] && \
/sbin/lvm vgscan -P --mknodes --ignorelockingfailure &>/dev/null
[[ -x /sbin/evms_activate ]] && /sbin/evms_activate -q &>/dev/null
# Create problematic directories
mkdir -p /dev/{pts,shm}
# Same thing as /dev/.devfsd
touch /dev/.udev
return 0
}
main() {
# Setup temporary storage for /dev
ebegin "Mounting /dev for udev"
if [[ ${RC_USE_FSTAB} == "yes" ]] ; then
mntcmd=$(get_mount_fstab /dev)
else
unset mntcmd
fi
if [[ -n ${mntcmd} ]] ; then
try mount -n ${mntcmd}
else
if egrep -qs tmpfs /proc/filesystems ; then
mntcmd="tmpfs"
else
mntcmd="ramfs"
fi
# many video drivers require exec access in /dev #92921
try mount -n -t ${mntcmd} udev /dev -o exec,nosuid,mode=0755
fi
eend $?
# Selinux lovin; /selinux should be mounted by selinux-patched init
if [[ -x /sbin/restorecon && -c /selinux/null ]] ; then
restorecon /dev &> /selinux/null
fi
# Actually get udev rolling
ebegin "Configuring system to use udev"
if [[ ${RC_DEVICE_TARBALL} == "yes" && \
-s /lib/udev-state/devices.tar.bz2 ]] ; then
einfo " Populating /dev with device nodes ..."
try tar -jxpf /lib/udev-state/devices.tar.bz2 -C /dev
fi
populate_udev
# Setup hotplugging (if possible)
if [[ -e /proc/sys/kernel/hotplug ]] ; then
if [[ $(udev_version) -ge "48" ]] ; then
einfo " Setting /sbin/udevsend as hotplug agent ..."
echo "/sbin/udevsend" > /proc/sys/kernel/hotplug
elif [[ -x /sbin/hotplug ]] ; then
einfo " Using /sbin/hotplug as hotplug agent ..."
else
einfo " Setting /sbin/udev as hotplug agent ..."
echo "/sbin/udev" > /proc/sys/kernel/hotplug
fi
fi
eend 0
}
main
# vim:ts=4
|