dadada.li/content/talks/systemd.generator/_index.md
2021-08-19 01:19:20 +02:00

85 lines
2 KiB
Markdown

---
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`