slackware-current/source/a/udev/config/rc.d/rc.udev.new
Patrick J Volkerding 76fc4757ac Slackware 14.1
Mon Nov  4 17:08:47 UTC 2013
Slackware 14.1 x86_64 stable is released!

It's been another interesting release cycle here at Slackware bringing
new features like support for UEFI machines, updated compilers and
development tools, the switch from MySQL to MariaDB, and many more
improvements throughout the system.  Thanks to the team, the upstream
developers, the dedicated Slackware community, and everyone else who
pitched in to help make this release a reality.

The ISOs are off to be replicated, a 6 CD-ROM 32-bit set and a
dual-sided
32-bit/64-bit x86/x86_64 DVD.  Please consider supporting the Slackware
project by picking up a copy from store.slackware.com.  We're taking
pre-orders now, and offer a discount if you sign up for a subscription.

Have fun!  :-)
2018-05-31 22:57:36 +02:00

174 lines
6.2 KiB
Bash

#!/bin/sh
# This is a script to initialize udev, which populates the /dev
# directory with device nodes, scans for devices, loads the
# appropriate kernel modules, and configures the devices.
PATH="/sbin:/bin"
. /etc/udev/udev.conf
# remove trailing slash from udev_root
UDEV_ROOT=$(echo "${udev_root}" |sed 's/\/*$//')
check_mounted() {
grep -E -q "^[^[:space:]]+ $1 $2" /proc/mounts
return $?
}
mount_devpts() {
if ! check_mounted $UDEV_ROOT/pts devpts ; then
mkdir $UDEV_ROOT/pts 2> /dev/null
mount -n -o mode=0620,gid=5 -t devpts devpts $UDEV_ROOT/pts
fi
}
case "$1" in
start)
# Sanity check #1, udev requires that the kernel support devtmpfs:
if ! grep -wq devtmpfs /proc/filesystems ; then
echo "Sorry, but you need devtmpfs support in the kernel to use udev."
echo "Both of these options are needed: CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS_MOUNT=y"
echo
echo "FATAL: Refusing to run /etc/rc.d/rc.udev."
sleep 10
exit 1
fi
# Sanity check #2, udev requires that the kernel support tmpfs:
if ! grep -wq tmpfs /proc/filesystems ; then
echo "Sorry, but you need tmpfs support in the kernel to use udev."
echo
echo "FATAL: Refusing to run /etc/rc.d/rc.udev."
sleep 10
exit 1
fi
# Sanity check #3, make sure that a 2.6.x kernel is new enough:
if [ "$(uname -r | cut -f 1,2 -d .)" = "2.6" ]; then
if [ "$(uname -r | cut -f 3 -d . | sed 's/[^[:digit:]].*//')" -lt "32" ]; then
echo "Sorry, but you need a 2.6.32+ kernel to use this udev."
echo "Your kernel version is only $(uname -r)."
echo
echo "FATAL: Refusing to run /etc/rc.d/rc.udev."
sleep 10
exit 1
fi
fi
# Sanity check #4, make sure the udev package was not removed. If udevd
# is not there, this will also shut off this script to prevent further
# problems:
if [ ! -x /sbin/udevd ]; then
chmod 0644 /etc/rc.d/rc.udev
echo "No udevd daemon found."
echo "Turning off udev: chmod 644 /etc/rc.d/rc.udev"
echo "FATAL: Refusing to run /etc/rc.d/rc.udev."
sleep 10
exit 1
fi
# Disable hotplug helper since udevd listens to netlink:
if [ -e /proc/sys/kernel/hotplug ]; then
echo "" > /proc/sys/kernel/hotplug
fi
if grep -qw devtmpfs /proc/filesystems ; then
if ! check_mounted $UDEV_ROOT devtmpfs ; then
# umount shm if needed
check_mounted $UDEV_ROOT/shm tmpfs && umount -l $UDEV_ROOT/shm
# Umount pts if needed, we will remount it later:
check_mounted $UDEV_ROOT/pts devpts && umount -l $UDEV_ROOT/pts
# Mount tmpfs on $UDEV_ROOT:
mount -n -t devtmpfs devtmpfs $UDEV_ROOT
fi
else
# Mount tmpfs on $UDEV_ROOT:
if ! check_mounted $UDEV_ROOT tmpfs ; then
# umount shm if needed
check_mounted $UDEV_ROOT/shm tmpfs && umount -l $UDEV_ROOT/shm
# Umount pts if needed, we will remount it later:
check_mounted $UDEV_ROOT/pts devpts && umount -l $UDEV_ROOT/pts
# Mount tmpfs on $UDEV_ROOT:
# the -n is because we don't want $UDEV_ROOT umounted when
# someone (rc.[06]) calls umount -a
mount -n -o mode=0755 -t tmpfs tmpfs $UDEV_ROOT
fi
fi
# Mount devpts
mount_devpts
if ! /sbin/pidof udevd 1>/dev/null 2>/dev/null; then # start udevd
echo "Starting udevd: /sbin/udevd --daemon"
/sbin/udevd --daemon
# Since udev is just now being started we want to use add events:
echo "Triggering udev events: /sbin/udevadm trigger --action=add"
# Call udevtrigger and udevsettle to do the device configuration:
/sbin/udevadm trigger --type=subsystems --action=add
/sbin/udevadm trigger --type=devices --action=add
else # trigger changes for already running udevd
# If the persistent rules files do not exist, trigger an add event:
if [ ! -r /etc/udev/rules.d/70-persistent-net.rules -o ! -r /etc/udev/rules.d/70-persistent-cd.rules ]; then
# Test that we can actually write to the directory first:
if touch /etc/udev/rules.d/testfile 2> /dev/null ; then
rm -f /etc/udev/rules.d/testfile
# This should add persistent net/cd rules:
echo "Triggering udev to write persistent rules to /etc/udev/rules.d/"
/sbin/udevadm trigger --type=devices --action=add
sleep 3
# Create the files if they don't exist at this point.
# If a machine does not have a network device or an optical
# device, we don't want to waste time trying to generate
# rules at every boot.
# To force another attempt, delete the file(s).
touch /etc/udev/rules.d/70-persistent-net.rules
touch /etc/udev/rules.d/70-persistent-cd.rules
fi
fi
# Since udevd is running, most of the time we only need change events:
echo "Triggering udev events: /sbin/udevadm trigger --action=change"
/sbin/udevadm trigger --type=subsystems --action=change
/sbin/udevadm trigger --type=devices --action=change
fi
/sbin/udevadm settle --timeout=120
;;
stop)
echo "Stopping udevd is STRONGLY discouraged and not supported."
echo "If you are sure you want to do this, use 'force-stop' instead."
;;
force-stop)
echo "Stopping udevd"
udevadm control --exit
killall udevd 2>/dev/null
;;
restart)
echo "Restarting udevd is STRONGLY discouraged and not supported."
echo "If you are sure you want to do this, use 'force-restart' instead."
;;
force-restart)
echo "Restarting udevd"
udevadm control --exit
sleep 3
udevd --daemon
;;
reload)
echo "Reloading udev rules"
udevadm control --reload
cp --preserve=all --recursive --update /lib/udev/devices/* $UDEV_ROOT
;;
force-reload)
echo "Updating all available device nodes in $UDEV_ROOT"
udevadm control --reload
rm -rf $UDEV_ROOT/.udev $UDEV_ROOT/disk
cp --preserve=all --recursive --update /lib/udev/devices/* $UDEV_ROOT
;;
*)
echo "Usage: $0 {start|stop|restart|reload|force-reload}"
exit 1
;;
esac