--- title: systemd.generator(7) data: 2019-03-14 --- # systemd.generator(7) [Recording](https://www.youtube.com/watch?v=X88zHJjodFw) # Dynamische Systeme sind schwierig - ➤ Devices, Mountpoints, Services, Timer möglichst als Unit - Transitionstechnologie für `/etc/fstab` und 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/`, `.target` und `.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 mit `Before=` # 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`