update book link and remove obsolete directory (#2097)
* update book link and remove obsolete directory * remove redundant link to book
This commit is contained in:
parent
7731109320
commit
b32c7c0851
|
@ -49,8 +49,6 @@ Nimbus beacon chain is a research implementation of the beacon chain component o
|
||||||
|
|
||||||
You can find the information you need to run a beacon node and operate as a validator in [The Book](https://status-im.github.io/nimbus-eth2/).
|
You can find the information you need to run a beacon node and operate as a validator in [The Book](https://status-im.github.io/nimbus-eth2/).
|
||||||
|
|
||||||
See [this page](https://status-im.github.io/nimbus-eth2/medalla.html) for how to become a validator on Medalla.
|
|
||||||
|
|
||||||
## Related projects
|
## Related projects
|
||||||
|
|
||||||
* [status-im/nimbus-eth1](https://github.com/status-im/nimbus-eth1/): Nimbus for Ethereum 1
|
* [status-im/nimbus-eth1](https://github.com/status-im/nimbus-eth1/): Nimbus for Ethereum 1
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
FROM debian:bullseye-slim
|
|
||||||
|
|
||||||
SHELL ["/bin/bash", "-c"]
|
|
||||||
|
|
||||||
RUN apt-get -qq update \
|
|
||||||
&& apt-get -qq -y install build-essential git &>/dev/null \
|
|
||||||
&& apt-get -qq clean \
|
|
||||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
|
||||||
|
|
||||||
STOPSIGNAL SIGINT
|
|
||||||
|
|
||||||
COPY "entry_point.sh" "/root/"
|
|
||||||
ENTRYPOINT ["/root/entry_point.sh"]
|
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
SHELL := bash # the shell used internally by "make"
|
|
||||||
|
|
||||||
# These default settings can be overriden by exporting env variables
|
|
||||||
|
|
||||||
IMAGE_TAG ?= testnet2
|
|
||||||
IMAGE_NAME ?= statusteam/nimbus_beacon_node:$(IMAGE_TAG)
|
|
||||||
|
|
||||||
CURRENT_BRANCH = $(shell git rev-parse --abbrev-ref HEAD)
|
|
||||||
COMPUTER_SAYS_NO = { echo "I'm sorry, Dave. I'm afraid I can't do that."; exit 1; }
|
|
||||||
|
|
||||||
.PHONY: build push push-last
|
|
||||||
|
|
||||||
build:
|
|
||||||
@ DOCKER_BUILDKIT=1 \
|
|
||||||
docker build \
|
|
||||||
-t $(IMAGE_NAME) \
|
|
||||||
--progress=plain \
|
|
||||||
.
|
|
||||||
|
|
||||||
push: build
|
|
||||||
+@ $(MAKE) push-last
|
|
||||||
|
|
||||||
push-last:
|
|
||||||
@ [[ "$(CURRENT_BRANCH)" != "devel" ]] && $(COMPUTER_SAYS_NO) || true
|
|
||||||
docker push $(IMAGE_NAME)
|
|
||||||
|
|
|
@ -1,79 +0,0 @@
|
||||||
## local testing
|
|
||||||
|
|
||||||
From the "nim-beacon-chain" repo (top-level dir):
|
|
||||||
|
|
||||||
```text
|
|
||||||
make -C docker/shared_testnet NETWORK=witti build
|
|
||||||
mkdir tmp
|
|
||||||
docker run --rm --mount type=bind,source="$(pwd)"/tmp,target=/root/.cache/nimbus --name testnet2 statusteam/nimbus_beacon_node:testnet2 --build
|
|
||||||
ls -l tmp/nim-beacon-chain/build
|
|
||||||
docker run --rm --mount type=bind,source="$(pwd)"/tmp,target=/root/.cache/nimbus --name testnet2 -p 127.0.0.1:8008:8008 -p 9000:9000 statusteam/nimbus_beacon_node:testnet2 --run -- --metrics-address=0.0.0.0
|
|
||||||
|
|
||||||
# from another terminal
|
|
||||||
docker ps
|
|
||||||
docker stop testnet2
|
|
||||||
|
|
||||||
# when you're happy with the Docker image:
|
|
||||||
make -C docker/shared_testnet NETWORK=witti push
|
|
||||||
```
|
|
||||||
|
|
||||||
## setting up remote servers
|
|
||||||
|
|
||||||
From the "infra-nimbus" repo:
|
|
||||||
|
|
||||||
```text
|
|
||||||
git pull
|
|
||||||
make requirements
|
|
||||||
ansible-playbook ansible/nimbus.yml -i ansible/inventory/test -t beacon-node -u YOUR_USER -K -l nimbus.test[6:9]
|
|
||||||
|
|
||||||
# faster way to pull the Docker image and recreate the containers (this also stops any running container)
|
|
||||||
ansible nimbus.test[6:9] -i ansible/inventory/test -u YOUR_USER -o -m shell -a "echo; cd /docker/beacon-node-testnet2; docker-compose --compatibility pull; docker-compose --compatibility up --no-start; echo '---'" | sed 's/\\n/\n/g'
|
|
||||||
|
|
||||||
# build beacon_node in an external volume
|
|
||||||
ansible nimbus.test[6:9] -i ansible/inventory/test -u YOUR_USER -o -m shell -a "echo; cd /docker/beacon-node-testnet2; docker-compose --compatibility run --rm beacon_node --build; echo '---'" | sed 's/\\n/\n/g'
|
|
||||||
```
|
|
||||||
|
|
||||||
### create and copy validator keys
|
|
||||||
|
|
||||||
Back up "build/data/shared\_witti\_0", if you need to. It will be deleted.
|
|
||||||
|
|
||||||
From the nim-beacon-chain repo:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# If you have "ignorespace" or "ignoreboth" in HISTCONTROL in your ".bashrc", you can prevent
|
|
||||||
# the key from being stored in your command history by prefixing it with a space.
|
|
||||||
# See https://www.linuxjournal.com/content/using-bash-history-more-efficiently-histcontrol
|
|
||||||
|
|
||||||
./docker/shared_testnet/validator_keys.sh 0xYOUR_ETH1_PRIVATE_GOERLI_KEY
|
|
||||||
```
|
|
||||||
|
|
||||||
### start the containers
|
|
||||||
|
|
||||||
From the "infra-nimbus" repo:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
ansible nimbus.test[6:9] -i ansible/inventory/test -u YOUR_USER -o -m shell -a "echo; cd /docker/beacon-node-testnet2; docker-compose --compatibility up -d; echo '---'" | sed 's/\\n/\n/g'
|
|
||||||
```
|
|
||||||
|
|
||||||
### restarting the containers
|
|
||||||
|
|
||||||
Periodic rebuilds and restarts are implemented using Cron jobs on the servers:
|
|
||||||
|
|
||||||
```crontab
|
|
||||||
0 0,6,12,18 * * * PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin'; cd /docker/beacon-node-testnet2; docker-compose --compatibility run --rm --name beacon-node-testnet2-build-run beacon_node --build; docker-compose restart -t 60
|
|
||||||
```
|
|
||||||
|
|
||||||
The same, using Ansible (not normally needed):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
ansible nimbus.test[6:9] -i ansible/inventory/test -u YOUR_USER -o -m shell -a "echo; cd /docker/beacon-node-testnet2; docker-compose --compatibility run --rm --name beacon-node-testnet2-build-run beacon_node --build; docker-compose restart -t 60; echo '---'" | sed 's/\\n/\n/g'
|
|
||||||
```
|
|
||||||
|
|
||||||
## Medalla
|
|
||||||
|
|
||||||
```bash
|
|
||||||
make -C docker/shared_testnet IMAGE_TAG=testnet3 push
|
|
||||||
cd ../infra-nimbus
|
|
||||||
ansible nimbus.test[0:5] -i ansible/inventory/test -u YOUR_USER -o -m shell -a "echo; cd /docker/beacon-node-testnet3; docker-compose --compatibility run --rm --name beacon-node-testnet3-build-run beacon_node --build; docker-compose restart -t 60; echo '---'" | sed 's/\\n/\n/g'
|
|
||||||
```
|
|
||||||
|
|
|
@ -1,106 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
|
||||||
|
|
||||||
####################
|
|
||||||
# argument parsing #
|
|
||||||
####################
|
|
||||||
! getopt --test > /dev/null
|
|
||||||
if [ ${PIPESTATUS[0]} != 4 ]; then
|
|
||||||
echo '`getopt --test` failed in this environment.'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
OPTS="h"
|
|
||||||
LONGOPTS="help,network:,build,run"
|
|
||||||
|
|
||||||
# default values
|
|
||||||
NETWORK="pyrmont"
|
|
||||||
BUILD=0
|
|
||||||
RUN=0
|
|
||||||
|
|
||||||
print_help() {
|
|
||||||
cat <<EOF
|
|
||||||
Usage: $(basename $0) <options> -- <nimbus_beacon_node options>
|
|
||||||
|
|
||||||
-h, --help this help message
|
|
||||||
--network default: ${NETWORK}
|
|
||||||
--build build the nimbus_beacon_node binary
|
|
||||||
--run run the nimbus_beacon_node binary
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
! PARSED=$(getopt --options=${OPTS} --longoptions=${LONGOPTS} --name "$0" -- "$@")
|
|
||||||
if [ ${PIPESTATUS[0]} != 0 ]; then
|
|
||||||
# getopt has complained about wrong arguments to stdout
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# read getopt's output this way to handle the quoting right
|
|
||||||
eval set -- "$PARSED"
|
|
||||||
while true; do
|
|
||||||
case "$1" in
|
|
||||||
-h|--help)
|
|
||||||
print_help
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
--network)
|
|
||||||
NETWORK="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--build)
|
|
||||||
BUILD=1
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
--run)
|
|
||||||
RUN=1
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
--)
|
|
||||||
shift
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "argument parsing error"
|
|
||||||
print_help
|
|
||||||
exit 1
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
# docker-compose.yml inserts newlines in our options
|
|
||||||
if [[ "$(echo $1 | tr -d '[:space:]')" == "--" ]]; then
|
|
||||||
shift
|
|
||||||
fi
|
|
||||||
|
|
||||||
EXTRA_ARGS="$@"
|
|
||||||
|
|
||||||
#########
|
|
||||||
# build #
|
|
||||||
#########
|
|
||||||
|
|
||||||
if [[ "$BUILD" == "1" ]]; then
|
|
||||||
# "/root/.cache/nimbus" is the external bind-mounted dir, preserved between runs
|
|
||||||
cd /root/.cache/nimbus
|
|
||||||
[[ -d nim-beacon-chain ]] || git clone https://github.com/status-im/nim-beacon-chain.git
|
|
||||||
cd nim-beacon-chain
|
|
||||||
git config pull.rebase false
|
|
||||||
git checkout -- .
|
|
||||||
git checkout devel
|
|
||||||
git pull
|
|
||||||
# don't use too much RAM
|
|
||||||
make update
|
|
||||||
make LOG_LEVEL="TRACE" NIMFLAGS="-d:insecure -d:testnet_servers_image --parallelBuild:1" nimbus_beacon_node nimbus_signing_process
|
|
||||||
fi
|
|
||||||
|
|
||||||
#######
|
|
||||||
# run #
|
|
||||||
#######
|
|
||||||
|
|
||||||
if [[ "$RUN" == "1" ]]; then
|
|
||||||
cd /root/.cache/nimbus/nim-beacon-chain
|
|
||||||
# make sure Docker's SIGINT reaches the nimbus_beacon_node binary
|
|
||||||
exec build/nimbus_beacon_node --network="${NETWORK}" --data-dir="build/data/shared_${NETWORK}_0" --web3-url="wss://goerli.infura.io/ws/v3/6224f3c792cc443fafb64e70a98f871e" ${EXTRA_ARGS}
|
|
||||||
fi
|
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
cd "$(dirname "${BASH_SOURCE[0]}")/../.."
|
|
||||||
|
|
||||||
GROUP=0
|
|
||||||
TOTAL=$(ls -d ../nimbus-private/medalla_deposits/validators/* | wc -l)
|
|
||||||
HOSTS=(
|
|
||||||
"master-01.aws-eu-central-1a.nimbus.test.statusim.net"
|
|
||||||
"node-01.aws-eu-central-1a.nimbus.test.statusim.net"
|
|
||||||
"node-02.aws-eu-central-1a.nimbus.test.statusim.net"
|
|
||||||
"node-03.aws-eu-central-1a.nimbus.test.statusim.net"
|
|
||||||
"node-04.aws-eu-central-1a.nimbus.test.statusim.net"
|
|
||||||
"node-05.aws-eu-central-1a.nimbus.test.statusim.net"
|
|
||||||
)
|
|
||||||
PER_GROUP=$(( TOTAL / ${#HOSTS[@]} ))
|
|
||||||
for HOST in "${HOSTS[@]}"; do
|
|
||||||
ssh ${HOST} "sudo rm -rf /docker/beacon-node-testnet3/data/nim-beacon-chain/build/data/shared_medalla_0/secrets"
|
|
||||||
ssh ${HOST} "sudo rm -rf /docker/beacon-node-testnet3/data/nim-beacon-chain/build/data/shared_medalla_0/validators"
|
|
||||||
for TARGET in "validators" "secrets"; do
|
|
||||||
DIR_NO=0
|
|
||||||
ls -d ../nimbus-private/medalla_deposits/${TARGET}/* | while read DIR; do
|
|
||||||
if [[ $DIR_NO -ge $((GROUP * PER_GROUP)) && $DIR_NO -lt $(( (GROUP + 1) * PER_GROUP )) ]]; then
|
|
||||||
rsync -a -zz --rsync-path="sudo rsync" "$DIR" ${HOST}:/docker/beacon-node-testnet3/data/nim-beacon-chain/build/data/shared_medalla_0/${TARGET}/
|
|
||||||
elif [[ $(( GROUP + 1 )) == ${#HOSTS[@]} && $DIR_NO -ge $(( (GROUP + 1) * PER_GROUP )) ]]; then
|
|
||||||
# extra validators from the integer division remainder
|
|
||||||
rsync -a -zz --rsync-path="sudo rsync" "$DIR" ${HOST}:/docker/beacon-node-testnet3/data/nim-beacon-chain/build/data/shared_medalla_0/${TARGET}/
|
|
||||||
fi
|
|
||||||
DIR_NO=$((DIR_NO + 1))
|
|
||||||
done
|
|
||||||
done
|
|
||||||
GROUP=$((GROUP + 1))
|
|
||||||
|
|
||||||
ssh ${HOST} "sudo chown -R dockremap:dockremap /docker/beacon-node-testnet3/data/nim-beacon-chain/build/data/shared_medalla_0/secrets"
|
|
||||||
ssh ${HOST} "sudo chown -R dockremap:dockremap /docker/beacon-node-testnet3/data/nim-beacon-chain/build/data/shared_medalla_0/validators"
|
|
||||||
done
|
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# This script creates validator keys and uploads them to remote servers,
|
|
||||||
# assuming your local username is the same as the remote one.
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
cd "$(dirname "${BASH_SOURCE[0]}")/../.."
|
|
||||||
|
|
||||||
[[ -z "$1" ]] && { echo "Usage: $(basename $0) YOUR_ETH1_PRIVATE_GOERLI_KEY"; exit 1; }
|
|
||||||
|
|
||||||
echo -ne "About to delete \"build/data/shared_medalla_0\".\nMake a backup, if you need to, then press Enter. >"
|
|
||||||
read TMP
|
|
||||||
make clean-medalla
|
|
||||||
make nimbus_beacon_node
|
|
||||||
|
|
||||||
for N in $(seq 6 9); do
|
|
||||||
build/nimbus_beacon_node deposits create --deposit-private-key=$1 --dont-send && \
|
|
||||||
ssh node-0${N}.aws-eu-central-1a.nimbus.test.statusim.net "sudo rm -rf /docker/beacon-node-testnet2-1/data/nim-beacon-chain/build/data/shared_medalla_0/secrets" && \
|
|
||||||
ssh node-0${N}.aws-eu-central-1a.nimbus.test.statusim.net "sudo rm -rf /docker/beacon-node-testnet2-1/data/nim-beacon-chain/build/data/shared_medalla_0/validators" && \
|
|
||||||
rsync -a -zz --rsync-path="sudo rsync" build/data/shared_medalla_0/{secrets,validators} node-0${N}.aws-eu-central-1a.nimbus.test.statusim.net:/docker/beacon-node-testnet2-1/data/nim-beacon-chain/build/data/shared_medalla_0/ && \
|
|
||||||
ssh node-0${N}.aws-eu-central-1a.nimbus.test.statusim.net "sudo chown -R dockremap:dockremap /docker/beacon-node-testnet2-1/data/nim-beacon-chain/build/data/shared_medalla_0/secrets" && \
|
|
||||||
ssh node-0${N}.aws-eu-central-1a.nimbus.test.statusim.net "sudo chown -R dockremap:dockremap /docker/beacon-node-testnet2-1/data/nim-beacon-chain/build/data/shared_medalla_0/validators"
|
|
||||||
rm -rf build/data/shared_medalla_0/{secrets,validators}
|
|
||||||
# if we're doing it too fast, we get {"code":-32000,"message":"replacement transaction underpriced"}
|
|
||||||
# or {"code":-32000,"message":"nonce too low"}
|
|
||||||
echo "Sleeping..."
|
|
||||||
sleep 120
|
|
||||||
done
|
|
||||||
|
|
Loading…
Reference in New Issue