Installation
One-line install
curl -fsSL https://hamctl.monocul.us/install.sh | sh
The installer:
- Detects the architecture (
uname -m) and downloads/bin/hamctl-linux-<arch>. - Verifies the binary against
/bin/SHA256SUMS. - Installs it to
/usr/local/bin/hamctl(usingsudoonly if needed). - Sets up the home directory (
hamctl init). - Interactively (reading your terminal) offers to: set the admin password, install the AFRN client, and add a systemd service so the UI starts on boot.
Re-running the installer updates in place — it compares checksums and skips the
download when you’re already current, preserving your hamctl.toml.
Supported architectures
x86_64, aarch64, armv7, armv6, i386 (all fully static musl builds, so they
run on any distro regardless of libc version) and riscv64.
Installer knobs
| Variable | Default | Purpose |
|---|---|---|
PREFIX |
/usr/local/bin |
where the binary is installed |
HAMCTL_HOME |
/opt/hamctl (root) or ~/.hamctl |
config + manifests home |
HAMCTL_BASE |
https://hamctl.monocul.us |
download base URL |
HAMCTL_NONINTERACTIVE |
unset | set to 1 to skip all prompts |
The home directory
hamctl keeps its hamctl.toml, the service manifests, and a version/state marker in a
home directory — $HAMCTL_HOME, else /opt/hamctl (when root) or ~/.hamctl.
The binary is self-contained: the manifests are embedded, so these subcommands lay them down and migrate them.
hamctl init [--home DIR] # create the home: hamctl.toml + manifests + state
hamctl upgrade [--home DIR] # refresh embedded manifests + run config migrations
hamctl set-password [--home DIR] # prompt (no echo, never via argv) and write the hash
hamctl --version
hamctl set-passwordreads the password from the terminal without echo and never passes it on the command line, so it won’t appear inps.hamctl upgradeonly refreshes the shipped manifests and runs migrations — it never touches your service config files (those live underconfig_root) or any custom manifests you’ve added. On startup, if the home was set up by an older binary, hamctl logs a nudge to runhamctl upgrade.
Running
hamctl --config /opt/hamctl/hamctl.toml # serves the web UI on :8080
With the systemd unit installed by the installer, use systemctl {start,stop,status}
hamctl instead. Login is disabled until an admin password is set.
TLS is not built in. For remote access put a reverse proxy in front, or bind to localhost and use an SSH tunnel.
Building from source
cargo build --release # target/release/hamctl
./target/release/hamctl init # lay down ~/.hamctl
./target/release/hamctl --config ~/.hamctl/hamctl.toml