Step 4: Installing execution client
🛸 Install execution client (ETH1 node)
Pick an execution client
Your choice of either Geth, Besu, Nethermind, or Erigon.
Reminder: Ensure you are logged in and execute all steps in this guide as non-root user, ethereum ,created during Step 2: Configuring Node.
Review the latest release notes at https://github.com/ethereum/go-ethereum/releases
🧬Install from the repository
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update -y
sudo apt-get install ethereum -y⚙️ Setup and configure systemd
Run the following to create a unit file to define your eth1.service configuration.
Simply copy/paste the following.
cat > $HOME/eth1.service << EOF
[Unit]
Description=Geth Execution Layer Client service
Wants=network-online.target
After=network-online.target
Documentation=https://www.coincashew.com
[Service]
Type=simple
User=ethereum
Restart=on-failure
RestartSec=3
TimeoutSec=690
ExecStart=/usr/bin/geth \
--goerli \
--metrics \
--pprof \
--authrpc.jwtsecret=/secrets/jwtsecret
[Install]
WantedBy=multi-user.target
EOFMove the unit file to /etc/systemd/system and give it permissions.
sudo mv $HOME/eth1.service /etc/systemd/system/eth1.servicesudo chmod 644 /etc/systemd/system/eth1.serviceRun the following to enable auto-start at boot time.
sudo systemctl daemon-reload
sudo systemctl enable eth1⛓️Start geth
sudo systemctl start eth1🧬Install java dependency
sudo apt update
sudo apt install openjdk-17-jdk -y libjemalloc-dev🌜Download and unzip Besu
Review the latest release at https://github.com/hyperledger/besu/releases
Run the following to automatically download the latest linux release, un-tar and cleanup.
BINARIES_URL="$(curl -s https://api.github.com/repos/hyperledger/besu/releases/latest | grep -o 'https://hyperledger.jfrog.io/hyperledger/besu-binaries/besu/.*tar.gz' | sed -e 's/.*\\n\(https.*.tar.gz$\)/\1/')"
echo Downloading URL: $BINARIES_URL
cd $HOME
wget -O besu.tar.gz "$BINARIES_URL"
tar -xzvf besu.tar.gz -C $HOME
rm besu.tar.gz && mv besu-* besu⚙️ Setup and configure systemd
cat > $HOME/eth1.service << EOF
[Unit]
Description=Besu Execution Layer Client service
Wants=network-online.target
After=network-online.target
Documentation=https://www.coincashew.com
[Service]
Type=simple
User=ethereum
Restart=on-failure
RestartSec=3
KillSignal=SIGINT
TimeoutStopSec=690
Environment="JAVA_OPTS=-Xmx5g"
ExecStart=/home/ethereum/besu/bin/besu \
--network=goerli \
--metrics-enabled=true \
--sync-mode=X_CHECKPOINT \
--data-storage-format=BONSAI \
--data-path="/home/ethereum/.besu" \
--engine-jwt-secret=/secrets/jwtsecret
[Install]
WantedBy=multi-user.target
EOFMove the unit file to /etc/systemd/system and give it permissions.
sudo mv $HOME/eth1.service /etc/systemd/system/eth1.servicesudo chmod 644 /etc/systemd/system/eth1.serviceRun the following to enable auto-start at boot time.
sudo systemctl daemon-reload
sudo systemctl enable eth1⛓️ Start besu
sudo systemctl start eth1⚙️ Install dependencies
sudo apt-get update
sudo apt-get install curl libsnappy-dev libc6-dev jq libc6 unzip -y🌜Download and unzip Nethermind
Review the latest release at https://github.com/NethermindEth/nethermind/releases
Run the following to automatically download the latest linux release, un-zip and cleanup.
cd $HOME
curl -s https://api.github.com/repos/NethermindEth/nethermind/releases/latest | jq -r ".assets[] | select(.name) | .browser_download_url" | grep linux-x64 | xargs wget -q --show-progress
unzip -o nethermind*.zip -d $HOME/nethermind
rm nethermind*linux*.zip⚙️ Setup and configure systemd
Run the following to create a unit file to define your eth1.service configuration.
Simply copy/paste the following.
cat > $HOME/eth1.service << EOF
[Unit]
Description=Nethermind Execution Layer Client service
Wants=network-online.target
After=network-online.target
Documentation=https://www.coincashew.com
[Service]
Type=simple
User=ethereum
Restart=on-failure
RestartSec=3
KillSignal=SIGINT
TimeoutStopSec=690
WorkingDirectory=$HOME/nethermind
ExecStart=/home/ethereum/nethermind/Nethermind.Runner \
--config goerli \
--baseDbPath /home/ethereum/.nethermind_goerli \
--Metrics.Enabled true \
--Metrics.ExposePort 6060 \
--Metrics.IntervalSeconds 10000 \
--Sync.SnapSync true \
--Sync.AncientBodiesBarrier 4367322 \
--Sync.AncientReceiptsBarrier 4367322 \
--JsonRpc.JwtSecretFile /secrets/jwtsecret
[Install]
WantedBy=multi-user.target
EOFMove the unit file to /etc/systemd/system and give it permissions.
sudo mv $HOME/eth1.service /etc/systemd/system/eth1.servicesudo chmod 644 /etc/systemd/system/eth1.serviceRun the following to enable auto-start at boot time.
sudo systemctl daemon-reload
sudo systemctl enable eth1⛓️ Start Nethermind
sudo systemctl start eth1Erigon requires at least 16GB RAM. 32GB is highly recommended.
⚙️ Install Go dependencies
wget -O go.tar.gz https://go.dev/dl/go1.19.linux-amd64.tar.gzsudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go.tar.gzecho export PATH=$PATH:/usr/local/go/bin>> $HOME/.bashrc
source $HOME/.bashrcVerify Go is properly installed and cleanup files.
go version
rm go.tar.gz🤖 Build and install Erigon
Install build dependencies.
sudo apt-get update
sudo apt install build-essential gitReview the latest release at https://github.com/ledgerwatch/erigon/releases
cd $HOME
git clone --branch stable --recurse-submodules https://github.com/ledgerwatch/erigon.git
cd erigon
make erigonVerify the build completed successfully by displaying Erigon's version.
./build/bin/erigon --version Example of version:
erigon version 2.47.0-stable-5536d645Make data directory and update directory ownership.
sudo mkdir -p /var/lib/erigon
sudo chown ethereum:ethereum /var/lib/erigon ⚙️ Setup and configure systemd
Run the following to create a unit file to define your eth1.service configuration.
Simply copy/paste the following.
cat > $HOME/eth1.service << EOF
[Unit]
Description=Erigon Execution Layer Client service
Wants=network-online.target
After=network-online.target
Documentation=https://www.coincashew.com
[Service]
Type=simple
User=ethereum
Restart=on-failure
RestartSec=3
KillSignal=SIGINT
TimeoutStopSec=690
ExecStart=/home/ethereum/erigon/build/bin/erigon \
--datadir /var/lib/erigon \
--chain goerli \
--metrics \
--pprof \
--prune htc \
--prune.r.before=4367322 \
--authrpc.jwtsecret=/secrets/jwtsecret
[Install]
WantedBy=multi-user.target
EOFMove the unit files to /etc/systemd/system and give it permissions.
sudo mv $HOME/eth1.service /etc/systemd/system/eth1.servicesudo chmod 644 /etc/systemd/system/eth1.serviceRun the following to enable auto-start at boot time.
sudo systemctl daemon-reload
sudo systemctl enable eth1⛓️Start Erigon
sudo systemctl start eth1🛠️ Helpful execution client commands
journalctl -fu eth1sudo systemctl stop eth1sudo systemctl start eth1sudo systemctl status eth1Now that your execution client is configured and started, proceed to the next step on setting up your consensus client.
If you're checking the logs and see any warnings or errors, please be patient as these will normally resolve once both your execution and consensus clients are fully synced to the Ethereum network.