systemd.generator(7)
Dynamische Systeme sind schwierig
- ➤ Devices, Mountpoints, Services, Timer möglichst als Unit
-
Transitionstechnologie für
/etc/fstabund SysV init-Skripte - Hooks für den Bootprozess (System-Update, Resume, Debug …)
- Umgebungsvariablen setzen
- ➤ Generatoren generieren beim Boot dynamisch Units
Calling convention
# /path/to/generator normal-dir early-dir late-dir
-
Generatoren sind in
/run/systemd/{system,user}-generators/*/etc/systemd/{system,user}-generators/*/usr/lib/systemd/{system,user}-generators/*-
/usr/local/lib/systemd/{system,user}-generators/*
Generierte Units
- neu generieren mit
systemctl daemon-reload -
generierte Units landen in
-
normal-dir➤/run/systemd/generator -
early-dir➤/run/systemd/generator.early -
late-dir➤/run/systemd/generator.late
-
Templating
-
generierte Units dürfen auch sein
- Templates
- Instanzen von Templates (
getty@tty1.service)
-
Generatoren können auch Symlinks in
.wants/,.targetund.requires/erstellen
Abhängigkeiten vermeiden
- kein syslog oder journal benutzen
- keine Units starten
- keine nicht essentiellen Dateisysteme verwenden (aber /proc, /usr, /sys und /dev)
- Generatoren werden parallel ausgeführt
Performance
kann Boot verlangsamen ➤ Nicht mit bash implementieren, lieber C
Debugging
dir=$(mktemp -d)
SYSTEMD_LOG_LEVEL=debug /usr/lib/systemd/system-generators/systemd-fstab-generator "$dir" "$dir" "$dir"
find $dir
- syslog(3) ist nicht vefügbar
- keine Magie versuchen
Nicht geeignet für
- Ersatz von init-Skripten ➤ systemd-sysv-generator(8)
-
dynamische Konfigurationsdateien ➤
ExecStartPre=oder Service mitBefore=
Beispiele
systemd-fstab-generator(8)
systemd-debug-generator(8)
systemd-getty-generator(8)
systemd-sysv-generator(8)
systemd.environment-generator(7)
Source
man 7 systemd.generator