Files
infra-borgbackup-docker/setup.sh
T
2026-05-31 12:19:44 +00:00

103 lines
3.3 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.
#!/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_KEY="/home/pi/.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/6] 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
# --- SSH-Key erzeugen ---
echo "[2/6] Erzeuge SSH-Key..."
if [ ! -f "${SSH_KEY}" ]; then
sudo -u pi 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 ""
read -rp " Drücke ENTER wenn erledigt..."
# --- Verbindung testen ---
echo "[3/6] Teste SSH-Verbindung..."
if 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 fehlgeschlagen. Key korrekt kopiert?"
exit 1
fi
# --- Verzeichnisse anlegen ---
echo "[4/6] Lege Verzeichnisse an..."
mkdir -p "${MOUNT_BASE}/${REMOTE_HOST}"
mkdir -p "${BORG_REPO_BASE}"
chown pi:pi "${MOUNT_BASE}" "${BORG_REPO_BASE}"
# --- Borg-Repo initialisieren ---
echo "[5/6] 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 pi 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 "[6/6] Installiere Backup-Skript..."
cp "$(dirname "$0")/borg-pull-backup.sh" "${BACKUP_SCRIPT}"
chmod +x "${BACKUP_SCRIPT}"
# Passwort im Skript eintragen
echo ""
read -rsp " Borg-Passwort für das Skript eingeben: " BORG_PASS
echo ""
sed -i "s|HIER-DEIN-PASSWORT|${BORG_PASS}|g" "${BACKUP_SCRIPT}"
sed -i "s|REMOTE_HOST=\"docker-host\"|REMOTE_HOST=\"${REMOTE_HOST}\"|g" "${BACKUP_SCRIPT}"
echo ""
echo "=== Setup abgeschlossen! ==="
echo ""
echo "Nächste Schritte:"
echo " 1. Passe BACKUP_PATHS in ${BACKUP_SCRIPT} an"
echo " 2. Systemd-Timer aktivieren: sudo systemctl enable --now borg-pull-backup.timer"
echo " 3. Testlauf: sudo ${BACKUP_SCRIPT}"
echo ""