#!/bin/bash # ============================================================================================== # ============================= Partnership Onboard Setup ====================================== # ============================================================================================== # Orchestrates the full partnership setup sequence: # 1. SSH key setup — generate keypair, install on remote, update conf # 2. Partnership onboard — configure auth WebUIs, write state, FolderView3 folder # # Run this once to join a new partner server. Both servers run their own copy. # After setup: critical_sync_maintenance.sh carries the relationship via --check. # # ── PRE-REQUISITES ──────────────────────────────────────────────────────────────────────────── # Both servers must be on the same Tailscale tailnet # Remote server must have password auth enabled for root (SSH key install step) # PARTNERSHIP_OWNER_HOST set correctly in master.conf (HOST1 = owner by default) # # ── WHAT THIS SCRIPT DOES ───────────────────────────────────────────────────────────────────── # Step 1: ssh_setup.sh — generates {hostname}_rsync_automation keypair if missing, # installs on remote via ssh-copy-id, updates master_host*.conf # Step 2: partnership_manager.sh --onboard # — verifies both servers, reconfigures auth WebUIs → owner IP, # writes ACTIVE state, creates FolderView3 folder (if enabled) # # ── USAGE ───────────────────────────────────────────────────────────────────────────────────── # Initial_run/partnership_onboard.sh — full setup # Initial_run/partnership_onboard.sh --dry-run — preview without changes # Initial_run/partnership_onboard.sh --log — verbose output # Initial_run/partnership_onboard.sh --skip-ssh — skip ssh_setup.sh (key already set up) # ============================================================================================== SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPTS_ROOT="$SCRIPT_DIR/.." source "$SCRIPTS_ROOT/load_config.sh" # ── Parse --skip-ssh before parse_args ──────────────────────────────────────────────────────── SKIP_SSH=false FILTERED_ARGS=() for arg in "$@"; do case "$arg" in --skip-ssh) SKIP_SSH=true ;; *) FILTERED_ARGS+=("$arg") ;; esac done parse_args "${FILTERED_ARGS[@]}" # ============================================================================================== # ━━━ Setup ━━━ # ============================================================================================== if [[ "$EUID" -ne 0 ]]; then error "Must be run as root" exit 1 fi detect_hosts START=$(date +%s) echo "" echo "━━━ $ICON_FAILOVER Partnership Onboard Setup — $MY_ID ($LOCAL_SERVER_NAME) — $(date '+%Y-%m-%d %H:%M:%S') ━━━" echo "" echo " This server: $MY_ID ($LOCAL_SERVER_NAME)" echo " Partner: $REMOTE_ID ($REMOTE_SERVER_NAME)" echo "" [[ "$DRY_RUN" == true ]] && warn "DRY RUN — no permanent changes will be made" EXTRA_FLAGS=() [[ "$DRY_RUN" == true ]] && EXTRA_FLAGS+=("--dry-run") [[ "$LOG_MODE" == true ]] && EXTRA_FLAGS+=("--log") # ============================================================================================== # ━━━ Step 1: SSH Key Setup ━━━ # ============================================================================================== echo "" echo "━━━ Step 1/2 — SSH Key Setup ━━━" if [[ "$SKIP_SSH" == true ]]; then warn "Skipping SSH setup (--skip-ssh)" else if bash "$SCRIPT_DIR/ssh_setup.sh" "${EXTRA_FLAGS[@]}"; then log "SSH key setup complete ✅" else error "SSH key setup failed — aborting" error "Fix SSH key issue then re-run, or use --skip-ssh if key is already set up" exit 1 fi fi # ============================================================================================== # ━━━ Step 2: Partnership Onboard ━━━ # ============================================================================================== echo "" echo "━━━ Step 2/2 — Partnership Onboard ━━━" if bash "$SCRIPTS_ROOT/Partnership/partnership_manager.sh" --onboard "${EXTRA_FLAGS[@]}"; then log "Partnership onboard complete ✅" ONBOARD_OK=true else error "Partnership onboard failed" ONBOARD_OK=false fi # ============================================================================================== # ━━━ Summary ━━━ # ============================================================================================== END=$(date +%s) echo "" echo "━━━━━ $ICON_SUMMARY PARTNERSHIP SETUP SUMMARY ━━━━━" echo "$ICON_HOST Identity: $MY_ID ($LOCAL_SERVER_NAME)" echo "$ICON_NET Partner: $REMOTE_SERVER_NAME" echo "$ICON_TIME Duration: $(format_duration $(( END - START )))" echo "" if [[ "$ONBOARD_OK" == true ]]; then echo " Step 1 — SSH key: ✅" echo " Step 2 — Onboard: ✅" echo "" if [[ "$DRY_RUN" == true ]]; then warn "DRY RUN — no changes made" else warn "$ICON_DONE DONE — partnership established ✅" warn "Next: verify with 'Partnership/partnership_manager.sh --status'" fi else echo " Step 1 — SSH key: $( [[ "$SKIP_SSH" == true ]] && echo "skipped" || echo "✅" )" echo " Step 2 — Onboard: ❌" echo "" error "Setup incomplete — resolve onboard errors above and re-run" fi echo "━━━━━━━━━━━━━━━━━━━━━━━" [[ "$ONBOARD_OK" == false ]] && exit 1 exit 0