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'

Verwandte Seiten