Attention: For the english version, click here!
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 me 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