chiark / gitweb /
[PATCH] added udev.init script for the Linux From Scratch project.
authorgreg@kroah.com <greg@kroah.com>
Tue, 30 Dec 2003 08:58:31 +0000 (00:58 -0800)
committerGreg KH <gregkh@suse.de>
Wed, 27 Apr 2005 04:13:11 +0000 (21:13 -0700)
Thanks to Michael Buesch <mbuesch@freenet.de> for providing it.

etc/init.d/udev.init.lfs [new file with mode: 0644]

diff --git a/etc/init.d/udev.init.lfs b/etc/init.d/udev.init.lfs
new file mode 100644 (file)
index 0000000..08c8173
--- /dev/null
@@ -0,0 +1,103 @@
+#!/bin/sh
+#
+# LinuxFromScratch udev init script
+#  derived from original RedHat udev init script
+#  2003 by Michael Buesch <mbuesch@freenet.de>
+#
+
+source /etc/sysconfig/rc
+source $rc_functions
+
+udev_dir="/udev"
+sysfs_dir="/sys"
+bin="/sbin/udev"
+
+case "$1" in
+       start)
+               echo "Creating initial udev device nodes ..."
+               if [ ! -d $udev_dir ]; then
+                       mkdir $udev_dir
+                       if [ $? -ne 0 ]; then
+                               print_status failure
+                               exit 1
+                       fi
+               fi
+               if [ ! -d $sysfs_dir ]; then
+                       echo "sysfs_dir $sysfs_dir does not exist!"
+                       print_status failure
+                       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
+               clean_exit="yes"
+               export ACTION=add
+               # add 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
+                                       if [ $? -ne 0 ]; then
+                                               echo "Warning: $DEVPATH failed."
+                                               clean_exit="no"
+                                       fi
+                               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
+                                       if [ $? -ne 0 ]; then
+                                               echo "Warning: $DEVPATH failed."
+                                               clean_exit="no"
+                                       fi
+                               fi
+                       done
+               done
+               if [ $clean_exit = "yes" ]; then
+                       print_status success
+               else
+                       print_status warning
+               fi
+               ;;
+       stop)
+               echo "Removing udev device nodes ..."
+               # be careful
+               if [ $udev_dir -a "$udev_dir" != "/" ]; then
+                       # clear out /udev
+                       rm -rf ${udev_dir}/*
+                       evaluate_retval
+               fi
+               ;;
+       reload)
+               # nothing to do here
+               ;;
+       restart)
+               $0 stop
+               sleep 1
+               $0 start
+               ;;
+       status)
+               if [ -d $udev_dir ]; then
+                       echo "the udev device node directory exists"
+               else
+                       echo "the udev device node directory does not exist"
+               fi
+               ;;
+       *)
+               echo "Usage: $0 {start|stop|restart|status}"
+               exit 1
+               ;;
+esac
+exit 0