#! /bin/bash # # random init script to setup /udev # # chkconfig: 2345 20 80 # description: manage user-space device nodes in /udev # # 2003-12-23: - some tweaks to run silently on a debian system # 2003-12-30: - manage creation (and deletion) of /proc/self/fd->fd and # fd/[0,1,2]->std[in,out,err] links # - creation and deletion of /proc/kcore->core link # - creation and deletion of /proc/asound/oss/sndstat->sndstat link udev_dir=/udev sysfs_dir=/sys bin=/sbin/udev action () { if test $2 ; then echo $1 else echo "Assertion $2 failed" echo "Aborting" exit 1 fi } run_udev () { # handle block devices and their partitions for i in ${sysfs_dir}/block/*; do # add each drive export DEVPATH=${i#${sysfs_dir}} $bin block & # add each partition, on each device for j in $i/*; do if [ -f $j/dev ]; then export DEVPATH=${j#${sysfs_dir}} $bin block & fi done done # all other device classes for i in ${sysfs_dir}/class/*; do for j in $i/*; do if [ -f $j/dev ]; then export DEVPATH=${j#${sysfs_dir}} CLASS=`echo ${i#${sysfs_dir}} | \ cut --delimiter='/' --fields=3-` $bin $CLASS & fi done done } case "$1" in start) if [ ! -d $udev_dir ]; then mkdir $udev_dir fi # don't use udev if sysfs is not mounted if [ ! -d $sysfs_dir/block ]; then exit 1 fi # propogate /udev from /sys - we only need this while we do not # have initramfs and an early user-space with which to do early # device bring up action "Creating initial udev device nodes: " /bin/true export ACTION=add run_udev # hack to create stdin node cd $udev_dir && ln -s /proc/self/fd fd cd $udev_dir && ln -s fd/0 stdin cd $udev_dir && ln -s fd/1 stdout cd $udev_dir && ln -s fd/2 stderr cd $udev_dir && ln -s /proc/kcore core cd $udev_dir && ln -s /proc/asound/oss/sndstat sndstat ;; stop) # be careful action "Removing udev device nodes: " /bin/true export ACTION=remove run_udev rm -f $udev_dir/sndstat rm -f $udev_dir/core rm -f $udev_dir/stderr rm -f $udev_dir/stdout rm -f $udev_dir/stdin rm -f $udev_dir/fd ;; status) if [ -d $udev_dir ]; then echo "the udev device node directory exists" else echo "the udev device node directory does not exist" fi ;; restart) $0 stop $0 start ;; reload) # nothing to do here ;; *) echo "Usage: $0 {start|stop|status|restart}" exit 1 esac exit 0