udev initscript for testing

nestu nestu at lunar-linux.org
Fri Mar 5 12:59:46 GMT 2004


Hello udev users ;)
I've attached a udev initscript that florin and I need to 
test. It works for me and not for florin, so we need a 
little more testing, to see what's wrong (we don't seeem to 
find the problem). If we get good feedback, we'll add it to 
udev module, and bump to 021. The attached udev must go in 
whatever placement your lin'ed udev put it, because it could 
have been installed under /etc/rc.d/init.d/ or /etc/init.d/ 
( *please* check lvu install udev to know where it was placed).
TIA,
nestu && florin
-- 
Lunar Linux		http://www.lunar-linux.org
XFce Desktop		http://www.xfce.org
#OnlyLinux LUG		http://www.onlylinux.no-ip.org

QOTD:
<Fuzzbox> "Lunar dev looking for a pretty girl to show her 
the stars"

QOT?:
<Veerappan> also, i'm upset.  my roommate's treadmill is too 
short.
<Veerappan> another foot, and my bike would fit :)

-------------- next part --------------
#! /bin/bash -x
#
# udev	init script to setup /udev
#
# chkconfig: 2345 20 80
# description: manage user-space device nodes in /udev

# . /etc/rc.d/init.d/functions

. /etc/udev/udev.conf

prog=udev
sysfs_dir=/sys
bin=/sbin/udev
udevd=/sbin/udevd
udev_root=/udev

# **** Added by florin && nestu, 2004/03/05 ****

# if this subdir doesn't exist, create it
test -d /var/lock/subsys/ || mkdirhier /var/lock/subsys/

# originally in /etc/rc.d/init.d/functions, it has been changed
# and brought here
success() {
    
    RES_COL=60
    MOVE_TO_COL="echo -en \\033[${RES_COL}G"
    SETCOLOR_SUCCESS="echo -en \\033[1;32m"
    SETCOLOR_NORMAL="echo -en \\033[0;39m"

  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
  echo -n "[  "
  [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS
  echo -n $"OK"
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  echo -n "  ]"
  echo -ne "\r"
  return 0
}

# **** end added by nestu && florin, 2004/03/05 ****


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
	return 0
}

make_extra_nodes () {
	# there are a few things that sysfs does not export for us.
	# these things go here (and remember to remove them in 
	# remove_extra_nodes()
	#
	# Thanks to Gentoo for the initial list of these.
	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
	#ln -snf /proc/asound/oss/sndstat $udev_root/sndstat
}

remove_extra_nodes () {
	# get rid of the extra nodes created in make_extra_nodes()
	rm $udev_root/fd
	rm $udev_root/stdin
	rm $udev_root/stdout
	rm $udev_root/stderr
	rm $udev_root/core
	#rm $udev_root/sndstat
}

case "$1" in
  start)
	# don't use udev if sysfs is not mounted.
	if [ ! -d $sysfs_dir/block ]; then
		exit 1
	fi
	if [ ! -d $udev_root ]; then
		mkdir $udev_root
	fi

	# remove the database if it is there as we always want to start fresh
	if [ -f $udev_root/.udev.tdb ]; then
		rm -f $udev_root/.udev.tdb
	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
	export ACTION=add
	echo -n $"Creating initial udev device nodes:"
	run_udev
	make_extra_nodes

	# We want to start udevd ourselves if it isn't already running.  This
	# lets udevd run at a sane nice level...
	$udevd &

	success /bin/true
	echo
	touch /var/lock/subsys/udev
	;;
  stop)
  	# be careful
	echo -n $"Removing udev device nodes: "
	export ACTION=remove
	run_udev 
	remove_extra_nodes
	success /bin/true
	echo
	rm -f /var/lock/subsys/udev
	;;
  status)
	if [ -f /var/lock/subsys/udev ]; then
		echo $"$prog has run"
		exit 0
	fi
	echo $"$prog is stopped"
	exit 3
	;;
  restart)
	$0 stop
	$0 start
	;;
  reload)
  	# nothing to do here
	;;
  *)
  	echo "Usage: $0 {start|stop|status|restart}"
	exit 1
esac

exit 0



More information about the Lunar mailing list