diff --git a/dracut.cmdline.7.asc b/dracut.cmdline.7.asc index d790afd3..ad997990 100644 --- a/dracut.cmdline.7.asc +++ b/dracut.cmdline.7.asc @@ -159,6 +159,10 @@ Misc specify the controlling terminal for the console. This is useful, if you have multiple "console=" arguments. +**rd.action_on_fail=**_{shell|continue}_:: + Specify the action after failure. By default it's emergency_shell. + 'continue' means: ignore the current failure and go ahead. + [[dracutkerneldebug]] Debug ~~~~~ diff --git a/modules.d/98dracut-systemd/dracut-emergency.service b/modules.d/98dracut-systemd/dracut-emergency.service index 5a6d5250..a4b81bc5 100644 --- a/modules.d/98dracut-systemd/dracut-emergency.service +++ b/modules.d/98dracut-systemd/dracut-emergency.service @@ -13,7 +13,7 @@ DefaultDependencies=no After=systemd-vconsole-setup.service Wants=systemd-vconsole-setup.service Conflicts=emergency.service emergency.target -ConditionPathExists=!/lib/dracut/no-emergency-shell +ConditionKernelCommandLine=!action_on_fail=continue [Service] Environment=HOME=/ diff --git a/modules.d/98dracut-systemd/emergency.service b/modules.d/98dracut-systemd/emergency.service index 5f1eaa23..c19fe375 100644 --- a/modules.d/98dracut-systemd/emergency.service +++ b/modules.d/98dracut-systemd/emergency.service @@ -12,7 +12,7 @@ Description=Emergency Shell DefaultDependencies=no After=systemd-vconsole-setup.service Wants=systemd-vconsole-setup.service -ConditionPathExists=!/lib/dracut/no-emergency-shell +ConditionKernelCommandLine=!action_on_fail=continue [Service] Environment=HOME=/ diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh index 03a283cb..cc5bb426 100755 --- a/modules.d/99base/dracut-lib.sh +++ b/modules.d/99base/dracut-lib.sh @@ -1143,16 +1143,24 @@ emergency_shell() action_on_fail() { - if [ -f "$initdir/lib/dracut/no-emergency-shell" ]; then - [ "$1" = "-n" ] && shift 2 - [ "$1" = "--shutdown" ] && shift 2 - warn "$*" - warn "Not dropping to emergency shell, because $initdir/lib/dracut/no-emergency-shell exists." - return 0 - fi - - emergency_shell $@ - return 1 + local _action=$(getarg rd.action_on_fail= -d action_on_fail=) + case "$_action" in + continue) + [ "$1" = "-n" ] && shift 2 + [ "$1" = "--shutdown" ] && shift 2 + warn "$*" + warn "Not dropping to emergency shell, because 'action_on_fail=continue' was set on the kernel command line." + return 0 + ;; + shell) + emergency_shell $@ + return 1 + ;; + *) + emergency_shell $@ + return 1 + ;; + esac } # Retain the values of these variables but ensure that they are unexported