Blob Blame History Raw
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"