Prerequisites

View as Markdown

This section covers what you need to build and run RMS as a bare-metal binary. To deploy RMS on Kubernetes instead, see Deployment.

Build prerequisites

For a local (non-Docker) build:

  • Rust - the Rust version pinned by rust-toolchain.toml (the crate uses edition = "2024"). Install via rustup.

    NOTE: On Ubuntu, do not use apt install rustc - the packaged compiler is too old.

  • Protocol buffer compiler (protoc) - required by tonic-build to compile the .proto service definitions at build time. On Debian/Ubuntu, run sudo apt-get install -y protobuf-compiler libprotobuf-dev. On macOS, run brew install protobuf.
  • lld (Linux) - the default linker preference in .cargo/config.toml. Install with sudo apt-get install -y lld (or remove the fuse-ld=lld line for another linker).
  • A working SSL/CA bundle (any standard Linux/macOS install is fine; rustls with aws-lc-rs is statically linked).
  • just (optional, recommended) - a command runner used by the Justfile build and Docker helpers. Install via cargo install just or brew install just.

For a Docker-based build, only Docker 24+ is needed - all toolchain dependencies are installed inside the builder image.

On Debian/Ubuntu, the full system dependency set is:

$sudo apt-get update
$sudo apt-get install -y \
> build-essential \
> pkg-config \
> protobuf-compiler \
> libprotobuf-dev \
> lld

Runtime prerequisites

When running RMS against real hardware:

  • Network reachability from the RMS process to BMC, power-shelf, and switch management addresses.
  • Network reachability from RMS to Postgres when persistent storage is enabled.
  • A server TLS certificate, private key, and CA certificate for mTLS (the default; see Configuring RMS: TLS).
  • Switch certificates if using mTLS on switches: both RMS-side client certs/CA and switch-side server certs/CA.
  • A writable firmware artifact directory for downloaded and staged firmware files.
  • Operator-supplied credentials for BMC, power-shelf, and switch endpoints, passed in gRPC requests at node-creation time. Do not commit credential files.

The librms proto definitions

The gRPC service definitions (rack_manager.proto and related types) are provided by the librms crate, pinned by rev in Cargo.toml. Cargo fetches it automatically during the build - no submodule init step is required.