- archive/internal/notifyclient: HTTP-Client fuer Core CFG-05 (gleiches Muster wie rbacclient/RET-08 fuer RBAC-06) - archive/internal/retentionnotify.Run: ermittelt faellige Objekte ueber dieselbe Funktion wie RET-02-Job/RET-06-API-Preview, filtert je Klasse nach Vorlauf+Ein-Aus-Schalter, Postgres-persistente Dedupe (retention_notifications), Fehlschlag wird protokolliert statt verworfen (kein Eintrag -> Retry beim naechsten Durchlauf) - archive/cmd/retention-notify-job: systemd-Timer-CLI, analog scrub-cli - Abweichung vom urspruenglichen Ticket-Text dokumentiert: CFG-05 statt direktem CFG-02-Import (Modul-Trennung), konfigurierte zustaendige Rolle statt Objekt-Owner (RET-01 fuehrt keinen) - real deployed auf 131 (timer taeglich 07:00 UTC), end-zu-ende bewiesen: echte notification_jobs-Zeile in Core-DB, zweiter Dienststart ohne Doppelversand Pruefungen siehe archive/docs/RET-07-PRUEFPROTOKOLL.md
NEXARCH Archive
Zentrales, modulübergreifendes Modul für Aufbewahrung, WORM, Compliance und
Backup. Dieses Verzeichnis enthält bisher internal/backup (BAK-01,
Datenbank-Backup-Strategie) — weitere Bausteine folgen ticketweise.
BAK-01: Datenbank-Backup
cmd/backup-cli — Aufrufpunkt für systemd-Timer (siehe
../deploy/systemd/nexarch-archive-backup-*.timer):
export NEXARCH_BACKUP_PG_USER=nexarch_backup
export NEXARCH_BACKUP_PG_PASSWORD=...
export NEXARCH_BACKUP_DIR=/var/nexarch-archiv/backups/postgres # NICHT auf einem ephemeren Test-Dataset (siehe Betrieb)
export NEXARCH_BACKUP_KEEP_GENERATIONS=7 # optional, Default 7
backup-cli full # neue Vollsicherung + Verifikation
backup-cli incremental # inkrementelle Sicherung gegen die neueste Generation
backup-cli rotate # entfernt alle bis auf die neuesten N Generationen
Voraussetzung: die konfigurierte Postgres-Rolle braucht das
REPLICATION-Attribut (pg_basebackup nutzt eine
Replikationsverbindung), und summarize_wal = on muss serverseitig gesetzt
sein (PostgreSQL 17s natives inkrementelles Backup, keine WAL-Archivierung
nötig).
BAK-02: Objekt-Storage-Backup
cmd/objectbackup-cli sichert einen lokalen Verzeichnisbaum (den
FDN-03-LocalDriver-Basisordner direkt, oder — für S3-gestützte
Deployments — einen vorgelagerten rclone-Spiegel) mit
restic (Content-defined Chunking, verschlüsseltes
Repository, geprüftes Tooling statt Eigenbau):
export NEXARCH_OBJECTBACKUP_REPO_DIR=/var/nexarch-archiv/backups/objects
export NEXARCH_OBJECTBACKUP_PASSWORD=...
export NEXARCH_OBJECTBACKUP_KEEP_SNAPSHOTS=30 # optional, Default 7
objectbackup-cli backup /var/nexarch-objects # Sicherung + Verifikation
objectbackup-cli check # vollständiges Lesen aller Datenblöcke
objectbackup-cli rotate # restic forget --keep-last N --prune
Betrieb: Backup-Zielverzeichnis
Backup-Ziele liegen unter /var/nexarch-archiv/ (persistentes ZFS-Dataset,
zfs/data/subvol-1131-disk-0 auf 192.168.1.131), NIEMALS unter
/var/nexarch-test/ (ephemeres Dataset, wird von den reset-test-env.sh-
Skripten der anderen Module geleert). ZFS-seitige Snapshots/Replikation
dieses Datasets sind ein eigenständiges Infra-Runbook (siehe
../../STORAGE-KONZEPT.md Abschnitt 7), kein Ticket-Code — zfs dedup=on bewusst NICHT setzen (hoher RAM-Bedarf), Deduplizierung läuft
ausschließlich App-seitig über restic.
Prüfungen
make check # build + vet + lint + test, analog Core/DMS