feat: switch the microVM guest kernel to the arcboxlabs/kernel microvm flavor (CORE-79) - #49
Conversation
…nel microvm flavor (CORE-79) Replace the stock Firecracker CI vmlinux (6.1.155, built to run their whole test matrix, ~1.7 s to init under nested virt) with the dedicated minimal sandbox kernel built by arcboxlabs/kernel (FLAVOR=microvm). Same bundle shape (name=vmlinux, install_dir=kernel), new immutable CDN version key, so rollback is reverting this pin. Firecracker restore never re-reads the kernel file, so existing template snapshots keep restoring unchanged. x86_64 stays on the FC CI kernel until an x86 microvm config exists.
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Greptile SummaryThe PR switches the arm64 Firecracker guest kernel from the stock Firecracker artifact to the arcboxlabs/kernel microvm flavor while retaining the existing x86_64 source.
Confidence Score: 5/5The code change appears safe to merge after the explicitly documented kernel release is published and its asset URL is verified. The configuration preserves the expected bundle shape and architecture-specific sources, and no unacknowledged blocking or independently actionable defect remains.
|
| Filename | Overview |
|---|---|
| upstream.toml | Updates the arm64 guest-kernel source and shared deployment version while intentionally preserving the stock x86_64 kernel source; the unavailable release prerequisite is explicitly documented. |
Reviews (1): Last reviewed commit: "feat(kernel): source the microVM guest k..." | Re-trigger Greptile
There was a problem hiding this comment.
Important
The pin is correct in shape but not yet resolvable: arcboxlabs/kernel is at v0.0.22, so v0.0.23/microvm-kernel-arm64 404s and Assemble (arm64) is red on this SHA. That matches the PR's own merge-order note — flagging it so the blocker is recorded, plus two things worth settling before the tag is cut.
Reviewed changes — full read of the single-file diff, cross-checked against how upstream.toml is consumed by sync-binaries, the release pipeline, and client-side download verification.
vmlinuxarm64 source repointed — from the stock Firecracker CI kernel (vmlinux-6.1.155) tomicrovm-kernel-arm64off anarcboxlabs/kernelrelease; x86_64 stays on the FC CI kernel.- Version bumped
6.1.155→0.0.23-microvm— this doubles as the immutable CDN keybin/vmlinux/{version}/{arch}/vmlinux, so it also re-keys the (unchanged) x86_64 object. - Explanatory comment block added — records the microvm flavor's scope and why x86_64 is deferred.
Bundle shape is unchanged (name, install_dir), so no manifest-schema, download-code, or guest-path impact, and repository_upstream_config_is_valid still holds. I also checked the "no netfilter/PCI/ACPI/EFI" trade-off and found no regression reachable from this repo: dockerd/containerd/iptables run on the outer ArcBox kernel (the kernel-{arch} asset pulled in release.yml), not inside the Firecracker sandbox that boots this vmlinux.
⚠️ Nothing in this repo boots the kernel this PR pins
The change swaps a battle-tested general-purpose kernel for a bespoke minimal one, and no check in this repository will boot it. live-e2e.yml QEMU-boots only the outer kernel + rootfs and only on x86_64, and its checksum-validation leg defaults to BOOT_ASSETS_LIVE_ARCH=x86_64, so it won't even fetch the new arm64 object. The first evidence that a sandbox actually boots arrives downstream in arcbox after assets.lock moves — well past the point where a bad pin is cheap to undo.
Technical details
# No pre-merge validation path for the new sandbox kernel
## Affected sites
- `.github/workflows/live-e2e.yml:74,80-81` — the QEMU boot leg is gated to `x86_64`, so
it exercises the outer kernel only; the microVM `vmlinux` is never booted on any arch.
- `.github/workflows/live-e2e.yml:70` — `BOOT_ASSETS_LIVE_ARCH` defaults to `x86_64`, so
the `prepare_binaries` leg does not even checksum-validate the new arm64 object.
- `.github/workflows/sync-binaries.yml:62-63` — the "Verify CDN" step greps only the
*first* `name`/`version` pair in `upstream.toml` (currently `dockerd`), so a missing or
wrong `bin/vmlinux/0.0.23-microvm/arm64/vmlinux` object cannot be caught there.
## Required outcome
- Before this pin merges, someone has observed the pinned artifact actually boot a
Firecracker microVM to PID 1 on arm64 — not just download successfully.
- After the sync lands, positive confirmation that the object is retrievable and matches
the manifest sha256, rather than inferring it from a green `sync` job.
## Suggested approach (optional)
- Manual pre-merge check: download the release asset and boot it under Firecracker with
the sandbox's real `boot_args`, confirming the kernel reaches init.
- Post-sync check: `workflow_dispatch` `live-e2e.yml` with `arch: arm64` and
`boot_linux: false` — that runs `prepare_binaries` against the published CDN, which
exercises `download_and_verify` for the vmlinux entry end to end.
## Open questions for the human
- Is a CI-side Firecracker smoke boot of the sandbox kernel in scope for this repo, or is
that deliberately arcbox's responsibility? If the latter, this is a note, not a blocker.ℹ️ Nitpicks
- The shared
versionfield meansmanifest.jsonwill advertise0.0.23-microvmfor the x86_64vmlinuxtoo, even though that target still ships FC CI 6.1.155. The TOML comment explains it, but downstream manifest consumers only see the version string. Inherent to oneversionper binary in the schema, so probably just worth knowing rather than fixing here.
Claude Opus | 𝕏
|
Unblocked — kernel v0.0.23 is released, this PR's pin now resolves.
Measured size effect: the bundle gets smaller. The microVM kernel it replaces is the stock Firecracker CI image:
−8.25 MB, −48%, despite x86_64 deliberately stays on the FC CI kernel until an x86 microvm config lands. Ready for review/merge; the arcbox-side |

What
Repoints the
vmlinuxbinary (the Firecracker sandbox guest kernel,install_dir = "kernel") from the stock Firecracker CI artifact (s3://spec.ccfc.min/firecracker-ci/v1.14/aarch64/vmlinux-6.1.155) to the dedicated minimal sandbox kernel built by arcboxlabs/kernel#18:microvm-kernel-arm64from the kernel repo's GitHub release.name = "vmlinux",install_dir = "kernel") → zero changes to the manifest schema, download/materialization code, or arcbox's kernel path.bin/vmlinux/0.0.23-microvm/{arch}/vmlinux→ rollback = revert this pin (old objects stay on B2).VIRTIO_MMIO_CMDLINE_DEVICES+ kvmclock).The pinned URL points at kernel release
v0.0.23, which does not exist yet:versionto the actual tag, verify the asset downloads, then merge.sync-binaries.yml(B2 upload; sha256 is computed at sync time — cross-check against the release'smicrovm-kernel-arm64.sha256). The next boot-assets release (tag orkernel-releasedispatch) embeds the sha intomanifest.json.assets.lock([boot]version +manifest_sha256) and rebuilds the daemon — out of scope here; the sandboxboot_argscleanup (quiet loglevel=1, droppci=off) rides that change.