slackware-current/source/a/eudev/config/rc.d/rc.udev.new
Patrick J Volkerding d7e739bb58 Thu Sep 8 01:33:19 UTC 2022
a/hdparm-9.65-x86_64-1.txz:  Upgraded.
n/samba-4.16.5-x86_64-1.txz:  Upgraded.
xap/mozilla-thunderbird-102.2.2-x86_64-1.txz:  Upgraded.
  This is a bugfix release.
  For more information, see:
    https://www.mozilla.org/en-US/thunderbird/102.2.2/releasenotes/
2022-09-08 07:00:15 +02:00

185 lines
6.9 KiB
Bash
Executable file

#!/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"
check_mounted() {
grep -E -q "^[^[:space:]]+ $1 $2" /proc/mounts
return $?
}
mount_devpts() {
if ! check_mounted /dev/pts devpts ; then
mkdir /dev/pts 2> /dev/null
mount -n -o mode=0620,gid=5 -t devpts devpts /dev/pts
fi
}
mount_devshm() {
if ! check_mounted /dev/shm tmpfs ; then
mkdir /dev/shm 2> /dev/null
mount /dev/shm
fi
}
case "$1" in
start)
# Sanity check #1, 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."
exit 1
fi
# Sanity check #2, 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."
exit 1
fi
fi
# Sanity check #3, 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."
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 /dev devtmpfs ; then
# umount shm if needed
check_mounted /dev/shm tmpfs && umount -l /dev/shm
# Umount pts if needed, we will remount it later:
check_mounted /dev/pts devpts && umount -l /dev/pts
# Mount tmpfs on /dev:
mount -n -t devtmpfs -o size=8M devtmpfs /dev
fi
else
# Mount tmpfs on /dev:
if ! check_mounted /dev tmpfs ; then
# umount shm if needed
check_mounted /dev/shm tmpfs && umount -l /dev/shm
# Umount pts if needed, we will remount it later:
check_mounted /dev/pts devpts && umount -l /dev/pts
# Mount tmpfs on /dev:
# the -n is because we don't want /dev umounted when
# someone (rc.[06]) calls umount -a
mount -n -o mode=0755 -t tmpfs -o size=8M tmpfs /dev
fi
fi
# Mount devpts
mount_devpts
mount_devshm
if ! /sbin/pidof udevd 1>/dev/null 2>/dev/null; then # start udevd
echo "Creating static nodes in /dev."
kmod static-nodes -f tmpfiles --output /run/static-nodes
grep "^d " /run/static-nodes | while read line ; do
mkdir -p -m $(echo $line | cut -f 3 -d ' ') $(echo $line | cut -f 2 -d ' ')
done
grep -v "^d " /run/static-nodes | while read line ; do
mknod -m $(echo $line | cut -f 3 -d ' ') \
$(echo $line | cut -f 2 -d ' ') \
$(echo $line | cut -b1 ) \
$(echo $line | cut -f 7 -d ' ' | cut -f 1 -d :) \
$(echo $line | cut -f 7 -d ' ' | cut -f 2 -d :) 2> /dev/null
done
rm -f /run/static-nodes
# Add any system defined additional device nodes:
cp --preserve=all --recursive --update /lib/udev/devices/* /dev 2> /dev/null
# Add any locally defined additional device nodes:
cp --preserve=all --recursive --update /etc/udev/devices/* /dev 2> /dev/null
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 network rules file does not exist, trigger an add event:
if [ ! -r /etc/udev/rules.d/70-persistent-net.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 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
fi
fi
# Update the hardware database index (/etc/udev/hwdb.bin), if possible:
if touch /etc/udev/testfile 2> /dev/null ; then
rm -f /etc/udev/testfile
echo "Updating hardware database index: /sbin/udevadm hwdb --update"
/sbin/udevadm hwdb --update
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
;;
force-reload)
echo "Updating all available device nodes in /dev"
udevadm control --reload
rm -rf /dev/.udev /dev/disk
cp --preserve=all --recursive --update /lib/udev/devices/* /dev 2> /dev/null
;;
*)
echo "Usage: $0 {start|stop|restart|reload|force-reload}"
exit 1
;;
esac