From 1f08c66c78bfcf9548f0cfd41d46ef40139e3809 Mon Sep 17 00:00:00 2001 From: oliver Date: Tue, 21 Apr 2026 13:08:18 -0300 Subject: [PATCH] c --- app/backup | 39 ++++++++++++++++----------------------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/app/backup b/app/backup index 28988a5..7f9e767 100755 --- a/app/backup +++ b/app/backup @@ -1,52 +1,46 @@ #!/usr/bin/env bash set -euo pipefail -# === CONFIG === REPO="/backup/borgrepo" + export BORG_PASSPHRASE BORG_PASSPHRASE="$(cat /app/host_vars/repokey)" + +export BORG_RSH="ssh -o BatchMode=yes" + HOSTS_FILE="$(dirname "$0")/host_vars/hosts" TIMESTAMP="$(date +%Y-%m-%dT%H%M%S)" -# === BUILD SOURCE LIST === -SOURCES=() - +HOSTS=() while read -r host; do [[ -z "$host" || "$host" =~ ^# ]] && continue - SOURCES+=("${host}:/BACKUP/") + HOSTS+=("$host") done < "$HOSTS_FILE" -if [[ ${#SOURCES[@]} -eq 0 ]]; then - echo "ERROR: No hosts found in $HOSTS_FILE" - exit 1 -fi - echo "Backing up hosts:" -printf ' - %s\n' "${SOURCES[@]}" +printf ' - %s\n' "${HOSTS[@]}" -# === CREATE BACKUP PER HOST === FAILED_HOSTS=() -for src in "${SOURCES[@]}"; do - HOST="${src%%:*}" +for HOST in "${HOSTS[@]}"; do ARCHIVE="${HOST}-backup-${TIMESTAMP}" echo "--- Backing up $HOST ---" - borg create \ + # IMPORTANT: repo is LOCAL, source is REMOTE via SSH + if ! borg create \ "$REPO::$ARCHIVE" \ - "$src" \ + "$HOST:/BACKUP" \ --stats \ - --compression lz4 || { + --compression lz4; then + echo "WARNING: Failed to back up $HOST" FAILED_HOSTS+=("$HOST") - } + fi done -# === RETENTION POLICY (per host) === echo "Applying retention policy..." -for src in "${SOURCES[@]}"; do - HOST="${src%%:*}" +for HOST in "${HOSTS[@]}"; do borg prune \ "$REPO" \ --keep-daily=7 \ @@ -55,9 +49,8 @@ for src in "${SOURCES[@]}"; do --stats done -# === FINAL REPORT === if [[ ${#FAILED_HOSTS[@]} -gt 0 ]]; then - echo "DONE WITH ERRORS — Failed hosts:" + echo "DONE WITH ERRORS:" printf ' - %s\n' "${FAILED_HOSTS[@]}" exit 1 fi