#!/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"