Files
proxmox/scripts/fix-rpc-2500.sh
defiQUG cb47cce074 Complete markdown files cleanup and organization
- Organized 252 files across project
- Root directory: 187 → 2 files (98.9% reduction)
- Moved configuration guides to docs/04-configuration/
- Moved troubleshooting guides to docs/09-troubleshooting/
- Moved quick start guides to docs/01-getting-started/
- Moved reports to reports/ directory
- Archived temporary files
- Generated comprehensive reports and documentation
- Created maintenance scripts and guides

All files organized according to established standards.
2026-01-06 01:46:25 -08:00

291 lines
9.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# Fix RPC-01 (VMID 2500) configuration issues
# Usage: ./fix-rpc-2500.sh
set -e
VMID=2500
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
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"; }
# Check if running on Proxmox host
if ! command -v pct &>/dev/null; then
log_error "This script must be run on Proxmox host (pct command not found)"
exit 1
fi
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Fixing RPC-01 (VMID $VMID)"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
# 1. Check container status
log_info "1. Checking container status..."
if ! pct status $VMID &>/dev/null | grep -q "running"; then
log_warn " Container is not running. Starting..."
pct start $VMID
sleep 5
fi
# 2. Stop service
log_info ""
log_info "2. Stopping Besu RPC service..."
pct exec $VMID -- systemctl stop besu-rpc.service 2>/dev/null || true
# 3. Check which config file the service expects
log_info ""
log_info "3. Checking service configuration..."
SERVICE_FILE="/etc/systemd/system/besu-rpc.service"
CONFIG_PATH=$(pct exec $VMID -- grep "config-file" "$SERVICE_FILE" 2>/dev/null | grep -oP 'config-file=\K[^\s]+' || echo "")
log_info " Service expects config: $CONFIG_PATH"
# Determine correct config file name
# VMID 2500 uses config-rpc-core.toml (Core RPC - local/permissioned nodes only)
if [ "$VMID" = "2500" ]; then
CONFIG_FILE="/etc/besu/config-rpc-core.toml"
elif echo "$CONFIG_PATH" | grep -q "config-rpc-public"; then
CONFIG_FILE="/etc/besu/config-rpc-public.toml"
elif echo "$CONFIG_PATH" | grep -q "config-rpc-core"; then
CONFIG_FILE="/etc/besu/config-rpc-core.toml"
elif echo "$CONFIG_PATH" | grep -q "config-rpc-perm"; then
CONFIG_FILE="/etc/besu/config-rpc-perm.toml"
else
CONFIG_FILE="/etc/besu/config-rpc.toml"
fi
log_info " Using config file: $CONFIG_FILE"
# 4. Create config file if missing
log_info ""
log_info "4. Ensuring config file exists..."
if ! pct exec $VMID -- test -f "$CONFIG_FILE" 2>/dev/null; then
log_warn " Config file missing. Creating from template..."
# Try to find template
TEMPLATE_FILE="$CONFIG_FILE.template"
if pct exec $VMID -- test -f "$TEMPLATE_FILE" 2>/dev/null; then
pct exec $VMID -- cp "$TEMPLATE_FILE" "$CONFIG_FILE"
log_success " Created from template"
else
log_error " Template not found. Creating minimal config..."
# Create minimal valid config
pct exec $VMID -- bash -c "cat > $CONFIG_FILE <<'EOF'
data-path=\"/data/besu\"
genesis-file=\"/genesis/genesis.json\"
network-id=138
p2p-host=\"0.0.0.0\"
p2p-port=30303
miner-enabled=false
sync-mode=\"FULL\"
fast-sync-min-peers=2
# RPC Configuration (VMID 2500 - Core RPC with full APIs)
rpc-http-enabled=true
rpc-http-host=\"0.0.0.0\"
rpc-http-port=8545
rpc-http-api=[\"ETH\",\"NET\",\"WEB3\",\"ADMIN\",\"DEBUG\",\"TXPOOL\"]
rpc-http-cors-origins=[\"*\"]
rpc-ws-enabled=true
rpc-ws-host=\"0.0.0.0\"
rpc-ws-port=8546
rpc-ws-api=[\"ETH\",\"NET\",\"WEB3\",\"ADMIN\",\"DEBUG\",\"TXPOOL\"]
rpc-ws-origins=[\"*\"]
# Metrics
metrics-enabled=true
metrics-port=9545
metrics-host=\"0.0.0.0\"
metrics-push-enabled=false
logging=\"INFO\"
permissions-nodes-config-file-enabled=true
permissions-nodes-config-file=\"/permissions/permissions-nodes.toml\"
permissions-accounts-config-file-enabled=false
tx-pool-max-size=8192
tx-pool-price-bump=10
tx-pool-retention-hours=6
static-nodes-file=\"/genesis/static-nodes.json\"
# Discovery disabled for VMID 2500 (Core RPC) - only local/permissioned nodes
discovery-enabled=false
privacy-enabled=false
rpc-tx-feecap=\"0x0\"
max-peers=25
EOF"
log_success " Created minimal config"
fi
# Set ownership
pct exec $VMID -- chown besu:besu "$CONFIG_FILE"
else
log_success " Config file exists"
fi
# 5. Remove deprecated options
log_info ""
log_info "5. Removing deprecated configuration options..."
DEPRECATED_OPTS=(
"log-destination"
"max-remote-initiated-connections"
"trie-logs-enabled"
"accounts-enabled"
"database-path"
"rpc-http-host-allowlist"
)
for opt in "${DEPRECATED_OPTS[@]}"; do
if pct exec $VMID -- grep -q "^$opt" "$CONFIG_FILE" 2>/dev/null; then
log_info " Removing: $opt"
pct exec $VMID -- sed -i "/^$opt/d" "$CONFIG_FILE"
fi
done
log_success " Deprecated options removed"
# 6. Ensure RPC is enabled
log_info ""
log_info "6. Verifying RPC is enabled..."
if ! pct exec $VMID -- grep -q "rpc-http-enabled=true" "$CONFIG_FILE" 2>/dev/null; then
log_warn " RPC HTTP not enabled. Enabling..."
pct exec $VMID -- sed -i 's/rpc-http-enabled=false/rpc-http-enabled=true/' "$CONFIG_FILE" 2>/dev/null || \
pct exec $VMID -- bash -c "echo 'rpc-http-enabled=true' >> $CONFIG_FILE"
fi
if ! pct exec $VMID -- grep -q "rpc-ws-enabled=true" "$CONFIG_FILE" 2>/dev/null; then
log_warn " RPC WS not enabled. Enabling..."
pct exec $VMID -- sed -i 's/rpc-ws-enabled=false/rpc-ws-enabled=true/' "$CONFIG_FILE" 2>/dev/null || \
pct exec $VMID -- bash -c "echo 'rpc-ws-enabled=true' >> $CONFIG_FILE"
fi
log_success " RPC endpoints verified"
# 6b. For VMID 2500 (Core RPC), ensure discovery is disabled (local/permissioned nodes only)
if [ "$VMID" = "2500" ]; then
log_info ""
log_info "6b. Ensuring discovery is disabled (VMID 2500 - local/permissioned nodes only)..."
if pct exec $VMID -- grep -q "discovery-enabled=true" "$CONFIG_FILE" 2>/dev/null; then
log_warn " Discovery is enabled. Disabling for strict local/permissioned node control..."
pct exec $VMID -- sed -i 's/^discovery-enabled=true/discovery-enabled=false/' "$CONFIG_FILE"
log_success " Discovery disabled"
elif ! pct exec $VMID -- grep -q "discovery-enabled" "$CONFIG_FILE" 2>/dev/null; then
log_warn " Discovery setting not found. Adding discovery-enabled=false..."
pct exec $VMID -- sed -i '/^static-nodes-file/a discovery-enabled=false' "$CONFIG_FILE"
log_success " Discovery disabled (added)"
else
log_success " Discovery is already disabled"
fi
fi
# 7. Update service file if needed
log_info ""
log_info "7. Verifying service file configuration..."
if ! pct exec $VMID -- grep -q "config-file=$CONFIG_FILE" "$SERVICE_FILE" 2>/dev/null; then
log_warn " Service file references wrong config. Updating..."
pct exec $VMID -- sed -i "s|--config-file=.*|--config-file=$CONFIG_FILE|" "$SERVICE_FILE"
pct exec $VMID -- systemctl daemon-reload
log_success " Service file updated"
else
log_success " Service file is correct"
fi
# 8. Verify required files exist
log_info ""
log_info "8. Checking required files..."
REQUIRED_FILES=(
"/genesis/genesis.json"
"/genesis/static-nodes.json"
"/permissions/permissions-nodes.toml"
)
MISSING_FILES=()
for file in "${REQUIRED_FILES[@]}"; do
if pct exec $VMID -- test -f "$file" 2>/dev/null; then
log_success " Found: $file"
else
log_error " Missing: $file"
MISSING_FILES+=("$file")
fi
done
if [ ${#MISSING_FILES[@]} -gt 0 ]; then
log_warn " Some required files are missing. Service may not start properly."
log_info " Missing files need to be copied from source project."
fi
# 9. Start service
log_info ""
log_info "9. Starting Besu RPC service..."
pct exec $VMID -- systemctl start besu-rpc.service
sleep 5
# 10. Check service status
log_info ""
log_info "10. Checking service status..."
SERVICE_STATUS=$(pct exec $VMID -- systemctl is-active besu-rpc.service 2>&1 || echo "unknown")
if [ "$SERVICE_STATUS" = "active" ]; then
log_success " Service is active!"
else
log_error " Service is not active. Status: $SERVICE_STATUS"
log_info " Recent logs:"
pct exec $VMID -- journalctl -u besu-rpc.service -n 20 --no-pager 2>&1 | tail -20
fi
# 11. Test RPC endpoint
log_info ""
log_info "11. Testing RPC endpoint..."
sleep 3
RPC_TEST=$(pct exec $VMID -- timeout 5 curl -s -X POST http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' 2>&1 || echo "FAILED")
if echo "$RPC_TEST" | grep -q "result"; then
BLOCK_NUM=$(echo "$RPC_TEST" | grep -oP '"result":"\K[^"]+' | head -1)
log_success " RPC endpoint is responding!"
log_info " Current block: $BLOCK_NUM"
else
log_warn " RPC endpoint not responding yet (may need more time to start)"
log_info " Response: $RPC_TEST"
fi
# Summary
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Fix Summary"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
if [ "$SERVICE_STATUS" = "active" ]; then
log_success "✅ RPC-01 (VMID $VMID) is now running!"
log_info ""
log_info "Next steps:"
log_info "1. Monitor logs: pct exec $VMID -- journalctl -u besu-rpc.service -f"
log_info "2. Test RPC: curl -X POST http://192.168.11.250:8545 -H 'Content-Type: application/json' -d '{\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"params\":[],\"id\":1}'"
else
log_error "❌ Service is still not active"
log_info ""
log_info "Troubleshooting:"
log_info "1. Check logs: pct exec $VMID -- journalctl -u besu-rpc.service -n 50"
log_info "2. Verify config: pct exec $VMID -- cat $CONFIG_FILE"
log_info "3. Check for missing files (genesis.json, static-nodes.json, etc.)"
fi
echo ""