Installation

  1. One-line install
    1. Supported architectures
    2. Installer knobs
  2. The home directory
  3. Running
  4. Building from source

One-line install

curl -fsSL https://hamctl.monocul.us/install.sh | sh

The installer:

  1. Detects the architecture (uname -m) and downloads /bin/hamctl-linux-<arch>.
  2. Verifies the binary against /bin/SHA256SUMS.
  3. Installs it to /usr/local/bin/hamctl (using sudo only if needed).
  4. Sets up the home directory (hamctl init).
  5. 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-password reads the password from the terminal without echo and never passes it on the command line, so it won’t appear in ps.
  • hamctl upgrade only refreshes the shipped manifests and runs migrations — it never touches your service config files (those live under config_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 run hamctl 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