Ethereum Merge Guide - Lighthouse/Geth
Introduction
This guide is intended for anyone currently running mainnet for validators using Lighthouse/Geth. These updates are current as of Sep 4, 2022, installing Lighthouse-V3.1.0 and Geth -V.1.10.25.
After completing these updates, your validator will be ready for the Bellatrix hard fork ~Sep 6 and the mainnet merge ~Sep 15!

Summary
Update Geth installation, username, and directory
Create JWT Token
Geth
Update Geth
Add
--authrpc.jwtsecret
to geth.service file
Lighthouse
Update Lighthouse
Add
--execution-jwt
and--execution-endpoint
to lighthousebeacon.service fileAdd
--suggested-fee-recipient
to lighthousevalidator.service
New Guides and Improvements
There have been a few changes to Somer Esat's Guides over time, and we need to make a few updates to keep in line with best practice. The changes include:
1) Username changed from Goeth to Geth
2) Rename Geth directory from /var/lib/goethereum
to /var/lib/geth
3) Remove Personal Package Archive (PPA) installation and switch to using curl
Geth Changes
1) Stop Geth:
sudo systemctl stop geth
2) Remove Geth:
sudo apt remove -y geth
3) Remove Geth PPA:
sudo add-apt-repository --remove ppa:ethereum/ethereum
4) Check latest version of Geth:
5) Change to Home directory:
cd ~
6) Use curl to download latest version (be sure to update version):
curl -LO https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.10.25-69568c55.tar.gz
7) Extract, Copy, and Clean up (update version):
tar xvf geth-linux-amd64-1.10.25-69568c55.tar.gz
cd geth-linux-amd64-1.10.25-69568c55
sudo cp geth /usr/local/bin
cd ~
rm geth-linux-amd64-1.10.25-69568c55.tar.gz
rm -r geth-linux-amd64-1.10.25-69568c55
8) Rename geth username and group (goeth
-> geth
):
sudo usermod -l geth goeth
sudo groupmod -n geth goeth
9) Rename geth directory to /var/lib/geth
sudo mv /var/lib/goethereum /var/lib/geth
10) Set permissions for data directory:
sudo chown -R geth:geth /var/lib/geth
11) Update other programs:
sudo apt -y update && sudo apt -y upgrade
Modify geth.service file
Note on Code Readability
This blob is simply informational, no need to copy any code from here.
This guide uses line breaks "\
" to list each flag on it's own line and make the code easier to understand.
The two code examples below are identical, just with different layouts.
Single line layout:
ExecStart=/usr/local/bin/geth --mainnet --datadir /var/lib/geth --authrpc.jwtsecret /var/lib/jwtsecret/jwt.hex
Same code with line breaks:
ExecStart=/usr/local/bin/geth \
--mainnet \
--datadir /var/lib/geth \
--authrpc.jwtsecret /var/lib/jwtsecret/jwt.hex
As you can see, the line breaks make the code more readable and clearly identifies each flag. This guide will use line breaks to make the service files more readable.
1) Open geth.service for editing:
sudo nano /etc/systemd/system/geth.service
2) Modify geth.service:
3) Copy/Paste the following text into the empty geth.service file:
[Unit]
Description=Geth Execution Client (Mainnet)
After=network.target
Wants=network.target
[Service]
User=geth
Group=geth
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/geth \
--mainnet \
--datadir /var/lib/geth \
--authrpc.jwtsecret /var/lib/jwtsecret/jwt.hex
[Install]
WantedBy=default.target
Geth service file should look like this:

4) Reload Daemon:
sudo systemctl daemon-reload
5) Start Geth:
sudo systemctl start geth
6) Check Geth logs:
sudo journalctl -fu geth.service
Create JWT Token
The JWT token is used by Execution Engine (Geth) and Consensus Client (Lighthouse) to securely communicate back and forth.
These steps will generated a random 32 byte hex that will be referenced by both clients.
1) Create directory to store the JWT file:
sudo mkdir -p /var/lib/jwtsecret
2) Generate the JWT hex file using openssl
:
openssl rand -hex 32 | sudo tee /var/lib/jwtsecret/jwt.hex > /dev/null
3) Use ls
(list) to confirm the hex file exists at /var/lib/jwtsecret
:
ls /var/lib/jwtsecret
If the terminal responds with "jwt.hex
" as shown below, then the JWT token was successfully created and stored at /var/lib/jwtsecret

Update Lighthouse
Check the most current Lighthouse release here.
1) Change directory to the Home folder:
cd ~
2) Remove any old lighthouse file that may exist:
rm lighthouse
rm -r lighthouse
Download Lighthouse software (update version):
curl -LO https://github.com/sigp/lighthouse/releases/download/v3.1.0/lighthouse-v3.1.0-x86_64-unknown-linux-gnu.tar.gz
3) Stop Lighthouse services:
sudo systemctl stop lighthousevalidator && sudo systemctl stop lighthousebeacon
4) Extract binary from archive (update version):
tar xvf lighthouse-v3.1.0-x86_64-unknown-linux-gnu.tar.gz
5) Copy binary into /usr/local/bin:
sudo cp lighthouse /usr/local/bin
6) Start Lighthouse services:
sudo systemctl start lighthousebeacon && sudo systemctl start lighthousevalidator
7) Remove old files (update version):
rm lighthouse-v3.1.0-x86_64-unknown-linux-gnu.tar.gz
rm lighthouse
Congratulations, Lighthouse is now running on the most current version!
Update Beacon config file
1) Stop Beacon:
sudo systemctl stop lighthousebeacon
2) Open the beacon service file for editing:
sudo nano /etc/systemd/system/lighthousebeacon.service
Copy/paste the following into the terminal:
[Unit]
Description=Lighthouse Consensus Client BN (Mainnet)
Wants=network-online.target
After=network-online.target
[Service]
User=lighthousebeacon
Group=lighthousebeacon
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/lighthouse bn \
--network mainnet \
--datadir /var/lib/lighthouse \
--http \
--execution-endpoint http://127.0.0.1:8551 \
--execution-jwt /var/lib/jwtsecret/jwt.hex
[Install]
WantedBy=multi-user.target
Beacon file should look like this:

2) Reload the daemon:
sudo systemctl daemon-reload
3) Restart Beacon:
sudo systemctl restart lighthousebeacon
Update Validator config file
After the merge, your validator will receive tips from any blocks you propose. It is important that you send tips to a valid Ethereum address you can access.
Be sure to update the --suggested-fee-recipient
flag as shown below
1) Open the lighthousevalidator.service file for editing:
sudo nano /etc/systemd/system/lighthousevalidator.service
2) Copy/Paste the information below into the terminal
[Unit]
Description=Lighthouse Consensus Client VC (Mainnet)
Wants=network-online.target
After=network-online.target
[Service]
User=lighthousevalidator
Group=lighthousevalidator
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/lighthouse vc \
--network mainnet \
--datadir /var/lib/lighthouse \
--suggested-fee-recipient YourFeeRecipientAddress
[Install]
WantedBy=multi-user.target
Merge-ready lighthousebeacon.service file:

3) Reload daemon:
sudo systemctl daemon-reload
4) Restart Lighthouse Validator:
sudo systemctl restart lighthousevalidator
Check Logs & Status
1) Check Geth output:
sudo journalctl -fu geth.service
2) Check Beacon output:
sudo journalctl -fu lighthousebeacon.service
3) Check Validator output:
sudo journalctl -fu lighthousevalidator.service
Ready For Merge
Congrats! You're all set for the Bellatrix hard fork on Sep 6, and the merge ~Sep 15!

Last updated