Verifying the install
After install exits 0, these checks confirm the host is in a healthy
state. Treat this page as a post-install checklist.
The state file
sudo cat /var/lib/aether-ops-bootstrap/state.json | jq .
A successful install produces something like:
{
"schema_version": 1,
"launcher_version": "v0.1.43",
"bundle_version": "2026.04.1",
"bundle_hash": "",
"components": {
"debs": { "version": "2026.04.1", "installed_at": "2026-04-18T14:27:11Z" },
"ssh": { "version": "2026.04.1", "installed_at": "2026-04-18T14:27:13Z" },
"sudoers": { "version": "2026.04.1", "installed_at": "2026-04-18T14:27:13Z" },
"service_account": { "version": "2026.04.1", "installed_at": "2026-04-18T14:27:14Z" },
"rke2": { "version": "v1.33.1+rke2r1", "installed_at": "2026-04-18T14:31:02Z" },
"helm": { "version": "v3.17.3", "installed_at": "2026-04-18T14:31:03Z" },
"onramp": { "version": "onramp:...", "installed_at": "2026-04-18T14:31:04Z" },
"aether_ops": { "version": "v0.1.43", "installed_at": "2026-04-18T14:32:44Z" }
},
"history": [
{ "action": "install", "timestamp": "2026-04-18T14:32:44Z", "launcher_version": "v0.1.43", "bundle_version": "2026.04.1" }
]
}
Every component should appear with a non-empty version. Missing entries are
a red flag and mean the component either wasn't registered or wasn't selected
by --roles.
A shortcut:
sudo ./aether-ops-bootstrap state
Systemd units
systemctl is-active rke2-server aether-ops ssh
All three should print active. To see what the launcher installed, look
for the units it owns:
systemctl list-unit-files | grep -E '^(rke2-server|aether-ops)\.service'
RKE2 health
sudo /var/lib/rancher/rke2/bin/kubectl get nodes -o wide
sudo /var/lib/rancher/rke2/bin/kubectl get pods -A
On a single-node install the node's STATUS should be Ready, and every
pod in the kube-system namespace should be Running or Completed.
RKE2's readiness endpoint:
curl -fsS --cacert /var/lib/rancher/rke2/server/tls/server-ca.crt \
https://localhost:6443/readyz
Expected: ok.
aether-ops health
systemctl status aether-ops
journalctl -u aether-ops --no-pager -n 40
Look for its startup log lines. The final lines of the bootstrap's own log printed the URL and default onramp credential summary; find them in:
sudo tail -n 30 /var/lib/aether-ops-bootstrap/bootstrap.log
Profile drop-in
Log out and back in (or source /etc/profile) to pick up the launcher's
/etc/profile.d/rke2.sh drop-in. After that:
which kubectl # /usr/local/bin/kubectl
echo $KUBECONFIG # /etc/rancher/rke2/rke2.yaml
Users in the aether-ops group can read that kubeconfig (mode 0640, group
aether-ops) without sudo. Add yourself:
sudo usermod -aG aether-ops "$USER"
# log out + back in
Idempotency check
Run the launcher again with the same bundle:
sudo ./aether-ops-bootstrap install --bundle bundle.tar.zst
It should either:
- refuse (because prior successful install exists — this is the default safety behaviour), or
- if you passed
--force, detect that every component'scurrentequalsdesired, skip every step, and exit cleanly in a few seconds.
Either answer is "pass." The point is that re-running doesn't break the host.
A cleaner way to test idempotency without --force:
sudo ./aether-ops-bootstrap check --bundle bundle.tar.zst
Expected: each installed component logs up to date. In 0.1.x, check
does not apply component actions, but it does write state metadata and a
history entry.
What "done" looks like
state.jsonhas every expected component with a recentinstalled_at.rke2-server.serviceis active;kubectl get nodesshows the nodeReady.aether-ops.serviceis active; its health endpoint returns successfully../aether-ops-bootstrap check --bundle bundle.tar.zstreports components as up to date.
Anything else is worth investigating — see troubleshooting.