Skip to content

ci: install qemu-user, not the virtual qemu-user-static (Ubuntu 26.04) - #148

Merged
tannevaled merged 1 commit into
mainfrom
ci-qemu-ubuntu26
Oct 25, 2026
Merged

tannevaled merged 1 commit into
mainfrom
ci-qemu-ubuntu26

Conversation

@tannevaled

Copy link
Copy Markdown
Contributor

What broke, and why nothing was committed

ubuntu-latest became Ubuntu 26.04 on 2026-10-19. There qemu-user-static is a virtual package and apt refuses to choose between its two providers:

E: Package 'qemu-user-static' has no installation candidate
Package qemu-user-static is a virtual package provided by:
  qemu-user-binfmt-hwe 1:10.2.1+ds-1ubuntu4.4
  qemu-user-binfmt     1:10.2.1+ds-1ubuntu3.3

The step exits 100 in about twenty seconds. This lane went red between a green main and the next push with nothing committed here. 333 repositories in 258 organisations of this account carried the same line; this is part of that sweep.

Two things that are not the fix

  • ⚠ Installing a provider. qemu-user-binfmt registers binfmt handlers; it does not ship the qemu-<arch>-static binaries this lane invokes. A lane given only a provider takes its command -v branch and goes green while testing nothing — worse than red. qemu-user ships the dynamic qemu-<arch>, which is all go test -exec needs, so both packages are installed and both binary names are accepted at run time.
  • ⛔ Skipping when the emulator is missing. A missing emulator now fails this lane, and the lane prints which emulator it ran (running ppc64le under qemu-ppc64le). Without that line, "ran under emulation" and "skipped" are indistinguishable from a green tick — which is how a fix for this looks like it worked while testing nothing. Check that line in the lane's log, not the tick.

What did not change

Nothing but the package names and the emulator lookup. Where there was a bounded, retried apt loop it is kept — it answers a measured apt outage, which is a different defect. CGO_ENABLED=0, the test timeouts and the package lists are carried through verbatim: those were decisions somebody took.

How it was written

By qemufix v0.37.0 (go-fleettools/fleettools#128): a tested Go tool that recognises four workflow shapes, refuses by name anything else rather than guessing, and is idempotent — an already-fixed file comes back byte-identical and is reported already-fixed. Its tests assert the three invariants per shape, with a control that runs the invariant checkers against the unfixed input, and a planted positive for the idempotence claim.

Verified on the first merged lane of this campaign: the log reads running <arch> under <emulator> and the packages pass under emulation (see go-tex/engine#645).

🤖 Generated with Claude Code

`ubuntu-latest` became Ubuntu 26.04 on 2026-10-19. There `qemu-user-static` is
a VIRTUAL package and apt refuses to choose between its two providers:

    E: Package 'qemu-user-static' has no installation candidate
    Package qemu-user-static is a virtual package provided by:
      qemu-user-binfmt-hwe 1:10.2.1+ds-1ubuntu4.4
      qemu-user-binfmt     1:10.2.1+ds-1ubuntu3.3

The step exits 100 in about twenty seconds, so this lane went red between a
green main and the next push with nothing committed here.

⚠ Installing a PROVIDER is not the fix: `qemu-user-binfmt` registers binfmt
handlers, it does not ship the `qemu-<arch>-static` binaries this lane invokes.
A lane given only a provider takes its `command -v` branch and goes GREEN while
testing nothing, which is worse than red. `qemu-user` ships the dynamic
`qemu-<arch>`, which is all `go test -exec` needs, so both packages are
installed and BOTH binary names are accepted at run time.

⛔ And a missing emulator now FAILS this lane, which PRINTS which emulator it
ran (`running ppc64le under qemu-ppc64le`). Without that line, "ran under
emulation" and "skipped" are indistinguishable from a green tick.

Written by `qemufix` v0.37.0 (go-fleettools/fleettools#128), which recognises
four shapes, refuses by name anything else rather than guessing, and is
idempotent. Nothing else in the lane changed: the retry loop, `CGO_ENABLED=0`,
the test timeouts and the package lists are carried through verbatim.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@tannevaled
tannevaled merged commit 6ccee54 into main Oct 25, 2026
28 checks passed
@tannevaled
tannevaled deleted the ci-qemu-ubuntu26 branch October 25, 2026 23:04
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