268 lines
8.4 KiB
Bash
Executable File
268 lines
8.4 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
|
|
if 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"
|
|
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
|
|
rpc-http-enabled=true
|
|
rpc-http-host=\"0.0.0.0\"
|
|
rpc-http-port=8545
|
|
rpc-http-api=[\"ETH\",\"NET\",\"WEB3\"]
|
|
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\"]
|
|
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-enabled=true
|
|
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"
|
|
|
|
# 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 ""
|
|
|