Install
Three binaries. emetc compiles Emet on your laptop; golemctl ships the
result; golemd runs on each node.
1 — Build the binaries
git clone https://github.com/dull-ca/golemcd golemdirenv allow # or: devenv shellcargo build --release -p emet -p golemctl -p golemdThat produces:
emetc— the Emet compiler (crateemet).golemctl— the operator CLI.golemd— the per-host agent.
The devenv shell prepends target/release to PATH, so all three are
callable by name from inside it — the rest of this page assumes you are.
2 — Run the agent
golemd needs a --host name — that is how it selects its scroll from a
fleet manifest. For a first run, use the default fake reconciler, which
records what it would do without touching the box:
golemd --host web --reconciler fake --listen 127.0.0.1:7474-
Confirm it is up:
Terminal window curl -s http://127.0.0.1:7474/status# → {"host":"web","latest_revision":1}Revision 1 is the
Initrevision golemd writes when it opens its journal. Nothing has been applied yet. -
When you want real effects on a Debian box, switch the reconciler — and give it a token file in the same breath:
Terminal window sudo install -d -m 0700 /etc/golemhead -c 32 /dev/urandom | base64 | sudo tee /etc/golem/token > /dev/nullsudo chmod 0600 /etc/golem/tokengolemd --host web --reconciler host --listen 127.0.0.1:7474 \--auth-token-file /etc/golem/token--reconciler hostenacts real apt, systemd, and filesystem changes as root, so its port is root-equivalent control of the box. Started without--auth-token-file(and without[auth] token_file),golemdanswers anyone who reaches that port. Loopback is the default bind and the deployed posture; operators reach it through an SSH forwardgolemctlopens for them. See Trust model.
The agent keeps its journal in --state-dir (default /var/lib/golem,
file planroom.db). See the CLI reference for every
flag.
What’s next
Write your first Emet program and watch it compile to glyphs.