[PATCH] LSB init script and other stuff

I had too much time during the holidays, so I played a bit with udev. The
changes are like last time mostly on the init stuff. I'm sending you this as
a great diff which is just for comments.

What it does:
-fix a typo in Makefile
-use only one "grep -v" instead of many
-don't include BK-Files into release (shrinks the stuff to 30%!)
-add a new init script which is LSB compliant
-add some flags to choose which one to use
-use /etc/udev/udev.conf in Redhat init script as the source for the udev
directory. If this is not done then the init script may create a directory
which udev itself isn't using (I changed /udev to /Udev to avoid collisions
with /usr and ran into this)
-first check for sysfs_dir before creating udev_root (maybe someone else has
already fixed this, I saw this discussion on lkml)
This commit is contained in:
eike-hotplug@sf-tec.de 2004-01-10 01:19:57 -08:00 committed by Greg KH
parent 40041ff4f1
commit e64280b8b3
5 changed files with 159 additions and 14 deletions

View File

@ -61,7 +61,7 @@ udevdir = ${prefix}/udev
#USE_KLIBC = true #USE_KLIBC = true
# If you are running a cross compiler, you may want to set this # If you are running a cross compiler, you may want to set this
# to something more interesting, like "arm-linux-". I you want # to something more interesting, like "arm-linux-". If you want
# to compile vs uClibc, that can be done here as well. # to compile vs uClibc, that can be done here as well.
CROSS = #/usr/i386-linux-uclibc/usr/bin/i386-uclibc- CROSS = #/usr/i386-linux-uclibc/usr/bin/i386-uclibc-
CC = $(CROSS)gcc CC = $(CROSS)gcc
@ -231,7 +231,7 @@ clean:
-C $$target $@ ; \ -C $$target $@ ; \
done ; \ done ; \
DISTFILES = $(shell find . \( -not -name '.' \) -print | grep -v CVS | grep -v "\.tar\.gz" | grep -v "\/\." | grep -v releases | grep -v BitKeeper | grep -v SCCS | grep -v "\.tdb" | grep -v "test\/sys" | sort ) DISTFILES = $(shell find . \( -not -name '.' \) -print | grep -v -e CVS -e "\.tar\.gz$" -e "\/\." -e releases -e BitKeeper -e SCCS -e "\.tdb$" -e test/sys | sort )
DISTDIR := $(RELEASE_NAME) DISTDIR := $(RELEASE_NAME)
srcdir = . srcdir = .
release: clean release: clean
@ -292,13 +292,16 @@ install-config: $(GEN_CONFIGS)
$(INSTALL_DATA) $(LOCAL_CFG_DIR)/udev.permissions $(DESTDIR)$(configdir); \ $(INSTALL_DATA) $(LOCAL_CFG_DIR)/udev.permissions $(DESTDIR)$(configdir); \
fi fi
install: install-config install-dbus-policy all install: install-config install-dbus-policy all
$(INSTALL) -d $(DESTDIR)$(udevdir) $(INSTALL) -d $(DESTDIR)$(udevdir)
$(INSTALL) -d $(DESTDIR)$(hotplugdir) $(INSTALL) -d $(DESTDIR)$(hotplugdir)
$(INSTALL_PROGRAM) -D $(ROOT) $(DESTDIR)$(sbindir)/$(ROOT) $(INSTALL_PROGRAM) -D $(ROOT) $(DESTDIR)$(sbindir)/$(ROOT)
$(INSTALL_PROGRAM) -D etc/init.d/udev $(DESTDIR)$(initdir)/udev @if [ "x$(USE_LSB)" = "xtrue" ]; then \
$(INSTALL_PROGRAM) -D etc/init.d/udev.init.LSB $(DESTDIR)$(initdir)/udev
ln -s $(DESTDIR)$(initdir)/udev $(sbin_dir)/rcudev
else
$(INSTALL_PROGRAM) -D etc/init.d/udev $(DESTDIR)$(initdir)/udev
fi
$(INSTALL_DATA) -D udev.8 $(DESTDIR)$(mandir)/man8/udev.8 $(INSTALL_DATA) -D udev.8 $(DESTDIR)$(mandir)/man8/udev.8
- rm -f $(DESTDIR)$(hotplugdir)/udev.hotplug - rm -f $(DESTDIR)$(hotplugdir)/udev.hotplug
- ln -f -s $(sbindir)/$(ROOT) $(DESTDIR)$(hotplugdir)/udev.hotplug - ln -f -s $(sbindir)/$(ROOT) $(DESTDIR)$(hotplugdir)/udev.hotplug
@ -324,5 +327,3 @@ uninstall: uninstall-dbus-policy
$(MAKE) prefix=$(prefix) LD="$(LD)" SYSFS="$(SYSFS)" \ $(MAKE) prefix=$(prefix) LD="$(LD)" SYSFS="$(SYSFS)" \
-C $$target $@ ; \ -C $$target $@ ; \
done ; \ done ; \

