Compare commits

...

3 Commits

Author SHA1 Message Date
archipelago
b0c9bd2a0c docs: #7 exhaustive isolation — seccomp ruled out; fmcd runs standalone, orchestrator-managed fails (open)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 14:39:33 -04:00
archipelago
63b98599e8 Revert "fix(fedimint): run fmcd with seccomp=unconfined so its DHT can start (#7)"
This reverts commit 409543c41e78025354acbdde5ffc6445895d4508.
2026-06-20 14:37:24 -04:00
archipelago
409543c41e fix(fedimint): run fmcd with seccomp=unconfined so its DHT can start (#7)
fmcd crash-looped "Operation not permitted (os error 1)" on .116 (kernel
6.12.74): the default rootless seccomp profile blocks a syscall its Mainline-DHT
/ iroh transport needs, so the REST API never came up (:8178 → HTTP 000) and
federations couldn't be joined. Verified: with seccomp=unconfined fmcd boots and
answers /v2/* (HTTP 401 instead of dead). fmcd works on other nodes, so this is
kernel/seccomp-specific — but the relaxation is safe for an outbound-networking
daemon and harmless where not needed.

- new `security.seccomp_unconfined` manifest flag (SecurityPolicy);
- libpod backend sets `seccomp_profile_path: "unconfined"` (== --security-opt
  seccomp=unconfined); quadlet backend emits `SeccompProfile=unconfined`;
- enabled in apps/fedimint-clientd/manifest.yml.

NOTE: manifests live on-disk at /opt/archipelago/apps/<id>/manifest.yml, so the
node needs the updated manifest deployed + the fmcd container recreated to apply.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 13:08:13 -04:00

View File

@ -51,12 +51,18 @@ claude-login.html, chown 1000:1000, restart, verify sha256+health). Recreate fro
- **#1 companion crash** — added an on-screen red error overlay (`242baf5d`) since chrome://inspect isn't
reachable on the WebView; user reproduces → screenshots the box → that's the real error to fix on.
- **#7 NEW: can't add Fedimint federations on `.116`** — fmcd sidecar crash-loops `Operation not permitted
(os error 1)` on every start (DHT can't bootstrap), so `:8178` answers HTTP 000 and `wallet.fedimint-join`
fails. fmcd data dir IS correctly owned (100999). NODE-SPECIFIC: fmcd WORKS on `.198` (spent notes there),
fails only on `.116` → likely a seccomp/rootless syscall restriction on `.116`'s kernel (6.12.74).
Survives container recreate (reconciler made a fresh fedimint-clientd, still EPERM). NOT the ecash code.
Likely fix: add `--security-opt seccomp=unconfined` (or the specific cap) to the fmcd container spec, or
disable the fmcd DHT. WORKAROUND: test fedimint on `.198`/`.89`, not `.116`.
(os error 1)`, so `:8178` answers HTTP 000 and `wallet.fedimint-join` fails. fmcd WORKS on `.198`/`.89`.
EXHAUSTIVE black-box isolation on `.116` (seccomp default vs unconfined; cap-drop ALL vs caps restored;
fresh data vs a `cp -a` COPY of the real /data; default net vs archy-net; /data 755 vs 777) — **fmcd ran
in EVERY standalone `podman run` config**, including full real security (cap-drop ALL + readonly +
no-new-priv + archy-net + copy of real data). Only the ORCHESTRATOR-created container EPERMs. So:
- **seccomp is NOT the cause** (default-seccomp standalone runs) — the seccomp "fix" was reverted (`63b98599`).
- NOT caps, NOT /data perms/ownership, NOT the existing multimint.db (the copy runs), NOT archy-net.
- The differentiator is something specific to the orchestrator's libpod-API create vs `podman run` that I
did NOT pin (a related symptom: the orchestrator's volume self-heal logs `chown /data: Operation not
permitted` because the container has cap-drop ALL → no CAP_CHOWN). NEXT: create fmcd via the libpod API
socket directly (replicating prod_orchestrator's exact body) to repro outside the orchestrator, then diff.
WORKAROUND for now: **test Fedimint on `.198`/`.89` (working fmcd), not `.116`.** Not the ecash code.
- Deploy: all 6 nodes verified on `e1f2e88`; pushed gitea-vps2 (gitea-local token still 401s).
## SESSION 2 PROGRESS (2026-06-20, code-complete — NOT yet deployed; user held deploy)