Summary: ezjail

Mardor

Well-Known Member
Hallo,

ich möchte nach langer Zeit mal wieder jails unter Zuhilfenahme von ezjail benutzen. Nun habe ich ziemlich viel in verschiedensten Büchern und auch versch. Webseiten gelesen und bin durch die Vielzahl der Möglichkeiten etwas verwirrt. Deshalb wollte ich hier kurz mal alles Zusammenfassen mit der bitte um Bestätigung:

Installation ezjail
Code:
portmaster sysutils/ezjail

Konfiguration in der ezjail.conf
Code:
# Note: If you have spread your jails to multiple locations, use softlinks
# to collect them in this directory
ezjail_jaildir=/usr/jails

# ZFS options
# Setting this to YES will start to manage the basejail and newjail in ZFS
ezjail_use_zfs="YES"

# Setting this to YES will manage ALL new jails in their own zfs
ezjail_use_zfs_for_jails="YES"

# The name of the ZFS ezjail should create jails on, it will be mounted at the ezjail_jaildir
ezjail_jailzfs="zroot/ezjail"

In rc.conf
Code:
ifconfig_lo0_alias0="inet 10.0.0.1/32"
ifconfif_lo0_alias1="inet 10.0.0.2/32"
ifconfig_lo0_alias2="inet 10.0.0.3/32"

Um den Reboot zu vermeiden dann auch noch
Code:
ifconfig lo0 10.0.0.1/32 alias
ifconfig lo0 10.0.0.2/32 alias
ifconfig lo0 10.0.0.3/32 alias

Die aktuelle Version inkl. Portstree, Source und Manpage installiere ich in das Basejail über:
Code:
ezjail-admin install -spm

Mein erstes Jail erstelle ich dann über:
Code:
ezjail-admin create webserver_1 10.0.0.1

Bei verfürbaren Updates würde ich dann mit folgendem Befehl das Basejail updaten:
Code:
ezjail-admin install -SPM

Wenn ich es richtig verstanden habe ist das Basejail in den verschiedensten Jails gemountet und ich benötige kein portsnap fetch update in den Jails mehr.

(1) Ist die Anleitung richtig so ?
(2) Muss ich wirklich in den jails dann nicht mehr mit portsnap fetch update aktualisieren ?
(3) Wie würde ich den ein freebsd-update fetch / freebsd-update install durchführen ?
(4) Wenn ich das Update der Jails binär durchführe, update ich als ersten den Host oder als erstes die Jails up
(5) Wie gehe ich vor wenn ich beispielsweise von FreeBSD 10.2 auf FreeBSD 11 updaten will

Ich bin um jeden Tipp dankbar.

LG Mardor
 
Auch wenn ich deine Fragen nicht direkt beantworten kann, sind genau diese Fragen mit ein Grund warum ich damals von ezjail wieder weg gegangen bin. Daher helfen dir vllt. auch meine Erfahrungen dazu:

Das einrichten der Jails klingt auf den ersten Blick immer alles sehr verlockend. Aber die spätere Wartung dieser ist dann doch eher undurchsichtig. Es schwebte mir immer die Frage im Kopf herum: "Wurde jetzt wirklich alles aktualisiert?", "Hat er da nicht die die Config-Dateien vergessen?", etc. pp... Etwas nachforschen und durchstöbern der Config-Dateien hat dann gezeigt, dass ich Recht hatte... die Updates über ezjail waren teilweise unvollständig.

Und dann kommt die Erkenntnis: Wow, ich habe vllt. 1h beim Setup der Jails gespart aber schon 2 Tage in die Untersuchung gesteckt wie ich das eigentlich alles verwalte und Fehler gefunden".

Dann kommt noch der nächste Aspekt zu. Wegen Software X konnte ich hier eine Jail nicht so ohne weiteres auf FreeBSD 10 anheben. War noch kein Update verfügbar. Joahr, dank ezjail stehen dann alle Jails auf der Version fest, weil die ja alle eine Basis benutzen... oder ich splitte es auf und werfe die Idee von ezjail über den Haufen.

Da ist mir dann auch irgendwann der Kragen geplatzt... Einfach nach Handbuch die Jails eingerichtet und hab wieder das altbekannte freebsd-update und gut ist.

Jetzt hab ich hier meine normalen Jails, eine neue einrichten ist eine Sache von 5min und 2 total banale Skripte die freebsd-update -b <jail> fetch install und pkg -j <jail> upgrade für jede Jail aufrufen.
 