View File

@ -7,7 +7,8 @@
. /etc/rc.d/init.d/functions . /etc/rc.d/init.d/functions
udev_dir=/udev . /etc/udev/udev.conf
sysfs_dir=/sys sysfs_dir=/sys
bin=/sbin/udev bin=/sbin/udev
@ -42,12 +43,12 @@ run_udev () {
case "$1" in case "$1" in
start) start)
if [ ! -d $udev_dir ]; then
mkdir $udev_dir
fi
if [ ! -d $sysfs_dir ]; then if [ ! -d $sysfs_dir ]; then
exit 1 exit 1
fi fi
if [ ! -d $udev_root ]; then
mkdir $udev_root
fi
# propogate /udev from /sys - we only need this while we do not # propogate /udev from /sys - we only need this while we do not
# have initramfs and an early user-space with which to do early # have initramfs and an early user-space with which to do early
# device bring up # device bring up
@ -62,7 +63,7 @@ case "$1" in
run_udev run_udev
;; ;;
status) status)
if [ -d $udev_dir ]; then if [ -d $udev_root ]; then
echo "the udev device node directory exists" echo "the udev device node directory exists"
else else
echo "the udev device node directory does not exist" echo "the udev device node directory does not exist"

133
etc/init.d/udev.init.LSB Normal file
View File

