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 |