docs: Updater-Konzept (VERSION+Hash, Timer, force-update, Rollback)
This commit is contained in:
1 parent
158e3dd884
commit
0e9dce9e47
2 files changed
+78
No files matched your search
@@ -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) | ✅ |
|
||||||
Reference in new issue
Block a user