stack-orchestrator/app/data/container-build/cerc-fixturenet-eth-lighthouse/run-cl.sh
prathamesh0 3130af1615
[WIP] Handle restarts in fixturenet-eth stack (#324)
* Use mounted volumes for data in geth nodes

* Use mounted volumes for data in lighthouse nodes

* Avoid resetting genesis time in a lighthouse node on restart

* Mount parent datadir for lighthouse nodes

* Trap signals on shutdown and clean up in lighthouse nodes

* Allow stalled sync in lighthouse beacon nodes

* Gracefully shutdown geth nodes

* Add clean up instructions

* Gracefully shutdown lighthouse boot node
2023-04-19 12:22:13 +05:30

81 lines
2.3 KiB
Bash
Executable File

#!/bin/bash
# See https://linuxconfig.org/how-to-propagate-a-signal-to-child-processes-from-a-bash-script
cleanup() {
echo "Signal received, cleaning up..."
kill $(jobs -p)
wait
echo "Done"
}
trap 'cleanup' SIGINT SIGTERM
if [ "true" == "$RUN_BOOTNODE" ]; then
cd /opt/testnet/build/cl
python3 -m http.server 3000 &
cd /opt/testnet/cl
./bootnode.sh 2>&1 | tee /var/log/lighthouse_bootnode.log &
bootnode_pid=$!
wait $bootnode_pid
else
while [ 1 -eq 1 ]; do
echo "Waiting on geth ..."
sleep 5
result=`wget --no-check-certificate --quiet \
-O - \
--method POST \
--timeout=0 \
--header 'Content-Type: application/json' \
--body-data '{ "jsonrpc": "2.0", "id": 1, "method": "eth_blockNumber", "params": [] }' "${ETH1_ENDPOINT:-localhost:8545}" | jq -r '.result'`
if [ ! -z "$result" ] && [ "null" != "$result" ]; then
break
fi
done
cd /opt/testnet/cl
if [ -z "$LIGHTHOUSE_GENESIS_STATE_URL" ]; then
# Check if beacon node data exists to avoid resetting genesis time on a restart
if [ -d /opt/testnet/build/cl/node_"$NODE_NUMBER"/beacon ]; then
echo "Skipping genesis time reset"
else
./reset_genesis_time.sh
fi
else
while [ 1 -eq 1 ]; do
echo "Waiting on Genesis time ..."
sleep 5
result=`wget --no-check-certificate --quiet -O - --timeout=0 $LIGHTHOUSE_GENESIS_STATE_URL | jq -r '.data.genesis_time'`
if [ ! -z "$result" ]; then
./reset_genesis_time.sh $result
break;
fi
done
fi
if [ ! -z "$ENR_URL" ]; then
while [ 1 -eq 1 ]; do
echo "Waiting on ENR for boot node..."
sleep 5
result=`wget --no-check-certificate --quiet -O - --timeout=0 $ENR_URL`
if [ ! -z "$result" ]; then
export ENR="$result"
break;
fi
done
fi
export JWTSECRET="/opt/testnet/build/cl/jwtsecret"
echo -n "$JWT" > $JWTSECRET
./beacon_node.sh 2>&1 | tee /var/log/lighthouse_bn.log &
beacon_pid=$!
./validator_client.sh 2>&1 | tee /var/log/lighthouse_vc.log &
validator_pid=$!
wait $beacon_pid $validator_pid
fi