Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
- ADD_CHAIN138_TO_LEDGER_LIVE: Ledger form done; public code review repo bis-innovations/LedgerLive; init/push commands - CONTRACT_DEPLOYMENT_RUNBOOK: Chain 138 gas price 1 gwei, 36-addr check, TransactionMirror workaround - CONTRACT_*: AddressMapper, MirrorManager deployed 2026-02-12; 36-address on-chain check - NEXT_STEPS_FOR_YOU: Ledger done; steps completable now (no LAN); run-completable-tasks-from-anywhere - MASTER_INDEX, OPERATOR_OPTIONAL, SMART_CONTRACTS_INVENTORY_SIMPLE: updates - LEDGER_BLOCKCHAIN_INTEGRATION_COMPLETE: bis-innovations/LedgerLive reference Co-authored-by: Cursor <cursoragent@cursor.com>
159 lines
5.5 KiB
Bash
Executable File
159 lines
5.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
|
|
# Deploy static-nodes.json and permissioned-nodes.json to ALL Besu nodes
|
|
# Ensures both files are identical on all nodes
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m'
|
|
|
|
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
|
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
|
|
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
|
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
|
log_section() { echo -e "\n${CYAN}=== $1 ===${NC}"; }
|
|
|
|
# Source files
|
|
STATIC_NODES_SOURCE="$PROJECT_ROOT/smom-dbis-138/config/static-nodes.json"
|
|
PERMISSIONED_NODES_SOURCE="$PROJECT_ROOT/smom-dbis-138-proxmox/config/permissioned-nodes.json"
|
|
|
|
# Verify source files exist
|
|
if [ ! -f "$STATIC_NODES_SOURCE" ]; then
|
|
log_error "Source static-nodes.json not found: $STATIC_NODES_SOURCE"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f "$PERMISSIONED_NODES_SOURCE" ]; then
|
|
log_error "Source permissioned-nodes.json not found: $PERMISSIONED_NODES_SOURCE"
|
|
exit 1
|
|
fi
|
|
|
|
# Verify files are identical
|
|
if ! diff -q "$STATIC_NODES_SOURCE" "$PERMISSIONED_NODES_SOURCE" > /dev/null 2>&1; then
|
|
log_warn "static-nodes.json and permissioned-nodes.json differ!"
|
|
log_info "Syncing permissioned-nodes.json to match static-nodes.json..."
|
|
cp "$STATIC_NODES_SOURCE" "$PERMISSIONED_NODES_SOURCE"
|
|
log_success "Files synced"
|
|
fi
|
|
|
|
# All Besu nodes (VMID -> IP)
|
|
declare -A ALL_NODES=(
|
|
# Validators
|
|
["1000"]="192.168.11.100"
|
|
["1001"]="192.168.11.101"
|
|
["1002"]="192.168.11.102"
|
|
["1003"]="192.168.11.103"
|
|
["1004"]="192.168.11.104"
|
|
# Sentries
|
|
["1500"]="192.168.11.150"
|
|
["1501"]="192.168.11.151"
|
|
["1502"]="192.168.11.152"
|
|
["1503"]="192.168.11.153"
|
|
# RPC Nodes
|
|
["2101"]="192.168.11.211"
|
|
["2400"]="192.168.11.240"
|
|
["2401"]="192.168.11.241"
|
|
["2402"]="192.168.11.242"
|
|
["2500"]="192.168.11.250"
|
|
["2501"]="192.168.11.251"
|
|
["2502"]="192.168.11.252"
|
|
["2505"]="192.168.11.201"
|
|
["2506"]="192.168.11.202"
|
|
["2507"]="192.168.11.203"
|
|
["2508"]="192.168.11.204"
|
|
)
|
|
|
|
PROXMOX_HOST="${PROXMOX_HOST:-192.168.11.10}"
|
|
|
|
log_section "Deploying Node Lists to All Besu Nodes"
|
|
|
|
log_info "Source files:"
|
|
log_info " static-nodes.json: $STATIC_NODES_SOURCE"
|
|
log_info " permissioned-nodes.json: $PERMISSIONED_NODES_SOURCE"
|
|
log_info ""
|
|
|
|
# Function to deploy to a node
|
|
deploy_to_node() {
|
|
local vmid=$1
|
|
local ip=$2
|
|
|
|
log_info "Deploying to VMID $vmid ($ip)..."
|
|
|
|
# Check if container exists and is running
|
|
local status=$(ssh root@"$PROXMOX_HOST" "pct status $vmid 2>/dev/null" | awk '{print $2}' || echo "unknown")
|
|
|
|
if [ "$status" != "running" ]; then
|
|
log_warn " ⚠ VMID $vmid is not running (status: $status) - skipping"
|
|
return 1
|
|
fi
|
|
|
|
# Create directories if they don't exist
|
|
ssh root@"$PROXMOX_HOST" "pct exec $vmid -- mkdir -p /var/lib/besu /var/lib/besu/permissions" 2>/dev/null || true
|
|
|
|
# Deploy static-nodes.json
|
|
log_info " Copying static-nodes.json..."
|
|
scp "$STATIC_NODES_SOURCE" root@"$PROXMOX_HOST":/tmp/static-nodes.json.$vmid >/dev/null 2>&1
|
|
ssh root@"$PROXMOX_HOST" "pct push $vmid /tmp/static-nodes.json.$vmid /var/lib/besu/static-nodes.json" >/dev/null 2>&1
|
|
ssh root@"$PROXMOX_HOST" "rm /tmp/static-nodes.json.$vmid" 2>/dev/null || true
|
|
|
|
# Deploy permissioned-nodes.json
|
|
log_info " Copying permissioned-nodes.json..."
|
|
scp "$PERMISSIONED_NODES_SOURCE" root@"$PROXMOX_HOST":/tmp/permissioned-nodes.json.$vmid >/dev/null 2>&1
|
|
ssh root@"$PROXMOX_HOST" "pct push $vmid /tmp/permissioned-nodes.json.$vmid /var/lib/besu/permissions/permissioned-nodes.json" >/dev/null 2>&1
|
|
ssh root@"$PROXMOX_HOST" "rm /tmp/permissioned-nodes.json.$vmid" 2>/dev/null || true
|
|
|
|
# Set permissions
|
|
ssh root@"$PROXMOX_HOST" "pct exec $vmid -- chown besu:besu /var/lib/besu/static-nodes.json /var/lib/besu/permissions/permissioned-nodes.json 2>/dev/null || chown root:root /var/lib/besu/static-nodes.json /var/lib/besu/permissions/permissioned-nodes.json" 2>/dev/null || true
|
|
ssh root@"$PROXMOX_HOST" "pct exec $vmid -- chmod 644 /var/lib/besu/static-nodes.json /var/lib/besu/permissions/permissioned-nodes.json" 2>/dev/null || true
|
|
|
|
# Verify files
|
|
local static_check=$(ssh root@"$PROXMOX_HOST" "pct exec $vmid -- test -f /var/lib/besu/static-nodes.json && echo 'ok' || echo 'missing'" 2>/dev/null || echo "error")
|
|
local perm_check=$(ssh root@"$PROXMOX_HOST" "pct exec $vmid -- test -f /var/lib/besu/permissions/permissioned-nodes.json && echo 'ok' || echo 'missing'" 2>/dev/null || echo "error")
|
|
|
|
if [ "$static_check" = "ok" ] && [ "$perm_check" = "ok" ]; then
|
|
log_success " ✓ Files deployed successfully"
|
|
return 0
|
|
else
|
|
log_error " ✗ Deployment failed (static: $static_check, perm: $perm_check)"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Deploy to all nodes
|
|
SUCCESS_COUNT=0
|
|
FAILED_COUNT=0
|
|
|
|
for vmid in "${!ALL_NODES[@]}"; do
|
|
if deploy_to_node "$vmid" "${ALL_NODES[$vmid]}"; then
|
|
((SUCCESS_COUNT++))
|
|
else
|
|
((FAILED_COUNT++))
|
|
fi
|
|
echo ""
|
|
done
|
|
|
|
# Summary
|
|
log_section "Deployment Summary"
|
|
|
|
log_info "Successfully deployed: $SUCCESS_COUNT nodes"
|
|
if [ $FAILED_COUNT -gt 0 ]; then
|
|
log_warn "Failed/Skipped: $FAILED_COUNT nodes"
|
|
fi
|
|
|
|
log_info ""
|
|
log_info "Next steps:"
|
|
log_info "1. Verify p2p-host configuration on all nodes"
|
|
log_info "2. Restart Besu services to apply changes"
|
|
log_info "3. Verify peer connections after restart"
|