Files
ThreadNetWiki/betrieb/host-maintenance-notifications.md

2.8 KiB

title, description, published, date, tags, editor, dateCreated
title description published date tags editor dateCreated
Host-Wartungsbenachrichtigungen Pre-Update-Mail & Matrix-Benachrichtigungen true 2026-08-13T18:04:30.981Z markdown 2026-08-13T18:04:30.981Z

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.

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) 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.