diff --git a/06_logs.sh b/06_logs.sh new file mode 100644 index 0000000..abda387 --- /dev/null +++ b/06_logs.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +LOG_FILE="$SCRIPT_DIR/raspi-backup.log" + +usage() { + echo "Usage:" + echo " ./06_logs.sh # letzte 200 Zeilen" + echo " ./06_logs.sh -f # live folgen (tail -f)" + echo " ./06_logs.sh -n 500 # letzte N Zeilen" + echo " ./06_logs.sh --all # komplettes Log (less, falls vorhanden)" +} + +if [[ ! -f "$LOG_FILE" ]]; then + echo "Kein Log gefunden: $LOG_FILE" + exit 0 +fi + +mode="tail" +lines=200 + +case "${1:-}" in + "" ) ;; + -f|--follow) mode="follow" ;; + -n|--lines) + [[ -n "${2:-}" ]] || { usage; exit 2; } + lines="$2" + ;; + --all) mode="all" ;; + -h|--help) usage; exit 0 ;; + *) usage; exit 2 ;; +esac + +case "$mode" in + follow) + echo "Folge Log live: $LOG_FILE" + tail -f "$LOG_FILE" + ;; + all) + if command -v less >/dev/null 2>&1; then + less "$LOG_FILE" + else + cat "$LOG_FILE" + fi + ;; + tail) + tail -n "$lines" "$LOG_FILE" + ;; +esac diff --git a/07_timer_enable.sh b/07_timer_enable.sh new file mode 100644 index 0000000..046b1df --- /dev/null +++ b/07_timer_enable.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +SERVICE_NAME="raspi-backup.service" +TIMER_NAME="raspi-backup.timer" +SERVICE_PATH="/etc/systemd/system/${SERVICE_NAME}" +TIMER_PATH="/etc/systemd/system/${TIMER_NAME}" + +[[ "${EUID:-$(id -u)}" -eq 0 ]] || { echo "Bitte mit sudo starten: sudo $SCRIPT_DIR/07_timer_enable.sh"; exit 1; } +command -v systemctl >/dev/null 2>&1 || { echo "systemctl nicht gefunden."; exit 1; } + +RUN_SCRIPT="$SCRIPT_DIR/04_run_backup.sh" +[[ -x "$RUN_SCRIPT" ]] || { echo "FEHLT oder nicht ausführbar: $RUN_SCRIPT"; exit 1; } + +cat >"$SERVICE_PATH" <"$TIMER_PATH" </dev/null 2>&1 || { echo "systemctl nicht gefunden."; exit 1; } + +# stoppen/disable (egal ob existiert) +systemctl disable --now "$TIMER_NAME" >/dev/null 2>&1 || true + +# units löschen (falls vorhanden) +rm -f "$SERVICE_PATH" "$TIMER_PATH" + +systemctl daemon-reload + +echo "Timer/Service deaktiviert und entfernt." +echo "Check:" +systemctl list-timers --all | grep -E "raspi-backup\.timer" || echo "OK: kein Timer mehr da." diff --git a/09_uninstall.sh b/09_uninstall.sh new file mode 100644 index 0000000..37e7178 --- /dev/null +++ b/09_uninstall.sh @@ -0,0 +1,127 @@ +#!/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"