Removes all references to "failover" and "HA" (high availability) terminology from variable names, config keys, state values, rsync profile names, directory paths, and user-visible strings. Mapping: FAILOVER_* → FALLBACK_* FAILOVER_HOST*_RUNS_FOR → FALLBACK_HOST*_COVERS critical-failover → critical-fallback emby-failover → emby-fallback appdata-Failover/ → appdata-Fallback/ "FAILOVER" state value → "FALLBACK" failover_start key → fallback_start Failover/ directory → Fallback/ failover.sh → fallback.sh failover_state.db → fallback_state.db -Failover folder suffix → -Fallback State machine: NORMAL | FALLBACK | DARK (unchanged) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
136 lines
6.1 KiB
Bash
Executable File
136 lines
6.1 KiB
Bash
Executable File
#!/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_FALLBACK 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
|