Problem: the hexagonal refactor churns the backend tree for nine more phases; the UI delivery stack (web/ SPA, cmd/desktop Wails wrapper, compose/web image) must move to its own repo first so doc/layout rewrites land once on a backend-only tree. Change: - New repo git.hubris.network/dtoro/oikos-web (v0.33.0): web/, desktop/ (updateURL repointed to oikos-web releases), compose/, own CI (web + desktop jobs), own deploy script (CI-green gate, TOCTOU guard, version-tagged images, prune-to-3), own webhook receiver on :9798 + launchd unit, own compose project publishing the same 8091:80. - Cutover executed on mac-mini in order: oikos stack's web service stopped+removed, oikos-web project brought up on 8091; outer Caddy untouched (targets the published port) — serving + Authentik flow + /wails 404 quirk verified post-cutover. - Stripped from oikos: web/, cmd/desktop/, compose/web/, desktop CI workflow, ci.yml web job, Makefile ui/desktop/desktop-package/install targets, the compose web service, oikos-web from deploy.sh's fallback prune list; wails + go-keyring dropped from go.mod, vendor synced. - README / CONTRIBUTING / AGENTS.md / .agents dev+operations docs now point at the new repo; mbse + mascot design docs carry a path note. Risk: production SPA serving depends on the new pipeline now; rollback is versioned-image re-up of the old web service from a pre-split checkout (port 8091). Desktop builds installed before the split still check dtoro/oikos releases — one manual reinstall, noted in the oikos-web release notes. Verification: go vet, make test (race), make generate-check, golangci (no new findings; baseline down 400→365); post-cutover curls — localhost:8091 200, /wails/runtime.js 404, outer Caddy 302 Authentik.
96 lines
6.1 KiB
Markdown
96 lines
6.1 KiB
Markdown
# Operations cheatsheet
|
|
|
|
Run from the [hubris host](../../archive/knowledge/hosts/hubris.md) as root. When working from `/root` on Linux you're already on hubris — don't `ssh hubris` / `ping hubris`.
|
|
|
|
## Proxmox CLI
|
|
|
|
| Command | Use |
|
|
| --- | --- |
|
|
| `pct list` / `qm list` | List LXC containers / VMs |
|
|
| `pct config <id>` / `qm config <id>` | Container / VM config |
|
|
| `pct exec <id> -- <cmd>` | Run command inside an LXC without entering it (no initgroups — see [media permissions](../../archive/knowledge/infrastructure/media-permissions.md)) |
|
|
| `pct enter <id>` | Shell into a container |
|
|
| `pct start <id>` / `pct stop <id>` | Boot / halt a container |
|
|
| `pvesm status` | Storage pools status |
|
|
| `pvesh get /nodes --output-format json` | Node summary as JSON |
|
|
| `pvesh get /nodes/hubris/lxc/<id>/status/current` | Live container status |
|
|
| `pvesh get /cluster/resources --type vm --output-format json` | Bulk per-LXC CPU/mem/disk (used by the `homelab-health-watchdog` Nomos cron — see [monitoring](../../archive/knowledge/infrastructure/monitoring.md); the old `claudio-monitor` this once fed is deprecated) |
|
|
| `pveversion` | PVE version |
|
|
| `journalctl -u pve-cluster -n 100` | PVE service logs |
|
|
|
|
## Storage
|
|
|
|
- Shared mount: `/mnt/library` (ext4 on lvmthin `library`).
|
|
- Bind into a container: `pct set <id> -mp<N> /mnt/library/<sub>,mp=/data`
|
|
- For the standard whole-tree mount: `pct set <id> -mp0 /mnt/library,mp=/mnt/library`. See [media permissions](../../archive/knowledge/infrastructure/media-permissions.md) for the GID-10000 onboarding recipe.
|
|
|
|
## Reverse proxy
|
|
|
|
- Caddyfile: `/etc/caddy/Caddyfile` on [LXC 121](../../archive/knowledge/containers/121-caddy.md).
|
|
- **CRITICAL:** This file is tracked in `dtoro/caddy-conf` (https://git.hubris.network/dtoro/caddy-conf). Never edit it directly on the LXC — commit + push to the repo instead. Caddy auto-deploys on push (see [auto-deploy](../../archive/knowledge/infrastructure/auto-deploy.md)). If you edit directly, the change will be lost on the next pull and agents won't know about it.
|
|
- Hot reload: `pct exec 121 -- systemctl reload caddy`.
|
|
- Validate: `pct exec 121 -- caddy validate --config /etc/caddy/Caddyfile`.
|
|
- Git workflow shortcut: `pct exec 121 -- "cd /etc/caddy && git add Caddyfile && git commit -m '...' && git push"`.
|
|
|
|
## DNS
|
|
|
|
- Split-horizon authority: [Technitium DNS](https://technitium.com) on [dns (107)](../../archive/knowledge/containers/107-dns.md) at `192.168.8.2:53`. Web UI at `http://192.168.8.2`. (Formerly dnsmasq on the now-destroyed LXC 124 — decommissioned 2026-06-04.)
|
|
- Add/edit records in the Technitium UI; the NetBird managed zone sync (`scripts/dns-sync.py` cron on 107) picks changes up within ~10 minutes.
|
|
- Verify: `dig @192.168.8.2 +short <host>.hubris.network`.
|
|
- See [DNS](../../archive/knowledge/infrastructure/dns.md).
|
|
|
|
## Web access
|
|
|
|
- `https://proxmox.hubris.network` or `https://192.168.8.77:8006` — Proxmox UI
|
|
|
|
## Telemetry quick checks
|
|
|
|
- `ras-mc-ctl --summary` — summary of any RAS events (memory / PCIe AER / thermal) since boot
|
|
- `ras-mc-ctl --errors` — full event log
|
|
- `cat /sys/devices/system/cpu/cpu0/cpufreq/energy_performance_preference` — should be `balance_power`
|
|
- `cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor` — should be `powersave`
|
|
- `ls /sys/fs/pstore/ /var/lib/systemd/pstore/` — panic traces from a previous crash (empty for pure hardware hangs — see [investigation](../../archive/knowledge/investigations/2026-04-21-hubris-crash-loop.md))
|
|
|
|
## Fleet apt operations
|
|
|
|
**No current CLI equivalent.** `homelab apt-audit`/`apt-upgrade` (dpkg-state
|
|
audit, fanned-out apt upgrade with pre-upgrade snapshots) were part of the
|
|
retired Python `homelab` CLI and don't have a ported replacement — apt
|
|
patching today is ad hoc `run` MCP tool calls per host, without the
|
|
audit/snapshot/status wrapping this used to provide. If that wrapping is
|
|
still wanted, it needs to be rebuilt (e.g. as a runbook driving `run`, or a
|
|
new MCP tool) — see
|
|
[runbook-dpkg-interrupted](../skills/runbook-dpkg-interrupted/SKILL.md) for
|
|
the dpkg-interrupted recovery procedure specifically.
|
|
|
|
## Oikos (agent OS layer)
|
|
|
|
See [OIKOS.md](../OIKOS.md) for the operating model. The `homelab` CLI this
|
|
section used to document is retired; the actual current interface is the
|
|
MCP tool catalog in [AGENTS.md §3](../../AGENTS.md#3-the-mcp-server) plus
|
|
the REST API. Closest current equivalents for what used to live here:
|
|
|
|
| Old `homelab` command | Current equivalent |
|
|
| --- | --- |
|
|
| `homelab service <name> explain\|health\|docs\|log` | MCP `explain`, `get_service_status`, `tail_log`, `get_entity_knowledge` |
|
|
| `homelab node <name> relations` | MCP `get_blast_radius` |
|
|
| `homelab change preflight <service>` | MCP `preflight` |
|
|
| `homelab signal list\|ack\|resolve\|mute` | MCP `get_signal_history`, or REST `POST /api/v1/signals/{id}/ack\|resolve\|mute` (the control-room UI's Signals page wraps these) |
|
|
| `homelab approval request\|list\|reply\|check` | REST `GET/POST /api/v1/approvals*` (Matrix-delivered via the notifier, or the control-room UI's Operations page) |
|
|
| `homelab restart <service> --approval-id <id>` | MCP `run` (policy-gated — auto-executes if read-only/reversible_low, otherwise queues for the same Matrix/UI approval) |
|
|
| `homelab decide <action> <entity>` | No direct equivalent — classification now happens inline inside `run`, not as a separate dry-run call |
|
|
|
|
There is no separately-deployed "Oikos Console" anymore — the control-room
|
|
SPA is the operator dashboard. It lives in its own repo
|
|
(`dtoro/oikos-web`, local checkout `~/Projects/oikos-web`) with its own
|
|
deploy pipeline, publishing the same host port 8091 as before (Phase 1 of
|
|
[plans/2026-08-15-hexagonal-architecture.md](../../plans/2026-08-15-hexagonal-architecture.md)).
|
|
|
|
## Related
|
|
- [Hubris host](../../archive/knowledge/hosts/hubris.md)
|
|
- [Containers index](../../archive/knowledge/containers/index.md)
|
|
- [DNS](../../archive/knowledge/infrastructure/dns.md)
|
|
- [Monitoring](../../archive/knowledge/infrastructure/monitoring.md)
|
|
- [Auto-deploy](../../archive/knowledge/infrastructure/auto-deploy.md)
|
|
- [Runbook: dpkg-interrupted recovery](../skills/runbook-dpkg-interrupted/SKILL.md) — what to do when apt got killed mid-transaction
|