85 lines
2 KiB
Markdown
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`
|