From 1e570bf8e3010c1cc4cec2f67e0cefd658f90b48 Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Thu, 21 Jun 2012 01:10:13 +0200 Subject: [PATCH] base/dracut-lib.sh: for systemd start emergency.service do not spawn the shell, start the emergency.service for systemd --- modules.d/99base/dracut-lib.sh | 47 +++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh index e0c4c19..5dc3fbd 100755 --- a/modules.d/99base/dracut-lib.sh +++ b/modules.d/99base/dracut-lib.sh @@ -825,30 +825,41 @@ emergency_shell() _rdshell_name=$2; action="Shutdown"; hook="shutdown-emergency" shift 2 fi + echo ; echo warn $@ source_hook "$hook" echo + if getargbool 1 rd.shell -y rdshell || getarg rd.break rdbreak; then - echo "Dropping to debug shell." - echo - export PS1="$_rdshell_name:\${PWD}# " - [ -e /.profile ] || >/.profile - - _ctty="$(getarg rd.ctty=)" && _ctty="/dev/${_ctty##*/}" - if [ -z "$_ctty" ]; then - _ctty=console - while [ -f /sys/class/tty/$_ctty/active ]; do - _ctty=$(cat /sys/class/tty/$_ctty/active) - _ctty=${_ctty##* } # last one in the list - done - _ctty=/dev/$_ctty - fi - [ -c "$_ctty" ] || _ctty=/dev/tty1 - strstr "$(setsid --help 2>/dev/null)" "ctty" && CTTY="-c" + if [ -x /lib/systemd/systemd ]; then + > /.console_lock + echo "PS1=\"$_rdshell_name:\${PWD}# \"" >/etc/profile + systemctl start emergency.service + debug_off + while [ -e /.console_lock ]; do sleep 1; done + debug_on + else + echo "Dropping to debug shell." + echo + export PS1="$_rdshell_name:\${PWD}# " + [ -e /.profile ] || >/.profile + + _ctty="$(getarg rd.ctty=)" && _ctty="/dev/${_ctty##*/}" + if [ -z "$_ctty" ]; then + _ctty=console + while [ -f /sys/class/tty/$_ctty/active ]; do + _ctty=$(cat /sys/class/tty/$_ctty/active) + _ctty=${_ctty##* } # last one in the list + done + _ctty=/dev/$_ctty + fi + [ -c "$_ctty" ] || _ctty=/dev/tty1 + strstr "$(setsid --help 2>/dev/null)" "ctty" && CTTY="-c" # stop watchdog - echo 'V' > /dev/watchdog - setsid $CTTY /bin/sh -i -l 0<$_ctty 1>$_ctty 2>&1 + echo 'V' > /dev/watchdog + setsid $CTTY /bin/sh -i -l 0<$_ctty 1>$_ctty 2>&1 + fi else warn "$action has failed. To debug this issue add \"rd.shell\" to the kernel command line." # cause a kernel panic