Hadmut Danisch

Ansichten eines Informatikers

systemd debuggen

Hadmut
23.10.2015 18:23

Interessant, aber nicht fehlerfrei.

Inzwischen steigen immer mehr Linux-Distributionen von init oder upstart auf systemd um. Damit ändert sich vieles.

Ist halt so eine Sache. Hat einige Vor- und einige Nachteile. Ein Haken an der Sache ist, dass systemd sehr viele Funktionen von Linux-Anwendungen übernimmt, und statt sie (wie init oder upstart) über initialisierungs-Skripten aufzurufen durch eigene Programme ersetzt. Beispielsweise das Mounten per /etc/fstab oder verschlüsselte Partitionen aus /etc/crypttab.

Dummerweise ist das alles noch nicht so richtig fehlerfrei, da sind noch ein paar Bugs und Inkompatiblitäten drin, und es kann passieren, dass der ganze Haufen beim Booten hängen bleibt, wenn irgendwas nicht sauber läuft. Ja, was machen? Debug-Anleitungen gibt es kaum, die Man-Seiten sind zwar viele und schön, aber inhaltlich sehr dünn. Und irgendwelche Debug-Parameter, die man zum Debuggen mitgeben kann, habe ich auch nicht gefunden. Wie geht man also das Problem an, wenn ein so komplexes System, das man noch nicht so richtig kennt und das nur oberflächlich dokumentiert ist, beim Booten hängen bleibt?

Es gibt eine sehr schöne Lösung, gefunden unter Freedesktop, die in den Man-Seiten nicht erwähnt wird, weil sie nicht im systemd selbst implementiert, sondern nur in den Units konfiguriert ist:

systemctl enable debug-shell.service

oder wenn man das System nicht mehr hochbekommt, im gemounteten Dateisystem

cd $PATH_TO_YOUR_ROOT_FS/etc/systemd/system
mkdir -p sysinit.target.wants
ln -s /usr/lib/systemd/system/debug-shell.service sysinit.target.wants/

sorgt dafür, dass in einer sehr frühen Phase auf tty9 eine root-Shell offen steht. Da kann man dann einfach nachschauen, wo das Problem ist.

Feine Sache. Überaus nützlich und hilfreich. Hat mir geholfen, das Problem zu finden.

Man muss halt nur sehr aufpassen, dass man nicht vergisst, das wieder abzuschalten, sonst kann jeder per Root auf den Rechner, der an Tastatur und Bildschirm kommt. Eventuell einen (ana-)cronjob setzen, der den Link entfernt, wenn er ein gewisses Alter überschreitet, damit man ihn nicht vergessen kann.