From 62073c30484f3fc4b657d6939bec9ac5a4ecf8c5 Mon Sep 17 00:00:00 2001
From: Colin Guthrie <colin@mageia.org>
Date: Sat, 17 Dec 2011 00:35:08 +0000
Subject: [PATCH] udev: Attempt to install any programs used by udev rules.
---
dracut-functions | 23 +++++++++++++++++++++++
1 files changed, 23 insertions(+), 0 deletions(-)
diff --git a/dracut-functions b/dracut-functions
index d95df14..8944430 100755
--- a/dracut-functions
+++ b/dracut-functions
@@ -516,6 +516,27 @@ inst_symlink() {
fi
}
+# attempt to install any programs specified in a udev rule
+inst_rule_programs() {
+ local _prog _bin
+
+ if grep -qE 'PROGRAM==?"[^ "]+' "$1"; then
+ for _prog in $(grep -E 'PROGRAM==?"[^ "]+' "$1" | sed -r 's/.*PROGRAM==?"([^ "]+).*/\1/'); do
+ if [ -x /lib/udev/$_prog ]; then
+ _bin=/lib/udev/$_prog
+ else
+ _bin=$(find_binary "$_prog") || {
+ dinfo "Skipping program $_prog using in udev rule $(basename $1) as it cannot be found"
+ continue;
+ }
+ fi
+
+ #dinfo "Installing $_bin due to it's use in the udev rule $(basename $1)"
+ dracut_install "$_bin"
+ done
+ fi
+}
+
# udev rules always get installed in the same place, so
# create a function to install them to make life simpler.
inst_rules() {
@@ -529,6 +550,7 @@ inst_rules() {
if [[ -f $r/$_rule ]]; then
_found="$r/$_rule"
inst_simple "$_found"
+ inst_rule_programs "$_found"
fi
done
fi
@@ -536,6 +558,7 @@ inst_rules() {
if [[ -f ${r}$_rule ]]; then
_found="${r}$_rule"
inst_simple "$_found" "$_target/${_found##*/}"
+ inst_rule_programs "$_found"
fi
done
[[ $_found ]] || dinfo "Skipping udev rule: $_rule"