Bastille – Der Jail Manager unter FreeBSD

bastille

Bastille ist ein schlanker opensource Manager für Jails, also Container unter FreeBSD. In einem vorherigem Artikel „Jails unter FreeBSD 13“ habe ich bereits darüber geschrieben, wie man Jails auf FreeBSD ohne Zusatzsoftware erstellt. In diesem Post aber möchte ich ein grundlegendes Verständnis schaffen, wie man mit Bastille Jails erstellt.

Bastille überzeugt im Vergleich zu anderen Jail Managern in jeglicher Hinsicht. Die Software besitzt keinerlei Abhängigkeiten, das heißt, es muss keine weitere Software zur Inbetriebnahme von Bastille installiert werden. Um sich einen genauen Überblick zu verschaffen, warum Bastille überlegen ist, kann sich diesen Vergleich hier mal genauer anschauen. Außerdem, auch wenn ich mir nicht hundertprozentig sicher bin, ist Bastille das einzige aktive Jail-Manager-Projekt im Moment. Wer früher bereits mit iocage und ezjail gearbeitet hat, kann seine Jails ebenfalls in Bastille überführen. Aber nun genug Vorgeplenkel, lasst uns anfangen!

Jeder der schon öfters Tutorials von mir gelesen hat, weiß, dass ich gerne schnell und einfach auf packages zurückgreife. Bevor wir aber Bastille installieren, sollten wir wieder unser Repository updaten:

pkg update 

Wie gewohnt installieren wir das package. Hier wird gleich klar, wie schlank Bastille wirklich ist. Kaum mit ENTER bestätigt, ist der Download und die Installation auch schon fertig. Ganze 38KiB groß… als Vergleich iocage ist ~48MB groß

pkg install bastille

Für die Zukunft hätte ich gerne, dass alle meine Jails bzw. Container automatisch beim Hochfahren von FreeBSD gestartet werden. Wer das ebenfalls möchte, gibt folgendes ein:

service bastille enable

Sollen nur ausgewählte Jails automatisch gestartet werden, dann ist folgender Befehl nötig:

sysrc bastille_list="jail1 test www"

Da ich für meine Jails ebenfalls das ZFS-Dateisystem nutzen möchte, müssen noch eben unter /usr/local/etc/bastille/bastille.conf zwei Optionen bearbeitet werden:

bastille_zfs_enable=""
bastille_zfs_zpool=""

Dazu lasse ich mir mit zpool list alle Namen anzeigen

root@byte-sized:/home/mitarbyter # zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
zroot 13.5G 3.65G 9.85G -    -         12% 27% 1.00x ONLINE -

Den Namen ausgelesen, ergänzen wir die Datei wie folgt:

bastille_zfs_enable="YES"                                                ## 
bastille_zfs_zpool="zroot"

Wie immer, nachdem wir eine .conf-Datei bearbeitet haben, müssen wir den Service neustarten:

service bastille restart

Jails mit Bastille erstellen

Mit ein paar wenigen Schritten lassen sich mit Bastille Jails erstellen. Für jedes entsprechende RELEASE muss der Befehl ausgeführt werden, um das base system bereitzustellen:

bastille bootstrap 13.1-RELEASE

Das Endergebnis sollte dann so aussehen:

root@byte-sized:/home/mitarbyter # bastille bootstrap 13.1-RELEASE
Bootstrapping FreeBSD distfiles...
/usr/local/bastille/cache/13.1-RELEASE/MANIFES        1046  B 3336 kBps    00s
/usr/local/bastille/cache/13.1-RELEASE/base.tx         186 MB 7559 kBps    25s
Validated checksum for 13.1-RELEASE: base.txz
MANIFEST: 565baf7cf520cedfa01c5260f6a614b71c5e2b37ba3ee22e1342906548aa24ad
DOWNLOAD: 565baf7cf520cedfa01c5260f6a614b71c5e2b37ba3ee22e1342906548aa24ad
Extracting FreeBSD 13.1-RELEASE base.txz.

