ZFS und Jail (ezjail)

Photor

Well-Known Member
Hallo Forum,

ich überlege, das unter FreeBSD 13 mit ZFS laufenden MacBook stationär zu nutzen (z.B. Nextcloud im Heimnetz, vielleicht noch andere Server-Dienste wie Git drauf). Dazu würde ich gerne Jails einsetzen wollen. Gibt es dabei etwas bezüglich ZFS zu beachten?

Früher(TM) - zu Zeiten von FreeBSD 7 - habe ich mit mal Jails experimentiert (damals auf UFS), wobei ich zum Schluss ezjail genutzt habe, um ein Base-Jail als Ausgangspunkt zu haben und dann verschiedene Jails daraus "abzuleiten". Ich habe gesehen, dass ezjail noch in den Ports (und als Package) zu finden ist; d.h. es ist noch aktuell?

Spricht etwas gegen ezjail für diese Aufgabe? Oder gibt es was moderneres? Auch hier wieder: gibt es was im Zusammenhang mit ZFS zu beachten? System update des Base-Jails geht mit den normale aktuellen Tools (freebsd-update) - das lief früher über make buildworld, wenn ich mich recht erinnere?

Danke für Eure Hinweise,
Photor
 

medV2

Well-Known Member
Ezjail gibt es noch, ich weiß nicht wie aktiv das noch gepflegt wird, da kamen lange zeit diverse warnings.

Gerade für den Einsatz mit ZFS würd ich dir mal raten nen Blick auf iocage zu werfen. Da hast du quasi ein Release-Dataset von dem du dann Clones für deine einzelnen Jails machst. Ist auch sehr Platzsparend hat aber ein paar Vor und Nachteile zur ezjail-Basejail lösung. Iocage ist sehr gut Dokumentiert, einfach mal reinschauen.
 

Andy_m4

Well-Known Member
Gibt es dabei etwas bezüglich ZFS zu beachten?
Ja. Nimm für jede Jail (mindestens) ein eigenes Dataset. :-)

Spricht etwas gegen ezjail für diese Aufgabe?
Im Handbuch wirds ja noch erwähnt. Ich weiß aber nicht, wie aktiv das noch entwickelt wird. Patches gabs jedenfalls schon länger nicht mehr.

Ansonsten ist ja so eine Jail (auch ohne zusätzliche Software) schnell eingerichtet.
Du erstellst das Dataset und machst dann ein
bsdinstall jail /path/to/myjail
und durchläufst damit im Wesentlichen die gewohnte FreeBSD-Setup-Routine.
Konfiguriert werden Jails auch nicht mehr allein durch die /etc/rc.conf, sondern es gibt eine /etc/jail.conf
C-ähnlich:
# globale Angaben:
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.clean;

# Jail-spezifische Konfigurationen:

webserver {
    # $name ist hier vorbelegt mit dem Jailnamen 'webserver'
    host.hostname = $name;
    path = "/jailz/$name/";
    interface = "eth0";
    ip4.addr = 192.168.0.5;
    mount.fstab = "/jailz/$name.fstab";
    allow.set_hostname = 0;
    allow.reserved_ports = 1;
}

database {
    mount.devfs;
    host.hostname = $name;
    path = "/jailz/$name/";
    interface = "eth0";
    ip4.addr = 192.168.0.6;
    mount.fstab = "/jailz/$name.fstab";
    allow.set_hostname = 0;
    allow.reserved_ports = 0;
}


Sowas wie Thin-Jails oder auch Template-Jails kann man sehr gut mit ZFS-Features (z.B. 'clone') abbilden.

Man kann zu Software wie iocage greifen, aber im Prinzip kriegst Du heute einfachere Setups auch gut mit Bordmitteln hin.

System update des Base-Jails geht mit den normale aktuellen Tools (freebsd-update)
Ja. Du kannst brauchst im Prinzip nur ein
freebsd-update -b /path/to/myjail
machen. Kann aber passieren, das freebsd-update bei Release-Upgrades meckert weil er nachguckt, welche FreeBSD-Version aktuell läuft und dann sagt: Hey. Was machst Du da? Ich bin doch schon auf der aktuellen Version.

Dann hilft es die Version der Jail anzugeben:
freebsd-update -r 13.0-RELEASE --currently-running 12.2-RELEASE fetch install

