Dateien nach "/" hochladen
This commit is contained in:
50
06_logs.sh
Normal file
50
06_logs.sh
Normal file
@@ -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
|
||||
54
07_timer_enable.sh
Normal file
54
07_timer_enable.sh
Normal file
@@ -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" <<EOF
|
||||
[Unit]
|
||||
Description=Raspi Backup (runs 04_run_backup.sh)
|
||||
Wants=network-online.target
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=${RUN_SCRIPT}
|
||||
|
||||
# etwas Hardening
|
||||
NoNewPrivileges=true
|
||||
PrivateTmp=true
|
||||
ProtectSystem=full
|
||||
ProtectHome=false
|
||||
EOF
|
||||
|
||||
cat >"$TIMER_PATH" <<EOF
|
||||
[Unit]
|
||||
Description=Raspi Backup daily timer
|
||||
|
||||
[Timer]
|
||||
OnCalendar=daily
|
||||
Persistent=true
|
||||
RandomizedDelaySec=10m
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
EOF
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl enable --now "$TIMER_NAME"
|
||||
|
||||
echo "Timer aktiviert."
|
||||
echo "Status:"
|
||||
systemctl --no-pager status "$TIMER_NAME" || true
|
||||
echo
|
||||
echo "Nächste Runs anzeigen:"
|
||||
systemctl list-timers --all | grep -E "raspi-backup\.timer|NEXT" || true
|
||||
23
08_timer_disable.sh
Normal file
23
08_timer_disable.sh
Normal file
@@ -0,0 +1,23 @@
|
||||
#!/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/08_timer_disable.sh"; exit 1; }
|
||||
command -v systemctl >/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."
|
||||
127
09_uninstall.sh
Normal file
127
09_uninstall.sh
Normal file
@@ -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"
|
||||
Reference in New Issue
Block a user