diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +1.0.0 diff --git a/docs/updater.md b/docs/updater.md new file mode 100644 index 0000000..d9b99c0 --- /dev/null +++ b/docs/updater.md @@ -0,0 +1,77 @@ +# 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) | ✅ |