docs: host maintenance notifications (Issue #24)

Thore Cimbal
2026-07-29 23:28:20 +02:00
parent 256baa5f2c
commit 53b8e5ad29
3 changed files with 54 additions and 7 deletions
+6 -7
@@ -480,13 +480,12 @@ private Hetzner-Netzwerk läuft statt vom öffentlichen Firewall-Status abhängi
- Est. Effort: 2 hours
- Priority: **HIGH** (immediate)
- [ ] **unattended-upgrades**
- Enable automatic security updates
- Configure: APT::Periodic::Update-Package-Lists "1";
- Configure: APT::Periodic::Unattended-Upgrade "1";
- Configure: APT::Periodic::AutocleanInterval "7";
- Est. Effort: 30 min
- Priority: **HIGH** (set & forget)
- [x] **unattended-upgrades** (2026-07-30, Closes Issue #24)
- War bereits aktiv (APT::Periodic::Update-Package-Lists/Unattended-Upgrade seit längerem
gesetzt, Origins-Pattern deckt Debian+Debian-Security ab) - nur nie dokumentiert.
- Neu ergänzt: Pre-Update-Benachrichtigung per Mail (msmtp/IONOS) + Matrix (Thread-Reply),
fest um 05:00 Uhr vor dem 06:00-07:00 Update-Fenster. Live getestet.
- Details: [Host-Maintenance-Notifications.md](Host-Maintenance-Notifications.md)
- [ ] **K3S API Security**
- Current: K3S API listening on :6443 on all interfaces (default)
+1
@@ -21,6 +21,7 @@
| **Element Customization** | [Element-Customization.md](Element-Customization.md) | ✅ Deployed | Themes, Desktop Setup, Admin Panel |
| **Room Policies** | [Room-Policies.md](Room-Policies.md) | ✅ Deployed | Retention, Publication, Auto-Join |
| **Moderation & Content Scanning** | [Moderation-Content-Scanning.md](Moderation-Content-Scanning.md) | ✅ Deployed | Ban-Bot (Issue #18), Media-Scanning (Issue #19), beide live getestet |
| **Host-Wartungsbenachrichtigungen** | [Host-Maintenance-Notifications.md](Host-Maintenance-Notifications.md) | ✅ Deployed | unattended-upgrades + Pre-Update Mail/Matrix-Alert (Issue #24), live getestet |
### Operations & Architecture
+47
@@ -0,0 +1,47 @@
# Host-Wartungsbenachrichtigungen (Pre-Update Mail & Matrix)
**Status**: ✅ Deployed + live getestet (2026-07-29/30, Closes Issue #24)
**Konfiguration**: `host-config/maintenance-notify/` (nicht via Flux/GitOps deployt - läuft
auf dem nackten Host, kein Kubernetes-Pod)
## Überblick
`unattended-upgrades` lief bereits aktiv auf dem Host (nur nie dokumentiert). Neu: eine
Benachrichtigung **vor** dem täglichen Update-Lauf (`apt-daily-upgrade.timer`,
06:00-07:00-Fenster), per E-Mail und Matrix, damit man weiß "gleich läuft ein Update" und im
Störungsfall danach sofort den Zusammenhang sieht.
Bewusst generisch gehalten (`host-config/maintenance-notify/` im Repo) - instanzspezifische
Werte (Domain, Raum, Mail-Adressen) stecken in `/etc/maintenance-notify/config`, nicht im
Skript. Volle Anleitung inkl. Stolpersteinen:
[docs/deployment-guides/07-host-maintenance-notifications.md](https://rohana.axion1337.de/sorb/axion1337.chat-gitops/src/branch/main/docs/deployment-guides/07-host-maintenance-notifications.md).
## Architektur
- Eigener systemd-Timer (`maintenance-notify.timer`, fest `05:00`, kein Randomize) läuft
**vor** dem echten Update-Fenster.
- Skript prüft via `unattended-upgrade --dry-run -v`, ob überhaupt Pakete anstehen - wenn
nicht, keine Benachrichtigung (kein täglicher Alarm-Spam).
- Zustellung nur bei anstehenden Updates: Mail via `msmtp`, Matrix via `curl` als Reply in
einem bestehenden Thread (`m.relates_to: m.thread`).
- Bot-Account (`mas-cli register-user` + `issue-compatibility-token`, identisches Muster wie
Draupnir, siehe [Moderation-Content-Scanning](Moderation-Content-Scanning.md)) muss dem
Zielraum **aktiv beitreten**, nicht nur eingeladen sein.
## Stolpersteine (live gefunden)
- **Port 465 kann ausgehend blockiert sein, 587 aber nicht** - bei axion1337.chat sowohl zu
IONOS als auch testweise zu Gmail (stiller Timeout statt Reject, typisch für eine
Cloud-Provider-Firewallregel). Vor Auth-Debugging erst TCP-Erreichbarkeit prüfen.
- `msmtp`'s `passwordeval` übernimmt einen Trailing-Newline aus der Passwort-Datei wörtlich -
bricht die Auth. `printf %s "$(cat datei)" > datei` fixt das.
- Mail-Domain ≠ Matrix-Domain möglich (bei axion1337: Mail unter `.de`, Matrix unter `.chat`) -
`MAIL_FROM` muss zur tatsächlichen Mail-Domain passen.
- `MATRIX_HOMESERVER` ist oft eine eigene Subdomain (`matrix.axion1337.chat`), nicht die
Apex-Domain - vorher `.well-known/matrix/client` prüfen.
## Beispiel: axion1337.chat
Homeserver `matrix.axion1337.chat`, Raum "wartung" im Space "operating", Reply in
vorhandenem Thread. Mail: `wartung@axion1337.de` über IONOS SMTP (`smtp.ionos.de:587`,
STARTTLS) an die private Hauptadresse des Betreibers.