summaryrefslogtreecommitdiff
path: root/extra/eudev/udev_retry.initd
diff options
context:
space:
mode:
Diffstat (limited to 'extra/eudev/udev_retry.initd')
-rw-r--r--extra/eudev/udev_retry.initd31
1 files changed, 31 insertions, 0 deletions
diff --git a/extra/eudev/udev_retry.initd b/extra/eudev/udev_retry.initd
new file mode 100644
index 0000000..cfe077c
--- /dev/null
+++ b/extra/eudev/udev_retry.initd
@@ -0,0 +1,31 @@
+#!/sbin/openrc-run
+start () {
+ echo "Retrying failed uevents, if any..."
+
+ # As of udev-186, the --run option is no longer valid
+ #rundir=$(/sbin/udevadm info --run)
+ rundir=/run/udev
+ # From Debian: "copy the rules generated before / was mounted
+ # read-write":
+
+ for file in ${rundir}/tmp-rules--*; do
+ dest=${file##*tmp-rules--}
+ [ "$dest" = '*' ] && break
+ cat $file >> /etc/udev/rules.d/$dest
+ rm -f $file
+ done
+
+ # Re-trigger the uevents that may have failed,
+ # in hope they will succeed now
+ /bin/sed -e 's/#.*$//' /etc/sysconfig/udev_retry | /bin/grep -v '^$' | \
+ while read line ; do
+ for subsystem in $line ; do
+ /sbin/udevadm trigger --subsystem-match=$subsystem --action=add
+ done
+ done
+
+ # Now wait for udevd to process the uevents we triggered
+ if ! is_true "$OMIT_UDEV_RETRY_SETTLE"; then
+ /sbin/udevadm settle
+ fi
+}