3130af1615
* 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
81 lines
2.3 KiB
Bash
Executable File
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
|