mirror of
https://github.com/systemd/systemd.git
synced 2024-12-25 01:34:28 +03:00
finally remove the directory event-multiplexer crap
This commit is contained in:
parent
1532b47bdf
commit
a401355d5a
3
TODO
3
TODO
@ -11,6 +11,3 @@ udev version:
|
|||||||
o remove udevstart
|
o remove udevstart
|
||||||
(we rely on the kernel "uevent"-triggers of kernel 2.6.15 and no longer
|
(we rely on the kernel "uevent"-triggers of kernel 2.6.15 and no longer
|
||||||
want to guess event-properties from sysfs like udevstart is doing it)
|
want to guess event-properties from sysfs like udevstart is doing it)
|
||||||
|
|
||||||
o remove extra for /etc/dev.d/ /etc/hotplug.d/
|
|
||||||
(that inefficient stuff should finally go away)
|
|
||||||
|
@ -1,72 +0,0 @@
|
|||||||
# Makefile for udev extra invoked from the udev main Makefile
|
|
||||||
#
|
|
||||||
# Copyright (C) 2004-2005 Kay Sievers <kay.sievers@vrfy.org>
|
|
||||||
#
|
|
||||||
# Released under the GNU General Public License, version 2.
|
|
||||||
#
|
|
||||||
PROG = udev_run_devd udev_run_hotplugd
|
|
||||||
OBJS = run_directory.o
|
|
||||||
HEADERS =
|
|
||||||
GEN_HEADERS =
|
|
||||||
MAN_PAGES =
|
|
||||||
|
|
||||||
prefix =
|
|
||||||
etcdir = ${prefix}/etc
|
|
||||||
sbindir = ${prefix}/sbin
|
|
||||||
usrbindir = ${prefix}/usr/bin
|
|
||||||
usrsbindir = ${prefix}/usr/sbin
|
|
||||||
libudevdir = ${prefix}/lib/udev
|
|
||||||
mandir = ${prefix}/usr/share/man
|
|
||||||
configdir = ${etcdir}/udev/
|
|
||||||
|
|
||||||
INSTALL = install -c
|
|
||||||
INSTALL_PROGRAM = ${INSTALL}
|
|
||||||
INSTALL_DATA = ${INSTALL} -m 644
|
|
||||||
INSTALL_SCRIPT = ${INSTALL}
|
|
||||||
|
|
||||||
all: $(PROG) $(MAN_PAGES)
|
|
||||||
.PHONY: all
|
|
||||||
.DEFAULT: all
|
|
||||||
|
|
||||||
%.o: %.c $(GEN_HEADERS)
|
|
||||||
$(E) " CC " $@
|
|
||||||
$(Q) $(CC) -c $(CFLAGS) $< -o $@
|
|
||||||
|
|
||||||
$(PROG): %: $(HEADERS) %.o $(OBJS)
|
|
||||||
@echo $@ "is DEPRECATED and will be removed, don't use it"
|
|
||||||
$(E) " LD " $@
|
|
||||||
$(Q) $(LD) $(LDFLAGS) $@.o $(OBJS) -o $@ $(LIBUDEV) $(LIB_OBJS)
|
|
||||||
|
|
||||||
# man pages
|
|
||||||
%.8: %.xml
|
|
||||||
$(E) " XMLTO " $@
|
|
||||||
$(Q) xmlto man $?
|
|
||||||
.PRECIOUS: %.8
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(E) " CLEAN "
|
|
||||||
$(Q) rm -f $(PROG) $(OBJS) $(GEN_HEADERS)
|
|
||||||
.PHONY: clean
|
|
||||||
|
|
||||||
install-bin: all
|
|
||||||
@echo $@ "is DEPRECATED and will be removed, don't use it"
|
|
||||||
$(INSTALL_PROGRAM) -D udev_run_devd $(DESTDIR)$(libudevdir)/udev_run_devd
|
|
||||||
$(INSTALL_PROGRAM) -D udev_run_hotplugd $(DESTDIR)$(libudevdir)/udev_run_hotplugd
|
|
||||||
.PHONY: install-bin
|
|
||||||
|
|
||||||
uninstall-bin:
|
|
||||||
- rm $(DESTDIR)$(libudevdir)/udev_run_devd
|
|
||||||
- rm $(DESTDIR)$(libudevdir)/udev_run_hotplugd
|
|
||||||
.PHONY: uninstall-bin
|
|
||||||
|
|
||||||
install-man:
|
|
||||||
@echo "Please create a man page for this tool."
|
|
||||||
.PHONY: install-man
|
|
||||||
|
|
||||||
uninstall-man:
|
|
||||||
@echo "Please create a man page for this tool."
|
|
||||||
.PHONY: uninstall-man
|
|
||||||
|
|
||||||
install-config:
|
|
||||||
@echo "no config file to install"
|
|
||||||
.PHONY: install-config
|
|
@ -1,17 +0,0 @@
|
|||||||
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 on bootup you are not interested
|
|
||||||
in, it is just one rule that matches exactly that single device.)
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
|||||||
/etc/dev.d/ How it works, and what it is for
|
|
||||||
|
|
||||||
by Greg Kroah-Hartman <greg@kroah.com> 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;
|
|
||||||
|
|
||||||
|
|
@ -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
|
|
@ -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 <greg@kroah.com>
|
|
||||||
#
|
|
||||||
|
|
||||||
# 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
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
|||||||
#!/bin/sh -e
|
|
||||||
exec /usr/sbin/alsactl restore 0
|
|
@ -1,73 +0,0 @@
|
|||||||
/*
|
|
||||||
* udev_run_directory.c - directory multiplexer
|
|
||||||
*
|
|
||||||
* Copyright (C) 2005 Kay Sievers <kay@vrfy.org>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU General Public License as published by the
|
|
||||||
* Free Software Foundation version 2 of the License.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
|
|
||||||
#include "../../udev.h"
|
|
||||||
#include "run_directory.h"
|
|
||||||
|
|
||||||
static int exec_program(const char *filename, const char *subsystem)
|
|
||||||
{
|
|
||||||
pid_t pid;
|
|
||||||
|
|
||||||
dbg("running %s", filename);
|
|
||||||
pid = fork();
|
|
||||||
switch (pid) {
|
|
||||||
case 0:
|
|
||||||
/* child */
|
|
||||||
execl(filename, filename, subsystem, NULL);
|
|
||||||
dbg("exec of child failed");
|
|
||||||
_exit(1);
|
|
||||||
case -1:
|
|
||||||
dbg("fork of child failed");
|
|
||||||
break;
|
|
||||||
return -1;
|
|
||||||
default:
|
|
||||||
waitpid(pid, NULL, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int run_directory(const char *dir, const char *suffix, const char *subsystem)
|
|
||||||
{
|
|
||||||
struct name_entry *name_loop, *name_tmp;
|
|
||||||
struct stat buf;
|
|
||||||
LIST_HEAD(name_list);
|
|
||||||
|
|
||||||
dbg("looking at '%s'", dir);
|
|
||||||
|
|
||||||
if (stat(dir, &buf) != 0) {
|
|
||||||
dbg("directory '%s' not found", dir);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
add_matching_files(&name_list, dir, suffix);
|
|
||||||
|
|
||||||
list_for_each_entry_safe(name_loop, name_tmp, &name_list, node) {
|
|
||||||
exec_program(name_loop->name, subsystem);
|
|
||||||
list_del(&name_loop->node);
|
|
||||||
}
|
|
||||||
|
|
||||||
logging_close();
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -1,3 +0,0 @@
|
|||||||
|
|
||||||
extern int run_directory(const char *dir, const char *suffix, const char *subsystem);
|
|
||||||
|
|
@ -1,95 +0,0 @@
|
|||||||
/*
|
|
||||||
* udev_run_devd.c - directory multiplexer
|
|
||||||
*
|
|
||||||
* Copyright (C) 2005 Kay Sievers <kay@vrfy.org>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU General Public License as published by the
|
|
||||||
* Free Software Foundation version 2 of the License.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
|
|
||||||
#include "../../udev.h"
|
|
||||||
#include "run_directory.h"
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef USE_LOG
|
|
||||||
void log_message (int priority, const char *format, ...)
|
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
static int udev_log = -1;
|
|
||||||
|
|
||||||
if (udev_log == -1) {
|
|
||||||
const char *value;
|
|
||||||
|
|
||||||
value = getenv("UDEV_LOG");
|
|
||||||
if (value)
|
|
||||||
udev_log = log_priority(value);
|
|
||||||
else
|
|
||||||
udev_log = LOG_ERR;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (priority > udev_log)
|
|
||||||
return;
|
|
||||||
|
|
||||||
va_start(args, format);
|
|
||||||
vsyslog(priority, format, args);
|
|
||||||
va_end(args);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int main(int argc, char *argv[], char *envp[])
|
|
||||||
{
|
|
||||||
char dirname[NAME_SIZE];
|
|
||||||
const char *devname;
|
|
||||||
const char *my_devname;
|
|
||||||
const char *subsystem;
|
|
||||||
int fd;
|
|
||||||
|
|
||||||
devname = getenv("DEVNAME");
|
|
||||||
if (devname == NULL)
|
|
||||||
exit(0);
|
|
||||||
/*
|
|
||||||
* Hack, we are assuming that the device nodes are in /dev,
|
|
||||||
* if not, this will not work, but you should be using the
|
|
||||||
* RUN= rule anyway...
|
|
||||||
*/
|
|
||||||
my_devname = strstr(devname, "/dev/");
|
|
||||||
if (my_devname != NULL)
|
|
||||||
my_devname = &my_devname[5];
|
|
||||||
else
|
|
||||||
my_devname = devname;
|
|
||||||
|
|
||||||
subsystem = argv[1];
|
|
||||||
logging_init("udev_run_devd");
|
|
||||||
|
|
||||||
fd = open("/dev/null", O_RDWR);
|
|
||||||
if (fd >= 0) {
|
|
||||||
dup2(fd, STDOUT_FILENO);
|
|
||||||
dup2(fd, STDIN_FILENO);
|
|
||||||
dup2(fd, STDERR_FILENO);
|
|
||||||
close(fd);
|
|
||||||
}
|
|
||||||
dbg("running dev.d directory");
|
|
||||||
|
|
||||||
sprintf(dirname, "/etc/dev.d/%s", my_devname);
|
|
||||||
run_directory(dirname, ".dev", subsystem);
|
|
||||||
sprintf(dirname, "/etc/dev.d/%s", subsystem);
|
|
||||||
run_directory(dirname, ".dev", subsystem);
|
|
||||||
run_directory("/etc/dev.d/default", ".dev", subsystem);
|
|
||||||
|
|
||||||
exit(0);
|
|
||||||
}
|
|
@ -1,77 +0,0 @@
|
|||||||
/*
|
|
||||||
* udev_run_hotplugd.c - directory multiplexer
|
|
||||||
*
|
|
||||||
* Copyright (C) 2005 Kay Sievers <kay@vrfy.org>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU General Public License as published by the
|
|
||||||
* Free Software Foundation version 2 of the License.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
|
|
||||||
#include "../../udev.h"
|
|
||||||
#include "run_directory.h"
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef USE_LOG
|
|
||||||
void log_message (int priority, const char *format, ...)
|
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
static int udev_log = -1;
|
|
||||||
|
|
||||||
if (udev_log == -1) {
|
|
||||||
const char *value;
|
|
||||||
|
|
||||||
value = getenv("UDEV_LOG");
|
|
||||||
if (value)
|
|
||||||
udev_log = log_priority(value);
|
|
||||||
else
|
|
||||||
udev_log = LOG_ERR;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (priority > udev_log)
|
|
||||||
return;
|
|
||||||
|
|
||||||
va_start(args, format);
|
|
||||||
vsyslog(priority, format, args);
|
|
||||||
va_end(args);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int main(int argc, char *argv[], char *envp[])
|
|
||||||
{
|
|
||||||
char dirname[NAME_SIZE];
|
|
||||||
const char *subsystem;
|
|
||||||
int fd;
|
|
||||||
|
|
||||||
subsystem = argv[1];
|
|
||||||
logging_init("udev_run_hotplugd");
|
|
||||||
|
|
||||||
fd = open("/dev/null", O_RDWR);
|
|
||||||
if (fd >= 0) {
|
|
||||||
dup2(fd, STDOUT_FILENO);
|
|
||||||
dup2(fd, STDIN_FILENO);
|
|
||||||
dup2(fd, STDERR_FILENO);
|
|
||||||
close(fd);
|
|
||||||
}
|
|
||||||
|
|
||||||
dbg("running hotplug.d directory");
|
|
||||||
|
|
||||||
sprintf(dirname, "/etc/hotplug.d/%s", subsystem);
|
|
||||||
run_directory(dirname, ".hotplug", subsystem);
|
|
||||||
run_directory("/etc/hotplug.d/default", ".hotplug", subsystem);
|
|
||||||
exit(0);
|
|
||||||
}
|
|
@ -9,7 +9,6 @@ EXTRAS="\
|
|||||||
extras/cdrom_id \
|
extras/cdrom_id \
|
||||||
extras/edd_id \
|
extras/edd_id \
|
||||||
extras/floppy \
|
extras/floppy \
|
||||||
extras/run_directory \
|
|
||||||
extras/firmware \
|
extras/firmware \
|
||||||
extras/path_id \
|
extras/path_id \
|
||||||
extras/rule_generator"
|
extras/rule_generator"
|
||||||
|
Loading…
Reference in New Issue
Block a user