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
:
#! /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
:
#! /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.