Watch
0
0
Fork
You've already forked hyperhive
0
hyperhive/swarm-matrix-ctl/README.md

36 lines
1.5 KiB
Markdown

# swarm-matrix-ctl
The rust that runs **inside `containers.hive-matrix`**, beside the homeserver.
One binary with subcommands rather than one binary per job. Running code in that
container is not free: it needs its own store identity, its own cert role and
its own bind mounts, and every one of those is per-_container_, not per-task. A
second single-purpose crate would have had to duplicate that plumbing to add one
action, so the next thing that has to run in here is a **verb**, not a new
crate.
## Verbs
### `appservice render`
Renders the swarm appservice registration tuwunel loads from the tokens in the
state dir, minting them only on a host that has none. Runs before the
homeserver and needs no network: the tokens on disk are the last copy `sync`
took from the store.
### `appservice sync`
The store holds the registration's tokens. This writes them into the state dir
when they differ, restarts the homeserver whenever the registration is
newer than its last start, and publishes the `as_token` for `swarm-controller`. A store holding none is seeded from the
state dir, create-only, so nothing rotates. It runs beside the homeserver, so a
store outage leaves the homeserver running on the last copy.
Both are configured entirely by the `MATRIX_APPSERVICE_*` environment the units
set — no flags. A systemd `Environment=` block is what a nix module can render; a
command line full of paths is not.
## 🩸 A secret is a path, never a value
Nothing here logs, prints or interpolates a token. The one identifier this
binary logs is the store path it wrote.