Build from Source
Lighthouse builds on Linux, macOS, and Windows. Install the Dependencies using the instructions below, and then proceed to Building Lighthouse.
Dependencies
First, install Rust using rustup:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
The rustup installer provides an easy way to update the Rust compiler, and works on all platforms.
Tips:
- During installation, when prompted, enter
1
for the default installation.- After Rust installation completes, try running
cargo version
. If it cannot be found, runsource $HOME/.cargo/env
. After that, runningcargo version
should return the version, for examplecargo 1.68.2
.- It's generally advisable to append
source $HOME/.cargo/env
to~/.bashrc
.
With Rust installed, follow the instructions below to install dependencies relevant to your operating system.
Note: For Linux OS, general Linux File Systems such as Ext4 or XFS are fine. We recommend to avoid using Btrfs file system as it has been reported to be slow and the node will suffer from performance degradation as a result.
Ubuntu
Install the following packages:
sudo apt update && sudo apt install -y git gcc g++ make cmake pkg-config llvm-dev libclang-dev clang
Tips:
- If there are difficulties, try updating the package manager with
sudo apt update
.
Note: Lighthouse requires CMake v3.12 or newer, which isn't available in the package repositories of Ubuntu 18.04 or earlier. On these distributions CMake can still be installed via PPA: https://apt.kitware.com/
After this, you are ready to build Lighthouse.
Fedora/RHEL/CentOS
Install the following packages:
yum -y install git make perl clang cmake
After this, you are ready to build Lighthouse.
macOS
- Install the Homebrew package manager.
- Install CMake using Homebrew:
brew install cmake
After this, you are ready to build Lighthouse.
Windows
-
Install Git.
-
Install the Chocolatey package manager for Windows.
Tips:
- Use PowerShell to install. In Windows, search for PowerShell and run as administrator.
- You must ensure
Get-ExecutionPolicy
is not Restricted. To test this, runGet-ExecutionPolicy
in PowerShell. If it returnsrestricted
, then runSet-ExecutionPolicy AllSigned
, and then run
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
- To verify that Chocolatey is ready, run
choco
and it should return the version.
-
Install Make, CMake and LLVM using Chocolatey:
choco install make
choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System'
choco install llvm
These dependencies are for compiling Lighthouse natively on Windows. Lighthouse can also run successfully under the Windows Subsystem for Linux (WSL). If using Ubuntu under WSL, you should follow the instructions for Ubuntu listed in the Dependencies (Ubuntu) section.
After this, you are ready to build Lighthouse.
Build Lighthouse
Once you have Rust and the build dependencies you're ready to build Lighthouse:
git clone https://github.com/sigp/lighthouse.git
cd lighthouse
git checkout stable
make
Compilation may take around 10 minutes. Installation was successful if lighthouse --help
displays
the command-line documentation.
If you run into any issues, please check the Troubleshooting section, or reach out to us on Discord.
Update Lighthouse
You can update Lighthouse to a specific version by running the commands below. The lighthouse
directory will be the location you cloned Lighthouse to during the installation process.
${VERSION}
will be the version you wish to build in the format vX.X.X
.
cd lighthouse
git fetch
git checkout ${VERSION}
make
Feature Flags
You can customise the features that Lighthouse is built with using the FEATURES
environment
variable. E.g.
FEATURES=gnosis,slasher-lmdb,beacon-node-leveldb make
Commonly used features include:
gnosis
: support for the Gnosis Beacon Chain.portable
: the default feature as Lighthouse now uses runtime detection of hardware CPU features.slasher-lmdb
: support for the LMDB slasher backend. Enabled by default.slasher-mdbx
: support for the MDBX slasher backend.beacon-node-leveldb
: support for the leveldb backend. Enabled by default.jemalloc
: usejemalloc
to allocate memory. Enabled by default on Linux and macOS. Not supported on Windows.spec-minimal
: support for the minimal preset (useful for testing).
Default features (e.g. slasher-lmdb
, beacon-node-leveldb
) may be opted out of using the --no-default-features
argument for cargo
, which can be plumbed in via the CARGO_INSTALL_EXTRA_FLAGS
environment variable.
E.g.
CARGO_INSTALL_EXTRA_FLAGS="--no-default-features" make
Compilation Profiles
You can customise the compiler settings used to compile Lighthouse via Cargo profiles.
Lighthouse includes several profiles which can be selected via the PROFILE
environment variable.
release
: default for source builds, enables most optimisations while not taking too long to compile.maxperf
: default for binary releases, enables aggressive optimisations including full LTO. Although compiling with this profile improves some benchmarks by around 20% compared torelease
, it imposes a significant cost at compile time and is only recommended if you have a fast CPU.
To compile with maxperf
:
PROFILE=maxperf make
Troubleshooting
Command is not found
Lighthouse will be installed to CARGO_HOME
or $HOME/.cargo
. This directory
needs to be on your PATH
before you can run $ lighthouse
.
See "Configuring the PATH
environment variable" for more information.
Compilation error
Make sure you are running the latest version of Rust. If you have installed Rust using rustup, simply run rustup update
.
If you can't install the latest version of Rust you can instead compile using the Minimum Supported
Rust Version (MSRV) which is listed under the rust-version
key in Lighthouse's
Cargo.toml.
If compilation fails with (signal: 9, SIGKILL: kill)
, this could mean your machine ran out of
memory during compilation. If you are on a resource-constrained device you can
look into cross compilation, or use a pre-built
binary.
If compilation fails with error: linking with cc failed: exit code: 1
, try running cargo clean
.