Wenn Du Packages installieren willst, gibts den Schalter -j:
pkg -j myjail upgrade

Mit jls kannst Du Dir alle laufenden Jails anzeigen lassen.

Das kannst Du nutzen, um beispielsweise alle (laufenden) Jails mit einmal zu aktualisieren:
Code:
foreach j ( `jls | grep -v JID | awk '{print $1}'` )
    pkg -j $j --yes upgrade
end
oder solche Scherze.

Für die /etc/rc.conf gibts auch diverse Schalter.
Neben dem bekannten jail_enable="YES" gibts da noch:
Code:
# Startet von allen Jails aus der /etc/jail.conf nur die,
# die in der (leerzeichengetrennten) Liste angegeben sind
jail_list="database webserver"

# Jails in umgekehrter Reihenfolge stoppen
# (kann interessant sein, falls Jails von einander abhängen)
jail_reverse_stop="YES"

# Wenn sie nicht voneinander abhängen, kannst Du auch ein
# Parallel-Startup machen
jail_parallel_start="YES"

Du kannst das normale service-Kommando benutzen, um Jails zu starten oder stoppen.
Alle Jails:
service jail start
oder nur bestimmte Jails:
service jail stop webserver
 

Photor

Well-Known Member
Moin,

lese gerade zu iocage und finde schon, dass ich das in die engere Wahl ziehen sollet.

Zu ZFS aber habe ich noch Fragen. Zuerst: so sieht es momentan aus
Code:
root@7of9:~ # zfs list
NAME                 USED  AVAIL     REFER  MOUNTPOINT
zroot               13.0G   433G       96K  /zroot
zroot/ROOT          10.3G   433G       96K  none
zroot/ROOT/default  10.3G   433G     10.3G  /
zroot/tmp            192K   433G      192K  /tmp
zroot/usr           2.69G   433G       96K  /usr
zroot/usr/home       871M   433G      871M  /usr/home
zroot/usr/ports     1.15G   433G     1.15G  /usr/ports
zroot/usr/src        702M   433G      702M  /usr/src
zroot/var            900K   433G       96K  /var
zroot/var/audit       96K   433G       96K  /var/audit
zroot/var/crash       96K   433G       96K  /var/crash
zroot/var/log        372K   433G      372K  /var/log
zroot/var/mail       144K   433G      144K  /var/mail
zroot/var/tmp         96K   433G       96K  /var/tmp
Das ist im Prinzip so, wie es nach einer normalen Installation aussieht (wenn man noch X und XFCE nachinstalliert; selbst in HOME ist ja kaum etwas gespeichert).

Auf UFS würde ich jetzt ein /usr/local/JAILS-Verzeichnis anlegen und da die diversen Jails unterbringen. ZFS bietet aber ja einige Features mehr (Snapshots, Clone, ...). Was wäre die sinnvollste Vorgehensweise, wenn man berücksichtigt, dass ich experimentieren werde/muss/will und wenn man nachher z.B. ein Nextcloud-Server betreiben will, der - zwar privat - "produktiv" eingesetzt werden soll (ich weiß, dass sich beides in den Anforderungen irgendwo widerspricht - aber deshalb frage ich ja)

Ciao,
Photor
 

medV2

Well-Known Member
iocage kümmert sich da automatisch darum, dem sagst du nur "nutze zroot" dann legt es automatisch zroot/iocage an und darunter viele datasets für releases, jails, ...
die datasets sind dann immer clones von den jeweiligen releases, das ist sehr platzsparend. gerade wenn du experimentieren willst sehr gut geeignet. einfach rumspielen damit und am schluss die vms wieder löschen - iocage regelt das alles sehr gut. nur die backup-snapshots die iocage bei upgrades und co anlegt hab ich oft händisch aufgeräumt weils mir zu viel wurden - aber das ist geschmackssache.
 

Photor

Well-Known Member
Jo. Das klingt ziehmlich genau nach dem, was ich brauche. Dann stürze ich mich da mal rein.

Danke,
Photor
 

medV2

Well-Known Member
bastille und containerd verfolgen halt andere ziele als klassiche bsd jails mit ezjails oder iocage. das will eher docker/podman ersatz werden.
 
Oben