Skip to content

fix(bundle): Pin urunc at the commit that boots arm64 on cloud-hypervisor - #14

Merged
ananos merged 1 commit into
mainfrom
fix/urunc-arm64-virtio-console
Sep 30, 2026
Merged

ananos merged 1 commit into
mainfrom
fix/urunc-arm64-virtio-console

Conversation

@ananos

@ananos ananos commented Sep 29, 2026

Copy link
Copy Markdown
Contributor

Summary

brig v0.3.0 runs every sandbox on cloud-hypervisor, and on arm64 Linux none of them boots: the guest powers off within half a second and brig reports "sandbox did not become ready". urunc gives the guest console=ttyS0, and cloud-hypervisor's arm64 UART is a PL011 (ttyAMA0), so the guest has no console. urunit then cannot hand the app a terminal (tcsetpgrp on a closed stdin fails with EBADF), the app never runs, and URUNIT_POWEROFF powers the guest off. Switching the console to ttyAMA0 exposes a second problem: cloud-hypervisor appends earlycon=pl011,mmio,<addr> to the command line, after the -- that starts the app's arguments, and the app receives it as an argument.

This patch pins urunc at f6d54d6, which is 74dd0cc plus one commit on the same branch: a Linux guest on cloud-hypervisor on arm64 boots on the virtio console (hvc0) with the serial port off, as urunc already does on qemu. amd64 keeps console=ttyS0 and is unchanged.

Changes

  • scripts/build-bundle.sh: URUNC_REF_DEFAULT moves from 74dd0cc to f6d54d6, and the comment above it names the new commit.
  • README.md, DESIGN.md, docs/variants.md: the pinned commit.

Testing

On jetson6 (arm64, KVM), with the v0.1.0-rc11 rootless bundle laid down under a scratch HOME, and urunc built from this commit's tree (2cfaa66c):

  • brig sh ubuntu@x uname -r on a fresh sandbox returns 6.12.95, rc 0, in 4.0 s. With rc11's own urunc it fails every time with "sandbox did not become ready", with either kernel.
  • 20 container boots per kernel through nerdctl with com.urunc.unikernel.hypervisor=cloud-hypervisor: no first exec failed. The agent answered in 812 ms (median) on hull-assets' arm64 kernel and 672 ms on bunny's. Five brig sh runs per kernel all returned 0.
  • cloud-hypervisor now runs with --console tty --serial off and console=hvc0.
  • urunc's test_unikernels and test_hypervisors pass.

CI builds the amd64 and arm64 bundles from the new pin.

…isor

No sandbox booted on arm64 Linux under brig v0.3.0, which runs every
sandbox on cloud-hypervisor. urunc gave the guest console=ttyS0, and
cloud-hypervisor's arm64 UART is a PL011 (ttyAMA0), so the guest had no
console. urunit could not hand the app a terminal, the app never ran,
and the guest powered off at once; brig said only "sandbox did not
become ready". Turning the PL011 on is not enough: cloud-hypervisor then
appends earlycon= to the command line, after the "--" that starts the
app's arguments, and the app receives it as an argument.

urunc f6d54d6 boots a Linux guest on cloud-hypervisor on arm64 on the
virtio console (hvc0) with the serial port off, as it already does on
qemu. It is 74dd0cc plus that one commit, on the same branch. amd64
keeps console=ttyS0 and is unchanged.

Signed-off-by: Anastassios Nanos <ananos@nofire.ai>
@ananos
ananos force-pushed the fix/urunc-arm64-virtio-console branch from fb3c1ab to 2440e5c Compare September 30, 2026 06:35
@ananos
ananos marked this pull request as ready for review September 30, 2026 06:35
@ananos
ananos merged commit e3a557c into main Sep 30, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant