Add self-contained automated server upgrade package

This commit is contained in:
admin committed 2026-09-10 14:23:31 +02:00
1 parent 4d58fc7b66
commit 8e6c9a058f
14 files changed
+908 -26

No files matched your search

+32 -1
View File
@@ -236,6 +236,34 @@ v1-Split-Archive haben weder manifestgebundene Prüfsummen noch einen verlässli
Nur die Dateien **eines** alten Laufs in einen eigenen Ordner kopieren. Alte DB-Dumps liegen gemeinsam unter `db/`, Gitea unter `files/gitea-data`, Mail-Homes ggf. gesammelt unter `files/mail-home`. Nach Prüfung manuell in vorbereitete Testziele kopieren und DB-Dumps mit einem passenden Client importieren. Alte monolithische Formate vor den Split-Archiven unterstützt dieser Entpackmodus nicht. Alte Sicherungen erst nach einer erfolgreichen neuen Offsite-Sicherung und echten Wiederherstellungsprobe freigeben.
## Automatisiertes Transferpaket
Ergänzend zum manuellen Installer gibt es ein selbstentpackendes `.run`-Paket mit
integrierter Payload-Prüfsumme und separater SHA-256-Datei. Es wird aus einer
expliziten Dateiliste gebaut; echte Zugangsdaten, Git-Historie und Sicherungsdaten
sind ausgeschlossen. Anleitung: [UPDATE_ANLEITUNG.md](UPDATE_ANLEITUNG.md).
`update.sh` erstellt einen privaten Migrationsordner und eine Kandidatenkonfiguration.
Der erste Check nutzt geschützte Kopien der Zugangsdaten. Installation und
Abnahmebackup laufen dann unter einer gemeinsamen, von Kindprozessen überprüften
Dateisperre. Der Starter übergibt den langen Ablauf an eine systemd-Unit; das
Ergebnis bleibt im Migrationsordner erhalten. Ein kombinierter Rollback stellt
Paketdateien und die vorherige Hauptkonfiguration wieder her.
Der Abnahmelauf nutzt `app-backup.sh --no-retention`: keinerlei lokale oder entfernte
Löschung alter Sicherungssätze. Nach Upload/Rücklesevergleich prüft zusätzlich
`app-restore.sh --remote-run ... --verify-only` den erneut heruntergeladenen Satz.
Erst danach wird der vorhandene Backup-Timer aktiviert. Remote-Retention bleibt
nach dieser Migration bewusst aus, bis die fachliche Restore-Abnahme erfolgt ist.
Direkt erkennbare Nextcloud-systemd-Writer werden übernommen. Bei klassischen
Cronjobs fragt das Paket nach einer vorübergehenden Pause des gesamten Cron-Dienstes;
dies kann andere fällige Cronjobs betreffen und erfolgt deshalb nicht stillschweigend.
Nach dem Writer-Stopp wartet die Sicherung auf noch laufende direkte Nextcloud-
`cron.php`-/`occ`-Prozesse (maximal `WRITER_DRAIN_TIMEOUT`, Default 300 Sekunden).
Nextcloud dokumentiert systemd-Timer als Alternative zu crontab:
[Nextcloud Hintergrundjobs](https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/background_jobs_configuration.html).
## Installation, Update und Rückweg
Die ausführbare Schrittfolge steht in [README: bestehende Installation aktualisieren](README.md#bestehende-installation-aktualisieren).
@@ -265,7 +293,7 @@ Die Entfernung der drei DB-Dateien aus dem aktuellen Baum löscht deren Historie
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.
Ergebnis des lokalen Abschlusslaufs am 10.09.2026: **22 Tests erfolgreich**, Shell-Syntax und ShellCheck ohne Befund. Testumgebung: Debian 13.6, MariaDB 11.8.6, rclone 1.60.1-DEV (Distributionspaket), ShellCheck 0.10.0. Diese Versionsangaben beschreiben die Testumgebung, keine Empfehlung für die Produktivversion.
Ergebnis des lokalen Abschlusslaufs am 10.09.2026: **30 Tests erfolgreich**, Shell-Syntax und ShellCheck ohne Befund. Testumgebung: Debian 13.6, MariaDB 11.8.6, rclone 1.60.1-DEV (Distributionspaket), ShellCheck 0.10.0. Diese Versionsangaben beschreiben die Testumgebung, keine Empfehlung für die Produktivversion.
Geprüfte Fälle umfassen:
@@ -279,5 +307,8 @@ Geprüfte Fälle umfassen:
- Selektiver Restore mit Löschung und Schutz ausgeschlossener Nextcloud-Daten.
- Lokale/Remote-Retention mit Mindestanzahl und Erhalt alter/unvollständiger Läufe.
- Paketupdate mit Erhalt von Config/Zeitplan und ausführbarem Rollback.
- Selbstentpackendes Transferpaket mit erfolgreichem Komplettlauf und kombiniertem Konfigurations-/Paket-Rollback.
- Abbruch vor Änderungen bei Vorprüfungsfehlern, gestoppter Timer bei fehlgeschlagenem Abnahmebackup, Ablehnung beschädigter Pakete.
- Übergabe an einen vom Starter unabhängigen Prozess (systemd-run im Test simuliert), ausdrückliche Cron-Policy und Writer-Wartezeit/Timeout.
**Serverabnahme steht separat aus:** echte Rocky-Linux-10-Umgebung, SELinux-/ACL-Verhalten auf den verwendeten Dateisystemen, installierte Nextcloud-/Gitea-Versionen, vollständige Writer-/Pfadliste, Berechtigungen des echten DB-Backupaccounts, tatsächlicher OneDrive-Upload großer Archive, Laufzeit/Speicherbedarf und fachliche Restore-Probe. Es wurde kein Produktivbackup ausgeführt und keine Serverinstallation verändert.