Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > 38f65ea438a86e0d7c0fb045e4c010b1 > files > 245

initng-ifiles-0.1.5-4.fc12.x86_64.rpm

#!/sbin/itype
# This is a i file, used by initng parsed by install_service

# NAME: udev
# DESCRIPTION: The Linux Userspace Device filesystem
# WWW: http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html

virtual system/udev {
	critical;
	need = system/udev/filldev system/udev/udevd;
	also_start = system/udev/move_rules system/udev/retry_failed;
}

# start the udev daemon
daemon system/udev/udevd {
	critical;
	need = system/udev/mountdev system/initial/mountvirtfs;
	respawn;
	exec daemon = /sbin/udevd;
}

# copy the rules generated before / was mounted read-write
service system/udev/move_rules {
	need = system/udev/udevd system/mountroot/rootrw;
	script start = {
		for file in /dev/.udev/tmp-rules--*
		do
			dest=${file##*tmp-rules--}
			[ "$dest" = '*' ] && break
			{
				/bin/cp $file /etc/udev/rules.d/$dest
				rm -f $file
			} &
		done
		wait
	};
}

service system/udev/retry_failed {
	need = system/udev/udevd system/mountfs/essential system/udev/move_rules;
	script start = {
		[ -x "/sbin/udevtrigger" ] || exit 0

		# Check if it supports the --retry-failed argument before
		# calling.
		/sbin/udevtrigger --help 2>&1 | grep -q -- --retry-failed &&
		/sbin/udevtrigger --retry-failed
		exit 0
	};
}

service system/udev/mountdev {
	critical;
	need = system/initial/mountvirtfs;
	script start = {
		error() {
			echo "${*}" >&2
			exit 1
		}

		[ -e /proc/filesystems ] || error "udev requires a mounted procfs, not started."
		/bin/grep -q '[[:space:]]tmpfs$' /proc/filesystems || error "udev requires tmpfs support, not started."
		[ -d /sys/block ] || error "udev requires a mounted sysfs, not started."

		# mount a tmpfs over /dev, if somebody did not already do it
		/bin/grep -Eq "^[^[:space:]]+[[:space:]]+/dev[[:space:]]+tmpfs[[:space:]]+" /proc/mounts && exit 0

		if ! /bin/mount -n -o size=$tmpfs_size,mode=0755 -t tmpfs udev /dev
		then
			/bin/umount -n /etc/udev
			error "udev in /dev his own filesystem (tmpfs), not started."
		fi

		# Make some default static onces, so we are sure they will exist.
		/bin/mknod -m0666 /dev/null c 1 3
		/bin/mknod -m0666 /dev/zero c 1 5
		/bin/mknod /dev/console c 5 1

		# Send SIGHUP to initng, will reopen /dev/initctl and
		# /dev/initng.
		# we can't assume that initng has pid 1, e.g. when booting
		# from initrd
		# (NOTE: this happen only on a few distros, and is weird)
		/bin/killall -HUP initng

		exit 0
	};
}

# fill /dev
service system/udev/filldev {
	critical;
	need = system/udev/udevd;

	script start = {
		ln -sf input/mice /dev/mouse

		# Copy contents of /etc/udev/devices and /lib/udev/devices
	        for devdir in /etc/udev/devices /lib/udev/devices; do
        	        if [ -d "$devdir" ]
			then
			{
               			cd $devdir &&
				tar c . | tar x --directory=/dev/
			} &
			fi
		done

		#Don't know why, but this seems to be needed on Fedora...
		/bin/ln -snf /proc/self/fd /dev/fd

		#Parse through stuff in /etc/udev/makedev.d to add nodes
		xargs_simple () {
			ARGS=""
			while read line; do
        			ARGS="$ARGS $line"
			done
			if [ -n "$ARGS" ]; then
				"$@" $ARGS
			fi 
		}
		for i in /etc/udev/makedev.d/*.nodes; do
			if [ -f "$i" ]; then
				( /bin/sed -e 's,#.*,,g' "$i" | \
					xargs_simple /usr/sbin/MAKEDEV -x ) &
			fi
		done 

		if [ ! -e /etc/udev/links.conf -a ! -d /lib/udev/devices ]
		then
			# Some manually, just to be sure.
			/bin/ln -snf /proc/self/fd /dev/fd &
			/bin/ln -snf fd/0 /dev/stdin &
			/bin/ln -snf fd/1 /dev/stdout &
			/bin/ln -snf fd/2 /dev/stderr &
			/bin/ln -snf /proc/kcore /dev/core &
			/bin/ln -snf /proc/asound/oss/sndstat /dev/sndstat &
			wait
		fi

		# udevtrigger is available since udev 088
		# udevsettle is available since udev 090

		# if this directories are not present /dev will not be updated by udev
		/bin/mkdir -p /dev/.udev/db/ /dev/.udev/queue/

		# send hotplug events
		/sbin/udevtrigger

		# wait for the udevd childs to finish
		/sbin/udevsettle

		chmod 0666 /dev/null

	};
}