CBSDfile-Hooks: Pre-/Post-Aktionen
Hook-Typen
CBSDfile unterstützt Hook-Funktionen, die automatisch zu bestimmten Zeitpunkten im Lebenszyklus aufgerufen werden:
| Hook | Wann ausgeführt |
|---|---|
globals() |
Vor der Verarbeitung jeder Umgebung (globale Variablen) |
preup() |
Einmalig vor dem Start der Erstellung aller Umgebungen |
preup_<name>() |
Vor der Erstellung einer bestimmten Umgebung <name> |
postcreate_<name>() |
Nach der Erstellung der Umgebung <name> |
postdestroy_<name>() |
Nach dem Löschen der Umgebung <name> |
postup() |
Einmalig nach der Verarbeitung aller Umgebungen |
Ausführungsreihenfolge
globals()– globale Variablenpreup()– globale Vorbereitung- Für jede Umgebung:
preup_<name>()— spezifische Vorbereitung- Umgebung erstellen
postcreate_<name>()— Post-Install-Konfigurationpostup()— Finalisierung
Beispiele
Einbinden einer gemeinsamen Konfiguration
preup()
{
# Gemeinsame Konfiguration laden (z. B. IP-Adressen aus einer externen Datei)
. ../config
}
Die Datei ../config kann folgende Variablen enthalten:
REDIS_RO_IP="10.0.0.20"
REDIS_RW_IP="10.0.0.21"
Post-Install-Konfiguration innerhalb der Jail
postcreate_web1()
{
jexec jname=${jname} /bin/sh <<EOF
sysrc nginx_enable="YES"
sysrc php_fpm_enable="YES"
pkg install -y redis
service nginx start
EOF
}
Überprüfung der Abhängigkeiten vor dem Erstellen
preup_redis1()
{
# Sicherstellen, dass die base-jail existiert
if ! jstatus jname=base-jail > /dev/null 2>&1; then
echo "Erstelle base-jail..."
jcreate jname=base-jail jprofile=base runasap=1
fi
}
Post-create mit Dateikopie
postcreate_app1() {
# Konfigurationsdateien in die Jail kopieren
jscp src=./configs/nginx.conf dest=/usr/local/etc/nginx/nginx.conf jname=${jname}
# Skripte kopieren
jscp src=./scripts/setup.sh dest=/tmp/setup.sh jname=${jname}
jexec jname=${jname} /bin/sh /tmp/setup.sh }
Variablen innerhalb von Hooks
Im Hook-Körper sind verfügbar:
- Alle Variablen aus globals() und <type>_<name>()
- $jname — Name der aktuellen Umgebung
- $rc — Rückgabewert der letzten Operation
Befehle zur Ausführung innerhalb von Umgebungen
| Befehl | Beschreibung |
|---|---|
jexec jname=<name> <befehl> |
Befehl innerhalb einer Jail ausführen |
jscp src=<pfad> dest=<pfad> jname=<name> |
Datei vom Host in die Jail kopieren |
bexec <name> <befehl> |
Befehl innerhalb einer bhyve-VM ausführen (über SSH) |
bscp <name> <pfad> <pfad> |
Datei vom Host in die bhyve-VM kopieren (über SSH) |
Für bhyve-VMs verwendet der Befehl bexec SSH. Der Parameter bhyve_ssh_wait (standardmäßig aktiviert) wartet auf die Stabilisierung der SSH-Verbindung vor der Ausführung.
Empfehlungen
preup()— für globale Vorbereitung und das Laden gemeinsamer Konfigurationen.postcreate_<name>()— für Post-Install-Einstellungen von Diensten und Paketinstallationen.preup_<name>()— zur Überprüfung von Abhängigkeiten und vorbereitenden Maßnahmen.- Verwenden Sie in
postcreatedie Befehlejexec/bexec, um Kommandos innerhalb der Umgebung auszuführen, sowiejscp/bscp, um Dateien zu kopieren.