Lebenszyklusverwaltung von Jails
Die Befehle jstart, jstop und jremove (Synonym jdestroy) steuern den Lebenszyklus von FreeBSD-Jails. Alle drei Befehle unterstützen leistungsstarke Mechanismen zur Zielauswahl: einzelne Namen, Listen, Masken und SQL-Abfragen.
Eingebaute Hilfe und Beispiele sind für jeden Befehl verfügbar:
cbsd jstart --help
cbsd jstop --help
cbsd jremove --help
Grundlegende Syntax
cbsd jstart jname=<Jailname>
cbsd jstop jname=<Jailname>
cbsd jremove name=<Jailname>
jremove und jdestroy sind funktional vollständig identisch.
Verhalten der Befehle
- jstart – Startet eine gestoppte Jail. Wenn die Jail bereits läuft, gibt der Befehl eine entsprechende Meldung aus.
- jstop — stoppt die Jail über
exec_stop(standardmäßig/bin/sh /etc/rc.shutdown). Wenn die Jail nicht läuft, tut der Befehl nichts. - jremove — entfernt die Jail vollständig. Wenn die Jail läuft, wird sie vor dem Entfernen automatisch gestoppt. Der Befehl löscht das Dateisystem der Jail (ZFS-Dataset oder Verzeichnis), Einträge in fstab und zugehörige Snapshots.
Massenoperationen
CBSD unterstützt die Ausführung von Operationen auf einer Gruppe von Jails gleichzeitig.
Wildcards
Der Parameter jname akzeptiert Muster mit dem Zeichen *:
# Startet alle Jails, deren Name mit 'sd' beginnt
cbsd jstart jname='sd*'
# Stoppt ALLE Jails auf dem Host
cbsd jstop jname='*'
# Entfernt alle Jails, die mit 'test' beginnen
cbsd jremove jname='test*'
Mehrere explizite Namen
Anstatt jname= zu verwenden, können Jails direkt aufgelistet werden:
cbsd jstop web1 web2 web3
cbsd jstart db1 db2 db3 cache1
Kombination der Ansätze
Beide Mechanismen können kombiniert werden:
cbsd jstart jname='prod-*' staging1 staging2
Parallele Ausführung
Operationen auf mehreren Jails können parallel ausgeführt werden. Das Verhalten wird über den Parameter parallel in cbsd initenv-tui konfiguriert.
SQL WHERE — Auswahl nach Bedingungen
Die mächtigste Funktion ist die Filterung von Jails mit einer SQL-ähnlichen Bedingung nach dem Schlüsselwort WHERE. Dies ermöglicht eine präzise Steuerung, welche Jails von der Operation betroffen sind.
Syntax
cbsd <command> WHERE <sql-condition>
<sql-condition> — ein standardmäßiger SQL-Ausdruck, der Folgendes unterstützt:
- Vergleiche:
=,!=,<,> - Logische Operatoren:
AND,OR - Musterabgleich:
LIKE - Gruppierung durch Klammern
Beispiele
Alle laufenden Jails mit Autostart stoppen
cbsd jstop WHERE status='1' AND astart='1'
Dies stoppt nur die Jails, die derzeit laufen (status='1') und Autostart aktiviert haben (astart='1').
Jails mit Autostart, VNET und einem bestimmten IP-Bereich starten
cbsd jstart WHERE astart=1 AND vnet=1 AND ip4_addr LIKE '1%'
Startet Jails, bei denen:
- Autostart aktiviert ist (astart=1)
- Ein isolierter Netzwerkstack konfiguriert ist (vnet=1)
- Die IPv4-Adresse mit 1 beginnt (z. B. 10.0.0.x, 192.168.x.x)
Alle Nicht-VNET-Jails stoppen
cbsd jstop WHERE vnet=0
Alle versteckten Jails entfernen
cbsd jremove WHERE hidden=1
Komplexe Bedingung mit OR
cbsd jstart WHERE (astart=1 AND status=0) OR jname='emergency'
Startet alle gestoppten Jails mit Autostart sowie die spezifische Jail emergency, unabhängig von deren Einstellungen.
Verfügbare Felder für WHERE
Die WHERE-Bedingung kann auf beliebige Spalten der Jail-Tabelle in der CBSD-Datenbank verweisen. Die wichtigsten Felder:
| Feld | Typ | Beschreibung |
|---|---|---|
jname |
TEXT | Name der Jail |
status |
INT | Aktueller Status: 0 = gestoppt, 1 = gestartet |
astart |
INT | Autostart: 0 = aus, 1 = an |
vnet |
INT | VNET-Isolierung: 0 = aus, 1 = an |
ip4_addr |
TEXT | IPv4-Adresse |
hidden |
INT | Versteckt-Flag: 0 = sichtbar, 1 = versteckt |
host_hostname |
TEXT | FQDN der Jail |
ver |
TEXT | FreeBSD Release-Version |
arch TEXT Architektur TEXT Architektur |
||
bash cbsd jstop jname='*' Oder über WHERE: bash cbsd jstop WHERE status=1 ### Neustart der Produktionsumgebung bash cbsd jstop jname='prod-*' cbsd jstart jname='prod-*' ### Bereinigung der Testumgebungen Alle Test-Jails entfernen: ```bash cbsd jremove jname='test' cbsd jremove jname='tmp' |
||
| Oder alle Jails mit einem bestimmten Tag löschen: |
cbsd jremove WHERE tags LIKE '%ephemeral%'
Nur VNET-Jails nach einem Netzwerk-Update starten
cbsd jstart WHERE vnet=1 AND astart=1
Jails einer älteren FreeBSD-Version entfernen
cbsd jremove WHERE ver='13.0'