Files
raspi-backup/09_uninstall.sh
2025-12-30 18:38:02 +01:00

128 lines
4.0 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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"