From: Harald Hoyer Date: Mon, 4 Jun 2012 10:58:42 +0000 (+0200) Subject: use pkg-config to determine the udev directory X-Git-Tag: 019~6 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=604d1eb21a6a5747173cc6cdf9292de97c239acb;p=thirdparty%2Fdracut.git use pkg-config to determine the udev directory --- diff --git a/dracut-functions.sh b/dracut-functions.sh index 4fe428ef0..f78887817 100755 --- a/dracut-functions.sh +++ b/dracut-functions.sh @@ -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" diff --git a/modules.d/90mdraid/module-setup.sh b/modules.d/90mdraid/module-setup.sh index 7c9fcc47b..350aff81c 100755 --- a/modules.d/90mdraid/module-setup.sh +++ b/modules.d/90mdraid/module-setup.sh @@ -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" diff --git a/modules.d/95udev-rules/module-setup.sh b/modules.d/95udev-rules/module-setup.sh index f7f9f2e73..26d92f663 100755 --- a/modules.d/95udev-rules/module-setup.sh +++ b/modules.d/95udev-rules/module-setup.sh @@ -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 ] && \