This is the shortest supported path from "I downloaded HamStack" to "Ansible is managing a node."
If you are new to Ansible, the important idea is that HamStack normally runs from one controller computer and connects to one or more target nodes.
For the easiest first deployment:
- a Debian-family Linux controller or workstation;
- an unpacked copy of the HamStack repository on that controller;
- a Debian-family target such as a Raspberry Pi, mini-PC, VM, or laptop;
- working IP networking between the controller and target;
- an SSH public key from the controller;
- sudo/root access on the target for initial bootstrap.
Some roles support other operating systems or upstream appliances. Start with ordinary Debian-family Linux while learning the layout.
From the unpacked HamStack directory:
bash ./scripts/bootstrap-workstation.sh --mode controllerThis installs the local controller prerequisites, creates a repository-local Python virtual environment, installs the controller Python dependencies, and installs the required Ansible collections.
It does not clone, pull, commit, or push Git repositories.
Activate the environment when working with HamStack:
source .venv/bin/activateRun the interactive configurator:
python3 scripts/configure.py --init
python3 scripts/configure.pyOr copy the example inventory manually:
cp -R inventory/example inventory/localReal deployment configuration belongs under inventory/local/, which is
ignored by Git.
At minimum:
- replace
example-nodeininventory/local/hosts.yml; - set the node's real IP address or DNS name;
- rename
inventory/local/host_vars/example-node.ymlto match your hostname; - set your callsign and timezone in
inventory/local/group_vars/all.yml; - enable the role(s) you actually want in that host's variables.
Do not enable every role just because it exists.
The target needs Python, SSH, sudo, and an account Ansible can use.
On the controller, display your public key:
cat ~/.ssh/id_ed25519.pubIf you use another key, substitute that file.
On the target, from an unpacked HamStack copy:
sudo bash ./scripts/bootstrap-node.sh \
--authorized-key "ssh-ed25519 AAAA...your-controller-key..."The default automation account is hamstack.
The bootstrap script deliberately does not change firewall policy, disable password authentication, install Ansible on the target, or configure any radio software.
See bootstrap.md for other key-install options.
Back on the controller:
ansible all -m pingIf this fails, solve SSH/inventory connectivity before running larger playbooks.
Useful direct test:
ssh hamstack@<target-address>Run:
ansible-playbook playbooks/bootstrap.ymlRun it a second time:
ansible-playbook playbooks/bootstrap.ymlA healthy second run should have no failures and should not report unnecessary changes.
Once your host variables enable the desired capabilities:
ansible-playbook playbooks/site.ymlAgain, run it a second time while validating a new deployment.
If a role needs credentials, create an encrypted Vault:
ansible-vault create inventory/local/group_vars/all/vault.ymlThe tracked example at:
inventory/example/group_vars/all/vault.yml.example
shows the secret variable names HamStack currently knows about.
Never commit real passwords, API keys, node passwords, private keys, or private deployment inventory.
OpenWrt/GL.iNet and RouterOS devices use a separate inventory:
inventory/local/network.yml
Apply those with:
ansible-playbook -i inventory/local/network.yml playbooks/network.ymlThese backends are intentionally conservative implementations. Test on spare hardware before changing an event router.
If your machine matches one of the standard deployment shapes, you can start with a profile:
playbooks/profiles/hamcube.yml
playbooks/profiles/control-station.yml
playbooks/profiles/dev-workstation.yml
Profiles provide sensible defaults and remain overrideable through inventory.
See profiles.md.
Before sharing changes or starting a hardware-validation cycle:
python3 scripts/qa.py
yamllint .
ansible-lintSee qa.md for the distinction between static QA and live-device
validation.
../FEATURES.md— what HamStack can do;concepts.md— terminology and architecture;first-deployment.md— a small worked example;configuration.md— public configuration model;variables.md— exhaustive generated variable reference;hardware.md— reference hardware/capability guidance;role-status.md— implementation boundaries;../ROADMAP.md— future direction.
HamStack is an open-source Ham Radio Village project. The canonical public repository, issues, feature requests, and pull requests are maintained through the HRV GitHub organization.
Feature requests, bug reports, documentation improvements, hardware support, and pull requests are welcome.
For general project questions or coordination, the preferred contact is
@shoot3r on the Ham Radio Village Discord.