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"
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"
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" ]] \
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 ] && \