Gutes Video, dass die Installation und den Betrieb mit ezjail zeigt.
Ich bin mit ezjail super zufrieden, habe aber auch nur um die 20 Stück auf zwei Servern in Betrieb.
 
Hallo Frank,

vielen Dank für den Tipp, das Video ist sehr gut und hat mir auch einige neue Infos gegeben.
Mein Problem ist das der Update/Upgrade Prozess im Video überhaupt nicht behandelt wird.

Aber trotzdem vielen dank für das Video.

Gruß Mardor
 
Ok ich habe etwas gefunden unter https://www.freebsd.org/doc/handbook/jails-ezjail.html, darauf würde ich folgende Antworten auf meine Fragen geben.

Zu 2: Nein, wenn das Basejail upgedatet wird werden die jails (weil verknüpft) auch upgedatet. Das Basejail würde ich dann mit "ezjail-admin update -MSP" durchführen, oder ?
Zu 3: Ja für das Hostsystem schon, danach muss ich "ezjail-admin update -u" eingeben um innerhalb einer Version upzudaten (10.2 zu 10.3). Wenn ich einen Versionsprung (10.2 -> 11) durchführen woll würde ich für die jails "ezjail-admin update -U -s 10.1-RELEASE" eingeben. Ich gebe also die alte Version im Kommando an und nicht die Zielversion.
Zu 4: Zuerst den Host
Zu 5: Siehe Nummer 3

Somit wäre nur noch zwei Fragen übrig
(1a) Ist die oben beschriebene Vorgehensweise richtig ?
(1b) Ist mein Nachtrag korrekt ?
(2) Ist ezjail-admin update -MSP korrekt ?

Gruß Mardor
 
Hallo,

ich habe auf der Mailingliste von ezjail gefragt und folgende Zusammenfassung geschrieben:

Install ezjail:
portmaster sysutils/ezjail

Edit the configuration:
ezjail_jaildir=/usr/jails
ezjail_use_zfs="YES"
ezjail_use_zfs_for_jails="YES"
ezjail_jailzfs="zroot/ezjail"

Edit /etc/rc.conf

syslogd_flags="-ss -a 127.0.0.1 -C"
ezjail_enable="YES"
ifconfig_lo0_alias0="inet 10.0.0.1/32"
ifconfif_lo0_alias1="inet 10.0.0.2/32"
ifconfig_lo0_alias2="inet 10.0.0.3/32"

Install the Source, the Ports and the Manual for the Basejail
ezjail-admin install -spm

Create the first Jail
ezjail-admin create webserver_1 10.0.0.1

Start the jails
ezjail-admin start webserver_1

Display the available jails
jls

Login to the jail
ezjail-admin console webserver_1

Update the Ports
ezjail-admin update -p

Update between different Patch-Level (10.1-p20 → 10.1-p24)
ezjail-admin update -u

Update between different Releases (10.1 zu 10.2 and 10 zu 11) (-s SOURCE)
ezjail-admin update -U -s 10.1-RELEASE

Complete steps to update the host and the jail
freebsd-update -r NEW upgrade
freebsd-update install
reboot
freebsd-update install
-> upgrade packages
freebsd-update install
ezjail-admin update -U -s the_version_you_want_to_upgrade_FROM

Vielleich holft dies ja jemanden.

Gruß Mardor
 
Was genau sparst du da jetzt? Das console Subkommando existiert auch im Jail-RC-Skript ab FreeBSD-10. Das Aliase anlegen macht das normale RC-Script auch besser. Ich würde mich grundsätzlich lieber an das Basissystem halten, allein schon um nicht noch mehr Kommandos im Kopf haben zu müssen.

Rob
 
Hallo KobRheTilla,

ich verstehe absolut deine Argumente, natürlich ist noch ein Layer noch eine Fehlerquelle, allerdings muss ich sagen das ich es auch nach langem langen Suchen nicht geschaft habe eine Anleitung zu finden die, ZFS pro Jail, freebsd-update für Systemupdates und portmaster unterstützt und mir beschreibt wie ich dies realisieren kann.

Alle Anleitungen die ich dazu finde sind entweder nicht für FreeBSD 10 oder nicht für das update mit freebsd-update oder nicht für die portinstallation über portmaster.
Weiterführend ist der Ratschlag bei den Büchern über FreeBSD und zfs immer ezjail.

Gruß Mardor
 
Naja, ich will ja nicht meckern, aber wie wäre es mit den Man-Pages die direkt mit FreeBSD mitgeliefert werden? :D

https://www.freebsd.org/cgi/man.cgi?jail

Setting up a Jail Directory Tree
Setting Up a Jail
Setting
up the Host Environment
Configuring
the Jail
Starting
the Jail
Managing the Jail

Und ein
https://www.freebsd.org/cgi/man.cgi?freebsd-update

sagt dir dann auch, dass freebsd-update ein basedir Parameter hat :D

Und ZFS pro Jail bestimmst im Endeffekt du, wo du nun auch immer deine Jaildaten hinlegst.
 
Hallo Nuke,

vielen Dank für den Hinweis.

Der Text klingt interessant, aber aktuell würde ich mich da noch nicht dran versuchen, beispielsweise ist mir folgendes unklar:

(1) Gibt es noch basejails (fulljail oder newjail) oder ist das eine Erfindung von ezjail ?
(2) Laut Dokument soll ich mit make world DESTDIR=$D und make distribution DESTDIR=$D die "Umgebung" erstellen. Das klingt für mich nicht nach einer binären Angelegenheit:
(2a) Gibt es das auch als "Binärcopy"
(2b) Kann ich wenn ich die Umgebung mit "make" erstelle wirklich mit freebsd-update für ein Update weitermachen ?
(3) Sagen wir ich will einen sshd/Webserver laufen lassen, brauche ich da einen der folgenden Optionen zu aktivieren ? allow.mount.devfs, allow.mount.fdescfs, allow.mount.nullfs, allow.mount.procfs. Was machen diese fs's überhaupt, worauf muss ich achten um mir hier meinen jail nicht komplett adabsurdum zu führen.
(4) Wenn du mir nicht gesagt hättest das ich mit freebsd-update -b durchführen kann wäre ich nun erstmal nicht davon ausgegangen das dies auch in einem jail funktioniert. In der man von freebsd-update steht nämlich kein Wort von jail.


Versteh mich nicht falsch aber das sind alles spontane Fragen die mir sagen das ich noch nicht wirklich in der Lage bin so ein System ohne Hilfe von ezjail zu nutzen. Klar kann ist dies irgendwie durch nachlesen rausbekommen aber da bin ich wieder Stunden um überhaupt sinnvolle Quellen zu finden und mit ezjail habe ich das bereits komplett.
 
(1) Gibt es noch basejails (fulljail oder newjail) oder ist das eine Erfindung von ezjail ?
(2) Laut Dokument soll ich mit make world DESTDIR=$D und make distribution DESTDIR=$D die "Umgebung" erstellen. Das klingt für mich nicht nach einer binären Angelegenheit:
(2a) Gibt es das auch als "Binärcopy"
(2b) Kann ich wenn ich die Umgebung mit "make" erstelle wirklich mit freebsd-update für ein Update weitermachen ?
(3) Sagen wir ich will einen sshd/Webserver laufen lassen, brauche ich da einen der folgenden Optionen zu aktivieren ? allow.mount.devfs, allow.mount.fdescfs, allow.mount.nullfs, allow.mount.procfs. Was machen diese fs's überhaupt, worauf muss ich achten um mir hier meinen jail nicht komplett adabsurdum zu führen.
(4) Wenn du mir nicht gesagt hättest das ich mit freebsd-update -b durchführen kann wäre ich nun erstmal nicht davon ausgegangen das dies auch in einem jail funktioniert. In der man von freebsd-update steht nämlich kein Wort von jail.

1) Das ist eine ezjail Erfindung weil sie meinen es ist eine tolle Idee, wenn sich alle Jails die Basis-Binaries teilen und Workarounds um alles zu bauen. Man hat damit ein komplexeres System um ein paar Hundert MB zu sparen... Jede Jail ist anders sonst ein eigenes FreeBSD für sich und es gelten ähnliche Regeln für die Jail wie für den Host
2a) du kannst auch einfach die fertig kompilierten Binaries da hin entpacken. Das steht nicht in der Man-Page, aber im Handbuch dafür, glaube ich
2b) Ja
3) Im Grunde nichts davon, aber das sagt dir die Software dann schon, wenn sie etwas vermisst. Das ist bei ezjail jetzt auch nicht anders an dem Punkt
4) Weil Jails auch keine Magie sind. Du kannst dich auch einfach in deine Jail einloggen (so wie dein ezjail console) und dort wie beim Host freebsd-update aufrufen. Nur bei ezjail geht das nicht, weil sie eben halt meinen alles zu teilen

Du stellst dir Jails einfach viel zu komplex vor. Bis auf den Kernel sind das im Grunde komplett eigenständige FreeBSD-Installationen.
 
Versteh mich nicht falsch aber das sind alles spontane Fragen die mir sagen das ich noch nicht wirklich in der Lage bin so ein System ohne Hilfe von ezjail zu nutzen. Klar kann ist dies irgendwie durch nachlesen rausbekommen aber da bin ich wieder Stunden um überhaupt sinnvolle Quellen zu finden und mit ezjail habe ich das bereits komplett.

Naja, mal davon abgesehen, dass du mit der Anleitung in der Man-Page mal kurz was kompilieren sollst, ist die Anleitung recht vollständig. Da hättest du gar nicht suchen müssen. ;)

Der Vorteil der Source-Variante bei der Ersteinrichtung ist halt, dass du eine Jail bekommst die genau den Stand hat wie deine aktuell laufende FreeBSD-Version. Die Binary-Variante installiert dir meist erst mal das Erst-Release und anschließend wäre noch ein freebsd-update nötig. Und das machst du ja im Endeffekt genau ein mal, danach kannst dir das ja als Basis nehmen und immer wieder kopieren.
 
Das ist eine ezjail Erfindung weil sie meinen es ist eine tolle Idee, wenn sich alle Jails die Basis-Binaries teilen und Workarounds um alles zu bauen. Man hat damit ein komplexeres System um ein paar Hundert MB zu sparen...

Das hat in meinen Augen auch den nicht zu vernachlässigenden Vorteil, dass man bei einem base-Update nur einmal das basejail updaten muss. Aber mich nervt ezjail auf meinem Server auch gerade und ich überlege daher, ob ich das mit Salt oder so bequemer hinbekomme.
 
Das hat in meinen Augen auch den nicht zu vernachlässigenden Vorteil, dass man bei einem base-Update nur einmal das basejail updaten muss.

Was praktisch eine Lüge ist, da in deinen abgeleiteten Jails die Konfigurationen nicht aktualisiert werden. Gut, das passiert bei Patch-Leveln seltener, aber bei Major-Upgrades wird es dann echt eklig. Siehe dazu auch mal meinen alten unbeantworteten Thread: http://www.bsdforen.de/threads/freebsd-upgrade-ezjail-und-jails.30843/ Anschließend bin ich zu den Standard-Jails gewechselt :D

Und ob ich nun ezjail-admin aufrufe, oder selbst ein kleines Skript mache, was für jede meiner Jails freebsd-update -b aufruft...

Wie ich meine ganzen Jails aktuell halte:

sh scripts/sys_update_jails.sh (hier drin sind die freebsd-update -b Aufrufe)
sh scripts/pkg_update_jails.sh (hier sind die pkg -j Aufrufe)

Ist ja nicht so als wenn man wiederkehrende Aktionen nicht in ein Skript packen könnte :D Sind ja alles nur einmalige Sachen (also das Schreiben)
 
Major-upgrades bin ich damit noch nicht gefahren, aber die fehlenden configs sind ein Problem, die unterschiedlichen Ports/Packages ein anders. Wie geschrieben, ich bin momentan auch unzufrieden, ezjail hat viel versprochen und eher so mäßig gehalten. Es wurde mir halt empfohlen…
 
ezjail ist in meinen Augen auch ziemlich 2000er. Mit iocage gibt es einen wesentlich moderneren Containermanager, der auch die neueren Funktionen des Jail-Frameworks nutzen kann: https://github.com/iocage/iocage Mit Jetpack gibt es außerdem noch eine Implementierung der aus dem Linux-Umfeld bekannten und dort Docker so halb verdrängten ACS : https://github.com/3ofcoins/jetpack Eventuell wirst du mit einem der beiden glücklicher. :)
 
Hallo,

