Files

78 lines
2.9 KiB
Markdown

# Auto-Updater und Force-Updater
## Anforderung
Der Installer soll auf den Nodes **aktuell bleiben** (Auto-Updater) und sich auf
Kommando **neu durchsetzen** (Force-Updater) — ohne dass jemand per SSH auf jede
Maschine geht.
## Konzept
### Versionierung
`VERSION` im Repo ist die einzige Quelle der Wahrheit (`MAJOR.MINOR.PATCH`).
Nach der Installation liegt sie lokal unter `/etc/telegraf/CONFIG_VERSION`
zusammen mit einem Hash der Installer-Logik (`/etc/telegraf/INSTALLER_SHA`).
Warum beides: `VERSION` sagt *was* sich geändert hat, der Hash erkennt auch
Änderungen an Scripts und Confs, bei denen die Version nicht erhöht wurde
(Fehlerkorrektur an `journal-tail.sh` etwa). Sonst bleibt ein Node mit falschem
Script stehen, weil die Version gleich geblieben ist.
### Auto-Updater
systemd-Timer `telegraf-installer-update.timer`, Standard **täglich**
(`--interval` überschreibt: `daily` | `hourly` | `weekly` | `*-interval`).
Der Lauf ist bewusst billig: Er holt nur `VERSION` und `SHA256SUMS` (wenige
hundert Byte) und vergleicht. Erst bei Abweichung lädt er den Installer und die
Confs. Kein `git clone`, kein GitHub-Actions-Overhead.
Ablauf:
1. `VERSION` vom Repo lesen, mit lokalem Wert vergleichen.
2. Bei Gleichstand **und** gleichem Hash: still beenden (Exit 0).
3. Sonst `install.sh --quiet --update-only` ausführen.
4. Ergebnis nach `/var/log/telegraf-installer-update.log` schreiben.
`--update-only` fasst nur `telegraf.d/`-Confs und Hilfsscripts an. Es installiert
**kein** Paket neu und rührt `/etc/telegraf/telegraf.conf` nicht an — dadurch
bleibt ein Update auch auf einem PVE-Knoten mit Drop-in harmlos.
### Force-Updater
`install.sh --force-update` (Windows: `-ForceUpdate`):
- Confs und Scripts werden **immer** neu geschrieben, ohne Versionsvergleich.
- `systemctl restart telegraf` wird erzwungen.
- Danach Selbsttest: Dienst aktiv? Konfig-Test sauber? Erreichbarkeit des
Collectors? Ergebnis als Klartext auf stdout, Exit-Code entsprechend.
Damit ist der Force-Weg das Werkzeug nach einem kaputten Update oder wenn eine
Datei manuell verändert wurde. Er ist idempotent — mehrfaches Ausführen ist
folgenlos.
### Sicherheit
- Der Updater lädt ausschließlich vom eigenen Gitea (`REPO_RAW`).
- Kein Token im Repo: Der Bearer-Token liegt lokal in `/etc/default/telegraf`.
`--update-only` ändert diese Datei nicht, ein Update kann den Zugang also nicht
zerstören.
- Konfig-Test **vor** dem Neustart: `telegraf --test --input-filter cpu:mem`.
Schlägt er fehl, wird die alte Conf zurückgerollt (`.bak`).
## Windows
`install.ps1 -InstallUpdateTask` legt eine geplante Aufgabe
(`\NetBirdTelegraf\Update`) mit denselben Semantiken an: täglich, nur bei
Änderung, Ergebnis ins Event-Log. `-ForceUpdate` entspricht dem Linux-Weg.
## Umsetzungsstand
| Teil | Status |
|---|---|
| `VERSION` im Repo | ✅ |
| `--check` / `--version` | ✅ |
| `--force-update` | ✅ |
| Timer + `--install-update-timer` | ✅ |
| `-ForceUpdate` / Task (Windows) | ✅ |