base/dracut-lib.sh: for systemd start emergency.service

do not spawn the shell, start the emergency.service for systemd
master
Harald Hoyer 2012-06-21 01:10:13 +02:00
parent d9087a2d85
commit 1e570bf8e3
1 changed files with 29 additions and 18 deletions

View File

@ -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 getargbool 1 rd.shell -y rdshell || getarg rd.break rdbreak; then
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