mirror of
https://github.com/troglobit/finit.git
synced 2026-09-30 13:02:37 +07:00
56 lines
3.6 KiB
Plaintext
56 lines
3.6 KiB
Plaintext
# System hotplug handled by udev, mdevd, or mdev (preferred order)
|
|
#
|
|
# Your system usually has either udevd, mdev, or mdevd. They probe the system
|
|
# for devices, loading modules and any firmware needed. Since the bootstrap
|
|
# often needs to be synchronized carefully, we suggest using your system log
|
|
# daemon as the barrier for all other services. E.g.:
|
|
#
|
|
# service if:udevd <run/udevadm:5/success> [S0123456789] syslogd -F -- System log daemon
|
|
# service if:mdev <run/coldplug/success> [S0123456789] syslogd -F -- System log daemon
|
|
# service if:mdevd <run/coldplug/success> [S0123456789] syslogd -F -- System log daemon
|
|
#
|
|
# This provdes a <pid/syslogd> condition that can act as a barrier for all
|
|
# other services. Notice the `if:` statement and the condition for starting
|
|
# syslogd is only considered if either udevd or mdev (service) is loaded and
|
|
# is guaranteed to run after each respective run stanza have completed.
|
|
#
|
|
# Override this file by copying it to /etc/finit.d/, using the same name, then
|
|
# change the contents any way you like, it can even be empty.
|
|
|
|
# Check for systemd-udevd and eudev, if we find both, we opt for the latter.
|
|
service nowarn cgroup.system name:udevd notify:none env:-/etc/default/udevd pid:udevd log \
|
|
[S12345789] /lib/systemd/systemd-udevd $UDEVD_ARGS -- Device event daemon (udev)
|
|
service nowarn cgroup.system name:udevd notify:none env:-/etc/default/udevd pid:udevd log \
|
|
[S12345789] udevd $UDEVD_ARGS -- Device event daemon (udev)
|
|
|
|
# Wait for udevd to start, then trigger coldplug events and module loading.
|
|
# The last 'settle' call waits for it to finalize processing all uevents.
|
|
run nowarn if:udevd cgroup.init :1 [S] <service/udevd/ready> log udevadm settle -t 0 --
|
|
run nowarn if:udevd cgroup.init :2 [S] <service/udevd/ready> log udevadm control --reload --
|
|
run nowarn if:udevd cgroup.init :3 [S] <service/udevd/ready> log udevadm trigger -c add -t devices -- Requesting device events
|
|
run nowarn if:udevd cgroup.init :4 [S] <service/udevd/ready> log udevadm trigger -c add -t subsystems -- Requesting subsystem events
|
|
run nowarn if:udevd cgroup.init :5 [S] <service/udevd/ready> log udevadm settle -t 30 -- Waiting for udev to finish
|
|
|
|
# If udevd is not available, check for mdevd. Unlike plain 'mdev -df', the
|
|
# mdevd-coldplug process exits when mdevd has completed. So the condition
|
|
# <run/coldplug/success> (same as for plain mdev below) can be relied on as a
|
|
# barrier for services that, e.g., need to probe for switchcore ports or PHYs
|
|
# that require firmware loading before they show up.
|
|
service nowarn conflict:udevd,mdev cgroup.init notify:none if:!udevd \
|
|
[S12345789] notify:s6 mdevd -O 4 -D %n -- Device event daemon (mdevd)
|
|
run nowarn conflict:udevd,mdev cgroup.init name:coldplug <service/mdevd/ready> \
|
|
[S] mdevd-coldplug -- Cold plugging system
|
|
|
|
# If neither udevd or mdevd are available, fall back to mdev. The new daemon
|
|
# mode calls `mdev -s` internally but does not create a PID file when that is
|
|
# done, so synchronization with coldplug is fragile.
|
|
service nowarn conflict:udevd,mdevd cgroup.init notify:none if:!udevd,!mdevd \
|
|
[S12345789] mdev -df -S -- Device event daemon (mdev)
|
|
|
|
# Trigger a replay of all uevents from boot, before userspace was up and the
|
|
# filesystem mounted. Compared to udevd, we don't know when 'mdev -df' has
|
|
# finished processing all events, i.e., depending on <run/coldplug/success> is
|
|
# not an indicator of all devices having been (re)discovered and fully set up.
|
|
run nowarn conflict:udevd,mdevd cgroup.init name:coldplug if:mdev <service/mdev/running> \
|
|
[S] @pkglibexecdir@/coldplug -- Cold plugging system
|