|
|
a0a3b4 |
From cd6679c71665a53e2a55a204e7ea64b4a6d14030 Mon Sep 17 00:00:00 2001
|
|
|
a0a3b4 |
From: Harald Hoyer <harald@redhat.com>
|
|
|
a0a3b4 |
Date: Fri, 22 Jul 2016 13:32:47 +0200
|
|
|
a0a3b4 |
Subject: [PATCH] add rd.emergency=[reboot|poweroff|halt]
|
|
|
a0a3b4 |
|
|
|
a0a3b4 |
specifies what action to execute in case of a critical failure
|
|
|
a0a3b4 |
|
|
|
a0a3b4 |
(cherry picked from commit c45e856a659a37537c107f7ef3e680abf60a96a5)
|
|
|
a0a3b4 |
|
|
|
a0a3b4 |
https://bugzilla.redhat.com/show_bug.cgi?id=1359144
|
|
|
a0a3b4 |
---
|
|
|
a0a3b4 |
dracut.cmdline.7.asc | 3 +++
|
|
|
a0a3b4 |
modules.d/98systemd/dracut-emergency.sh | 12 +++++++++++-
|
|
|
a0a3b4 |
modules.d/99base/dracut-lib.sh | 24 ++++++++++++++++--------
|
|
|
a0a3b4 |
3 files changed, 30 insertions(+), 9 deletions(-)
|
|
|
a0a3b4 |
|
|
|
a0a3b4 |
diff --git a/dracut.cmdline.7.asc b/dracut.cmdline.7.asc
|
|
|
a0a3b4 |
index 1cf962e..1fb4f74 100644
|
|
|
a0a3b4 |
--- a/dracut.cmdline.7.asc
|
|
|
a0a3b4 |
+++ b/dracut.cmdline.7.asc
|
|
|
a0a3b4 |
@@ -108,6 +108,9 @@ resume=UUID=3f5ad593-4546-4a94-a374-bcfb68aa11f7
|
|
|
a0a3b4 |
|
|
|
a0a3b4 |
Misc
|
|
|
a0a3b4 |
~~~~
|
|
|
a0a3b4 |
+**rd.emergency=**__[reboot|poweroff|halt]__::
|
|
|
a0a3b4 |
+ specify, what action to execute in case of a critical failure.
|
|
|
a0a3b4 |
+
|
|
|
a0a3b4 |
**rd.driver.blacklist=**__<drivername>__[,__<drivername>__,...]::
|
|
|
a0a3b4 |
do not load kernel module <drivername>. This parameter can be specified
|
|
|
a0a3b4 |
multiple times.
|
|
|
a0a3b4 |
diff --git a/modules.d/98systemd/dracut-emergency.sh b/modules.d/98systemd/dracut-emergency.sh
|
|
|
a0a3b4 |
index 5771dc5..b3e8d08 100755
|
|
|
a0a3b4 |
--- a/modules.d/98systemd/dracut-emergency.sh
|
|
|
a0a3b4 |
+++ b/modules.d/98systemd/dracut-emergency.sh
|
|
|
a0a3b4 |
@@ -16,6 +16,7 @@ export _rdshell_name="dracut" action="Boot" hook="emergency"
|
|
|
a0a3b4 |
|
|
|
a0a3b4 |
source_hook "$hook"
|
|
|
a0a3b4 |
|
|
|
a0a3b4 |
+_emergency_action=$(getarg rd.emergency)
|
|
|
a0a3b4 |
|
|
|
a0a3b4 |
if getargbool 1 rd.shell -d -y rdshell || getarg rd.break -d rdbreak; then
|
|
|
a0a3b4 |
echo
|
|
|
a0a3b4 |
@@ -33,9 +34,18 @@ if getargbool 1 rd.shell -d -y rdshell || getarg rd.break -d rdbreak; then
|
|
|
a0a3b4 |
exec sh -i -l
|
|
|
a0a3b4 |
else
|
|
|
a0a3b4 |
warn "$action has failed. To debug this issue add \"rd.shell rd.debug\" to the kernel command line."
|
|
|
a0a3b4 |
- exit 1
|
|
|
a0a3b4 |
+ [ -z "$_emergency_action" ] && _emergency_action=halt
|
|
|
a0a3b4 |
fi
|
|
|
a0a3b4 |
|
|
|
a0a3b4 |
/bin/rm -f -- /.console_lock
|
|
|
a0a3b4 |
|
|
|
a0a3b4 |
+case "$_emergency_action" in
|
|
|
a0a3b4 |
+ reboot)
|
|
|
a0a3b4 |
+ reboot || exit 1;;
|
|
|
a0a3b4 |
+ poweroff)
|
|
|
a0a3b4 |
+ poweroff || exit 1;;
|
|
|
a0a3b4 |
+ halt)
|
|
|
a0a3b4 |
+ halt || exit 1;;
|
|
|
a0a3b4 |
+esac
|
|
|
a0a3b4 |
+
|
|
|
a0a3b4 |
exit 0
|
|
|
a0a3b4 |
diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
|
|
|
a0a3b4 |
index 16bc74d..10d9cbc 100755
|
|
|
a0a3b4 |
--- a/modules.d/99base/dracut-lib.sh
|
|
|
a0a3b4 |
+++ b/modules.d/99base/dracut-lib.sh
|
|
|
a0a3b4 |
@@ -1068,6 +1068,8 @@ emergency_shell()
|
|
|
a0a3b4 |
local _ctty
|
|
|
a0a3b4 |
set +e
|
|
|
a0a3b4 |
local _rdshell_name="dracut" action="Boot" hook="emergency"
|
|
|
a0a3b4 |
+ local _emergency_action
|
|
|
a0a3b4 |
+
|
|
|
a0a3b4 |
if [ "$1" = "-n" ]; then
|
|
|
a0a3b4 |
_rdshell_name=$2
|
|
|
a0a3b4 |
shift 2
|
|
|
a0a3b4 |
@@ -1086,20 +1088,26 @@ emergency_shell()
|
|
|
a0a3b4 |
source_hook "$hook"
|
|
|
a0a3b4 |
echo
|
|
|
a0a3b4 |
|
|
|
a0a3b4 |
+ _emergency_action=$(getarg rd.emergency)
|
|
|
a0a3b4 |
+ [ -z "$_emergency_action" ] \
|
|
|
a0a3b4 |
+ && [ -e /run/initramfs/.die ] \
|
|
|
a0a3b4 |
+ && _emergency_action=halt
|
|
|
a0a3b4 |
+
|
|
|
a0a3b4 |
if getargbool 1 rd.shell -d -y rdshell || getarg rd.break -d rdbreak; then
|
|
|
a0a3b4 |
_emergency_shell $_rdshell_name
|
|
|
a0a3b4 |
else
|
|
|
a0a3b4 |
warn "$action has failed. To debug this issue add \"rd.shell rd.debug\" to the kernel command line."
|
|
|
a0a3b4 |
- # cause a kernel panic
|
|
|
a0a3b4 |
- exit 1
|
|
|
a0a3b4 |
+ [ -z "$_emergency_action" ] && _emergency_action=halt
|
|
|
a0a3b4 |
fi
|
|
|
a0a3b4 |
|
|
|
a0a3b4 |
- if [ -e /run/initramfs/.die ]; then
|
|
|
a0a3b4 |
- if [ -n "$DRACUT_SYSTEMD" ]; then
|
|
|
a0a3b4 |
- systemctl --no-block --force halt
|
|
|
a0a3b4 |
- fi
|
|
|
a0a3b4 |
- exit 1
|
|
|
a0a3b4 |
- fi
|
|
|
a0a3b4 |
+ case "$_emergency_action" in
|
|
|
a0a3b4 |
+ reboot)
|
|
|
a0a3b4 |
+ reboot || exit 1;;
|
|
|
a0a3b4 |
+ poweroff)
|
|
|
a0a3b4 |
+ poweroff || exit 1;;
|
|
|
a0a3b4 |
+ halt)
|
|
|
a0a3b4 |
+ halt || exit 1;;
|
|
|
a0a3b4 |
+ esac
|
|
|
a0a3b4 |
}
|
|
|
a0a3b4 |
|
|
|
a0a3b4 |
action_on_fail()
|