[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [OSSTEST PATCH 30/38] overlay-initrd-buster/sbin/reopen-console: Copy from Debian
We are going to patch this file to work around a bug, using the new overlay mechanism. The first step is to include the file in our overlay so we overwrite it. Currently, this is a no-op, so no functional change. Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> --- overlay-initrd-buster/sbin/reopen-console | 94 +++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100755 overlay-initrd-buster/sbin/reopen-console diff --git a/overlay-initrd-buster/sbin/reopen-console b/overlay-initrd-buster/sbin/reopen-console new file mode 100755 index 00000000..dd354deb --- /dev/null +++ b/overlay-initrd-buster/sbin/reopen-console @@ -0,0 +1,94 @@ +#!/bin/sh + +# First find the enabled consoles from the kernel, noting if one is 'preferred' +# Record these. +# Run the startup scripts on the preferred console + +# In order to have D-I appear on all consoles, modify the inittab to +# add one entry for each console, running debian-installer. +# Finally HUP init so that it runs those installers +# (but doesn't rerun the sysinit startup stuff, including this script) + + +NL=" +" + +LOGGER_UP=0 +LOG_FILE=/var/log/reopen-console + +log() { + # In very early startup we don't have syslog. Log to file that + # we can flush out later so we can at least see what happened + # at early startup + if [ $LOGGER_UP -eq 1 ]; then + logger -t reopen-console "$@" + else + echo "$@" >> $LOG_FILE + fi +} + +flush_logger () { + cat $LOG_FILE | logger -t reopen-console + rm $LOG_FILE +} + +consoles= +preferred= +# Retrieve all enabled consoles from kernel; ignore those +# for which no device file exists + +kernelconsoles="$(cat /proc/consoles)" +for cons in $(echo "$kernelconsoles" | sed -n -r -e 's/(^.*) .*\((.*)\).*$/\1/p' ) +do + log "Looking at console $cons from /proc/consoles" + status=$(echo "$kernelconsoles" | grep $cons | sed -n -r -e 's/(^.*) *.*\((.*)\).*$/\2/p' ) + if [ -e "/dev/$cons" ] && [ $(echo "$status" | grep -o 'E') ]; then + consoles="${consoles:+$consoles$NL}$cons" + log " Adding $cons to consoles list" + fi + # 'C' console is 'most prefered'. + if [ $(echo "$status" | grep -o 'C') ]; then + preferred="$cons" + log " $cons is preferred" + fi +done + +if [ -z "$consoles" ]; then + # Nothing found? Default to /dev/console. + log "Found no consoles! Defaulting to /dev/console" + consoles=console +fi +if [ -z "$preferred" ]; then + #None marked preferred? Use the first one + preferred=$(echo "$consoles" | head -n 1) + log "Found no preferred console. Picking $preferred" +fi + +for cons in $consoles +do + echo "/dev/$cons " >> /var/run/console-devices +done +echo "/dev/$preferred " > /var/run/console-preferred + + +# Add debian-installer lines into inittab - one per console +for cons in $consoles +do + log "Adding inittab entry for $cons" + echo "$cons::respawn:/sbin/debian-installer" >> /etc/inittab +done + +# Run the startup scripts once, using the preferred console +cons=$(cat /var/run/console-preferred) +# Some other session may have that console as ctty. Steal it from them +/sbin/steal-ctty $cons "$@" + +# Now we should have syslog running, so flush our log entries +LOGGER_UP=1 +flush_logger + +# Finally restart init to run debian-installer on discovered consoles +log "Restarting init to start d-i on the consoles we found" +kill -HUP 1 + +exit 0 -- 2.20.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |