BSD-Wiki

Mitschrift einer FreeBSD-Installation

Benutzer-Werkzeuge

Webseiten-Werkzeuge


ein_jailsystem_mit_ezjail_installieren

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

ein_jailsystem_mit_ezjail_installieren [2017/10/02 13:40] (aktuell)
Zeile 1: Zeile 1:
 +====== Allgemein ======
 +Zum Einen ist es natürlich möglich Jails unter FreeBSD von Hand zu erstellen und zu verwalten wie es in dem Artikel [[Jail erstellen]] erläutert ist. Eine andere Möglichkeit ist die Verwendung von //ezjail//, einem Verwaltungswerkzeug für Jails. Mittels //ezjail// ist es möglich relativ schnell mehrere Jails zu erstellen und zu verwalten.
 +Im Weiteren wird verkürzt die Funktionsweise von //ezjail// erklärt. Die Beschreibung stützt sich lediglich auf die Verwendung von Binärinstallationen und -updates und verwendet kein ZFS. Die Möglichkeiten von //ezjail// gehen deutlich über den Umfang dieser Anleitung hinaus und sind in den Manpages ezjail(7) und ezjail-admin(8) in voller Breite dargelegt (z.B. die Installation und das Updaten von Jail mittels Systemquellen,​ das Installieren in ZFS-Datasets,​ etc.).
 +
 +====== Das Konzept von ezjail ======
 +Werden auf einem FreeBSD-System mehrere Jails von Hand verwaltet wird normalerweise in jeder einzelnen Jail ein (zumindest weitestgehend) komplettes FreeBSD-System installiert. Im nächsten Schritt bedeutet das, dass bei einem Systemupdate auch jede Jail aktualisiert werden muss (was in Arbeit ausarten kann). Der Ansatz den //ezjail// verfolgt sieht etwas anders aus.
 +Beim ersten Einrichten von //ezjail// werden drei Bereiche erstellt die als Basis jeder neuen Jail verwendet werden. Die drei Bereiche sind die **basejail**,​ das **newjail**-Template und die **flavours** (genauer ein erstes //​example//​-Flavour).
 +
 +===== Basejail =====
 +Die Basejail ist ein Verzeichnis welches alle Binärdateien einer FreeBSD-Installation enthält. In jede später erstellte Jail wird die Basejail als real-only nullfs-mount enthalten. Somit sind die Binärdateien aller Jails in nur einem Verzeichnis. Die Vorteile hiervon sind, dass für ein Systemupdate aller Jails lediglich ein Ordner aktualisiert werden muss, egal wie viele Jails man erzeugen will, wird das Basis-System nur einmal (zusätzlich zum Host) auf der Festplatte abgelegt und das verändern von Systemprogrammen wird durch den read-only-mount erschwert.
 +In der Basejail werden keine Änderungen von Hand vorgenommen.
 +
 +===== Newjail =====
 +Zusätzlich zu den Binärdateien enthält eine vollständige FreeBSD-Installation noch weitere Dateien, die zumeist auch veränderbar sein müssen, wie z.B. Konfigurationsdateien. Im Unterordner **newjail** hält //ezjail// genau diese Dateien vor. Die Kombination aus **basejail** und **newjail** ergibt eine komplette FreeBSD-Installation. Beim Erzeugen einer neuen Jail werden die Dateien von **newjail** in die neue Jail kopiert und stehen von da an Änderungen zur Verfügung.
 +In **newjail** selbst werden keine Änderungen vorgenommen,​ da der Ordner bei einem Update neu geschrieben wird um die zu den Binärdateien passenden Daten bereit zu halten.
 +
 +===== Flavours =====
 +Ohne den Einsatz von **flavours** erzeugt ezjail in jeder neu erzeugen Jail eine blanke FreeBSD-Basisinstallation (durch nullfs-mount von **basejail** und dazukopieren von **newjail**). Im Allgemeinen hat man jedoch meist spezielle Dinge die man in jeder Jail haben möchte und entsprechend diese Einstellungen in jeder Jail von Hand einzeln vornehmen müsste. Um diese Arbeit zu vereinfachen gibt es **falvours**. Man kann beliebig viele **flavours** anlegen, jede neue Jail kann jedoch nur mit jeweils einem **flavour** angelegt werden. Die **flavours** können natürlich so oft verwendet werden wie man will.
 +Ein Flavour ist wieder nur ein Ordner der genau die Dateien die man gerne geändert haben möchte enthält. Diese Dateien müssen entsprechend ihres Speicherorts in der späteren Jail in jeweiligen Unterordnern abgelegt werden. Erzeugt man nun eine neue Jail unter Verwendung von **flavours** werden nach Installation des Base-Systems in die Jail alle Dateien des Flavours über die Jail kopiert. Bereits bestehende Dateien werden somit ersetzt oder noch nicht vorhandene erzeugt.
 +Die **flavours** enthalten sogar ein rc-Script welches beim ersten Start der Jail ausgeführt werden kann um noch weitere vorbereitende Arbeiten in der Jail durchzuführen,​ wie z.B. das Installieren von Paketen.
 +Die **flavours** sind der einzige Ort an dem Änderungen in den Jail-Vorlagen durchgeführt werden dürfen.
 +
 +====== Installation und Einrichtung ======
 +Zunächst wird ezjail installiert und soweit eingerichtet,​ dass man direkt Jails erstellen lassen kann.
 +
 +===== Installation =====
 +Um ezjail verwenden zu können muss es zunächst aus **sysutils/​ezjail** installiert werden.
 +
 +Unter **/​usr/​local/​etc/​ezjail.conf** wird eine Konfigurationsdatei angelegt die man entsprechend anpassen kann. Prinzipiell sind die Standardwerte in Ordnung und es können alle dort hinterlegten Einstellungen auch dem Komandozeilen-Programm //​ezjail-admin//​ mitgegeben werden.
 +
 +===== Basejail installieren =====
 +Nach Installation von **ezjail** kann mit der Einrichtung begonnen werden.
 +Die Basejail und die restliche notwendige Infrastruktur wird mit folgendem Befehl installiert. Das //-m// bedeutet, dass die Manpages mit installiert werden sollen. Weitere Parameter sind der Manpage zu ezjail-admin zu entnehmen.
 +<​code>​
 +# ezjail-admin install
 +</​code>​
 +Nun ist unter ///​usr/​jails//​ die komplette Infrastruktur installiert die **ezjail** benötigt.
 +
 +===== Neues Flavour anlegen =====
 +Nachdem die //​Basejail//​ installiert ist wird als nächstes ​ ein neues Flavour angelegt welches die Basis für die Personalisierung der späteren Jails darstellt. Hierzu wird das mitgelieferte Beispiel kopiert.
 +
 +==== Eigenes Flavour erstellen ====
 +Zunächst wird die Kopie aus dem Beispiel-Flavour erstellt
 +<​code>​
 +# cp -a /​usr/​jails/​flavours/​example /​usr/​jails/​flavours/​myFlavour
 +</​code>​
 +
 +==== crontab anpassen ====
 +Zunächst muss  **/​usr/​jails/​newjail/​etc/​crontab** nach **/​usr/​jails/​flavours/​myFlavour/​etc/​crontab** kopiert werden, da im Template unter //newjail// keine Änderungen vorgenommen werden dürfen da sie beim nächsten Update überschrieben wird. 
 +<​code>​
 +# cp /​usr/​jails/​newjail/​etc/​crontab /​usr/​jails/​flavours/​myFlavour/​etc/​crontab
 +</​code>​
 +
 +Dann kann die Datei **/​usr/​jails/​flavours/​myFlavour/​etc/​crontab** angepasst werden damit //​adjkerntz//​ nicht unnötig in der Jail läuft. Hierzu wird die entsprechenden Zeile durch vorranstellen eines '#'​ auskommentiert.
 +<​code>​
 +#1,31    0-5 *   ​* ​  ​* ​  ​root ​   adjkerntz -a
 +</​code>​
 +
 +==== Timezone setzen ====
 +Damit die Jails alle die richtige Uhrzeit haben muss die //​localtime//​ vernünftig gesetzt werden. Dies kann einfach durch einen Symlink auf die entsprechende Zeitzonendatei erfolgen. Für Berliner Zeit sieht das z.B. wie folgt aus.
 +<​code>​
 +# ln -s /​usr/​share/​zoneinfo/​Europe/​Berlin /​usr/​jails/​flavours/​myFlavour/​etc/​localtime
 +</​code>​
 +
 +==== make.conf anpassen ====
 +Als nächstes wird eine Vorlage für die **make.conf** der Jails unter **/​usr/​jails/​flavours/​myFlavour/​etc/​make.conf** erstellt und wie gewünscht befüllt. Beispielsweise zur Verwendung des neuen Paketformats //pkg// wäre folgender Eintrag nötig.
 +<​code>​
 +WITH_PKGNG=yes
 +</​code>​
 +
 +==== resolv.conf einfügen ====
 +Damit die Jails Zugriff auf die Namensauflösung haben um vernünftigen Internetzugang zu erhalten wird die //​resolv.conf//​ des Hosts als Basis für die zu erstellenden Jails verwendet.
 +<​code>​
 +# cp /​etc/​resolv.conf /​usr/​jails/​flavours/​myFlavour/​etc/​resolv.conf
 +</​code>​
 +
 +==== PKG ====
 +Die neue Jail soll als Paketverwaltungswerkzeug das neue //pkg// verwenden und direkt bei der Erzeugung erste Pakete von einem beliebigen Repo installieren. Damit dies funktioniert muss die Jail natürlich Zugang zum Internet haben (so das Repo im Internet liegt). Das bedeutet, dass die Jail über eine gültige resolv.conf verfügen und (im weiteren Ablauf) mit einer gültigen IP erzeugt werden muss.
 +
 +=== PKG einrichten ===
 +Zunächst wird die Konfiguration für pkg angelegt. Hier zu wird die Datei **/​usr/​jails/​flavours/​myFlavour/​usr/​local/​etc/​pkg.conf** erzeugt und wie folgt gefüllt:
 +<​code>​
 +packagesite:​ MEINEWUNSCHSEITE
 +</​code>​
 +Wobei //​MEINEWUNSCHSEITE//​ die URL des zu verwendenden Repos ist.
 +
 +=== Zu installierende Pakete festlegen ===
 +Um die Pakete festzulegen die in jede neue Jail bei deren Erzeugung installiert werden sollen wird die Datei **/​usr/​jails/​flavours/​myFlavour/​install_packages** angelegt und wie folgt gefüllt.
 +<​code>​
 +#!/bin/sh
 +p="pkg install -y" ​
 +
 +# ab hier folgen die Namen der zu installierenden Pakete
 +$p editors/vim
 +$p mail/ssmtp
 +$p ports-mgmt/​portmaster
 +</​code>​
 +In diesem Beispiel würden **vim** und **ssmtp** in jede erzeugte Jail installiert werden.
 +
 +=== Bootstrap von PKG ===
 +Damit beim ersten Start der Jail **pkg** und die gewünschten Pakete installiert werden muss die Datei **/​usr/​jails/​flavours/​myFlavour/​etc/​rc.d/​ezjail.flavour.example** angepasst werden.
 +
 +Zunächst wird der folgende Abschnitt gesucht...
 +<​code>​
 +# Packages
 +###########
 +#
 +# Install all packages previously put to /pkg
 +# Remove package files afterwards
 +
 +[ -d /pkg ] && PACKAGESITE=file://​ pkg_add -r /pkg/*
 +rm -rf /pkg
 +</​code>​
 +... und durch den folgenden ersetzt...
 +<​code>​
 +# Packages
 +###########
 +#
 +# Neue Pakete installieren
 +
 +ASSUME_ALWAYS_YES=YES PACKAGESITE=MYPACKAGESITE pkg
 +
 +/bin/sh /​install_packages
 +rm -rf /​install_packages
 +</​code>​
 +Wobei //​MYPACKAGESITE//​ mit der URL des zu verwendenden Repos zu ersetzen ist.
 +
 +==== Weitere Konfigurationen ====
 +Zum Abschluss der Personalisierung der Jailvorlage können noch weitere Konfigurationen eingespielt werden. Um z.B. dem automatisch installierten //vim// (nach obigem Beispiel) direkt eine vernünftige Konfiguration mitzugeben wird eine fertige [[.vimrc|vimrc]] als **/​usr/​jails/​flavours/​myFlavour/​usr/​local/​share/​vim/​vimrc** abgelegt.
 +
 +====== Erzeugen einer Jail ======
 +Um nun eine erste Jail mit Einbindung des Flavours //​myFlavour//​ zu erzeugen wird einfach folgender Befehl verwendet.
 +<​code>​
 +# ezjail-admin create -f myFlavour ersteJail 123.123.123.123
 +</​code>​
 +Wobei //​ersteJail//​ der Name der Jail und //​123.123.123.123//​ die ihr zugewiesene IP ist.
 +
 +Jede erzeugte Jail erhält unter **/​usr/​local/​etc/​ezjail/​** eine eigene Konfigurationsdatei in welcher man noch einige Details der Jail anpassen kann. Auch hier sind die Standardwerte vernünftig. (**Achtung:​** Wird einer Jail das verboten mount nutzen zu dürfen funktioniert das Einbinden der Basejail nicht mehr!).
 +
 +===== Erster Start der Jail =====
 +Nachdem die Jail erzeugt wurde kann sie nun zum ersten Mal gestartet werden. Zum [[EIn_Jailsystem_mit_ezjail_installieren#​Eine_Jail_starten | Starten der Jail]] gibt es verschiedene Möglichkeiten. Da nach der Erzeugung und dem ersten Start der Jail jedoch sicher noch einiges an Konfigurationsbedarf besteht kann mit folgendem Befehl die Jail gestartet und direkt ein Terminalzugang als root geöffnet werden.
 +<​code>​
 +# ezjail-admin console -f ersteJail
 +</​code>​
 +Je nachdem wie viele Pakete automatisch installiert werden sollen kann es einige Minuten dauern bis die Jail das Erste mal komplett gestartet ist! Geduld ist geboten.
 +
 +====== Arbeiten mit Jails ======
 +===== Eine Jail starten =====
 +Eine einzelne Jail (hier //​ersteJail//​) kann mit folgendem Befehl gestartet werden.
 +<​code>​
 +# ezjail-admin start ersteJail
 +</​code>​
 +
 +===== Eine Jail beenden =====
 +Eine einzelne Jail (hier //​ersteJail//​) kann mit folgendem Befehl beendet werden.
 +<​code>​
 +# ezjail-admin stop ersteJail
 +</​code>​
 +
 +===== Jails beim Systemstart starten =====
 +Um die Jails automatisch beim Systemstart mit zu starten wird folgender Eintrag in die **/​etc/​rc.conf** des Hostsystems hinzugefügt:​
 +<​code>​
 +ezjail_enable="​YES"​
 +</​code>​
 +Ausnahmen sind Jails die das Flag gesetzt bekommen haben, dass sie nicht automatisch starten sollen (Details siehe Manpage).
 +
 +===== In eine Jail einloggen =====
 +Um in die Jail //​ersteJail//​ einzuloggen wird der Befehl wie folgt aussehen.
 +<​code>​
 +# ezjail-admin console ersteJail
 +</​code>​
 +Dies funktioniert nur wenn die Jail bereits läuft. Wird der Parameter **-f** hinzugefügt wird eine noch nicht laufende die Jail vor dem Einloggen gestartet.
 +<​code>​
 +# ezjail-admin console -f ersteJail
 +</​code>​
 +
 +===== Update der Basisjail =====
 +Das Konzept von **ezjail** erlaubt es, dass ein Systemupdate nur auf der //​basejail//​ durchgeführt werden muss und somit alle Jails automatisch aktualisiert werden.
 +Im Weiteren wird das Update mittels Binärupdates (über //​freebsd-update//​) beschrieben.
 +
 +==== Update auf einen neuen Patchlevel ====
 +Um einen neuen Patchlevel einzuspielen (also z.B. von 9.2 auf 9.2-p1) muss sich der Host auf dem selben Release befinden wie wie Jails (in diesem Falle 9.2).
 +Dann kann die basejail einfach wie folge geupdated werden.
 +<​code>​
 +# ezjail-admin update -u
 +</​code>​
 +
 +==== Update auf ein neues Release ====
 +Soll die //​basejail//​ auf eine neue Releaseversion upgedated werden (z.B. von 9.1 auf 9.2) so muss zunächst das Hostsystem geupdated werden. Anschließend kann das Update wie folgt durchgeführt werden. ​
 +<​code>​
 +# ezjail-admin update -s 9.1-RELEASE -U
 +</​code>​
 +Hierbei ist //​9.1-RELEASE//​ die aktuelle Release-Version die **noch** in der Jail installiert ist. Das Update wird das System dann auf das Release des Hostsystems heben.
  
ein_jailsystem_mit_ezjail_installieren.txt · Zuletzt geändert: 2017/10/02 13:40 (Externe Bearbeitung)

Impressum