diff --git a/00-TASKS.md b/00-TASKS.md index bd2185a..e725288 100644 --- a/00-TASKS.md +++ b/00-TASKS.md @@ -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) diff --git a/Home.md b/Home.md index b0eeca3..1c8b16a 100644 --- a/Home.md +++ b/Home.md @@ -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 diff --git a/Host-Maintenance-Notifications.md b/Host-Maintenance-Notifications.md new file mode 100644 index 0000000..ee57aef --- /dev/null +++ b/Host-Maintenance-Notifications.md @@ -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.