Bootstrap successful.
See 'bastille --help' for available commands.

Jetzt geht es eigentlich richtig zügig eine Jail zu erstellen. Für meinen Fall möchte ich jetzt eine Jail namens jail1 mit der IP-Adresse 192.168.178.190 erstellen. Der Befehl dafür sieht wie folgt aus:

bastille create jail1 13.1-RELEASE 192.168.178.190 em0

Ohne langes Warten ist die Jail erstellt:

root@byte-sized:/home/mitarbyter # bastille create jail1 13.1-RELEASE 192.168.178.190 em0
Valid: (192.168.178.190).
Valid: (em0).

Creating a thinjail...

pfctl: /dev/pf: No such file or directory
[jail1]:
jail1: created

[jail1]:
Applying template: default/thin...
[jail1]:
Applying template: default/base...
[jail1]:
[jail1]: 0

[jail1]:
syslogd_flags: -s -> -ss

[jail1]:
sendmail_enable: NO -> NO

[jail1]:
sendmail_submit_enable: YES -> NO

[jail1]:
sendmail_outbound_enable: YES -> NO

[jail1]:
sendmail_msp_queue_enable: YES -> NO

[jail1]:
cron_flags:  -> -J 60

[jail1]:
/etc/resolv.conf -> /usr/local/bastille/jails/jail1/root/etc/resolv.conf

Template applied: default/base

Template applied: default/thin

pfctl: /dev/pf: No such file or directory
rdr-anchor not found in pf.conf
[jail1]:
jail1: removed

pfctl: /dev/pf: No such file or directory
[jail1]:
jail1: created

Möchte man eine Jail namens test und dem RELEASE 13.0 in Verbindung mit DHCP statt einer statischen IP-Adresse erstellen, dann würde der Ablauf wie folgt aussehen:

bastille bootstrap 13.0-RELEASE
bastille create test 13.0-RELEASE 0.0.0.0 em0

Jails verwalten

Zu guter Letzt möchte ich euch noch ein paar Befehle zeigen, die im Umgang mit Bastille nützlich sind.

Lasse Dir alle Jails anzeigen:

bastille list
root@byte-sized:/home/mitarbyter # bastille list
JID IP Address Hostname Path
jail1 192.168.178.190 jail1 /usr/local/bastille/jails/jail1/root

Klone eine Jail:

bastille clone jail1 jail2

Lösche eine Jail:

bastille destroy jail2

Und natürlich das allerwichtigste…

Wechsel in eine Jail:

bastille console jail1
root@byte-sized:/home/mitarbyter # bastille console jail1
[jail1]:
root@jail1:~ #

Um eine Jail wieder zu verlassen, tippe einfach exit und Du landest wieder auf Deinem Host-System.

So, das soll es auch vorerst zu dem Jail Manager gewesen sein. Ich hoffe, es hat Spaß gemacht und die einfache Handhabung von Bastille gezeigt. In naher Zukunft werden noch weitere Tutorials zu Jails auf meinem Blog erscheinen.

Bastille – Jail Manager for FreeBSD

Shoutout to the reddit sub r/freebsd who made do english versions of my tutorials 🙂 Enjoy!

Bastille is a very lightweight opensource software for managing jails on FreeBSD. In a previous post, I’ve explained how to create jails without additional software, but this time I will show you how to set up a jail with Bastille.

Bastille is my favorite when it comes to jail managing software. It is very lightweight (38KiB) and we can install it without any dependencies needed. For everyone, who want to see a comparison chart, should take a look here. Beside that, Bastille is the only active project when it comes to jail manager. iocage and ezjail are inactive for a while.

But now, I have talked enough. Let’s get our work done!

Before we start installing Bastille, we want to update our repository. You can install Bastille by pkg, ports or GitHub (bleeding edge).

pkg update

After that is done, we want to install our software:

pkg install bastille

I would like to start all of my jails automatically on system boot, so I will type the following command:

service bastille enable

If you want to start only some of your jails on system boot, type:

sysrc bastille_list="jail1 test www"

