From a37610d0f885ee301fd99757beb9fd7af729307f Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Tue, 9 Aug 2005 20:11:26 +0200 Subject: remove example rules and put the dev.d stuff into the run_directory folder The distro rules are the best example you can get and the use of dev.d/ is no longer recommended. Signed-off-by: Kay Sievers --- docs/RFC-dev.d | 50 ----------------- etc/dev.d/default/pam_console.dev | 52 ------------------ etc/dev.d/net/hotplug.dev | 21 -------- etc/dev.d/snd/controlC0/alsa.dev | 2 - etc/udev/udev.rules | 46 ---------------- etc/udev/udev.rules.devfs | 6 +++ etc/udev/udev.rules.examples | 63 ---------------------- extras/run_directory/README | 17 ++++++ extras/run_directory/RFC-dev.d | 50 +++++++++++++++++ extras/run_directory/dev.d/default/pam_console.dev | 52 ++++++++++++++++++ extras/run_directory/dev.d/net/hotplug.dev | 21 ++++++++ extras/run_directory/dev.d/snd/controlC0/alsa.dev | 2 + 12 files changed, 148 insertions(+), 234 deletions(-) delete mode 100644 docs/RFC-dev.d delete mode 100644 etc/dev.d/default/pam_console.dev delete mode 100644 etc/dev.d/net/hotplug.dev delete mode 100644 etc/dev.d/snd/controlC0/alsa.dev delete mode 100644 etc/udev/udev.rules delete mode 100644 etc/udev/udev.rules.examples create mode 100644 extras/run_directory/README create mode 100644 extras/run_directory/RFC-dev.d create mode 100644 extras/run_directory/dev.d/default/pam_console.dev create mode 100644 extras/run_directory/dev.d/net/hotplug.dev create mode 100644 extras/run_directory/dev.d/snd/controlC0/alsa.dev diff --git a/docs/RFC-dev.d b/docs/RFC-dev.d deleted file mode 100644 index 1aca1aa393..0000000000 --- a/docs/RFC-dev.d +++ /dev/null @@ -1,50 +0,0 @@ - /etc/dev.d/ How it works, and what it is for - - by Greg Kroah-Hartman March 2004 - -The /etc/dev.d directory works much like the /etc/hotplug.d/ directory -in that it is a place to put symlinks or programs that get called when -an event happens in the system. Programs will get called whenever the -device naming program in the system has either named a new device and -created a /dev node for it, or when a /dev node has been removed from -the system due to a device being removed. - -The directory tree under /etc/dev.d/ dictate which program is run first, -and when some programs will be run or not. The device naming program -calls the programs in the following order: - /etc/dev.d/DEVNAME/*.dev - /etc/dev.d/SUBSYSTEM/*.dev - /etc/dev.d/default/*.dev - -The .dev extension is needed to allow automatic package managers to -deposit backup files in these directories safely. - -The DEVNAME name is the name of the /dev file that has been created, or -for network devices, the name of the newly named network device. This -value, including the /dev path, will also be exported to userspace in -the DEVNAME environment variable. - -The SUBSYSTEM name is the name of the sysfs subsystem that originally -generated the hotplug event that caused the device naming program to -create or remove the /dev node originally. This value is passed to -userspace as the first argument to the program. - -The default directory will always be run, to enable programs to catch -every device add and remove in a single place. - -All environment variables that were originally passed by the hotplug -call that caused this device action will also be passed to the program -called in the /etc/dev.d/ directories. Examples of these variables are -ACTION, DEVPATH, and others. See the hotplug documentation for full -description of this - -An equivalent shell script that would do this same kind of action would -be: - DIR="/etc/dev.d" - export DEVNAME="whatever_dev_name_udev_just_gave" - for I in "${DIR}/$DEVNAME/"*.dev "${DIR}/$1/"*.dev "${DIR}/default/"*.dev ; do - if [ -f $I ]; then $I $1 ; fi - done - exit 1; - - diff --git a/etc/dev.d/default/pam_console.dev b/etc/dev.d/default/pam_console.dev deleted file mode 100644 index 4c69ea3576..0000000000 --- a/etc/dev.d/default/pam_console.dev +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/sh - -# Fedora solution to set the ownership/permissions of s device to the local -# logged in user. Uses the program pam_console_setowner to match the names of -# the device node and the symlinks against a device list and applies the -# configured ownership and permission to the node. - -[ "$ACTION" != "add" ] && exit 0 - -# we do not have console users in rc.sysinit -[ -n "$IN_INITLOG" ] && exit 0 - -if [ -x /sbin/pam_console_setowner -a -f /var/run/console/console.lock \ - -a -e "$DEVNAME" ]; then - - if [ -x /usr/bin/logger ]; then - LOGGER=/usr/bin/logger - elif [ -x /bin/logger ]; then - LOGGER=/bin/logger - else - unset LOGGER - fi - # - # for diagnostics - # - if [ -t 1 -o -z "$LOGGER" ]; then - mesg () { - echo "$@" - } - else - mesg () { - $LOGGER -t $(basename $0)"[$$]" "$@" - } - fi - - debug_mesg () { - test "$udev_log" = "" -o "$udev_log" = "no" && return - mesg "$@" - } - - if [ -f /etc/udev/udev.conf ]; then - . /etc/udev/udev.conf - fi - - SYMLINKS="" - for i in $(/usr/bin/udevinfo -q symlink -p "$DEVPATH"); do - [ $? -gt 0 ] && break - SYMLINKS="$SYMLINKS ${udev_root%%/}/$i" - done - debug_mesg "Restoring console permissions for $DEVNAME $SYMLINKS" - /sbin/pam_console_setowner "$DEVNAME" $SYMLINKS -fi diff --git a/etc/dev.d/net/hotplug.dev b/etc/dev.d/net/hotplug.dev deleted file mode 100644 index e195b0f034..0000000000 --- a/etc/dev.d/net/hotplug.dev +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh -# -# Script to ensure that any network device that udev renames -# still gets the hotplug script run with the proper name. -# -# Released under the GPL v2 -# -# Copyright (C) 2004 Greg Kroah-Hartman -# - -# Do nothing if udev handles hotplug.d. -if [ "$MANAGED_EVENT" == "1" ]; then - exit 0 -fi - -# ok, we have renamed this device, so let the network hotplug script -# know about it to setup the device properly... -if [ -f /etc/hotplug.d/default/default.hotplug ]; then - exec /etc/hotplug.d/default/default.hotplug net -fi - diff --git a/etc/dev.d/snd/controlC0/alsa.dev b/etc/dev.d/snd/controlC0/alsa.dev deleted file mode 100644 index 642dde4f36..0000000000 --- a/etc/dev.d/snd/controlC0/alsa.dev +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -e -exec /usr/sbin/alsactl restore 0 diff --git a/etc/udev/udev.rules b/etc/udev/udev.rules deleted file mode 100644 index bebf74802f..0000000000 --- a/etc/udev/udev.rules +++ /dev/null @@ -1,46 +0,0 @@ -# There are a number of modifiers that are allowed to be used in some of the -# fields. See the udev man page for a full description of them. -# -# See the udev.rules.examples file for more examples of how to create rules -# - -# if this is a ide cdrom, name it the default name, and create a symlink to cdrom -BUS=="ide", KERNEL=="*[!0-9]", PROGRAM="/bin/cat /proc/ide/%k/media", RESULT="cdrom", NAME="%k", SYMLINK+="cdrom" - -# DRI devices always go into a subdirectory (as per the LSB spec) -KERNEL=="card*", NAME="dri/card%n" - -# alsa devices -KERNEL=="controlC[0-9]*", NAME="snd/%k" -KERNEL=="hw[CD0-9]*", NAME="snd/%k" -KERNEL=="pcm[CD0-9cp]*", NAME="snd/%k" -KERNEL=="midiC[D0-9]*", NAME="snd/%k" -KERNEL=="timer", NAME="snd/%k" -KERNEL=="seq", NAME="snd/%k" - -# input devices -KERNEL=="mice", NAME="input/%k" -KERNEL=="mouse*", NAME="input/%k" -KERNEL=="event*", NAME="input/%k" -KERNEL=="js*", NAME="input/%k" -KERNEL=="ts*", NAME="input/%k" - -# USB devices -KERNEL=="hiddev*", NAME="usb/%k" -KERNEL=="auer*", NAME="usb/%k" -KERNEL=="legousbtower*", NAME="usb/%k" -KERNEL=="dabusb*", NAME="usb/%k" -BUS=="usb", KERNEL=="lp[0-9]*", NAME="usb/%k" - -# CAPI devices -KERNEL=="capi", NAME="capi20", SYMLINK+="isdn/capi20" -KERNEL=="capi*", NAME="capi/%n" - -# Network devices -KERNEL=="tun", NAME="net/%k" - -# raw devices -KERNEL=="raw[0-9]*", NAME="raw/%k" - -# emulate dev.d/ -RUN="/sbin/udev_run_devd" diff --git a/etc/udev/udev.rules.devfs b/etc/udev/udev.rules.devfs index 867f95029c..b7b2c4e12d 100644 --- a/etc/udev/udev.rules.devfs +++ b/etc/udev/udev.rules.devfs @@ -1,3 +1,9 @@ +# The use of these rules is not recommended or supported. +# In a world where devices can come and go at any time, the devfs scheme +# of simple device enumeration does not help _anything_. Just forget about +# it. Use custom rules to name your device or look at the persistent device +# naming scheme, which is implemented for disks and add your subsystem. + # There are a number of modifiers that are allowed to be used in some of the # fields. See the udev man page for a full description of them. diff --git a/etc/udev/udev.rules.examples b/etc/udev/udev.rules.examples deleted file mode 100644 index 1c4527891a..0000000000 --- a/etc/udev/udev.rules.examples +++ /dev/null @@ -1,63 +0,0 @@ -# There are a number of modifiers that are allowed to be used in some of the -# fields. See the udev man page for a full description of them. -# -# -# These are some example rules that you could use to name your devices. -# -# If anyone has any other examples that they think should be in here for others -# to use, please send them to greg@kroah.com -# - -# Looking for scsi bus id 42:0:0:1 -BUS=="scsi", PROGRAM="/bin/echo -n test-%b", RESULT=="test-42:0:0:1", NAME="%c" - -# A usb camera. -BUS=="usb", SYSFS{vendor}=="FUJIFILM", SYSFS{model}=="M100", NAME="camera%n" - -# USB Epson printer to be called lp_epson -BUS=="usb", SYSFS_serial=="HXOLL0012202323480", NAME="lp_epson" - -# USB HP printer to be called lp_hp -BUS=="usb", SYSFS{serial}=="W09090207101241330", NAME="lp_hp" - -# sound card with PCI bus id 00:0b.0 to be the first sound card -BUS=="pci", ID=="00:0b.0", NAME="dsp" - -# sound card with PCI bus id 00:07.1 to be the second sound card -BUS=="pci", ID=="00:07.1", NAME="dsp1" - -# ttyUSB1 should always be called visor -KERNEL=="ttyUSB1", NAME="visor" -KERNEL=="ttyUSB0", NAME="pl2303" - -# a devfs like way to name some tty devices -KERNEL=="ttyS*", NAME="tts/%n" -KERNEL=="tty*", NAME="vc/%n" - -# if this is a ide cdrom, name it the default name, and create a symlink to cdrom -BUS=="ide", KERNEL=="*[!0-9]", PROGRAM="/bin/cat /proc/ide/%k/media", RESULT=="cdrom", NAME="%k", SYMLINK+="cdrom" - -# DRI devices always go into a subdirectory (as per the LSB spec) -KERNEL=="card*", NAME="dri/card%n" - -# create all 15 partitions of a USB flash card reader -BUS=="scsi", SYSFS{model}=="CF/MD", NAME{all_partitions}="compactflash" - -# alsa devices -KERNEL=="controlC[0-9]*", NAME="snd/%k" -KERNEL=="hw[CD0-9]*", NAME="snd/%k" -KERNEL=="pcm[CD0-9cp]*", NAME="snd/%k" -KERNEL=="midi[CD0-9]*", NAME="snd/%k" -KERNEL=="timer", NAME="snd/%k" -KERNEL=="seq", NAME="snd/%k" - -# input devices -KERNEL=="mice", NAME="input/%k" -KERNEL=="mouse*", NAME="input/%k" -KERNEL=="event*", NAME="input/%k" -KERNEL=="js*", NAME="input/%k" -KERNEL=="ts*", NAME="input/%k" - -# emulate dev.d/ -RUN="/sbin/udev_run_devd" - diff --git a/extras/run_directory/README b/extras/run_directory/README new file mode 100644 index 0000000000..022c66451c --- /dev/null +++ b/extras/run_directory/README @@ -0,0 +1,17 @@ +Use these binaries only if you need backward compatibility with +older udev versions. The use of /etc/dev.d/ is no longer recommended +Use explicit udev rules with RUN keys to hook into the processing. + + /etc/dev.d/ + /etc/hotplug.d/ directory multiplexing is completely + removed from udev itself and must be emulated by calling small + helper binaries provided by these helpers: + make EXTRAS=extras/run_directory/ + will build udev_run_devd and udev_run_hotplugd, which can be called + from a rule if needed: + RUN+="/sbin/udev_run_hotplugd" + The recommended way to handle this is to convert all the calls from + the directories to explicit udev rules and get completely rid of the + multiplexing. (To catch a ttyUSB event, you now no longer need to + fork and exit 300 tty script instances you are not interested in, it + is just one rule that matches exactly the device.) + diff --git a/extras/run_directory/RFC-dev.d b/extras/run_directory/RFC-dev.d new file mode 100644 index 0000000000..1aca1aa393 --- /dev/null +++ b/extras/run_directory/RFC-dev.d @@ -0,0 +1,50 @@ + /etc/dev.d/ How it works, and what it is for + + by Greg Kroah-Hartman March 2004 + +The /etc/dev.d directory works much like the /etc/hotplug.d/ directory +in that it is a place to put symlinks or programs that get called when +an event happens in the system. Programs will get called whenever the +device naming program in the system has either named a new device and +created a /dev node for it, or when a /dev node has been removed from +the system due to a device being removed. + +The directory tree under /etc/dev.d/ dictate which program is run first, +and when some programs will be run or not. The device naming program +calls the programs in the following order: + /etc/dev.d/DEVNAME/*.dev + /etc/dev.d/SUBSYSTEM/*.dev + /etc/dev.d/default/*.dev + +The .dev extension is needed to allow automatic package managers to +deposit backup files in these directories safely. + +The DEVNAME name is the name of the /dev file that has been created, or +for network devices, the name of the newly named network device. This +value, including the /dev path, will also be exported to userspace in +the DEVNAME environment variable. + +The SUBSYSTEM name is the name of the sysfs subsystem that originally +generated the hotplug event that caused the device naming program to +create or remove the /dev node originally. This value is passed to +userspace as the first argument to the program. + +The default directory will always be run, to enable programs to catch +every device add and remove in a single place. + +All environment variables that were originally passed by the hotplug +call that caused this device action will also be passed to the program +called in the /etc/dev.d/ directories. Examples of these variables are +ACTION, DEVPATH, and others. See the hotplug documentation for full +description of this + +An equivalent shell script that would do this same kind of action would +be: + DIR="/etc/dev.d" + export DEVNAME="whatever_dev_name_udev_just_gave" + for I in "${DIR}/$DEVNAME/"*.dev "${DIR}/$1/"*.dev "${DIR}/default/"*.dev ; do + if [ -f $I ]; then $I $1 ; fi + done + exit 1; + + diff --git a/extras/run_directory/dev.d/default/pam_console.dev b/extras/run_directory/dev.d/default/pam_console.dev new file mode 100644 index 0000000000..4c69ea3576 --- /dev/null +++ b/extras/run_directory/dev.d/default/pam_console.dev @@ -0,0 +1,52 @@ +#!/bin/sh + +# Fedora solution to set the ownership/permissions of s device to the local +# logged in user. Uses the program pam_console_setowner to match the names of +# the device node and the symlinks against a device list and applies the +# configured ownership and permission to the node. + +[ "$ACTION" != "add" ] && exit 0 + +# we do not have console users in rc.sysinit +[ -n "$IN_INITLOG" ] && exit 0 + +if [ -x /sbin/pam_console_setowner -a -f /var/run/console/console.lock \ + -a -e "$DEVNAME" ]; then + + if [ -x /usr/bin/logger ]; then + LOGGER=/usr/bin/logger + elif [ -x /bin/logger ]; then + LOGGER=/bin/logger + else + unset LOGGER + fi + # + # for diagnostics + # + if [ -t 1 -o -z "$LOGGER" ]; then + mesg () { + echo "$@" + } + else + mesg () { + $LOGGER -t $(basename $0)"[$$]" "$@" + } + fi + + debug_mesg () { + test "$udev_log" = "" -o "$udev_log" = "no" && return + mesg "$@" + } + + if [ -f /etc/udev/udev.conf ]; then + . /etc/udev/udev.conf + fi + + SYMLINKS="" + for i in $(/usr/bin/udevinfo -q symlink -p "$DEVPATH"); do + [ $? -gt 0 ] && break + SYMLINKS="$SYMLINKS ${udev_root%%/}/$i" + done + debug_mesg "Restoring console permissions for $DEVNAME $SYMLINKS" + /sbin/pam_console_setowner "$DEVNAME" $SYMLINKS +fi diff --git a/extras/run_directory/dev.d/net/hotplug.dev b/extras/run_directory/dev.d/net/hotplug.dev new file mode 100644 index 0000000000..e195b0f034 --- /dev/null +++ b/extras/run_directory/dev.d/net/hotplug.dev @@ -0,0 +1,21 @@ +#!/bin/sh +# +# Script to ensure that any network device that udev renames +# still gets the hotplug script run with the proper name. +# +# Released under the GPL v2 +# +# Copyright (C) 2004 Greg Kroah-Hartman +# + +# Do nothing if udev handles hotplug.d. +if [ "$MANAGED_EVENT" == "1" ]; then + exit 0 +fi + +# ok, we have renamed this device, so let the network hotplug script +# know about it to setup the device properly... +if [ -f /etc/hotplug.d/default/default.hotplug ]; then + exec /etc/hotplug.d/default/default.hotplug net +fi + diff --git a/extras/run_directory/dev.d/snd/controlC0/alsa.dev b/extras/run_directory/dev.d/snd/controlC0/alsa.dev new file mode 100644 index 0000000000..642dde4f36 --- /dev/null +++ b/extras/run_directory/dev.d/snd/controlC0/alsa.dev @@ -0,0 +1,2 @@ +#!/bin/sh -e +exec /usr/sbin/alsactl restore 0 -- cgit v1.2.3-54-g00ecf