128 lines
4.0 KiB
Bash
128 lines
4.0 KiB
Bash
#!/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"
|