Files
mission-control-v2/deploy/pbs-backup.sh
T
HitonabiandClaude Opus 5.5 2e0ad70a85 sicherung: PBS-Sicherung zurueck ins Repo (ohne mem0), monatliche Probe-Wiederherstellung
- PBS: deploy/pbs-backup.sh, pbs-backup.service und .timer (User-Units, 03:50) aus der Box
  uebernommen. Die Sicherung lief vom 09.07. bis 20.08. taeglich gruen und brach am 21.08. ab,
  weil ihr erster Quellordner /srv/models/mem0 (altes Gedaechtnis) fehlte; danach im
  KISS-Umbau abgeschaltet. Das neue Skript sichert ~/.hermes und /etc/llama-swap (Pflicht)
  und ~/wissens-vault (optional), prueft Zugangsdatei und Client, und liest den Zugang erst
  direkt vor dem Aufruf ein. deploy.sh spielt die Units aus, schaltet sie aber nicht ein
  (Einschalten von Hand, docs/BETRIEB.md). Der Waechter zeigt einen gescheiterten Lauf gelb.
- Probe-Wiederherstellung: services/probe_wiederherstellung.py packt die juengste Sicherung
  in /var/tmp/mc2-probe-* aus (ohne Geheimnisse und Verknuepfungen), prueft Alter (<= 48 h),
  Lesbarkeit und Pflichtinhalte (Gedaechtnis und SOUL.md auch gegen den lebenden Stand,
  Skills, Cron-Skripte und -Jobs, Hermes-Config, .env, llama-swap-Config, Box-Wart-Zustand,
  Units) und loescht den Ordner wieder. Ergebnis in /srv/models/mc2-probe-wiederherstellung.json,
  bei Rot Meldung "[Sicherung]" ueber notify.sh in normaler Dringlichkeit.
  Timer mc2-probe-wiederherstellung.timer: erster Montag im Monat 05:15 (nie sonntags, lange
  nach 03:30), Persistent=true; deploy.sh aktiviert ihn.
- Waechter: gelb, wenn die letzte Probe rot war, aelter als 40 Tage ist oder (mit Timer) noch
  nie lief; Knoepfe "Jetzt pruefen" und "Protokoll" (Allowlist in services.maintenance).
- Tests: Probe gruen/rot je Pflichtinhalt, Abgleich, kaputte und alte Sicherung, Meldung,
  Waechter-Hinweis, Unit-Listen in deploy.sh, Takt, LF, pbs-backup.sh mit Client-Attrappe.
  Trockenlauf gegen die echte Sicherung der Box (nur in /tmp): alle Pflichtinhalte gruen, 0,4 s.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 20:41:33 +02:00

47 lines
2.3 KiB
Bash

#!/usr/bin/env bash
# pbs-backup.sh — Sicherung der Box auf den Proxmox Backup Server (Backup-ID aibox, Datastore „qnap“).
#
# Zweite Schicht neben der täglichen Tarball-Sicherung (backup.sh): ~/.hermes ganz (auch Sitzungen und Protokolle,
# die der Tarball bewusst weglässt), die Wissens-Sammlung und die llama-swap-Config als pxar-Archive. Der PBS
# dedupliziert und hebt Stände auf (Prune auf dem PBS: 7 Tage, 4 Wochen, 3 Monate); die Daten liegen auf dem QNAP.
# Inkrementell dauert ein Lauf rund 30 Sekunden.
#
# Geschichte: lief vom 09.07.2026 an täglich um 03:50 (damals ~/bin/pbs-backup.sh, nicht im Repo). Am 21.08. brach
# sie ab, weil ihr erster Quellordner (/srv/models/mem0, das abgelöste Gedächtnis) fehlte, und wurde im KISS-Umbau
# abgeschaltet. Seit 24.09.2026 im Repo und ohne mem0. Fehlt ein optionaler Ordner, läuft sie ohne ihn weiter.
#
# Braucht (nur auf der Box, nie im Repo):
# ~/.config/pbs-backup/env PBS_REPOSITORY, PBS_PASSWORD, PBS_FINGERPRINT (Rechte 600)
# ~/bin/proxmox-backup-client statisches Client-Programm
# Aufruf: systemctl --user start pbs-backup.service (Protokoll: journalctl --user -u pbs-backup)
set -euo pipefail
ENV_DATEI="${MC_PBS_ENV:-$HOME/.config/pbs-backup/env}"
CLIENT="${MC_PBS_CLIENT:-$HOME/bin/proxmox-backup-client}"
BACKUP_ID="${MC_PBS_BACKUP_ID:-aibox}"
HERMES_DIR="${HERMES_HOME:-$HOME/.hermes}"
LSWAP_DIR="${MC_PBS_LLAMASWAP_DIR:-/etc/llama-swap}"
VAULT_DIR="${MC_PBS_VAULT_DIR:-$HOME/wissens-vault}"
[ -r "$ENV_DATEI" ] || { echo "! Zugangsdatei fehlt: $ENV_DATEI"; exit 1; }
[ -x "$CLIENT" ] || { echo "! proxmox-backup-client fehlt: $CLIENT"; exit 1; }
# Pflicht: ohne diese beiden ist die Sicherung wertlos.
for pflicht in "$HERMES_DIR" "$LSWAP_DIR"; do
[ -d "$pflicht" ] || { echo "! Ordner fehlt: $pflicht"; exit 1; }
done
archive=("hermes.pxar:$HERMES_DIR" "llamaswap.pxar:$LSWAP_DIR")
# Optional: fehlt die Wissens-Sammlung, läuft die Sicherung ohne sie (am 21.08. brach sie an so etwas ab).
if [ -d "$VAULT_DIR" ]; then
archive+=("vault.pxar:$VAULT_DIR")
else
echo "Hinweis: $VAULT_DIR fehlt, wird übersprungen."
fi
# Zugang erst hier einlesen: PBS_PASSWORD und Co. landen nur in der Umgebung des Clients, nie auf der Befehlszeile.
set -a
# shellcheck disable=SC1090
. "$ENV_DATEI"
set +a
exec "$CLIENT" backup "${archive[@]}" --backup-id "$BACKUP_ID"