feat(updater): --check/--version, --force-update mit Rollback, --update-only, systemd-Timer + Windows-Task; VERSION+SHA-Marker; envsubst-Fallback

This commit is contained in:
mm committed 2026-09-13 23:44:02 +02:00
1 parent 0e9dce9e47
commit 8d05d3bc48
3 files changed
+464 -6

No files matched your search

+73
View File
@@ -5,6 +5,79 @@ Der Ausgang läuft über den **NetBird-Reverse-Proxy** (`imac-prometheus.x05.idx
mit **Bearer-Token** — dadurch funktioniert der Installer auch auf Maschinen, die **kein NetBird-Peer** sind
(Büro-LAN, Kundenlaptop, CGNAT, VM ohne Client).
## Auto-Updater und Force-Updater
Der Installer hält sich auf den Nodes selbst aktuell.
### Prüfen
```sh
sh install.sh --version # installierte + verfügbare Version
sh install.sh --check # Exit 0 = aktuell, Exit 10 = Update verfügbar
```
Beides braucht **keinen Token** und **kein root** — gut für Monitoring-Checks.
### Auto-Updater (systemd-Timer)
```sh
sh install.sh --name <node> --token <T> --install-update-timer daily
sh install.sh --name <node> --token <T> --install-update-timer 30min
sh install.sh --name <node> --token <T> --install-update-timer weekly
```
Legt `telegraf-installer-update.timer` an (Default `daily` 04:30, ±15 min Streuung).
Der Lauf ist billig: Es werden nur `VERSION` und der SHA des Installers verglichen.
Erst bei Abweichung lädt er den Installer und ruft sich mit `--update-only` auf.
Log: `/var/log/telegraf-installer-update.log`.
`--update-only` fasst **nur** `telegraf.d/`-Konfs und Hilfsscripts an: kein
Paket-Update, `/etc/default/telegraf` (und damit der Token) bleibt unberührt,
kein Neustart wenn sich nichts geändert hat.
Warum Version **und** Hash: Die `VERSION` erkennt neue Auslieferungen, der SHA
auch Korrekturen ohne Versionssprung (z. B. ein Fix an `journal-tail.sh`).
Ohne den Hash bliebe eine Node mit fehlerhaftem Script stehen.
### Force-Updater
```sh
sh install.sh --force-update --name <node> --token <T>
```
Schreibt Konfs und Scripts **immer** neu, sichert sie vorher nach
`/var/backups/telegraf-<zeitstempel>/` und startet den Dienst neu. Schlägt der
Konfig-Test fehl, wird automatisch zurückgerollt. Idempotent — mehrfaches
Ausführen ist folgenlos. Das Werkzeug nach einem kaputten Update oder wenn
jemand Dateien von Hand verändert hat.
Entfernen: `sh install.sh --remove-update-timer`
### Windows
```powershell
.\install.ps1 -Name <node> -Token <T> -Check # Versionsvergleich
.\install.ps1 -Name <node> -Token <T> -InstallUpdateTask # taeglich
.\install.ps1 -Name <node> -Token <T> -InstallUpdateTask -UpdateInterval hourly
.\install.ps1 -Name <node> -Token <T> -ForceUpdate
.\install.ps1 -RemoveUpdateTask
```
Die Aufgabe `\NetBirdTelegraf\Update` läuft mit denselben Semantiken
(Version + Hash, nur bei Änderung). Log:
`%ProgramData%\netbird-telegraf\update.log`.
### Marker auf der Node
| Datei | Inhalt |
|---|---|
| `/etc/telegraf/CONFIG_VERSION` | zuletzt installierte Repo-Version |
| `/etc/telegraf/INSTALLER_SHA` | SHA256 des Installers zum Installationszeitpunkt |
| `/etc/telegraf/REPO_RAW` | genutzte Repo-Quelle (GitHub-Mirror, Testserver) |
`REPO_RAW` ist per Umgebungsvariable überschreibbar — nützlich für Tests,
Mirrors oder einen eigenen Fork.
### Docker-Nodes (kein journalctl im Image)
Läuft Telegraf als **Container** (offizielles `telegraf`-Image), ist der Journal-Weg nicht möglich: das Image ist Debian ohne `systemd` und hat **kein `journalctl`**; `/hostfs` ist zudem read-only. Dafür gibt es `scripts/syslog-tail.sh` — es liest die **Syslog-Dateien des Hosts** unter `/hostfs/var/log/`.