# 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) | ✅ |