ich habe mir jetzt heute mehrfach die Anleitung zu jails (https://www.freebsd.org/doc/de_DE.ISO8859-1/books/handbook/jails-build.html) und die Manpage angeschaut (https://www.freebsd.org/cgi/man.cgi?jail) hierbei hätte ich noch ein paar Fragen:

(1) Die Anleitung sagt: make buildworld, make installworld DESTDIR=$D, make distribution DESTDIR=$D und die man page sagt: make world DESTDIR=$D, make distribution DESTDIR=$D. Was ist hier denn der Unterschied oder ist make world nur eine Zusammenfassung von buildworld und installworld.

(2) Laut Anleitung:
Das Einhängen des devfs(8)-Dateisystems innerhalb der Jail ist nicht unbedingt notwendig. Allerdings benötigt fast jede Anwendung Zugriff auf wenigstens ein Gerät. Es ist daher sehr wichtig, den Zugriff auf Devices aus der Jail heraus zu kontrollieren, da unsaubere Einstellungen es einem Angreifer erlauben könnten, in das System einzudringen. Die Kontrolle über devfs(8) erfolgt durch die in den Manualpages devfs(8) und devfs.conf(5) beschriebenen Regeln.
Laut Anleitung sollte weiterhin nach dem make distribution ein "mount -t devfs devfs $D/dev" durchgeführt werden.
Wie haltet Ihr es in der Praxis mit devfs ?

(3) Muss in der sysctl in Bezgu auf "security.jail." im Normalfall etwas geändert werden ?

Gruß Mardor
 
Man du machst das viel zu kompliziert! Entpacke doch einfach das base.txz und fertig. Eine kleine Anleitung (ist vielleicht nicht komplett da aus dem Kopf):

Interface definieren in /etc/rc.conf und die Jail "test1" direkt beim Start des Servers starten:

Code:
#--- JAIL
jail_enable="YES"
jail_list="test1"

cloned_interfaces="lo1"
ifconfig_lo1_alias0="inet 10.0.0.10/32"

File entpacken:
Code:
tar xf base.txz -C /data/jail/test1

Die Datei /etc/jail.conf anlegen und die Jails definieren:

Code:
#--- GLOBAL
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.clean;

mount.devfs;
devfs_ruleset = 4;
allow.raw_sockets = 1;
interface = lo1;

path = "/data/jail/$name";

#-- JAILS
test1 {
  host.hostname = test1;
  ip4.addr = 10.0.0.11;
}
Mit den Einstellungen "allow.raw_sockets" und "devfs_ruleset", musst du vorsichtig sein. Danach musst du in deiner Firewall noch ein paar Regeln definieren um die Ports weiter in die Jail zu leiten. Da ich hier ein Interface "lo1" verwende, klappt das ohne grössere Probleme.


Das Verzeichnis /data/jail/test1 liegt auf einem ZFS Dataset, welches ich einfach clonen oder sichern kann. Eine Jail ist somit in 2 Minuten installiert.Updates mache ich mit "freebsd-update -b /data/jail/test1". In der Jail verwende ich noch die Einstellung "Components world kernel" in der Datei "/etc/freebsd-update.conf", damit ich keine Source File Updates bekomme.


Gruss
 
Man kann Jails auch sehr komfortabel mit "bsdinstall jail /pfad/zum/neuen/jail" anlegen. :)
 
Hallo,

der Link ist wirklich super. Ich habe die jails nun auf Basis dieser Info erstellt. Eine einzige Sache habe ich nicht hinbekommen.
Code:
/usr/ports              /usr/jails/jailname/usr/ports     nullfs  ro  0   0

Beim Eintragen dieser Zeile in die /etc/fstab habe ich das Problem das mein System nicht mehr bootet weil /usr/ports nicht auffindbar wäre.
Über "mount_nullfs -o ro /usr/ports/ /usr/jails/jailname/usr/ports" funktioniert alles wunderbar.

Ich gehe davon aus, dass dies mit ZFS zu tun hat. Aber ich bin mir nicht sicher wie ich dieses Problem umgehen kann.

Gruß Mardor
 
Hallo,

der Link ist wirklich super. Ich habe die jails nun auf Basis dieser Info erstellt. Eine einzige Sache habe ich nicht hinbekommen.
Code:
/usr/ports              /usr/jails/jailname/usr/ports     nullfs  ro  0   0

Beim Eintragen dieser Zeile in die /etc/fstab habe ich das Problem das mein System nicht mehr bootet weil /usr/ports nicht auffindbar wäre.
Über "mount_nullfs -o ro /usr/ports/ /usr/jails/jailname/usr/ports" funktioniert alles wunderbar.

Ich gehe davon aus, dass dies mit ZFS zu tun hat. Aber ich bin mir nicht sicher wie ich dieses Problem umgehen kann.

Gruß Mardor
Ich habe in meiner jail.conf folgenden Eintrag dafür:
Code:
# --- read-only mount ports tree
mount += "/usr/ports /usr/jails/$name/usr/ports nullfs ro 0 0";
Funktioniert wunderbar, meine Jails liegen in eigenen ZFS datasets und sind mit
Code:
make DESTDIR=$dir installworld distribution
erstellt, weil ich nur eine Hand voll zu verwalten habe. Würde ich heute vermutlich auch eher auf bsdinstall umstellen aber das habe ich mir fürs nächste große Update aufgehoben.
 
Zurück
Oben