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.jwtsecretto geth.service file
Lighthouse
Update Lighthouse
Add
--execution-jwtand--execution-endpointto lighthousebeacon.service fileAdd
--suggested-fee-recipientto 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 geth2) Remove Geth:
sudo apt remove -y geth3) Remove Geth PPA:
sudo add-apt-repository --remove ppa:ethereum/ethereum4) 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.gz7) 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/geth10) Set permissions for data directory:
sudo chown -R geth:geth /var/lib/geth11) Update other programs:
sudo apt -y update && sudo apt -y upgradeModify 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.hexSame code with line breaks:
ExecStart=/usr/local/bin/geth \
--mainnet \
--datadir /var/lib/geth \
--authrpc.jwtsecret /var/lib/jwtsecret/jwt.hexAs 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.service2) 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.targetGeth service file should look like this:

4) Reload Daemon:
sudo systemctl daemon-reload5) Start Geth:
sudo systemctl start geth6) Check Geth logs:
sudo journalctl -fu geth.serviceCreate 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/jwtsecret2) Generate the JWT hex file using openssl:
openssl rand -hex 32 | sudo tee /var/lib/jwtsecret/jwt.hex > /dev/null3) Use ls (list) to confirm the hex file exists at /var/lib/jwtsecret:
ls /var/lib/jwtsecretIf 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.gz3) Stop Lighthouse services:
sudo systemctl stop lighthousevalidator && sudo systemctl stop lighthousebeacon4) Extract binary from archive (update version):
tar xvf lighthouse-v3.1.0-x86_64-unknown-linux-gnu.tar.gz5) Copy binary into /usr/local/bin:
sudo cp lighthouse /usr/local/bin6) Start Lighthouse services:
sudo systemctl start lighthousebeacon && sudo systemctl start lighthousevalidator7) 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 lighthousebeacon2) Open the beacon service file for editing:
sudo nano /etc/systemd/system/lighthousebeacon.serviceCopy/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.targetBeacon file should look like this:

2) Reload the daemon:
sudo systemctl daemon-reload3) Restart Beacon:
sudo systemctl restart lighthousebeaconUpdate 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.service2) 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.targetMerge-ready lighthousebeacon.service file:

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

Last updated
