File boot.udev of Package udev

#!/bin/sh
#
### BEGIN INIT INFO
# Provides:          boot.udev
# Required-Start:
# Required-Stop:
# Should-Start:
# Should-Stop:
# Default-Start:     B
# Default-Stop:
# Short-Description: manage /dev and kernel device-events
# Description:       udevd daemon to manage /dev and kernel device events
### END INIT INFO

. /etc/rc.status

PATH="/sbin:/bin"
DAEMON=/sbin/udevd
udevd_args="--daemon"
udev_timeout=180

root_symlink_rule() {
	eval $(/sbin/udevadm info --export --export-prefix=ROOT_ --device-id-of-file=/)
	[ "$ROOT_MAJOR" -gt 0 ] || return

	mkdir -m 0755 -p /dev/.udev/rules.d/
	echo "\
ACTION==\"add|change\", SUBSYSTEM==\"block\", \
ENV{MAJOR}==\"$ROOT_MAJOR\", ENV{MINOR}==\"$ROOT_MINOR\", \
SYMLINK+=\"root\"" > /dev/.udev/rules.d/10-root-symlink.rules
}

case "$1" in
	start)
		# disable uevent helper, udevd listens to netlink
		echo "" > /sys/kernel/uevent_helper

		# start without database from initramfs
		rm -rf /dev/.udev

		# create /dev/root symlink with dynamic rule
		root_symlink_rule

		# start udevd
		echo -n "Starting udevd: "
		$DAEMON $udevd_args
		if [ $? -ne 0 ]; then
			rc_status -v
			rc_exit
		fi
		rc_status -v

		# trigger events for all devices
		echo -n "Loading drivers, configuring devices: "
		/sbin/udevadm trigger

		# wait for events to finish
		/sbin/udevadm settle --timeout=$udev_timeout
		rc_status -v
		;;
	stop)
		echo -n "Stopping udevd: "
		killproc $DAEMON
		rc_status -v
		;;
	restart)
		echo -n "Restarting udevd: "
		killproc $DAEMON
		$DAEMON $udevd_args
		rc_status -v
		;;
	status)
		echo -n "Checking for udevd: "
		checkproc /sbin/udevd
		rc_status -v
		;;
	reload)
		echo -n "Reloading udev rules: "
		/sbin/udevadm control reload_rules
		cp --preserve=all --recursive --update /lib/udev/devices/* /dev
		rc_status -v
		;;
	force-reload)
		echo -n "Restarting udev and reconfiguring all devices: "
		killproc $DAEMON
		rm -rf /dev/.udev /dev/disk
		cp --preserve=all --recursive --update /lib/udev/devices/* /dev
		root_symlink_rule
		$DAEMON $udevd_args
		/sbin/udevadm trigger
		/sbin/udevadm settle --timeout=$udev_timeout
		rc_status -v
		;;
	*)
		echo "Usage: $0 {start|stop|restart|status|reload|force-reload}"
		exit 1
		;;
esac
rc_exit
openSUSE Build Service is sponsored by