From 32967b36580138ad54941a1840733c08c5e75a51 Mon Sep 17 00:00:00 2001 From: zenaku Date: Sun, 6 Sep 2026 23:32:10 +0200 Subject: [PATCH] feat: universal zero-downtime migration from legacy WireGuard/Go stack to operator-docker --- 00-migrate-root.sh | 13 ++++++++++++- 01-migrate-user.sh | 23 +++++++++-------------- 02-migrate-peers.sh | 13 ++++++++++--- 3 files changed, 31 insertions(+), 18 deletions(-) diff --git a/00-migrate-root.sh b/00-migrate-root.sh index f972e65..6575beb 100644 --- a/00-migrate-root.sh +++ b/00-migrate-root.sh @@ -76,6 +76,8 @@ ok "Legacy WireGuard: $LEGACY_WG" sep info "Detecting legacy stack location..." LEGACY_COMPOSE_DIR="" + +# Search in known paths first for DIR in "$LINUX_HOME/sp-env-wireguard" \ "$LINUX_HOME/sp-env-wireguard-ipv6" \ "$LINUX_HOME/wireguard" \ @@ -88,6 +90,15 @@ for DIR in "$LINUX_HOME/sp-env-wireguard" \ break fi done + +# Fallback: search entire home directory +if [ -z "$LEGACY_COMPOSE_DIR" ]; then + LEGACY_COMPOSE_DIR=$(find "$LINUX_HOME" -maxdepth 6 -name "docker-compose.yml" 2>/dev/null | \ + while read -r f; do + grep -q "wireguard" "$f" 2>/dev/null && dirname "$f" && break + done | head -1) +fi + [ -z "$LEGACY_COMPOSE_DIR" ] && fail "Legacy docker-compose.yml not found." ok "Legacy stack: $LEGACY_COMPOSE_DIR" echo "$LEGACY_COMPOSE_DIR" > "$BACKUP_DIR/legacy_compose_dir" @@ -244,4 +255,4 @@ echo " Once SP authorizes access, run:" echo " bash 01-migrate-user.sh" echo "" echo " Log: cat $LOG" -echo "=========================================" \ No newline at end of file +echo "=========================================" diff --git a/01-migrate-user.sh b/01-migrate-user.sh index 6c8af9c..70565e1 100644 --- a/01-migrate-user.sh +++ b/01-migrate-user.sh @@ -9,18 +9,6 @@ if [ "$EUID" -eq 0 ]; then exit 1 fi -RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; RESET='\033[0m' -#!/bin/bash -eu -# ============================================================================= -# 01-migrate-user.sh — Run as Linux user (not root) -# Installs operator-docker and prepares for peer migration -# Auto-rollback: restores nginx, certs and legacy stack on failure -# ============================================================================= -if [ "$EUID" -eq 0 ]; then - echo "[X] Run as your Linux user, not root" - exit 1 -fi - RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; RESET='\033[0m' BACKUP_DIR="$HOME/.wg-migration" @@ -79,7 +67,14 @@ echo "[START-01] $(date '+%Y-%m-%d %H:%M:%S')" >> "$LOG" sep info "Checking prerequisites..." -docker info &>/dev/null || fail "No Docker access. Run: sudo usermod -aG docker $USER && newgrp docker" +if ! docker info &>/dev/null; then + if groups | grep -q docker; then + fail "Docker socket not accessible. Try logging out and back in." + else + warn "No Docker access — re-launching with docker group..." + exec newgrp docker "$0" "$@" + fi +fi [ -f "$BACKUP_DIR/private_key" ] || fail "No backup found. Run: sudo bash 00-migrate-root.sh" [ -f "$BACKUP_DIR/wg0-legacy.conf" ] || fail "No peer backup found. Run: sudo bash 00-migrate-root.sh" @@ -246,4 +241,4 @@ echo "=========================================" echo " Installation complete" echo " Next: bash 02-migrate-peers.sh" echo "=========================================" -echo "" \ No newline at end of file +echo "" diff --git a/02-migrate-peers.sh b/02-migrate-peers.sh index db3b16b..14fe20e 100644 --- a/02-migrate-peers.sh +++ b/02-migrate-peers.sh @@ -64,7 +64,14 @@ echo "[START-02] $(date '+%Y-%m-%d %H:%M:%S')" >> "$LOG" sep info "Checking prerequisites..." -docker info &>/dev/null || fail "No Docker access. Run: sudo usermod -aG docker $USER && newgrp docker" +if ! docker info &>/dev/null; then + if groups | grep -q docker; then + fail "Docker socket not accessible. Try logging out and back in." + else + warn "No Docker access — re-launching with docker group..." + exec newgrp docker "$0" "$@" + fi +fi [ -f "$BACKUP_DIR/private_key" ] || fail "No private key backup found." [ -f "$BACKUP_DIR/wg0-legacy.conf" ] || fail "No peer backup found." @@ -142,7 +149,7 @@ echo "[WIREGUARD-START] $(date '+%Y-%m-%d %H:%M:%S')" >> "$LOG" cd "$OPERATOR_DIR" sudo modprobe ip6table_filter 2>/dev/null || true -docker compose up -d wireguard +docker compose up -d --force-recreate wireguard info "Waiting for startup..." sleep 8 @@ -267,4 +274,4 @@ echo " Existing users reconnect automatically" echo " without new configuration." echo "" echo " Log: cat $LOG" -echo "=========================================" \ No newline at end of file +echo "========================================="