#!/bin/sh set -eu verify_sha256() { checksum=$1 directory=$2 if command -v sha256sum >/dev/null 2>&1; then (cd "$directory" && sha256sum -c "$(basename "$checksum")") elif command -v shasum >/dev/null 2>&1; then (cd "$directory" && shasum -a 256 -c "$(basename "$checksum")") else echo "[WARN] Weder sha256sum noch shasum verfügbar; Prüfsumme kann nicht geprüft werden." >&2 fi } archive="${1:-}" confirm="${2:-}" [ -n "$archive" ] && [ -f "$archive" ] || { echo "Aufruf: scripts/docker-restore.sh /pfad/vendoo-data.tar.gz --confirm" >&2 exit 64 } [ "$confirm" = "--confirm" ] || { echo "[ABBRUCH] Restore ersetzt die aktuellen Docker-Daten. Erneut mit --confirm aufrufen." >&2 exit 64 } archive_dir="$(cd "$(dirname "$archive")" && pwd)" archive_name="$(basename "$archive")" archive_abs="$archive_dir/$archive_name" checksum_file="$archive_abs.sha256" docker compose config -q if [ -f "$checksum_file" ]; then echo "Prüfe SHA-256 des Restore-Archivs ..." verify_sha256 "$checksum_file" "$archive_dir" else echo "[WARN] Keine Prüfsummendatei $checksum_file gefunden; Archivintegrität kann nicht automatisch bestätigt werden." >&2 fi echo "Erstelle vor dem Restore ein Sicherheitsbackup ..." pre_restore="./vendoo-pre-restore-$(date +%Y%m%d-%H%M%S)" "$(dirname "$0")/docker-backup.sh" "$pre_restore" echo "Stoppe Vendoo und stelle die persistenten Daten wieder her ..." docker compose stop vendoo restart_on_error() { code=$? if [ "$code" -ne 0 ]; then echo "[FEHLER] Restore fehlgeschlagen. Vendoo wird zur Diagnose erneut gestartet." >&2 docker compose up -d vendoo >/dev/null 2>&1 || true fi exit "$code" } trap restart_on_error EXIT INT TERM docker compose run --rm --no-deps --user 0:0 \ -v "$archive_dir":/input:ro \ --entrypoint sh vendoo -eu -c \ 'for dir in db uploads backups operations logs config modules; do mkdir -p "/app/data/$dir" find "/app/data/$dir" -mindepth 1 -maxdepth 1 -exec rm -rf -- {} + done tar xzf "/input/$1" -C /app/data' sh "$archive_name" trap - EXIT INT TERM docker compose up -d vendoo echo "Restore eingespielt. Sicherheitsbackup: $pre_restore/vendoo-data.tar.gz" echo "Jetzt /readyz, Login, Benutzer, Artikel, Bilder und Operations Center prüfen."