#!/bin/bash # ============================================================================= # Einmaliges Setup-Skript – läuft auf dem Raspberry Pi als root # ============================================================================= set -euo pipefail REMOTE_HOST="${1:-docker-host}" # IP oder Hostname als Argument übergeben REMOTE_USER="borgbackup" # SSH-User auf dem Docker-Host LOCAL_USER="borg" # Lokaler User auf dem Pi SSH_KEY="/home/${LOCAL_USER}/.ssh/borg_pull" MOUNT_BASE="/mnt/borg-pull" BORG_REPO_BASE="/media/backup/borg" BACKUP_SCRIPT="/usr/local/bin/borg-pull-backup.sh" echo "=== BorgBackup Pull-Setup für ${REMOTE_HOST} ===" # --- Pakete installieren --- echo "[1/7] Installiere Pakete..." apt-get update -qq apt-get install -y borgbackup sshfs fuse # /etc/fuse.conf: user_allow_other aktivieren if ! grep -q "^user_allow_other" /etc/fuse.conf; then echo "user_allow_other" >> /etc/fuse.conf echo " user_allow_other in /etc/fuse.conf aktiviert." fi # --- Lokalen borg-User anlegen --- echo "[2/7] Lege lokalen User '${LOCAL_USER}' an..." if id "$LOCAL_USER" &>/dev/null; then echo " User existiert bereits." else useradd \ --system \ --create-home \ --home-dir "/home/${LOCAL_USER}" \ --shell /bin/bash \ --comment "BorgBackup Pull User" \ "$LOCAL_USER" echo " User '${LOCAL_USER}' angelegt." fi # --- SSH-Verzeichnis und Key erzeugen --- echo "[3/7] Erzeuge SSH-Key..." mkdir -p "/home/${LOCAL_USER}/.ssh" chmod 700 "/home/${LOCAL_USER}/.ssh" chown "${LOCAL_USER}:${LOCAL_USER}" "/home/${LOCAL_USER}/.ssh" if [ ! -f "${SSH_KEY}" ]; then sudo -u "${LOCAL_USER}" ssh-keygen -t ed25519 -f "${SSH_KEY}" -N "" \ -C "borg-pull-backup@$(hostname)" echo " Key erzeugt: ${SSH_KEY}" else echo " Key existiert bereits: ${SSH_KEY}" fi echo "" echo ">>> Öffentlichen Key auf den Docker-Host kopieren:" echo " Führe das jetzt manuell aus:" echo "" echo " ssh-copy-id -i ${SSH_KEY}.pub ${REMOTE_USER}@${REMOTE_HOST}" echo "" echo " ODER manuell in ~/.ssh/authorized_keys auf dem Docker-Host einfügen." echo "" cat "${SSH_KEY}.pub" echo "" read -rp " Drücke ENTER wenn erledigt..." # --- Verbindung testen --- echo "[4/7] Teste SSH-Verbindung..." if sudo -u "${LOCAL_USER}" ssh \ -i "${SSH_KEY}" \ -o BatchMode=yes \ -o StrictHostKeyChecking=no \ "${REMOTE_USER}@${REMOTE_HOST}" "echo OK" &>/dev/null; then echo " Verbindung erfolgreich!" else echo " FEHLER: SSH-Verbindung ${REMOTE_USER}@${REMOTE_HOST} fehlgeschlagen. Key korrekt kopiert?" exit 1 fi # --- Verzeichnisse anlegen --- echo "[5/7] Lege Verzeichnisse an..." mkdir -p "${MOUNT_BASE}/${REMOTE_HOST}" mkdir -p "${BORG_REPO_BASE}" chown "${LOCAL_USER}:${LOCAL_USER}" "${MOUNT_BASE}" "${BORG_REPO_BASE}" # --- Borg-Repo initialisieren --- echo "[6/7] Initialisiere Borg-Repository..." REPO="${BORG_REPO_BASE}/${REMOTE_HOST}" if [ ! -d "${REPO}/data" ]; then echo "" echo " Repository wird unter ${REPO} erstellt." echo " Du wirst nach einem Passwort gefragt – SICHER AUFBEWAHREN!" echo "" sudo -u "${LOCAL_USER}" borg init --encryption=repokey "${REPO}" echo "" echo " >>> Exportiere den Repokey als Backup:" echo " borg key export ${REPO} /media/backup/borg-key-${REMOTE_HOST}.txt" echo "" else echo " Repository existiert bereits: ${REPO}" fi # --- Backup-Skript installieren --- echo "[7/7] Installiere Backup-Skript..." cp "$(dirname "$0")/borg-pull-backup.sh" "${BACKUP_SCRIPT}" chmod +x "${BACKUP_SCRIPT}" # Variablen im Skript eintragen sed -i "s|REMOTE_HOST=\"docker-host\"|REMOTE_HOST=\"${REMOTE_HOST}\"|g" "${BACKUP_SCRIPT}" sed -i "s|SSH_KEY=\"/home/borg/|SSH_KEY=\"/home/${LOCAL_USER}/|g" "${BACKUP_SCRIPT}" echo "" read -rsp " Borg-Passwort für das Skript eingeben: " BORG_PASS echo "" sed -i "s|HIER-DEIN-PASSWORT|${BORG_PASS}|g" "${BACKUP_SCRIPT}" echo "" echo "=== Setup abgeschlossen! ===" echo "" echo "Nächste Schritte:" echo " 1. Passe BACKUP_PATHS in ${BACKUP_SCRIPT} an" echo " 2. Systemd-Units kopieren und Timer aktivieren:" echo " cp borg-pull-backup.service borg-pull-backup.timer /etc/systemd/system/" echo " systemctl daemon-reload" echo " systemctl enable --now borg-pull-backup.timer" echo " 3. Testlauf: bash ${BACKUP_SCRIPT}" echo ""