60 lines
2.1 KiB
Bash
60 lines
2.1 KiB
Bash
#!/usr/bin/env bash
|
||
set -Eeuo pipefail
|
||
|
||
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
||
CFG="$SCRIPT_DIR/config.sh"
|
||
[[ -f "$CFG" ]] || { echo "ERROR: config.sh fehlt: $CFG (erst 01_setup.sh ausführen)"; exit 1; }
|
||
# shellcheck disable=SC1090
|
||
source "$CFG"
|
||
|
||
# --- helpers ---
|
||
APP="raspi-backup"
|
||
STATE_DIR="${XDG_STATE_HOME:-$HOME/.local/state}/${APP}"
|
||
LOG_FILE="${STATE_DIR}/${APP}.log"
|
||
mkdir -p "$STATE_DIR"
|
||
|
||
log(){ echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOG_FILE" >/dev/null; }
|
||
die(){ log "ERROR: $*"; echo "ERROR: $*" >&2; exit 1; }
|
||
need_cmd(){ command -v "$1" >/dev/null 2>&1 || die "Fehlt: $1"; }
|
||
need_root(){ [[ "${EUID:-$(id -u)}" -eq 0 ]] || die "Bitte mit sudo starten: sudo $SCRIPT_DIR/03_verify.sh"; }
|
||
host_short(){ hostname -s 2>/dev/null || hostname 2>/dev/null || echo "raspi"; }
|
||
nas_alias(){ echo "${ALIAS_PREFIX}-$(host_short)"; }
|
||
|
||
need_root
|
||
need_cmd ssh
|
||
need_cmd rsync
|
||
|
||
# validate config vars
|
||
: "${NAS_HOST:?}" "${NAS_USER:?}" "${NAS_PORT:?}" "${ALIAS_PREFIX:?}" "${SSH_USER:?}" "${NAS_BACKUP_BASE:?}"
|
||
|
||
hn="$(host_short)"
|
||
alias="$(nas_alias)"
|
||
ssh_user="$SSH_USER"
|
||
remote_root="${NAS_BACKUP_BASE%/}/${hn}"
|
||
|
||
log "VERIFY START: alias=${alias} remote_root=${remote_root}"
|
||
|
||
# optional Port check
|
||
if command -v nc >/dev/null 2>&1; then
|
||
log "Check NAS Port: ${NAS_HOST}:${NAS_PORT}"
|
||
nc -vz "$NAS_HOST" "$NAS_PORT" >/dev/null 2>&1 || die "NAS Port nicht erreichbar: ${NAS_HOST}:${NAS_PORT}"
|
||
else
|
||
log "nc nicht vorhanden – überspringe Port-Check"
|
||
fi
|
||
|
||
# SSH login via alias
|
||
log "Check SSH Login: ${alias}"
|
||
sudo -u "$ssh_user" ssh -o BatchMode=yes -o ConnectTimeout=10 "$alias" "echo ok" >/dev/null \
|
||
|| die "SSH Login über Alias fehlgeschlagen: $alias"
|
||
|
||
# Remote backup dir
|
||
log "Check/Create Remote Backup Dir: ${remote_root}"
|
||
sudo -u "$ssh_user" ssh -o BatchMode=yes "$alias" "mkdir -p '$remote_root' && test -d '$remote_root'" >/dev/null \
|
||
|| die "Remote Backup Pfad nicht nutzbar: $remote_root"
|
||
|
||
log "VERIFY OK"
|
||
echo "Verify OK:"
|
||
echo "- NAS erreichbar (${NAS_HOST}:${NAS_PORT})"
|
||
echo "- SSH Alias funktioniert (${alias})"
|
||
echo "- Remote Backup Pfad OK (${remote_root})"
|