#!/usr/bin/env bash set -Eeuo pipefail SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" CFG="$SCRIPT_DIR/config.sh" SERVICE_NAME="raspi-backup.service" TIMER_NAME="raspi-backup.timer" SERVICE_PATH="/etc/systemd/system/${SERVICE_NAME}" TIMER_PATH="/etc/systemd/system/${TIMER_NAME}" LOG_FILE="$SCRIPT_DIR/raspi-backup.log" LOCK_FILE="$SCRIPT_DIR/.raspi-backup.lock" die(){ echo "ERROR: $*" >&2; exit 1; } host_short(){ hostname -s 2>/dev/null || hostname 2>/dev/null || echo "raspi"; } echo "== Uninstall ==" echo echo "Das Script entfernt:" echo "- systemd Timer/Service" echo "- Log/Lock" echo "- config.sh" echo "- SSH Backup-Key + Alias (nur Backup-bezogen)" echo echo "NICHT entfernt:" echo "- andere SSH-Keys" echo "- Backup-Daten auf dem NAS" echo read -r -p "Wirklich deinstallieren? (ja/nein): " ans [[ "$ans" == "ja" ]] || { echo "Abgebrochen."; exit 0; } # ------------------------------------------------------------ # config laden (für KEY_TYPE, ALIAS_PREFIX, SSH_USER) # ------------------------------------------------------------ if [[ -f "$CFG" ]]; then # shellcheck disable=SC1090 source "$CFG" else echo "config.sh fehlt – fahre mit Best-Effort fort." fi SSH_USER="${SSH_USER:-admin}" KEY_TYPE="${KEY_TYPE:-ed25519}" ALIAS_PREFIX="${ALIAS_PREFIX:-nas}" hn="$(host_short)" USER_HOME="$(eval echo "~${SSH_USER}")" SSH_DIR="${USER_HOME}/.ssh" KEY_FILE="${SSH_DIR}/id_${KEY_TYPE}_${hn}" PUB_FILE="${KEY_FILE}.pub" SSH_CFG="${SSH_DIR}/config" ALIAS="${ALIAS_PREFIX}-${hn}" # ------------------------------------------------------------ # systemd entfernen # ------------------------------------------------------------ if command -v systemctl >/dev/null 2>&1; then if [[ "${EUID:-$(id -u)}" -eq 0 ]]; then systemctl disable --now "$TIMER_NAME" >/dev/null 2>&1 || true rm -f "$SERVICE_PATH" "$TIMER_PATH" systemctl daemon-reload >/dev/null 2>&1 || true elif command -v sudo >/dev/null 2>&1; then sudo bash -c " systemctl disable --now '$TIMER_NAME' >/dev/null 2>&1 || true rm -f '$SERVICE_PATH' '$TIMER_PATH' systemctl daemon-reload >/dev/null 2>&1 || true " || true fi echo "systemd Timer/Service entfernt." fi # ------------------------------------------------------------ # SSH Alias entfernen # ------------------------------------------------------------ if [[ -f "$SSH_CFG" ]] && command -v awk >/dev/null 2>&1; then tmp="$(mktemp)" awk -v host="$ALIAS" ' BEGIN {skip=0} $1=="Host" && $2==host {skip=1; next} $1=="Host" && $2!=host {skip=0} skip==0 {print} ' "$SSH_CFG" >"$tmp" && mv "$tmp" "$SSH_CFG" echo "SSH Alias entfernt: $ALIAS" fi # ------------------------------------------------------------ # SSH Keys entfernen (nur Backup-Key) # ------------------------------------------------------------ rm -f "$KEY_FILE" "$PUB_FILE" 2>/dev/null || true echo "SSH Backup-Key entfernt:" echo " $KEY_FILE" echo " $PUB_FILE" # ------------------------------------------------------------ # .ssh Ordner ggf. entfernen (nur wenn leer) # ------------------------------------------------------------ if [[ -d "$SSH_DIR" ]] && [[ -z "$(ls -A "$SSH_DIR")" ]]; then rmdir "$SSH_DIR" echo ".ssh Ordner war leer → entfernt." else echo ".ssh Ordner bleibt bestehen (enthält weitere Dateien)." fi # ------------------------------------------------------------ # config + log + lock entfernen # ------------------------------------------------------------ rm -f "$CFG" "$LOG_FILE" "$LOCK_FILE" 2>/dev/null || true echo "config.sh, Log und Lock entfernt." echo echo "Uninstall abgeschlossen." echo echo "Wenn du auch die Scripts löschen willst:" echo "rm -f \\" echo " $SCRIPT_DIR/start.sh \\" echo " $SCRIPT_DIR/01_setup.sh \\" echo " $SCRIPT_DIR/02_setup_ssh.sh \\" echo " $SCRIPT_DIR/03_verify.sh \\" echo " $SCRIPT_DIR/04_run_backup.sh \\" echo " $SCRIPT_DIR/05_status.sh \\" echo " $SCRIPT_DIR/06_logs.sh \\" echo " $SCRIPT_DIR/07_timer_enable.sh \\" echo " $SCRIPT_DIR/08_timer_disable.sh \\" echo " $SCRIPT_DIR/09_uninstall.sh"