Guard writer units against activation and fix backup cancellation

This commit is contained in:
admin committed 2026-09-10 15:28:42 +02:00
1 parent c0a24b63fc
commit ff152c7f0f
9 files changed
+372 -16

No files matched your search

+50 -1
View File
@@ -311,6 +311,49 @@ passenden AVC-Meldungen prüfen. Maßgeblich für den erfolgreichen Abschluss bl
`SUCCESS` in `result.txt`; erst danach aktiviert der Installer den Backup-Timer.
Eine Wiederherstellungsprobe auf einem separaten System steht weiterhin aus.
## Erneuter Dienststart während der Sicherung
Am 10.09.2026 starteten auf Gemini um 15:15 Uhr Apache und PHP-FPM während der
Nextcloud-Datenkopie erneut. Paket `c0a24b63fc1c` hatte die SELinux-Zugriffe bereits
korrigiert, schützte jedoch nicht vor fremden Startaufträgen. Den betroffenen
Lauf nicht als konsistente Sicherung abnehmen, auch falls Upload/Hashprüfung
anschließend erfolgreich waren. Der konkrete Auslöser des Startauftrags ist
noch offen. Die 90 Sekunden Apache-Stopp sind dagegen durch dessen Journal
erklärt: Timeout beim Beenden, anschließend SIGKILL durch systemd. Das neue Paket
ändert weder Apache-Timeout noch seine Signalbehandlung pauschal.
Einen noch laufenden alten Update-Auftrag kontrolliert beenden:
```bash
sudo systemctl stop app-backup-upgrade.service
sudo journalctl --no-pager -u app-backup-upgrade.service -n 60
sudo systemctl --no-pager is-active httpd php-fpm gitea postfix dovecot crond
```
Im Protokoll die Wiederaufnahme und das Verlassen des Wartungsmodus prüfen.
Bei Fehlern die ausgegebene `recovery-*.json` beachten. Erst nach abgeschlossenem
alten Auftrag das aktuelle Paket mit den bisherigen Gitea-/Cron-/Mail-Optionen
starten. Bestehende Sicherungssätze und Arbeitsverzeichnisse nicht pauschal löschen.
Das neue Paket richtet für die Kopierphase vorübergehende systemd-Startbedingungen
ein und prüft Writer-Zustände sowie Aktivierungszeitpunkte vor/nach den Kopien.
Es entfernt beim Wiederanlauf nur eigene Ergänzungen; bei einem teilweise
ausgeführten Restore bleiben sie bis zur manuellen Prüfung bestehen. Einzelheiten
zur gezielten Freigabe stehen in `Dokumentation.md` bei der Wiederanlaufhilfe.
Die permanente Dienstkonfiguration und vorhandene Maskierungen bleiben erhalten.
Die Meldung `Copy window complete; writer guards verified` bestätigt das Ende
der geprüften Kopierphase. Abgeschlossen ist die Paketabnahme erst bei `SUCCESS`
in der Ergebnisdatei nach vollständiger Remote-Prüfung.
Der Abbruchpfad wurde ebenfalls korrigiert: Bisher erreichte TERM bei
`KillMode=mixed` zunächst nur den Update-Hauptprozess. Eine wartende Bash konnte
dadurch den Stop bis zum Ende ihres Backup-/Upload-Kindprozesses verzögern.
Die neuen Units verwenden `KillMode=control-group`; die Protokollprozesse bleiben
während der Fehlerbehandlung verfügbar. Nach einem Update-Abbruch das Journal
und die Dienstzustände prüfen; insbesondere ein Stop-Timeout ist kein Nachweis
für eine erfolgreiche Wiederaufnahme. Die Änderung wirkt für neue Aufträge,
nicht nachträglich für einen bereits gestarteten alten Worker.
## Paket reproduzieren
Aus einem sauberen, eingecheckten Repository:
@@ -327,7 +370,7 @@ Das ausführbare Paket ausschließlich über euren vertrauenswürdigen Kanal bez
## Verifikation der Lieferung
44 Container-Tests sowie ShellCheck und Shell-Syntaxprüfung erfolgreich.
52 Testfälle erfolgreich: vollständiger Durchlauf mit 50 Tests, anschließend die zwei zusätzlichen Abbruchtests für Kopie und Upload. ShellCheck und Shell-Syntaxprüfung abschließend erfolgreich.
Die Tests enthalten echte MariaDB-Dumps/Imports und lokale rclone-Crypt-Roundtrips;
systemd/occ und die systemd-run-Übergabe sind simuliert. Das Übergabemodell
berücksichtigt jetzt das Warten auf den oneshot-Startauftrag: Der Regressionstest
@@ -338,3 +381,9 @@ SELinux-Durchsetzung wird im Debian-Testcontainer nicht nachgebildet; der erfolg
Bash-/rsync-Lesetest auf Gemini wurde separat vom Betreiber durchgeführt. Die vollständige
Server-/OneDrive-Prüfung erfolgt beim Paketlauf. Ein fachlicher Restore
auf einem separaten Testsystem bleibt erforderlich.
Die neuen Tests bilden fremde Startaufträge während rsync, zwischenzeitliche
Neustarts, bestehende Maskierungen und Fehler bei der Sperrfreigabe ab. Die
Condition-Auswertung (Sperrverzeichnis vorhanden/entfernt) und Unit-Syntax wurden
zusätzlich mit echtem `systemd-analyze` geprüft. Der tatsächliche systemd-Manager
und SELinux auf Gemini bleiben Teil der noch ausstehenden Serverabnahme.