]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
use pkg-config to determine the udev directory
authorHarald Hoyer <harald@redhat.com>
Mon, 4 Jun 2012 10:58:42 +0000 (12:58 +0200)
committerHarald Hoyer <harald@redhat.com>
Mon, 4 Jun 2012 10:58:42 +0000 (12:58 +0200)
dracut-functions.sh
modules.d/90mdraid/module-setup.sh
modules.d/95udev-rules/module-setup.sh

index 4fe428ef084df72e31095b6c1aa6df50a98efc5e..f788878170e0982216f48f31dd0cc3c0e07066c9 100755 (executable)
@@ -531,14 +531,50 @@ inst_symlink() {
     ln -sfn $(convert_abs_rel "${_target}" "${_realsrc}") "$initdir/$_target"
 }
 
+udevdir=$(pkg-config udev --variable=udevdir)
+if ! [[ -d "$udevdir" ]]; then
+    [[ -d /lib/udev ]] && udevdir=/lib/udev
+    [[ -d /usr/lib/udev ]] && udevdir=/usr/lib/udev
+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
+            if [ -x ${udevdir}/$_prog ]; then
+                _bin=${udevdir}/$_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
+    if grep -qE 'RUN==?"[^ "]+' "$1"; then
+        for _prog in $(grep -E 'RUN==?"[^ "]+' "$1" | sed -r 's/.*RUN==?"([^ "]+).*/\1/'); do
+            if [ -x ${udevdir}/$_prog ]; then
+                _bin=${udevdir}/$_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
+    if grep -qE 'PROGRAM==?"[^ "]+' "$1"; then
+        for _prog in $(grep -E 'IMPORT==?"[^ "]+' "$1" | sed -r 's/.*IMPORT==?"([^ "]+).*/\1/'); do
+            if [ -x ${udevdir}/$_prog ]; then
+                _bin=${udevdir}/$_prog
             else
                 _bin=$(find_binary "$_prog") || {
                     dinfo "Skipping program $_prog using in udev rule $(basename $1) as it cannot be found"
@@ -557,23 +593,23 @@ inst_rule_programs() {
 inst_rules() {
     local _target=/etc/udev/rules.d _rule _found
 
-    inst_dir "/lib/udev/rules.d"
+    inst_dir "${udevdir}/rules.d"
     inst_dir "$_target"
     for _rule in "$@"; do
         if [ "${rule#/}" = "$rule" ]; then
-            for r in /lib/udev/rules.d /etc/udev/rules.d; do
+            for r in ${udevdir}/rules.d /etc/udev/rules.d; do
                 if [[ -f $r/$_rule ]]; then
                     _found="$r/$_rule"
-                    inst_simple "$_found"
                     inst_rule_programs "$_found"
+                    inst_simple "$_found"
                 fi
             done
         fi
         for r in '' ./ $dracutbasedir/rules.d/; do
             if [[ -f ${r}$_rule ]]; then
                 _found="${r}$_rule"
-                inst_simple "$_found" "$_target/${_found##*/}"
                 inst_rule_programs "$_found"
+                inst_simple "$_found" "$_target/${_found##*/}"
             fi
         done
         [[ $_found ]] || dinfo "Skipping udev rule: $_rule"
index 7c9fcc47b72546d9e06f6e4e2759cafacde845b5..350aff81c483244a79a90e720fc8527ac067e3c1 100755 (executable)
@@ -62,7 +62,7 @@ install() {
      # 65-md-inc*.rules and its fine-grained controls, or cause other problems
      # when we explicitly don't want certain components to be incrementally
      # assembled
-     sed -i -r -e '/RUN\+?="[[:alpha:]/]*mdadm[[:blank:]]+(--incremental|-I)[[:blank:]]+(\$env\{DEVNAME\}|\$tempnode)"/d' "${initdir}/lib/udev/rules.d/64-md-raid.rules"
+     sed -i -r -e '/RUN\+?="[[:alpha:]/]*mdadm[[:blank:]]+(--incremental|-I)[[:blank:]]+(\$env\{DEVNAME\}|\$tempnode)"/d' "${initdir}${udevdir}/rules.d/64-md-raid.rules"
 
     inst_rules "$moddir/65-md-incremental-imsm.rules"
 
index f7f9f2e736caca4050d6b50e25ee3d7851a2e80b..26d92f663e27ec69a6f9d26729680f4b0db2a89c 100755 (executable)
@@ -4,12 +4,25 @@
 
 install() {
     local _i
-    # FIXME: would be nice if we didn't have to know which rules to grab....
+
+    systemdutildir=$(pkg-config systemd --variable=systemdutildir)
+    if ! [[ -d "$systemdutildir" ]]; then
+        [[ -d /lib/systemd ]] && systemdutildir=/lib/systemd
+        [[ -d /usr/lib/systemd ]] && systemdutildir=/usr/lib/systemd
+    fi
+
+    udevdir=$(pkg-config udev --variable=udevdir)
+    if ! [[ -d "$udevdir" ]]; then
+        [[ -d /lib/udev ]] && udevdir=/lib/udev
+        [[ -d /usr/lib/udev ]] && udevdir=/usr/lib/udev
+    fi
+
+    # Fixme: would be nice if we didn't have to know which rules to grab....
     # ultimately, /lib/initramfs/rules.d or somesuch which includes links/copies
     # of the rules we want so that we just copy those in would be best
     dracut_install udevadm
     [ -d ${initdir}/lib/systemd ] || mkdir -p ${initdir}/lib/systemd
-    for _i in /lib/systemd/systemd-udevd /lib/udev/udevd /sbin/udevd; do
+    for _i in ${systemdutildir}/systemd-udevd ${udevdir}/udevd /sbin/udevd; do
         [ -x "$_i" ] || continue
         inst "$_i"
         [[ $_i != "/lib/systemd/systemd-udevd" ]] \
@@ -59,8 +72,7 @@ install() {
         pcmcia-socket-startup \
         pcmcia-check-broken-cis \
         ; do
-        [ -e /lib/udev/$_i ] && dracut_install /lib/udev/$_i
-        [ -e /usr/lib/udev/$_i ] && dracut_install /usr/lib/udev/$_i
+        [ -e ${udevdir}/$_i ] && dracut_install ${udevdir}/$_i
     done
 
     [ -f /etc/arch-release ] && \