Workaround: Reboot nach Kaltstart

Bei einem Kaltstart funktioniert die Bildschirm-Ausgabe an meiner KVM-Server-Konsole nicht richtig. Erst nach einem Reboot ist die Anzeige wieder da. Aus diesem Grund habe ich mir etwas einfallen lassen müssen, um diesen Missstand zu beheben. Denn es kann ab und zu vorkommen, dass man doch mal lokal an einen Rechner (auch wenn es „nur“ ein Raspberry PI ist) muss.

Im Prinzip geht es hier also nur darum nach einem Kaltstart einen Reboot zu tätigen, damit auch mein KVM-Switch wieder eine Anzeige bekommt.

Es wird hierfür ganz simpel einfach nur ein Skript für die Erstellung einer „Prüf-Datei“ und ein weiteres zur Überprüfung dieser in die Runlevels mit aufgenommen. Durch die Überprüfung wird dann gegebenenfalls ein zeitverzögerter Reboot ausgelöst.

Die Skripte hierbei sind nicht wirklich kompliziert:

Erstellen einer Prüf-Datei mit sudo vi /etc/init.d/reboot-do:

reboot-do
#! /bin/sh
### BEGIN INIT INFO
# Provides:          reboot-do
# Required-Start:
# Required-Stop:
# Default-Start:
# Default-Stop:      6
# Short-Description: Make a check file for rebooting.
# Description:
### END INIT INFO
 
PATH=/sbin:/usr/sbin:/bin:/usr/bin
 
. /lib/lsb/init-functions
 
do_stop () {
	touch /var/reboot.done
	date > /var/reboot.done
}
 
case "$1" in
  start)
	# No-op
	;;
  restart|reload|force-reload)
	echo "Error: argument '$1' not supported" >&2
	exit 3
	;;
  stop)
	do_stop
	;;
  *)
	echo "Usage: $0 start|stop" >&2
	exit 3
	;;
esac

Prüfen der Prüf-Datei mit sudo vi /etc/init.d/reboot-chk:

reboot-chk
#! /bin/sh
### BEGIN INIT INFO
# Provides:          reboot-chk
# Required-Start:    $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Check for reboot.
### END INIT INFO
 
 
PATH=/sbin:/usr/sbin:/bin:/usr/bin
 
. /lib/lsb/init-functions
 
do_start() {
	if [ -e /var/reboot.done ]; then
		rm /var/reboot.done
		echo "$(date) - was rebooted." >> /var/log/reboot.log
	else
		echo "$(date) - reboot after normal boot in one minute." >> /var/log/reboot.log
		shutdown -r 1 &
	fi
}
 
case "$1" in
    start)
	do_start
        ;;
    restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
    stop)
        ;;
    *)
        echo "Usage: $0 start|stop" >&2
        exit 3
        ;;
esac

Durch dieses Skript wird ein reboot.log geschrieben. Um dies abzuschalten müssen die entsprechenden Zeilen echo … » /var/log/reboot.log auskommentiert werden.

Die Runlevels werden dann wie folgt eingerichtet:

pi@raspberry ~ $ sudo chmod 0755 /etc/init.d/reboot-*
pi@raspberry ~ $ sudo chown root:root /etc/init.d/reboot-*
pi@raspberry ~ $
pi@raspberry ~ $ sudo update-rc.d reboot-do defaults
update-rc.d: using dependency based boot sequencing
update-rc.d: warning: default start runlevel arguments (2 3 4 5) do not match reboot-do Default-Start values (none)
update-rc.d: warning: default stop runlevel arguments (0 1 6) do not match reboot-do Default-Stop values (6)
pi@raspberry ~ $ sudo update-rc.d reboot-chk defaults
update-rc.d: using dependency based boot sequencing
update-rc.d: warning: default stop runlevel arguments (0 1 6) do not match reboot-chk Default-Stop values (none)
pi@raspberry ~ $

Das war es dann bereits schon.

Die Skripte könne im Notfall (oder warum auch immer) mit sudo update-rc.d reboot-do remove und sudo update-rc.d reboot-chk remove wieder aus den Runlevels entfernt werden.

Dieser Artikel ist publiziert unter: CC by-nc-sa