I want to use the ZFS filesystem for my jails, so I have to edit two options in the /usr/local/etc/bastille/bastille.conf

bastille_zfs_enable=""
bastille_zfs_zpool=""

Using the command zpool list, you can see all your mounted zpools:

root@byte-sized:/home/mitarbyter # zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
zroot 13.5G 3.65G 9.85G -    -         12% 27% 1.00x ONLINE -

So, our two options have to look like that:

bastille_zfs_enable="YES"                                                
bastille_zfs_zpool="zroot"

After we have edited a .conf-file, we need to restart the service:

service bastille restart

Jails mit Bastille erstellen

With a few simple steps, Bastille allows us to create jails. For every RELEASE of FreeBSD we need to download the base system:

bastille bootstrap 13.1-RELEASE

The output should look like that:

root@byte-sized:/home/mitarbyter # bastille bootstrap 13.1-RELEASE
Bootstrapping FreeBSD distfiles...
/usr/local/bastille/cache/13.1-RELEASE/MANIFES        1046  B 3336 kBps    00s
/usr/local/bastille/cache/13.1-RELEASE/base.tx         186 MB 7559 kBps    25s
Validated checksum for 13.1-RELEASE: base.txz
MANIFEST: 565baf7cf520cedfa01c5260f6a614b71c5e2b37ba3ee22e1342906548aa24ad
DOWNLOAD: 565baf7cf520cedfa01c5260f6a614b71c5e2b37ba3ee22e1342906548aa24ad
Extracting FreeBSD 13.1-RELEASE base.txz.

Bootstrap successful.
See 'bastille --help' for available commands.

Now it is only one command to set up a whole jail. For the first one, I want to create a jail named jail1 and the ip address 192.168.178.190

bastille create jail1 13.1-RELEASE 192.168.178.190 em0

After a few seconds, Bastille has finished the work:

root@byte-sized:/home/mitarbyter # bastille create jail1 13.1-RELEASE 192.168.178.190 em0
Valid: (192.168.178.190).
Valid: (em0).

Creating a thinjail...

pfctl: /dev/pf: No such file or directory
[jail1]:
jail1: created

[jail1]:
Applying template: default/thin...
[jail1]:
Applying template: default/base...
[jail1]:
[jail1]: 0

[jail1]:
syslogd_flags: -s -> -ss

[jail1]:
sendmail_enable: NO -> NO

[jail1]:
sendmail_submit_enable: YES -> NO

[jail1]:
sendmail_outbound_enable: YES -> NO

[jail1]:
sendmail_msp_queue_enable: YES -> NO

[jail1]:
cron_flags:  -> -J 60

[jail1]:
/etc/resolv.conf -> /usr/local/bastille/jails/jail1/root/etc/resolv.conf

Template applied: default/base

Template applied: default/thin

pfctl: /dev/pf: No such file or directory
rdr-anchor not found in pf.conf
[jail1]:
jail1: removed

pfctl: /dev/pf: No such file or directory
[jail1]:
jail1: created

Now I want to create a jail named test using the RELEASE 13.0. This time I want to use DHCP instead of a static ip:

bastille bootstrap 13.0-RELEASE
bastille create test 13.0-RELEASE 0.0.0.0 em0

Jails verwalten

Coming to the end of my tutorial, I want you to show some useful commands.

To list all of your jails:

bastille list
root@byte-sized:/home/mitarbyter # bastille list
JID IP Address Hostname Path
jail1 192.168.178.190 jail1 /usr/local/bastille/jails/jail1/root

If you want to clone a jail:

bastille clone jail1 jail2

Delete a jail:

bastille destroy jail2

And last but not least, the most important command:

Switch into a jail:

bastille console jail1
root@byte-sized:/home/mitarbyter # bastille console jail1
[jail1]:
root@jail1:~ #

If you want to go back to your host system, just type exit into the jail shell.

That was a quick tutorial how to install Bastille and creating jails with this super fast jail manager. I hope you enjoyed it and I’m glad to welcome you the next time!

Start the discussion

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert