#!/usr/bin/env bash # Fix duplicate enode for VMID 2401: fetch real enode from 2401 (on r630-02), replace .241 # entry in static-nodes.json and permissions-nodes.toml. # Usage: bash scripts/fix-duplicate-enode-2401.sh [--dry-run] # Requires: SSH to 192.168.11.12 (r630-02), jq. set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" source "${PROJECT_ROOT}/config/ip-addresses.conf" 2>/dev/null || true VMID=2401 # 2401 is on r630-02 per BESU_VMIDS_FROM_PROXMOX HOST="${PROXMOX_R630_02:-192.168.11.12}" STATIC="${PROJECT_ROOT}/config/besu-node-lists/static-nodes.json" PERMS="${PROJECT_ROOT}/config/besu-node-lists/permissions-nodes.toml" EXPECTED_IP="192.168.11.241" DRY_RUN=false [[ "${1:-}" = "--dry-run" ]] && DRY_RUN=true if [[ ! -f "$STATIC" ]] || [[ ! -f "$PERMS" ]]; then echo "ERROR: $STATIC or $PERMS not found" >&2 exit 1 fi echo "Fetching enode for VMID $VMID from $HOST (expected IP $EXPECTED_IP)..." ENODE=$(bash "${SCRIPT_DIR}/get-enode-for-vmid.sh" "$VMID" "$HOST" 2>/dev/null) || true if [[ -z "$ENODE" ]]; then echo "Could not get enode (SSH to $HOST or Besu RPC on 2401?). Run from a host with SSH to Proxmox." >&2 echo "Manual: ssh root@$HOST 'pct exec $VMID -- curl -s -X POST -H \"Content-Type: application/json\" --data \"{\\\"jsonrpc\\\":\\\"2.0\\\",\\\"method\\\":\\\"admin_nodeInfo\\\",\\\"params\\\":[],\\\"id\\\":1}\" http://127.0.0.1:8545' | jq -r '.result.enode'" >&2 exit 1 fi # Ensure enode has expected IP ENODE=$(echo "$ENODE" | sed "s/@[0-9.]*:/@${EXPECTED_IP}:/") echo "Enode for .241: ${ENODE:0:80}..." # Replace .241 in static-nodes.json (JSON array) OLD_241='enode://38e138ea5a4b0b244e4484b5c327631b5d3c849dcb188ff3d9ff0a8b6ad7edb738303a1a948888c269aa7555e5ff47d75b7b63dbd579d05580b5442b3fa0ebfc@192.168.11.241:30303' if $DRY_RUN; then echo "[dry-run] Would replace .241 entry in static-nodes.json and permissions-nodes.toml" exit 0 fi # static-nodes.json: replace the line containing @192.168.11.241 jq -r --arg new "$ENODE" ' [.[] | if . | test("@192\\.168\\.11\\.241:") then $new else . end] ' "$STATIC" > "${STATIC}.tmp" && mv "${STATIC}.tmp" "$STATIC" # permissions-nodes.toml: replace the line containing @192.168.11.241 sed -i "s|enode://[a-f0-9]*@192\.168\.11\.241:30303|${ENODE}|g" "$PERMS" echo "Replaced .241 entry in both files. Running verify..." bash "${SCRIPT_DIR}/verify/verify-besu-enodes-and-ips.sh" 2>&1 || true echo "Next: bash scripts/deploy-besu-node-lists-to-all.sh"