Files
proxmox/docs/06-besu/INSTALL_BESU_1504_2301_RUNBOOK.md
defiQUG fbda1b4beb
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
docs: Ledger Live integration, contract deploy learnings, NEXT_STEPS updates
- 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>
2026-02-12 15:46:57 -08:00

5.4 KiB

Install Besu in CT 1504 (Sentry) and 2301 (RPC) — Runbook

Context: Containers 1504 (ml110) and 2301 (ml110) are running but have no Besu installed (no /opt/besu, no /etc/besu). This runbook installs Besu and configs so the nodes can join Chain 138.

Host: ml110 (192.168.11.10). Run from project root or from the host.


Prerequisites

  • SSH to ml110: ssh root@192.168.11.10
  • Containers 1504 and 2301 are running (pct status 1504 / pct status 2301)
  • Chain 138 configs available (genesis, config-sentry.toml, config-rpc-private.toml or config-rpc.toml) — from repo or from a working node (e.g. 1500, 2101)

Option A: Run install scripts inside each CT (from host)

1. Push install script and run in 1504 (Sentry)

From project root (so the host can reach the script via SSH + stdin or copy):

# Copy install script to host, then into container
scp smom-dbis-138-proxmox/install/besu-sentry-install.sh root@192.168.11.10:/tmp/
ssh root@192.168.11.10 "pct push 1504 /tmp/besu-sentry-install.sh /tmp/besu-sentry-install.sh && pct exec 1504 -- bash /tmp/besu-sentry-install.sh"

The script installs Java, Besu 23.10.0, creates besu user, /opt/besu, /etc/besu, and a template config-sentry.toml.template. It does not copy the real Chain 138 config.

2. Push Chain 138 config and genesis into 1504

You need a real config-sentry.toml and genesis.json in the container. Either copy from working sentry 1500 (on r630-01), or from repo templates (adjust IPs/bootnodes as needed).

From r630-01 (where 1500 has config):

# On r630-01: export config and genesis from 1500
ssh root@192.168.11.11 "pct exec 1500 -- cat /etc/besu/config-sentry.toml" > /tmp/config-sentry-1504.toml
ssh root@192.168.11.11 "pct exec 1500 -- cat /etc/besu/genesis.json" > /tmp/genesis.json

# Push to ml110 and into 1504
scp /tmp/config-sentry-1504.toml /tmp/genesis.json root@192.168.11.10:/tmp/
ssh root@192.168.11.10 "pct push 1504 /tmp/config-sentry-1504.toml /etc/besu/config-sentry.toml"
ssh root@192.168.11.10 "pct push 1504 /tmp/genesis.json /etc/besu/genesis.json"
ssh root@192.168.11.10 "pct exec 1504 -- chown besu:besu /etc/besu/config-sentry.toml /etc/besu/genesis.json"

If you use repo templates instead, push smom-dbis-138-proxmox/templates/besu-configs/config-sentry.toml and the chain genesis.json (e.g. from smom-dbis-138-proxmox/config/genesis.json) and adjust any node-specific settings (data-path, p2p-host, etc.).

3. Enable and start sentry in 1504

ssh root@192.168.11.10 "pct exec 1504 -- systemctl enable besu-sentry.service && pct exec 1504 -- systemctl start besu-sentry.service"
ssh root@192.168.11.10 "pct exec 1504 -- systemctl status besu-sentry.service"

4. Install Besu in 2301 (RPC)

scp smom-dbis-138-proxmox/install/besu-rpc-install.sh root@192.168.11.10:/tmp/
ssh root@192.168.11.10 "pct push 2301 /tmp/besu-rpc-install.sh /tmp/besu-rpc-install.sh && pct exec 2301 -- bash /tmp/besu-rpc-install.sh"

The RPC install creates config-rpc.toml.template. For 2301 (private RPC) you need a real config — e.g. config-rpc-private.toml or a copy of the RPC config from 2101/2400.

Copy config from working RPC (e.g. 2400 on ml110):

ssh root@192.168.11.10 "pct exec 2400 -- cat /etc/besu/config-rpc.toml" > /tmp/config-rpc-2301.toml
# Edit if 2301 uses config-rpc-private.toml (different APIs/permissions)
scp /tmp/config-rpc-2301.toml root@192.168.11.10:/tmp/
ssh root@192.168.11.10 "pct push 2301 /tmp/config-rpc-2301.toml /etc/besu/config-rpc-private.toml"
ssh root@192.168.11.10 "pct exec 2301 -- chown besu:besu /etc/besu/config-rpc-private.toml"

If the service file points to config-rpc.toml, either rename or symlink, or edit the unit:

ssh root@192.168.11.10 "pct exec 2301 -- sed -i 's|config-rpc.toml|config-rpc-private.toml|g' /etc/systemd/system/besu-rpc.service"
ssh root@192.168.11.10 "pct exec 2301 -- systemctl daemon-reload"

Push genesis into 2301 (same as 1504). Then:

ssh root@192.168.11.10 "pct exec 2301 -- systemctl enable besu-rpc.service && pct exec 2301 -- systemctl start besu-rpc.service"
ssh root@192.168.11.10 "pct exec 2301 -- systemctl status besu-rpc.service"

Option B: Use fix script after install (units only)

If you only create the systemd units (e.g. Besu already installed but unit missing), run on ml110:

# From project root
ssh root@192.168.11.10 'bash -s' < scripts/fix-besu-services-on-host.sh

That script only creates besu-sentry.service / besu-rpc.service when /opt/besu and the relevant config already exist; it does not install Besu.


Verification

# Sentry 1504
ssh root@192.168.11.10 "pct exec 1504 -- systemctl is-active besu-sentry"

# RPC 2301
ssh root@192.168.11.10 "pct exec 2301 -- systemctl is-active besu-rpc"
curl -s -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' http://192.168.11.232:8545

Or from project root: bash scripts/review-sentry-and-rpc-nodes.sh.


References