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
Using source from the Gitea repository (recommended)
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 |