@ -0,0 +1,133 @@
#! /bin/sh
#
# Author: Rolf Eike Beer <eike-hotplug@sf-tec.de>
# derived from original RedHat udev init script
# based on the SuSE 9.0 template (c) 1995-2002 SuSE Linux AG
#
# /etc/init.d/udev
# and its symbolic link
# /(usr/)sbin/rcudev
#
# System startup script for udev
#
# LSB compatible service control script; see http://www.linuxbase.org/spec/
#
### BEGIN INIT INFO
# Provides: udev
# Required-Start:
# Required-Stop:
# Default-Start: 1 2 3 5
# Default-Stop: 0 6
# Short-Description: manage user-space device nodes in /udev
# Description: Start udev to create the device files for all
# devices already present in system when script is
# called. All other devices files will be automatically
# created when udev is called via /sbin/hotplug.
# Requires at least a kernel 2.6 to work properly.
### END INIT INFO
#
# Note on script names:
# http://www.linuxbase.org/spec/refspecs/LSB_1.2.0/gLSB/scrptnames.html
# A registry has been set up to manage the init script namespace.
# http://www.lanana.org/
# Please use the names already registered or register one or use a
# vendor prefix.
# Check for missing binaries (stale symlinks should not happen)
UDEV_BIN=/sbin/udev
test -x $UDEV_BIN || exit 5
# Check for existence of needed config file and read it
UDEV_CONFIG=/etc/udev/udev.conf
test -r $UDEV_CONFIG || exit 6
. $UDEV_CONFIG
# Directory where sysfs is mounted
SYSFS_DIR=/sys
# Source LSB init functions
. /lib/lsb/init-functions
run_udev () {
# handle block devices and their partitions
for i in ${SYSFS_DIR}/block/*; do
# add each drive
export DEVPATH=${i#${SYSFS_DIR}}
$UDEV_BIN block &
# add each partition, on each device
for j in $i/*; do
if [ -f $j/dev ]; then
export DEVPATH=${j#${SYSFS_DIR}}
$UDEV_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-`
$UDEV_BIN $CLASS &
fi
done
done
}
case "$1" in
start)
if [ ! -d $SYSFS_DIR ]; then
log_failure_msg "${0}: SYSFS_DIR \"$SYSFS_DIR\" not found"
exit 1
fi
if [ ! -d $udev_root ]; then
mkdir $udev_root || exit 4
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
echo -n "Creating initial udev device nodes: "
export ACTION=add
run_udev
log_success_msg
;;
stop)
# be careful
echo -n "Removing udev device nodes: "
export ACTION=remove
run_udev
rm -f $udev_db || exit 1
rmdir $udev_root || exit 1
log_success_msg
;;
restart)
$0 stop
$0 start
exit $?
;;
force-reload)
echo -n "Reload udev "
$0 stop && $0 start
exit $?
;;
reload)
exit 3
;;
status)
echo -n "Checking for udev root directory: "
if [ -d $udev_root ]; then
log_success_msg found
else
log_warning_msg "not found"
exit 3
fi
;;
*)
echo "Usage: $0 {start|stop|status|restart|force-reload|reload}"
exit 1
;;
esac

View File

@ -38,7 +38,7 @@ get_dev_number() {
if [ -z "$3" ]; then if [ -z "$3" ]; then
MEDIA=`cat /proc/ide/${1}/media` MEDIA=`cat /proc/ide/${1}/media`
if [ "${MEDIA}" = "cdrom" ]; then if [ "${MEDIA}" = "cdrom" ]; then
echo ${1} ide/host${HOST}/bus${BUS}/target${TARGET}/lun0/cd cdroms/cdrom`get_dev_number $1 cdrom` echo $1 ide/host${HOST}/bus${BUS}/target${TARGET}/lun0/cd cdroms/cdrom`get_dev_number $1 cdrom`
elif [ "${MEDIA}" = "disk" ]; then elif [ "${MEDIA}" = "disk" ]; then
echo $1 ide/host${HOST}/bus${BUS}/target${TARGET}/lun0/disc discs/disc`get_dev_number $1 disk`/disc echo $1 ide/host${HOST}/bus${BUS}/target${TARGET}/lun0/disc discs/disc`get_dev_number $1 disk`/disc
fi fi

View File

@ -16,6 +16,11 @@
# 1 - debugging enabled # 1 - debugging enabled
%define debug 0 %define debug 0
# if we want to use the LSB version of the init script or the Redhat one
# 0 - use Redhat version: etc/init.d/udev
# 1 - use LSB version: etc/init.d/udev.init.LSB
%define lsb 0
Summary: A userspace implementation of devfs Summary: A userspace implementation of devfs
Name: udev Name: udev
Version: 012_bk Version: 012_bk
@ -52,6 +57,9 @@ make DESTDIR=$RPM_BUILD_ROOT install \
%if %{dbus} %if %{dbus}
USE_DBUS=true USE_DBUS=true
%endif %endif
%if %{lsb}
USE_LSB=true
%endif
%post %post
/sbin/chkconfig --add udev /sbin/chkconfig --add udev
@ -81,6 +89,9 @@ rm -rf $RPM_BUILD_ROOT
%attr(0644,root,root) %{_mandir}/man8/udev.8* %attr(0644,root,root) %{_mandir}/man8/udev.8*
%changelog %changelog
* Mon Jan 05 2004 Rolf Eike Beer <eike-hotplug@sf-tec.de>
- add defines to choose the init script (Redhat or LSB)
* Tue Dec 16 2003 Robert Love <rml@ximian.com> * Tue Dec 16 2003 Robert Love <rml@ximian.com>
- install the initscript and run chkconfig on it - install the initscript and run chkconfig on it
@ -96,4 +107,3 @@ rm -rf $RPM_BUILD_ROOT
* Mon Jul 28 2003 Paul Mundt <lethal@linux-sh.org> * Mon Jul 28 2003 Paul Mundt <lethal@linux-sh.org>
- Initial spec file for udev-0.2. - Initial spec file for udev-0.2.