Skip to main content

max / mountaineer

Update cross-references for monorepo layout Component docs now point at sibling directories via relative paths: docs/, sysop/, build/. sysop/docs/todo.md retitled (no longer mountaineer-sysop). build/tools/qemu/README.md picks up the new build/ subdir name. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Author: Max J. <87768334+MaxJMath@users.noreply.github.com> · 2026-05-18 03:14 UTC
Commit: 7e8a0cf53b8f03f55fc4e11e95bedfd488f7aed0
Parent: 5dc41a4
3 files changed, +18 insertions, -14 deletions
@@ -22,7 +22,7 @@ serial logs, and monitor sockets all live there.
22 22
23 23 ## First-time setup
24 24
25 - The cloud image needs to be downloaded once. From `mountaineer-build/` root:
25 + The cloud image needs to be downloaded once. From the `build/` root:
26 26
27 27 ```sh
28 28 mkdir -p .vms/images
M docs/todo.md +7 -6
@@ -10,7 +10,8 @@
10 10 - `BUILD-TOOLS.md` — orientation map for the upstream toolchain (apk, mkimage, mkinitfs, apkovl, lbu, ZFS, zfsbootmenu, etc.) plus Mountaineer-authored components and open toolchain decisions
11 11 - `INSTALL.md` — defended spec for install mechanics: two ISOs from one source, disk layout, ZFS pool/datasets, ARC sizing, zfsbootmenu, apkovl shape and source tree, installer flow, v0.1 dogfood gate
12 12 - `references/` — third-party material we want to keep alongside the spec
13 - - `../mountaineer-build/` — implementation repo (apkovl-src, mkimg profile, installer, QEMU iteration loop)
13 + - `../build/` — build pipeline (apkovl-src, mkimg profile, installer, QEMU iteration loop)
14 + - `../sysop/` — Cargo workspace: CLI binary + sysop-tui primitives crate
14 15 - `/Users/max/Code/CONTRIBUTING.md` — cross-cutting rules (no Docker, no PRs, latest deps, file size, todo format)
15 16 - `/Users/max/Code/CLAUDE.md` — repo-wide LLM instructions
16 17
@@ -55,7 +56,7 @@
55 56
56 57 ## Install / overlay mechanics — IMPLEMENTATION
57 58
58 - Repo at `../mountaineer-build/`. **Full installer runs end-to-end in QEMU as of build 16**; testable ISO at `out/mountaineer-server-v3.23-x86_64.iso`. Next: Framework 13 hardware verification. See `mountaineer-build/build_notes.md` for traps and gotchas.
59 + Lives in `../build/`. **Full installer runs end-to-end in QEMU as of build 16**; testable ISO at `../build/out/mountaineer-server-v3.23-x86_64.iso`. Next: Framework 13 hardware verification. See `../build/build_notes.md` for traps and gotchas.
59 60
60 61 ### Done
61 62
@@ -104,7 +105,7 @@ Originating builds 1–10 (pre-ISO-boots era):
104 105 - [x] **#9** Live env had no ssh access → `apkovl-src/live/root/.ssh/authorized_keys`, `sshd_config.d/10-live.conf` (PermitRootLogin prohibit-password), `etc/runlevels/default/sshd` symlink
105 106 - [x] **#10** sshd doesn't start despite runlevel symlink → apkovl applies after default runlevel reached; `/etc/local.d/sshd.start` retroactively starts it
106 107
107 - Builds 11–16 (ISO-boots-and-installs era — full session details in `mountaineer-build/build_notes.md`):
108 + Builds 11–16 (ISO-boots-and-installs era — full session details in `../build/build_notes.md`):
108 109 - [x] **#11** `tools/build-apkovl.sh`: `find ... -exec touch -d '@0'` followed symlinks into root-owned `/etc/init.d/*` and silently broke the live apkovl. Fix: `find ! -type l`.
109 110 - [x] **#12** `apkovl-src/common/etc/ssh/sshd_config`: removed `PrintLastLog yes` — unsupported by Alpine's OpenSSH.
110 111 - [x] **#13** `apkovl-src/live/etc/network/interfaces` missing → networking failed in live env. Added lo + eth0 DHCP.
@@ -124,7 +125,7 @@ Builds 11–16 (ISO-boots-and-installs era — full session details in `mountain
124 125 - `vm-build.sh` does rsync + build.sh + pull. `build.sh` now auto-nukes `.work/apkovl_*` and `.work/image-*` so apkovl-src edits propagate without manual cache stomping.
125 126 - Full nuke (rare; restores ~30 min of TCG kernel/modloop build): `ssh -p 2222 ... 'rm -rf /home/build/mountaineer-build/.work'`.
126 127 - VM install test cycle: `./tools/qemu/vm-test-install.sh --daemonize` → `ssh-keygen -R [127.0.0.1]:2223 -f .vms/known_hosts` → wait for port → `ssh ... 'cat > /usr/local/sbin/mountaineer-install' < installer/install.sh` (live ISO has no scp/sftp) → `ssh ... mountaineer-install --config /tmp/install.yaml`.
127 - - After install: standalone boot of installed disk uses same OVMF setup, `-drive file=.vms/disks/target.qcow2,if=virtio,format=qcow2`, no `-cdrom`, port-forward 2224. See `mountaineer-build/build_notes.md` for the full incantation.
128 + - After install: standalone boot of installed disk uses same OVMF setup, `-drive file=.vms/disks/target.qcow2,if=virtio,format=qcow2`, no `-cdrom`, port-forward 2224. See `../build/build_notes.md` for the full incantation.
128 129
129 130 ### Package availability — v3.23 main+community (verified, don't re-test)
130 131
@@ -215,8 +216,8 @@ Builds 11–16 (ISO-boots-and-installs era — full session details in `mountain
215 216
216 217 ### Implementation follow-ups
217 218
218 - - [x] `sysop-tui` crate: frame, footer keybind renderer, flatwhite color constants, selection widget, reserved globals — lives in `mountaineer-sysop/crates/sysop-tui/`
219 - - [x] `sysop info <role>` — first subcommand, role→tool registry shipped (33 roles in `mountaineer-sysop/crates/sysop/data/roles.toml`)
219 + - [x] `sysop-tui` crate: frame, footer keybind renderer, flatwhite color constants, selection widget, reserved globals — lives in `../sysop/crates/sysop-tui/`
220 + - [x] `sysop info <role>` — first subcommand, role→tool registry shipped (33 roles in `../sysop/crates/sysop/data/roles.toml`)
220 221 - [x] `sysop motd on/off/print` — opt-out tip rotation, time-bucketed; config at `/etc/mountaineer/sysop.toml` (`$SYSOP_CONFIG` override for host dev)
221 222 - [x] `sysop services` (read-only) — s6-rc backend with mock fallback for host dev; `--summary` emits `ok`/`N down` for the yambar `svc` segment to consume. Enable/disable verbs deferred to live-system phase
222 223 - [x] `sysop storage` (read-only) — zfs backend (zpool list) with mock fallback; `--summary` emits `ok`/`degraded` for the yambar `zfs` segment. Detail view, scrub trigger, snapshot ops deferred
@@ -1,4 +1,6 @@
1 - # mountaineer-sysop — todo
1 + # sysop — todo
2 +
3 + Component of the Mountaineer monorepo. Cargo workspace; binary + primitives crate.
2 4
3 5 Status: Pre-v0. MVP slice complete: `sysop info`, `sysop motd`, `sysop services`, `sysop storage`, `sysop wifi`, `sysop net` all run on host with mock-or-real backend auto-detection. Yambar producers ready for `svc`, `zfs`, `net`. First interactive subcommand (`wifi`) lands a masked password input. Active: TBD — natural next is `sysop id` (large) or pause sysop for overlay/installer work.
4 6
@@ -16,7 +18,7 @@ Status: Pre-v0. MVP slice complete: `sysop info`, `sysop motd`, `sysop services`
16 18
17 19 ## Phase 3 — `sysop motd` (open items)
18 20
19 - - [ ] `/etc/profile.d/sysop-motd.sh` glue script — calls `sysop motd print` on login. Lives in **mountaineer-build apkovl-src**, not this repo
21 + - [ ] `/etc/profile.d/sysop-motd.sh` glue script — calls `sysop motd print` on login. Lives in `../build/apkovl-src/`
20 22 - [ ] Tip set worth revisiting once more `sysop` verbs exist — currently 6, drawn from AESTHETICS
21 23 - [ ] Decide whether `sysop motd print` should respect a "first-login-of-the-day" suppression to avoid tip spam in tmux-heavy sessions
22 24
@@ -55,7 +57,7 @@ Status: Pre-v0. MVP slice complete: `sysop info`, `sysop motd`, `sysop services`
55 57 ## Deferred (post-MVP scaffolding)
56 58
57 59 - [ ] `sysop logs <service>` — lnav front
58 - - [ ] `sysop id` — identity subsystem (full design in `mountaineer/todo.md`)
60 + - [ ] `sysop id` — identity subsystem (full design in `../../docs/todo.md`)
59 61 - [ ] `sysop upgrade`, `sysop wg`, `sysop notifications mute`, `sysop podman-s6`
60 62 - [ ] Tab completion (bash/zsh/nushell)
61 63 - [ ] Man pages (mdoc; generated from clap?)
@@ -67,8 +69,9 @@ Status: Pre-v0. MVP slice complete: `sysop info`, `sysop motd`, `sysop services`
67 69 - `Cargo.toml` — workspace root
68 70 - `crates/sysop/` — CLI binary
69 71 - `crates/sysop-tui/` — shared TUI primitives (flatwhite, footer chrome, selection, reserved keys)
70 - - `../mountaineer/AESTHETICS.md` — committed aesthetic/UX picks the TUI must honor
71 - - `../mountaineer/MANIFESTO.md` — principles 1, 2, 14, 15 are the load-bearing ones for this repo
72 - - `../mountaineer/STACK.md` — role→tool mappings consumed by `sysop info`
73 - - `../mountaineer/todo.md` — wider Mountaineer state and the `sysop id` design
72 + - `../../docs/AESTHETICS.md` — committed aesthetic/UX picks the TUI must honor
73 + - `../../docs/MANIFESTO.md` — principles 1, 2, 14, 15 are the load-bearing ones for this component
74 + - `../../docs/STACK.md` — role→tool mappings consumed by `sysop info`
75 + - `../../docs/todo.md` — wider Mountaineer state and the `sysop id` design
76 + - `../../build/` — apkovl-src, installer, mkimg profiles (where overlay configs that consume `sysop` producers will live)
74 77 - `/Users/max/Code/CONTRIBUTING.md` — cross-cutting rules