From 39d2fa93e22e53aeb810a8f5313a957a7caa45ed Mon Sep 17 00:00:00 2001 From: rob Date: Sat, 20 Jun 2026 03:24:37 +0000 Subject: [PATCH] shibarium heimdall init.sh: stop injecting rest_server (crash fix) + idempotent init MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit heimdall crash-looped on 'toml: key rest_server is already defined'. init.sh inserted 'rest_server = true' after [rpc] on EVERY boot (non-idempotent), piling up duplicates; rest_server is not a valid CometBFT config.toml key anyway — REST is enabled by the --rest-server flag in the start command. - Remove the rest_server / rest_server_addr config injection. - Self-heal: strip any previously-injected rest_server lines (so already-corrupted volumes recover on next boot — no volume wipe needed). - Guard heimdalld init to first boot only (config.toml absent) so restarts don't reset node identity or re-parse the existing config. Co-Authored-By: Claude Opus 4.8 (1M context) --- shibarium/scripts/init.sh | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/shibarium/scripts/init.sh b/shibarium/scripts/init.sh index 038233d2..722ddada 100644 --- a/shibarium/scripts/init.sh +++ b/shibarium/scripts/init.sh @@ -44,11 +44,26 @@ ct_log "Starting heimdalld bootstrap for chain ${CHAIN_ID} (home=${CMT_HOME})" # Ensure home dir exists mkdir -p "$CMT_HOME/config" "$CMT_HOME/data" -# Step 1: heimdalld init -ct_log "Running heimdalld init --home $CMT_HOME --chain $CHAIN" -heimdalld init --home "$CMT_HOME" --chain "$CHAIN" +# Self-heal: earlier builds injected `rest_server = true` into config.toml on EVERY +# boot (non-idempotent), accumulating duplicates until heimdalld died on +# "toml: key rest_server is already defined". rest_server is not a valid CometBFT +# config.toml key — REST is enabled by --rest-server in the start command — so strip +# any previously-injected copies before heimdalld reads the config. +if [ -f "$CMT_HOME/config/config.toml" ]; then + sed -i '/^rest_server = true$/d' "$CMT_HOME/config/config.toml" +fi -# Step 2: Fetch genesis if GENESIS_URL is set +# Step 1: heimdalld init — FIRST BOOT ONLY. Re-initializing an existing home resets +# node identity/state and re-parses the existing config; guard on config.toml. +if [ ! -f "$CMT_HOME/config/config.toml" ]; then + ct_log "First boot: heimdalld init --home $CMT_HOME --chain $CHAIN" + heimdalld init --home "$CMT_HOME" --chain "$CHAIN" + sed -i '/^rest_server = true$/d' "$CMT_HOME/config/config.toml" 2>/dev/null || true +else + ct_log "Already initialized — skipping heimdalld init" +fi + +# Step 2: Fetch the shibarium (heimdall-109) genesis if GENESIS_URL is set (idempotent). if [ -n "$GENESIS_URL" ]; then ct_log "Fetching genesis from $GENESIS_URL" ct_fetch "$GENESIS_URL" "$CMT_HOME/config/genesis.json" required @@ -81,10 +96,10 @@ if [ -f "$CMT_HOME/config/config.toml" ]; then sed -i 's|^cors_allowed_origins = .*|cors_allowed_origins = ["*" ]|' "$CMT_HOME/config/config.toml" sed -i 's|^cors_allowed_methods = .*|cors_allowed_methods = ["HEAD", "GET", "POST", "OPTIONS"]|' "$CMT_HOME/config/config.toml" sed -i 's|^cors_allowed_headers = .*|cors_allowed_headers = ["Origin", "Accept", "Content-Type", "X-Requested-With", "X-Server-Time"]|' "$CMT_HOME/config/config.toml" - # Enable REST server in config (though --rest-server flag takes precedence) - sed -i 's|^\[rpc\]|[rpc]\nrest_server = true|' "$CMT_HOME/config/config.toml" - # Set REST server address - sed -i 's|^rest_server_addr = .*|rest_server_addr = "0.0.0.0:1317"|' "$CMT_HOME/config/config.toml" + # NOTE: do NOT inject `rest_server` / `rest_server_addr` into config.toml. REST/LCD + # is enabled by the --rest-server / --rest-server.addr flags in the start command + # below; injecting the key duplicates one heimdalld already defines and crashes it + # with "toml: key rest_server is already defined". fi # Step 9: Seed priv_validator_state if present in config