Files
nextcloud-to-aio/01-transfer.sh
T
dillard 2626036a21 Initial commit: Nextcloud bare/Hansson → AIO migration toolkit
Scripts 01-05 voor sequentiële migratie: transfer, staging, upgrade-keten,
AIO-install en DB-import. PostgreSQL + MySQL/MariaDB bronnen ondersteund.
Proxmox/OPNSense VM-builder optioneel in proxmox/. README met 12 gotchas.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-07 01:18:01 +02:00

90 lines
4.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# 01-transfer.sh — Rsync bestanden + database-dump van bronserver naar doelserver.
#
# Wat het doet:
# 1. Genereert SSH-key op doel en voegt die toe aan bron (authorized_keys)
# 2. Rsynct NC-app, configs, crontabs → /root/staging/
# 3. Maakt een database-dump op de bron (PostgreSQL of MySQL/MariaDB)
# 4. Rsynct ncdata → TARGET_DATA_PATH (herstart-veilig via --partial)
#
# Herstart-veilig: rsync --partial; dit script is idempotent (delta op re-run).
# Voortgang volgen: ssh <doel> 'tail -f /var/log/pull-source.log'
set -euo pipefail
source "$(dirname "$0")/config.sh"
log() { echo "[$(date '+%H:%M:%S')] $*"; }
# ── STAP 1: SSH-key op doel → bron ───────────────────────────────────────────
log "SSH-key genereren op doel (indien nodig)..."
ssh "${TARGET_SSH}" "test -f /root/.ssh/id_ed25519 || \
ssh-keygen -t ed25519 -N '' -f /root/.ssh/id_ed25519 -C nc-migration-pull"
TARGETKEY=$(ssh "${TARGET_SSH}" "cat /root/.ssh/id_ed25519.pub")
log "Key toevoegen aan bron authorized_keys (indien nodig)..."
ssh "${SOURCE_USER}@${SOURCE_HOST}" \
"grep -qF '${TARGETKEY}' /root/.ssh/authorized_keys 2>/dev/null || \
echo '${TARGETKEY}' >> /root/.ssh/authorized_keys"
log "Hostkey accepteren + verbinding testen van doel naar bron..."
ssh "${TARGET_SSH}" "
ssh-keyscan -H ${SOURCE_HOST} >> /root/.ssh/known_hosts 2>/dev/null
ssh -o ConnectTimeout=10 ${SOURCE_USER}@${SOURCE_HOST} hostname
"
# ── DB-dump commando samenstellen ────────────────────────────────────────────
# AIO gebruikt PostgreSQL; als de bron MySQL/MariaDB is, wordt de DB later
# geconverteerd via 'occ db:convert-type pgsql' (na de upgrade-keten, voor AIO-import).
if [[ "${SOURCE_DB_TYPE}" == "mysql" ]]; then
# Wachtwoord op de command line is niet ideaal maar werkt voor eenmalige migratie.
# Alternatief: zet een .my.cnf op de bronserver met [mysqldump] credentials.
DUMP_CMD="mysqldump -u '${SOURCE_DB_USER}' -p'${SOURCE_DB_PASS}' '${SOURCE_DB}' | gzip"
else
DUMP_CMD="sudo -u postgres pg_dump '${SOURCE_DB}' | gzip"
fi
# ── STAP 2: Pull-script op doel plaatsen en starten ──────────────────────────
log "pull-source.sh plaatsen op doel..."
ssh "${TARGET_SSH}" "cat > /root/pull-source.sh" << EOF
#!/bin/bash
# Draait op doel. Log: /var/log/pull-source.log
set -uo pipefail
SRC="${SOURCE_USER}@${SOURCE_HOST}"
{
echo "===== START \$(date) ====="
mkdir -p /root/staging/etc
echo "== 1/4 NC-app =="
rsync -aHAX --numeric-ids --partial \
\${SRC}:${SOURCE_NC_PATH}/ /root/staging/nextcloud-app/
echo "== 2/4 configs =="
rsync -aH --numeric-ids \${SRC}:/etc/apache2/ /root/staging/etc/apache2/ 2>/dev/null || true
rsync -aH --numeric-ids \${SRC}:/etc/php/ /root/staging/etc/php/ 2>/dev/null || true
rsync -aH --numeric-ids \${SRC}:/etc/letsencrypt/ /root/staging/etc/letsencrypt/ 2>/dev/null || true
rsync -aH --numeric-ids \${SRC}:/var/scripts/ /root/staging/var-scripts/ 2>/dev/null || true
ssh \${SRC} 'crontab -l' > /root/staging/crontab-root.txt 2>/dev/null || true
ssh \${SRC} 'crontab -u www-data -l' > /root/staging/crontab-www-data.txt 2>/dev/null || true
echo "== 3/4 database dump (${SOURCE_DB_TYPE}: ${SOURCE_DB}) =="
ssh \${SRC} '${DUMP_CMD}' > /root/staging/${SOURCE_DB}-\$(date +%F).sql.gz
ls -lh /root/staging/${SOURCE_DB}-*.sql.gz | tail -1
echo "== 4/4 ncdata =="
rsync -aHAX --numeric-ids --partial --info=stats1 \
\${SRC}:${SOURCE_DATA_PATH}/ ${TARGET_DATA_PATH}/
echo "===== KLAAR \$(date) ====="
df -h ${TARGET_DATA_PATH}
} >> /var/log/pull-source.log 2>&1
EOF
ssh "${TARGET_SSH}" "chmod +x /root/pull-source.sh"
# ── STAP 3: Starten met nohup ────────────────────────────────────────────────
log "Transfer starten (nohup, herstart-veilig)..."
ssh "${TARGET_SSH}" "nohup /root/pull-source.sh > /dev/null 2>&1 & echo PID: \$!"
log "✓ Transfer draait op de achtergrond."
log " Voortgang: ssh <doel> 'tail -f /var/log/pull-source.log'"
log " Schijfruimte: ssh <doel> 'df -h ${TARGET_DATA_PATH}'"