diff --git a/Dokumentation.md b/Dokumentation.md index 1c1eb66..2f60007 100644 --- a/Dokumentation.md +++ b/Dokumentation.md @@ -1,5 +1,11 @@ # Dokumentation app-backup v2 +**Aktualisiert am 15. September 2026:** Das Code-Paket `3730ab4676a5` enthält +den lokal geprüften Schutz laufender Writer-Stopps gegen konkurrierende +Healthcheck-Aufträge. Code und Paket sind bereitgestellt; Installation und neue +Abnahme auf Gemini sind noch nicht bestätigt. Aktuelle Deployment-Befehle und +Erfolgskriterien stehen in der [Update-Anleitung](UPDATE_ANLEITUNG.md#deployment-des-bereitgestellten-pakets-3730ab4676a5). + Stand des Reviews: 10. September 2026. Untersucht wurde der Gitea-Stand `099688e` einschließlich Backup, Restore, Installer, Konfiguration, systemd und bisheriger README. Die Erweiterung wird als zusammengehöriges Paket installiert; einzelne Skripte dürfen nicht ohne die gemeinsamen Bibliotheken aktualisiert werden. ## Ergebnis der Codeanalyse @@ -297,6 +303,15 @@ werden nicht verändert. Die Laufzeitergänzung muss nach `daemon-reload` als le Drop-in gemeldet werden; andernfalls bricht der Lauf ab, damit spätere Condition-Resets die Sperre nicht unbemerkt überschreiben. +Zusätzlich schützt `systemctl stop UNIT --job-mode=replace-irreversibly` den +laufenden Stop-Auftrag vor konkurrierenden Reloads und Starts. Die Startbedingung +allein verhindert dessen Verdrängung nicht; dieser Konflikt trat am 15.09.2026 +zwischen Apache und dem ai-rem-Healthcheck auf. Der Jobmodus gilt für den +laufenden Auftrag und lässt den späteren Wiederanlauf nach Freigabe der +Startsperren zu. Echte Stopfehler und explizite Job-Abbrüche führen weiterhin zum +Backupfehler mit Wiederanlaufbehandlung. Verlauf und Regressionstest sind in der +[Update-Anleitung](UPDATE_ANLEITUNG.md#nachtrag-vom-15092026-healthcheck-verdrängt-apache-stop) dokumentiert. + Nach dem Anhalten aller Writer, vor und nach den Dumps/Dateikopien und unmittelbar vor der Freigabe prüft das Backup Dienstzustand, eigene Sperrdateien und die systemd-Zeitpunkte `ActiveEnterTimestampMonotonic` und `InactiveExitTimestampMonotonic`. @@ -611,6 +626,15 @@ separate Abnahmen. Aktivierung und Prüfung auf Gemini erfolgen nach Installatio ### Entwicklungstests +Aktuelle Verifikation vom 15.09.2026 für den Code-Stand `3730ab4676a5`: +119 Fälle im Standardlauf, davon 111 erfolgreich und acht planmäßig übersprungen +(906,3 Sekunden). Die drei Benutzer-systemd-Fälle bestanden separat: alter +Reload-Konflikt reproduziert, geschützter Stop gegen Reload und Start erfolgreich, +Dienst anschließend inaktiv. Fünf optionale Docker-Integrationstests wurden in +diesem abschließenden Lauf nicht erneut ausgeführt. ShellCheck und +Shell-Syntaxprüfung bestanden. Die folgenden älteren Prüfnachweise bleiben +historische Nachweise; die neue Serverabnahme steht aus. + Reproduzierbar mit `tests/Dockerfile` und `tests/run.sh`. Der Container bekommt das Repository nur lesbar und benötigt während der Tests kein Netzwerk. Die MariaDB läuft ohne TCP-Port in einem temporären Verzeichnis. systemd/occ werden simuliert; alle eigentlichen Archive, Dateikopien, Dumps/Imports und Crypt-Operationen sind real. Verifikation am 12.09.2026: **Standardlauf erfolgreich** (81 Fälle, davon 80 erfolgreich und ein separater Docker-Test planmäßig übersprungen; 704,8 Sekunden). Zusätzlich bestanden alle **19 gezielten Restore-Tests** mit echten DB-Containern und der Paketupdate-/Rollback-Test mit aktiviertem Restore-Timer. Die gezielten Tests prüfen insbesondere Platzgrenzen, ungültiges SQL, SIGTERM, SIGKILL, defekte Statusdateien, einen unerreichbaren Docker-Daemon und anschließende vollständige Bereinigung. Shell-Syntax, ShellCheck und systemd-Unit-Prüfung ohne Befund. Basis-Testumgebung: Debian 13.6, MariaDB 11.8.6, rclone 1.60.1-DEV und ShellCheck 0.10.0. Test-Mails werden nur lokal erfasst. Die tatsächliche Rocky-/OneDrive-/MTA-Abnahme des neuen Monatslaufs auf Gemini steht nach Installation noch aus. diff --git a/README.md b/README.md index fd66fd5..88b6051 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,14 @@ Ohne Aktivierungsoption bleibt ein bisher deaktivierter Restore-Test deaktiviert ## Produktionsstand und verbleibende Abnahme +**Stand 15.09.2026:** Das geprüfte Code-Paket `3730ab4676a5` mit der Korrektur +für den durch einen Healthcheck verdrängten Apache-Stop ist bereitgestellt; +der Commit ist auf `origin/master` veröffentlicht. Übertragung und Installation +auf Gemini sowie ein erfolgreiches Ergebnis der neuen Abnahme sind noch nicht +bestätigt. Im zuletzt dokumentierten Fehlversuch wurden die Dienste wieder +gestartet; Backup- und Restore-Test-Timer blieben gestoppt. Die konkreten Befehle +stehen unter [Deployment des bereitgestellten Pakets](UPDATE_ANLEITUNG.md#deployment-des-bereitgestellten-pakets-3730ab4676a5). + Auf Gemini bestand am 10.09.2026 ein vollständiger Paketlauf mit geschützter Dateikopie, DB-Dumps, OneDrive-Upload, vollständigem Rücklesen und separater Archivprüfung (14 Archive). Dienste und Backup-Timer wurden anschließend gestartet. diff --git a/RESTORE_TEST.md b/RESTORE_TEST.md index 7bb8838..2d41931 100644 --- a/RESTORE_TEST.md +++ b/RESTORE_TEST.md @@ -297,6 +297,14 @@ Technische Referenzen: [Docker run](https://docs.docker.com/reference/cli/docker ## Entwicklung und lokale Verifikation +Beim abschließenden Prüflauf der Writer-Stop-Korrektur (`3730ab4676a5`) am +15.09.2026 bestanden 111 Tests der Gesamtsuite. Von 119 erkannten Fällen wurden +fünf optionale Docker-Integrationstests und drei Benutzer-systemd-Fälle +übersprungen; die drei systemd-Fälle bestanden separat. Die fünf Docker-Fälle +wurden bei diesem Lauf nicht erneut ausgeführt. Der folgende Nachweis mit echten +DB-Containern stammt aus der vorherigen Prüfung der Restore-Download-Korrektur. +Die erneute Serverabnahme auf Gemini ist weiterhin offen. + Der Folgefix vom 15.09.2026 bestand alle **33 Restore-Test-Fälle** mit der von Gemini kopierten rclone-1.74.3-Binärdatei und dem echten lokalen `mariadb:10.11`-Image. Geprüft wurden auch Teil-Downloads/Metadaten mit erneutem diff --git a/UPDATE_ANLEITUNG.md b/UPDATE_ANLEITUNG.md index 05f4960..efab64a 100644 --- a/UPDATE_ANLEITUNG.md +++ b/UPDATE_ANLEITUNG.md @@ -1,5 +1,56 @@ # Automatisches Update-Paket +## Deployment des bereitgestellten Pakets 3730ab4676a5 + +Stand 15.09.2026: Der Code-Commit `3730ab4676a5` ist auf `origin/master` +veröffentlicht. Das daraus gebaute Paket und seine SHA-256-Datei liegen lokal +unter `dist/`; äußere Prüfsumme, interne Payload-Prüfsumme und alle 33 enthaltenen +Dateien wurden geprüft. Die nachfolgende Dokumentationsaktualisierung ändert den +Programmstand nicht. Das Paket bleibt für die bereits übermittelte Installation +gültig. Übertragung, Installation und neue Serverabnahme sind noch nicht bestätigt. + +Auf dem Arbeitsplatz: + +```bash +cd /home/johannes/localdev/app-backup/dist +scp app-backup-update-3730ab4676a5.run \ + app-backup-update-3730ab4676a5.run.sha256 \ + johannes@gemini.jr-it-services.de:~/ +``` + +Auf Gemini im Wartungsfenster starten; während der Datenkopie werden die +konfigurierten Anwendungen angehalten: + +```bash +ssh johannes@gemini.jr-it-services.de +cd ~ +sha256sum -c app-backup-update-3730ab4676a5.run.sha256 && +sudo bash app-backup-update-3730ab4676a5.run +``` + +Der bereits aktivierte Restore-Test wird übernommen; ein vorheriger Rollback +ist nicht erforderlich. Der Auftrag läuft unabhängig von der SSH-Verbindung. + +```bash +sudo journalctl -fu app-backup-upgrade.service --no-pager +``` + +`Strg+C` beendet nur die Loganzeige. Den vom Starter genannten Ergebnisordner +verwenden und `XXXXXXXX` durch dessen tatsächlichen Suffix ersetzen: + +```bash +sudo cat /var/backups/app-backup-upgrade-XXXXXXXX/result.txt +sudo systemctl list-timers app-backup.timer app-restore-test.timer --no-pager +``` + +Erst `SUCCESS` in dieser neuen Ergebnisdatei bestätigt Installation, Backup und +Remote-Restore-Prüfung. Bei `QUEUED` oder `RUNNING` keinen zweiten Lauf starten. +Bei `FAILED` die Ergebnisdatei und die letzten Journalzeilen auswerten: + +```bash +sudo journalctl -u app-backup-upgrade.service -n 150 --no-pager -l +``` + ## Nachtrag vom 15.09.2026: Healthcheck verdrängt Apache-Stop Im Update mit Paket `3d16f33f24c0` wurde die alte Sicherung vom 12.09. um @@ -588,6 +639,13 @@ Das ausführbare Paket ausschließlich über euren vertrauenswürdigen Kanal bez ## Verifikation der Lieferung +Aktueller Stand vom 15.09.2026 für das Code-Paket `3730ab4676a5`: 119 Fälle im +Standardlauf, 111 erfolgreich und acht planmäßig übersprungen; die drei echten +Benutzer-systemd-Fälle bestanden separat. Fünf optionale Docker-Integrationstests +wurden bei diesem abschließenden Lauf nicht erneut ausgeführt. ShellCheck und +Shell-Syntaxprüfung bestanden. Details stehen im +[Nachtrag zur Stop-Korrektur](#nachtrag-vom-15092026-healthcheck-verdrängt-apache-stop). + Verifikation am 12.09.2026: Standardlauf mit 81 Fällen erfolgreich (80 bestanden, ein separater Docker-Test planmäßig übersprungen; 704,8 Sekunden). Zusätzlich bestanden alle 19 gezielten Restore-Tests mit echten DB-Containern und der Installer-/Rollback-Test mit aktiviertem Restore-Timer. Geprüft sind vollständiges Entpacken, isolierter SQL-Import, fehlerhafte Dumps, Platzgrenzen und Bereinigung nach normalen und harten Abbrüchen. ShellCheck, Shell-Syntax und systemd-Unit-Prüfung erfolgreich. Echte E-Mails werden in Entwicklungstests nicht versendet; die Serverabnahme des Monatslaufs erfolgt nach Installation. Die Tests enthalten echte MariaDB-Dumps/Imports und lokale rclone-Crypt-Roundtrips;