Multi-arch (amd64, arm64) images are published on every release tag and on master:
docker pull ghcr.io/projecteru2/mithril # or projecteru2/mithril on Docker Hub
docker run --rm -p 7979:7979 ghcr.io/projecteru2/mithril \
/etc/mithril/mithril.conf.sample \
--bootstrap <node>:<port> \
--announce-addr <externally-routable-ip>:7979
announce-addr must be an address clients can reach: it is what the cluster
emulation advertises, and the sample config binds the wildcard address.
Every GitHub release carries static Linux binaries (x86_64 and arm64, musl)
and a macOS arm64 binary, each as a tarball with the sample config, LICENSE
and README, plus a checksums.txt:
V=0.1.8
curl -LO https://github.com/projecteru2/mithril/releases/download/v$V/mithril_${V}_Linux_x86_64.tar.gz
curl -LO https://github.com/projecteru2/mithril/releases/download/v$V/checksums.txt
grep "mithril_${V}_Linux_x86_64" checksums.txt | sha256sum -c
tar xzf mithril_${V}_Linux_x86_64.tar.gz && ./mithril --version
Requires the Rust toolchain pinned in rust-toolchain.toml (rustup picks it
up automatically):
make build # release binary at target/release/mithril
make test lint fmt-check # the CI gate: cargo test, clippy -D warnings, rustfmt --check
The Makefile injects the git tag and revision into --version.
mithril <conf-file> [--<key> <value>]...
Every config key can be overridden on the command line; see
configuration. The process runs in the foreground and
logs to stdout, so it drops into a container, a systemd unit
(Type=simple), or a supervisor unchanged. SIGTERM/SIGINT trigger a
graceful drain (stop accepting, serve open sessions up to five seconds,
exit 0).
At startup mithril must reach at least one bootstrap node to fetch the
initial topology; it retries for thirty seconds before giving up. After
that, any node of the cluster can serve refreshes.