# FIXME!
unset rootok
- for f in "$hookdir"/cmdline/90*.sh; do
+ for f in $(list_hooks "cmdline" "90*.sh"); do
# shellcheck disable=SC1090
- [ -f "$f" ] && . "$f"
+ . "$f"
done
else
rootok="1"
usable_root "$NEWROOT" && break
umount "$NEWROOT"
fi
- for f in "$hookdir"/mount/*.sh; do
+ for f in $(list_hooks "mount"); do
# shellcheck disable=SC1090
- [ -f "$f" ] && . "$f"
+ . "$f"
if ismounted "$NEWROOT"; then
usable_root "$NEWROOT" && break
warn "$NEWROOT has no proper rootfs layout, ignoring and removing offending mount hook"
rm -f -- "$hookdir/initqueue/work"
fi
- for job in "$hookdir"/initqueue/*.sh; do
- [ -e "$job" ] || break
+ for job in $(list_hooks "initqueue"); do
# shellcheck disable=SC2097 disable=SC1090 disable=SC2098
job=$job . "$job"
check_finished && break 2
udevadm settle --timeout=0 > /dev/null 2>&1 || continue
- for job in "$hookdir"/initqueue/settled/*.sh; do
- [ -e "$job" ] || break
+ for job in $(list_hooks "initqueue/settled"); do
# shellcheck disable=SC2097 disable=SC1090 disable=SC2098
job=$job . "$job"
check_finished && break 2
if [ $main_loop -gt $((2 * RDRETRY / 3)) ]; then
warn "dracut-initqueue: timeout, still waiting for following initqueue hooks:"
- for _f in "$hookdir"/initqueue/finished/*.sh; do
+ for _f in $(list_hooks "initqueue/finished"); do
warn "$_f: \"$(cat "$_f")\""
done
if [ "$(ls -A "$hookdir"/initqueue/finished)" ]; then
warn "dracut-initqueue: starting timeout scripts"
- for job in "$hookdir"/initqueue/timeout/*.sh; do
- [ -e "$job" ] || break
+ for job in $(list_hooks "initqueue/timeout"); do
# shellcheck disable=SC2097 disable=SC1090 disable=SC2098
job=$job . "$job"
udevadm settle --timeout=0 > /dev/null 2>&1 || main_loop=0
setdebug
-source_all() {
- local f
- local _dir
- _dir=$1
- shift
- [ "$_dir" ] && [ -d "/$_dir" ] || return
- for f in "/$_dir"/*.sh; do
- if [ -e "$f" ]; then
- # shellcheck disable=SC1090
- # shellcheck disable=SC2240
- . "$f" "$@"
- fi
- done
-}
-
hookdir=/var/lib/dracut/hooks
export hookdir
+list_hooks() {
+ local dir="$1"
+ local pattern="$2"
+ [ -z "$pattern" ] && pattern="*.sh"
+ local hook
+
+ for hook in "$hookdir/$dir/"$pattern; do
+ [ -f "$hook" ] && echo "$hook"
+ done
+}
+
source_hook() {
local _dir
_dir=$1
shift
- source_all "/var/lib/dracut/hooks/$_dir" "$@"
+ for f in $(list_hooks "$_dir"); do
+ # shellcheck disable=SC1090
+ # shellcheck disable=SC2240
+ . "$f" "$@"
+ done
}
check_finished() {
local f rc=0
- for f in "$hookdir"/initqueue/finished/*.sh; do
- [ "$f" = "$hookdir/initqueue/finished/*.sh" ] && return 0
+ for f in $(list_hooks "initqueue/finished"); do
# shellcheck disable=SC1090
if [ -e "$f" ] && (. "$f"); then
rm -f "$f"
rm -f -- "$hookdir"/initqueue/work
fi
- for job in "$hookdir"/initqueue/*.sh; do
- [ -e "$job" ] || break
+ for job in $(list_hooks "initqueue"); do
# shellcheck disable=SC2097 disable=SC1090 disable=SC2098
job=$job . "$job"
check_finished && break 2
$UDEV_QUEUE_EMPTY > /dev/null 2>&1 || continue
- for job in "$hookdir"/initqueue/settled/*.sh; do
- [ -e "$job" ] || break
+ for job in $(list_hooks "initqueue/settled"); do
# shellcheck disable=SC2097 disable=SC1090 disable=SC2098
job=$job . "$job"
check_finished && break 2
sleep 0.5
if [ $main_loop -gt $((2 * RDRETRY / 3)) ]; then
- for job in "$hookdir"/initqueue/timeout/*.sh; do
- [ -e "$job" ] || break
+ for job in $(list_hooks "initqueue/timeout"); do
# shellcheck disable=SC2097 disable=SC1090 disable=SC2098
job=$job . "$job"
udevadm settle --timeout=0 > /dev/null 2>&1 || main_loop=0
usable_root "$NEWROOT" && break
umount "$NEWROOT"
fi
- for f in "$hookdir"/mount/*.sh; do
+ for f in $(list_hooks "mount"); do
# shellcheck disable=SC1090
- [ -f "$f" ] && . "$f"
+ . "$f"
if ismounted "$NEWROOT"; then
usable_root "$NEWROOT" && break
warn "$NEWROOT has no proper rootfs layout, ignoring and removing offending mount hook"
_check_shutdown() {
local __f
local __s=0
- for __f in "$hookdir"/shutdown/*.sh; do
- [ -e "$__f" ] || continue
+ for __f in $(list_hooks "shutdown"); do
# shellcheck disable=SC1090 disable=SC2240
if (final="$1" . "$__f" "$1"); then
rm -f -- "$__f"