-udevd=/sbin/udevd
-MAKEDEV="/sbin/MAKEDEV"
-
-make_extra_nodes () {
- ln -snf /proc/self/fd $udev_root/fd
- ln -snf /proc/self/fd/0 $udev_root/stdin
- ln -snf /proc/self/fd/1 $udev_root/stdout
- ln -snf /proc/self/fd/2 $udev_root/stderr
- ln -snf /proc/kcore $udev_root/core
-
- [ -d $udev_root/pts ] || (mkdir $udev_root/pts;chmod 0755 $udev_root/pts)
- [ -d $udev_root/shm ] || (mkdir $udev_root/shm;chmod 0755 $udev_root/shm)
-
- if [ -x $MAKEDEV ]; then
- $MAKEDEV -x $(
- for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
- echo cpu/$i/microcode;
- done;
- for i in 1 2 3 4 5 6; do echo tty$i;done;
- for i in 0 1 2 3 4 5 6 7; do echo loop$i; done;
- for i in 0 1 2 3; do echo lp$i; echo parport$i;done;
- echo net/tun ppp console null zero;
- );
- [ -a /dev/MAKEDEV ] || ln -s $MAKEDEV /dev/MAKEDEV;
- cp -a /etc/udev/devices/* /dev/ >/dev/null 2>&1 || :
- fi
+udevd=/lib/udev/udevd
+# trim traling slash, code expects it not to be there
+udev_root=${udev_root%/}
+
+create_static_nodes() {
+ /sbin/kmod static-nodes --format=tmpfiles | \
+ while read type file mode uid gid age dev ; do
+ case $type in
+ d|D)
+ mkdir -p --mode=$mode $file
+ ;;
+ *)
+ oldIFS=$IFS
+ IFS=":"
+ set -- $dev
+ maj=$1
+ min=$2
+ IFS=$oldIFS
+ mknod --mode=$mode $file $type $maj $min
+ ;;
+ esac
+ [ $uid = "-" ] || chown $uid $file
+ [ $gid = "-" ] || chgrp $gid $file
+ done
+}
+
+make_extra_nodes() {
+ grep '^[^#]' /etc/udev/links.conf | \
+ while read type name arg1; do
+ [ "$type" -a "$name" -a ! -e "$udev_root/$name" -a ! -L "/dev/$name" ] ||continue
+ case "$type" in
+ L) ln -s $arg1 $udev_root/$name ;;
+ D) mkdir -p $udev_root/$name ;;
+ M) mknod -m 600 /dev/$name $arg1 ;;
+ *) echo "links.conf: unparseable line ($type $name $arg1)" ;;
+ esac
+ done
+ [ -d /lib/udev/devices ] && cp -a /lib/udev/devices/* /dev/ >/dev/null 2>&1 || :
+ [ -d /lib64/udev/devices ] && cp -a /lib64/udev/devices/* /dev/ >/dev/null 2>&1 || :