Ich habe es ja bereits bei meine Artikeln zu vm-bhyve geschrieben und jetzt ist es mir wieder passiert! Eine Anleitung ist nicht komplett!
Also worum geht’s hier?
In meinem letzten Artikel FoxInAJail – wie man Firefox sicher in einem Jail nutzt habe ich ja versucht zu beschreiben, wie man Firefox in einem Bastille-jail aufbaut und dieses über ssh nutzen kann (guter Artikel 😉 ).
Jetzt ist es mir aber beim alltäglichen Arbeiten aufgefallen, dass das jail nicht sauber gestartet werden konnte. Warum? Die Netzwerk-Interfaces konnte zwar erstellt werden, aber diese konnte nicht sauber an die Bridge gebunden werden.
Damit hier keine Missverständnisse aufkommen. Ich bin ja ein sparsamer Typ und wollte gerne den „Switch“ vm-public von vm-bhyve mit nutzen, frei nach dem KISS-Prinzip „Keep It Simple Stupid!“. 🙂
Jetzt ist es mir beim Booten aber aufgefallen, dass bastille das foxinajail-Jail vor bhyve starten möchte und da ist natürlich der Public-Switch aka. vm-public-Bridge noch nicht eingerichtet.
Was also tun?
Nun ja, man KÖNNTE eine zweite Bridge aufbauen, aber warum? Wir haben ja schon eine, die zwar für die bhyve-VMs da ist, aber die kann man genauso für jails von Bastille nutzen.
Wie gesagt, die vm-public-Bridge wird erst nach Bastille aufgebaut, also sollte es doch möglich sein Bastille nach bhyve zu starten. Und ja, das geht. Und zwar mit rcorder (siehe man rcorder oder hier https://man.freebsd.org/cgi/man.cgi?query=rcorder&manpath=FreeBSD+8.2-RELEASE).
Mit folgenden Befehl kann man sich die Reihenfolge, in der die Dienste gestartet werden ansehen:
# rcorder /etc/rc.d/* /usr/local/etc/rc.d/*
...
/usr/local/etc/rc.d/bastille
/usr/local/etc/rc.d/vm
Hier wir nun die Reihenfolge für dieses System angezeigt und upps, das erklärt so manches.
Und wie legt man nun die Reihenfolge fest?
Nun ja, wer schon einmal die rc-Skripte angesehen hat, dem wird folgendes auffallen, hier die ersten Zeilen des rc-Skripts von bastille:
#!/bin/sh
# Bastille jail startup script
#
# PROVIDE: bastille
# REQUIRE: NETWORKING
# KEYWORD: shutdown
...
Also, die Keywords sind REQUIRE und BEFORE:
- Mit REQUIRE wird ein Dienst bereits als erfolgreich gestartet verlangt, bevor dieser Dienst starten kann.
- BEFORE bedeutet, dass dieser Dienst vor einem anderen Dienst gestartet werden soll.
Ich habe versucht, im Bastille nun in der REQUIRE-Zeile vm noch hinzuzufügen, aber die rcorder-Ausage hat dies nicht gefressen, warum auch immer.
Da aber vm-bhyve und Bastille bei mir die letzten beiden Dienste waren, habe ich einfach bei vm-bhyve in der Zeile BEFORE einfach noch am Ende bastille eingetragen. Also vm-bhyve soll VOR Bastille starten, denn dann wird die Bridge vm-public vor Bastille eingerichtet.
#!/bin/sh
#
# $FreeBSD$
# PROVIDE: vm
# REQUIRE: NETWORKING SERVERS dmesg
# BEFORE: dnsmasq ipfw pf bastille
# KEYWORD: shutdown nojail
...
Und siehe da, Bastille wird nun am Ende der Dienste gestartet.
# rcorder /etc/rc.d/* /usr/local/etc/rc.d/*
...
/usr/local/etc/rc.d/vm
/usr/local/etc/rc.d/bastille
Ein Reboot hat nun gezeigt, dass nun alles korrekt eingerichtet wird, die Interfaces des jails sauber an vm-public gehängt werden und das jail startet.
JIEPPIE! 🙂
So, macht man das!