Repository navigation
🐛 fix: Resolve Packaged Pipe Addon Inside Guests - #336
Conversation
|
Same change has been running on our self-hosted v1.10.4 Docker Compose deployment since 11 Oct; jobs work normally. |
|
@codex review |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Codex Review: Didn't find any major issues. 🎉 Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
|
Thank's all 👍🏻 |
This implements the guest-entrypoint workaround documented and validated by LeonardSEO in #320. twltwk independently documented the same guest addon-path problem in #329. This PR adds the image regression tests and CI coverage across the three guest rootfs families.
When a runner copies its guest rootfs, the native pipe addon remains at
/usr/local/lib/anonymous-pipes.node, but the build stage'sSANDBOX_PIPE_ADDONDocker environment setting is lost. The API becomes healthy, then real execution fails while looking for/sandbox_api/.build/anonymous-pipes.node.Set the installed addon default in the shared guest entrypoint, after the VM/chroot boundary. An explicit guest value is preserved. This covers the standalone API, combined worker, and launcher rootfs families without depending on environment forwarding across the VM boundary.
Add an image regression test that starts the installed entrypoint and bundled API, rejects unsigned requests, and executes a signed shell job through NsJail while checking stdin, stdout, and stderr. It tests unset, empty, and overridden addon paths; the override case moves the addon away from the default location. CI runs it against the production guest rootfs stages, including both architectures in the existing launcher IPC job.
Validation:
api/Dockerfile:sandbox-build,docker/Dockerfile.worker-sandbox:sandbox-rootfs, andlauncher/Dockerfile:sandbox-build. Unsigned requests returned 401 in each case.git diff --checkpassed.b29cefb3af79b0767f94988bedc5c5d030ec0703. Builtapi/Dockerfile:sandbox-runner-true, booted its read-only ext4 disk through libkrun, and executed signed Python 3.14.4 and Node 24.15.0 jobs. Both returned HTTP 200 and exit code 0 with the expected stdin, stdout, stderr, and FIFO descriptors. Pythonasyncio.to_threadalso passed; unsigned requests returned 401. The launcher held real KVM VM/vCPU descriptors, and execution reported guest kernel 6.12.91. Cgroup v2, per-job identities, hardened mode, and seccomp remained enabled. The run artifact contains boot logs, execution responses, and source/image/disk provenance.b29cefb3af79b0767f94988bedc5c5d030ec0703.Fixes #320
Fixes #329