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