diff --git a/modules.d/90crypt/parse-crypt.sh b/modules.d/90crypt/parse-crypt.sh index 94ad1f63..87e674a8 100755 --- a/modules.d/90crypt/parse-crypt.sh +++ b/modules.d/90crypt/parse-crypt.sh @@ -14,6 +14,10 @@ else LUKS=$(getargs rd.luks.uuid -d rd_LUKS_UUID) tout=$(getarg rd.luks.key.tout) + while read _mapper _dev _rest ; do + set_systemd_timeout_for_dev $_dev + done < /etc/crypttab + if [ -n "$LUKS" ]; then for luksid in $LUKS; do diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh index 259e2057..c8ff3c1a 100755 --- a/modules.d/99base/dracut-lib.sh +++ b/modules.d/99base/dracut-lib.sh @@ -895,12 +895,10 @@ dev_unit_name() printf -- "%s" "$dev" } -# wait_for_dev -# -# Installs a initqueue-finished script, -# which will cause the main loop only to exit, -# if the device is recognized by the system. -wait_for_dev() +# set_systemd_timeout_for_dev +# Set 'rd.timeout' as the systemd timeout for + +set_systemd_timeout_for_dev() { local _name local _needreload @@ -915,19 +913,6 @@ wait_for_dev() _timeout=$(getarg rd.timeout) _timeout=${_timeout:-0} - _name="$(str_replace "$1" '/' '\x2f')" - - type mark_hostonly >/dev/null 2>&1 && mark_hostonly "$hookdir/initqueue/finished/devexists-${_name}.sh" - - [ -e "${PREFIX}$hookdir/initqueue/finished/devexists-${_name}.sh" ] && return 0 - - printf '[ -e "%s" ]\n' $1 \ - >> "${PREFIX}$hookdir/initqueue/finished/devexists-${_name}.sh" - { - printf '[ -e "%s" ] || ' $1 - printf 'warn "\"%s\" does not exist"\n' $1 - } >> "${PREFIX}$hookdir/emergency/80-${_name}.sh" - if [ -n "$DRACUT_SYSTEMD" ]; then _name=$(dev_unit_name "$1") if ! [ -L ${PREFIX}/etc/systemd/system/initrd.target.wants/${_name}.device ]; then @@ -952,6 +937,36 @@ wait_for_dev() fi fi } +# wait_for_dev +# +# Installs a initqueue-finished script, +# which will cause the main loop only to exit, +# if the device is recognized by the system. +wait_for_dev() +{ + local _name + local _noreload + + if [ "$1" = "-n" ]; then + _noreload=-n + shift + fi + + _name="$(str_replace "$1" '/' '\x2f')" + + type mark_hostonly >/dev/null 2>&1 && mark_hostonly "$hookdir/initqueue/finished/devexists-${_name}.sh" + + [ -e "${PREFIX}$hookdir/initqueue/finished/devexists-${_name}.sh" ] && return 0 + + printf '[ -e "%s" ]\n' $1 \ + >> "${PREFIX}$hookdir/initqueue/finished/devexists-${_name}.sh" + { + printf '[ -e "%s" ] || ' $1 + printf 'warn "\"%s\" does not exist"\n' $1 + } >> "${PREFIX}$hookdir/emergency/80-${_name}.sh" + + set_systemd_timeout_for_dev $_noreload $1 +} cancel_wait_for_dev() {