Prerequisites
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 usesedition = "2024"). Install via rustup.NOTE: On Ubuntu, do not use
apt install rustc- the packaged compiler is too old. - Protocol buffer compiler (
protoc) - required bytonic-buildto compile the.protoservice definitions at build time. On Debian/Ubuntu, runsudo apt-get install -y protobuf-compiler libprotobuf-dev. On macOS, runbrew install protobuf. lld(Linux) - the default linker preference in.cargo/config.toml. Install withsudo apt-get install -y lld(or remove thefuse-ld=lldline for another linker).- A working SSL/CA bundle (any standard Linux/macOS install is fine;
rustlswithaws-lc-rsis statically linked). just(optional, recommended) - a command runner used by theJustfilebuild and Docker helpers. Install viacargo install justorbrew 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:
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.