garage/doc/book/cookbook/from-source.md
2022-09-06 17:16:45 +02:00

2.7 KiB

+++ title = "Compiling Garage from source" weight = 10 +++

Garage is a standard Rust project. First, you need rust and cargo. For instance on Debian:

sudo apt-get update
sudo apt-get install -y rustc cargo

You can also use Rustup to setup a Rust toolchain easily.

In addition, you will need a full C toolchain. On Debian-based distributions, it can be installed as follows:

sudo apt-get update
sudo apt-get install build-essential

The primary location for Garage's source code is the Gitea repository.

Clone the repository and build Garage with the following commands:

git clone https://git.deuxfleurs.fr/Deuxfleurs/garage.git
cd garage
cargo build

Be careful, as this will make a debug build of Garage, which will be extremely slow! To make a release build, invoke cargo build --release (this takes much longer).

The binaries built this way are found in target/{debug,release}/garage.

Using source from crates.io

Garage's source code is published on crates.io, Rust's official package repository. This means you can simply ask cargo to download and build this source code for you:

cargo install garage

That's all, garage should be in $HOME/.cargo/bin.

You can add this folder to your $PATH or copy the binary somewhere else on your system. For instance:

sudo cp $HOME/.cargo/bin/garage /usr/local/bin/garage

Selecting features to activate in your build

Garage supports a number of compilation options in the form of Cargo features, which can be used to provide builds adapted to your system and your use case. The following features are available:

Feature Enabled Description
bundled-libs BY DEFAULT Use bundled version of sqlite3, zstd, lmdb and libsodium
system-libs optional Use system version of sqlite3, zstd, lmdb and libsodium if available (exclusive with bundled-libs, build using cargo build --no-default-features --features system-libs)
k2v optional Enable the experimental K2V API (if used, all nodes on your Garage cluster must have it enabled as well)
kubernetes-discovery optional Enable automatic registration and discovery of cluster nodes through the Kubernetes API
metrics BY DEFAULT Enable collection of metrics in Prometheus format on the admin API
telemetry-otlp optional Enable collection of execution traces using OpenTelemetry
sled BY DEFAULT Enable using Sled to store Garage's metadata
lmdb optional Enable using LMDB to store Garage's metadata
sqlite optional Enable using Sqlite3 to store Garage's metadata