From c3d81de59b3828c35bbab6973f2ab0777777cf51 Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Wed, 14 Mar 2012 16:19:53 +0100 Subject: [PATCH] remove openvt and use "setsid -c", if possible --- dracut.conf.d/fedora.conf.example | 2 +- modules.d/99base/dracut-lib.sh | 21 ++++++++++++--------- modules.d/99base/module-setup.sh | 2 +- modules.d/99shutdown/shutdown.sh | 21 ++++++++++++--------- 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/dracut.conf.d/fedora.conf.example b/dracut.conf.d/fedora.conf.example index efec77e..02a530e 100644 --- a/dracut.conf.d/fedora.conf.example +++ b/dracut.conf.d/fedora.conf.example @@ -7,4 +7,4 @@ omit_dracutmodules+=" dash " omit_drivers+=" .*/fs/ocfs/.* " stdloglvl=3 realinitpath="/usr/lib/systemd/systemd" -install_items+=" vi /etc/virc ps grep cat rm openvt " +install_items+=" vi /etc/virc ps grep cat rm " diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh index 80e093b..a6c4e24 100755 --- a/modules.d/99base/dracut-lib.sh +++ b/modules.d/99base/dracut-lib.sh @@ -803,16 +803,19 @@ emergency_shell() echo export PS1="$_rdshell_name:\${PWD}# " [ -e /.profile ] || >/.profile - _ctty=/dev/console - if [ -n "$(command -v setsid)" ]; then - _ctty="$(getarg rd.ctty=)" && _ctty="/dev/${_ctty##*/}" - [ -c "$_ctty" ] || _ctty=/dev/tty1 - setsid sh -i -l 0<$_ctty 1>$_ctty 2>&1 - elif [ -n "$(command -v openvt)" ] && ! getarg "console=" >/dev/null 2>&1 && getargbool 1 "rd.openvt" ; then - openvt -f -c 1 -w -s -l -- sh - else - sh -i -l 0<$_ctty 1>$_ctty 2>&1 + + _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)" "control" && CTTY="-c" + setsid $CTTY /bin/sh -i -l 0<$_ctty 1>$_ctty 2>&1 else warn "Boot has failed. To debug this issue add \"rdshell\" to the kernel command line." # cause a kernel panic diff --git a/modules.d/99base/module-setup.sh b/modules.d/99base/module-setup.sh index 98742f5..581ba93 100755 --- a/modules.d/99base/module-setup.sh +++ b/modules.d/99base/module-setup.sh @@ -14,7 +14,7 @@ depends() { install() { local _d dracut_install mount mknod mkdir modprobe pidof sleep chroot \ - sed ls flock cp mv dmesg rm ln rmmod mkfifo umount readlink + sed ls flock cp mv dmesg rm ln rmmod mkfifo umount readlink setsid dracut_install -o less if [ ! -e "${initdir}/bin/sh" ]; then dracut_install bash diff --git a/modules.d/99shutdown/shutdown.sh b/modules.d/99shutdown/shutdown.sh index 2576687..c8ca664 100755 --- a/modules.d/99shutdown/shutdown.sh +++ b/modules.d/99shutdown/shutdown.sh @@ -30,16 +30,19 @@ emergency_shell() echo export PS1="$_rdshell_name:\${PWD}# " [ -e /.profile ] || >/.profile - _ctty=/dev/console - if [ -n "$(command -v setsid)" ]; then - _ctty="$(getarg rd.ctty=)" && _ctty="/dev/${_ctty##*/}" - [ -c "$_ctty" ] || _ctty=/dev/tty1 - setsid sh -i -l 0<$_ctty 1>$_ctty 2>&1 - elif [ -n "$(command -v openvt)" ] && ! getarg "console=" >/dev/null 2>&1 && getargbool 1 "rd.openvt" ; then - openvt -f -c 1 -w -s -l -- sh - else - sh -i -l 0<$_ctty 1>$_ctty 2>&1 + + _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)" "control" && CTTY="-c" + setsid $CTTY /bin/sh -i -l 0<$_ctty 1>$_ctty 2>&1 else exec /lib/systemd/systemd-shutdown "$@" warn "Shutdown has failed. To debug this issue add \"rdshell\" to the kernel command line."