Blob Blame History Raw
From 1e570bf8e3010c1cc4cec2f67e0cefd658f90b48 Mon Sep 17 00:00:00 2001
From: Harald Hoyer <harald@redhat.com>
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