From 50d77e1989dc35864016cd7aed9eacb7e53fb978 Mon Sep 17 00:00:00 2001 From: Kairui Song Date: Mon, 26 Apr 2021 17:09:57 +0800 Subject: [PATCH] Use a customized emergency shell Resolves: bz1901024 Upstream: Fedora Conflict: None commit 41980f30d9f5806a2e34e30fe279167c12d0ae75 Author: Kairui Song Date: Mon Apr 26 17:09:57 2021 +0800 Use a customized emergency shell Use a modified and minimized version of emergency shell. The differences of this kdump shell and dracut emergency shell are: - Kdump shell won't generate a rdsosreport automatically - Customized prompts - Never ask root password - Won't tangle with dracut's emergency_action. If emergency_action is set, dracut emergency shell will perform dracut's emergency_action instead of kdump final_action on exit. - If rd.shell=no is set, kdump shell will still work, dracut emergency shell won't, even if kdump failure_action is set to shell. Signed-off-by: Kairui Song Acked-by: Coiby Xu Signed-off-by: Kairui Song --- kdump-lib-initramfs.sh | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/kdump-lib-initramfs.sh b/kdump-lib-initramfs.sh index e359a15..ca6a825 100755 --- a/kdump-lib-initramfs.sh +++ b/kdump-lib-initramfs.sh @@ -237,10 +237,35 @@ dump_to_rootfs() kdump_emergency_shell() { - echo "PS1=\"kdump:\\\${PWD}# \"" >/etc/profile - ddebug "Switching to dracut emergency..." - /bin/dracut-emergency - rm -f /etc/profile + ddebug "Switching to kdump emergency shell..." + + [ -f /etc/profile ] && . /etc/profile + export PS1='kdump:${PWD}# ' + + . /lib/dracut-lib.sh + if [ -f /dracut-state.sh ]; then + . /dracut-state.sh 2>/dev/null + fi + + source_conf /etc/conf.d + + type plymouth >/dev/null 2>&1 && plymouth quit + + source_hook "emergency" + while read _tty rest; do + ( + echo + echo + echo 'Entering kdump emergency mode.' + echo 'Type "journalctl" to view system logs.' + echo 'Type "rdsosreport" to generate a sosreport, you can then' + echo 'save it elsewhere and attach it to a bug report.' + echo + echo + ) > /dev/$_tty + done < /proc/consoles + sh -i -l + /bin/rm -f -- /.console_lock } do_failure_action()