3.4 KiB
created, title, area, severity, files
| created | title | area | severity | files | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 2026-08-01T04:05:00.000Z | Make archi-dev-box double as a fresh test node (both shapes, no ISO flash) | testing-infra | major |
|
Problem
Dorian (2026-08-01): wants archi-dev-box to serve as a testing node that can be exercised "as if it's a new node", running alongside the existing Linux desktop app install, without flashing the ISO. Both shapes are wanted — this is a testing node, so it needs to cover first-run UX and real app lifecycle.
Today the box runs one real production-ish node: archipelago.service (systemd, enabled,
/usr/local/bin/archipelago) against a heavily-populated /var/lib/archipelago (bitcoin,
btcpay, botfights, blobs, live LND/mesh state). That node must not be disturbed — it is the
dev-pair deploy target gated before every OTA.
Solution
Two shapes, both ISO-free. Ship A first, then B.
(A) Lightweight second instance, same Linux user. Own empty ARCHIPELAGO_DATA_DIR, own
ARCHIPELAGO_BIND port, ARCHIPELAGO_PORT_OFFSET set, mesh/Reticulum disabled. Boots
un-onboarded, so it exercises the true first-run path: seed generation, password/setup,
identity keygen, node naming, onboarding UI. Cheap to create and destroy — the natural
regression harness for onboarding changes.
(B) Second Linux user (useradd + loginctl enable-linger + its own rootless podman
namespace + own data dir). Gives a genuinely independent node where app install / uninstall /
reinstall lifecycle is real, not shared. This is what makes it a testing node rather than a
first-run mock.
Hazards (verified by grep 2026-08-01, must be designed around)
- Hardcoded paths defeat
ARCHIPELAGO_DATA_DIR. Several constants point at/var/lib/archipelagoliterally and ignore the override:bitcoin_rpc.rs:10(SECRETS_PATH),container/lnd.rs:131(ARCHY_DATA_DIR),electrs_status.rs:15,api/rpc/package/pine_ha.rs:34-36,bootstrap.rs:242(secrets dir),disk_monitor.rs:41. Under shape (A) a test instance that installs Bitcoin, LND, electrumx, or Pine/HA would read and write the LIVE node's files. Those four are off-limits in (A); shape (B) fixes this properly via a different user's paths — or the constants get plumbed through config, which is arguably the real fix and a candidate follow-up. - Rootless podman is per-Linux-user. In (A) both instances share one container
namespace:
PORT_OFFSETresolves port collisions, container name collisions it does not. - Reticulum/mesh contention. The live daemon holds
/dev/mesh-radioandidentity/node_key; a second instance would fight it for the radio. Mesh must be off for the test node (or the radio explicitly assigned to one of them).
Notes
Raised while resuming quick task 260731-upz (entropy/seed audit) — shape (A) is also the
natural on-node harness for that audit's UNVERIFIED checklist, since fresh-seed generation is
exactly the [ARCHY-1] path under review. Sequence this after 260731-upz lands.