Skip to content

feat(vm): boot CoreOS via Ignition — Fedora CoreOS now runnable#50

Merged
ErenAri merged 2 commits into
mainfrom
feat/coreos-ignition-boot
Jun 26, 2026
Merged

feat(vm): boot CoreOS via Ignition — Fedora CoreOS now runnable#50
ErenAri merged 2 commits into
mainfrom
feat/coreos-ignition-boot

Conversation

@ErenAri

@ErenAri ErenAri commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

Makes the CoreOS boot path real, addressing the "RHCOS — those are the tricky ones" request (Angelo Puglisi) and the earlier audit note that RHCOS validation didn't actually work.

The gap

CoreOS-family images (Fedora CoreOS, RHEL CoreOS) boot via Ignition, not cloud-init, so the SSH/cloud-init executor couldn't provision the validator — they were marked unsupported.

The fix

A new Ignition seed-delivery mode (internal/vm/ignition.go): write a minimal Ignition v3 config authorising the per-run SSH key for the core user, and pass it to QEMU via -fw_cfg name=opt/com.coreos/config. Everything after SSH-up is seed-agnostic, so the rest of the pipeline is unchanged.

Proven on Fedora CoreOS

FCOS stable boots and the validator load + attaches a real artifact inside the guest:

  • booted distro fedora-coreos, kernel 7.0.11-200.fc44.x86_64
  • seed delivery: Ignition config via fw_cfg (opt/com.coreos/config), SSH user selected: core
  • ringbuf-modern: load=pass, attach=1/1

ExecutionTransport() now reports fedora-coreos supported. Profile renamed fedora-coreos-stable-6.14fedora-coreos-stable-7.0 to match the real kernel. Fetch the image with make vm-image-fcos (resolves the stream, verifies sha256, decompresses).

RHCOS — honest scope (unchanged claim)

rhcos shares this exact Ignition+SSH boot path, so it is mechanically supported — but its image ships only through the pull-secret-gated OpenShift release payload and can't be fetched/verified here. ExecutionTransport() keeps it unsupported with that precise reason until an operator supplies the image. RHCOS stays absent from the README "Distributions covered" section — no overclaiming.

Tests

  • internal/vm: ignition writer, CoreOS distro detection, seed-mode selection, fw_cfg arg, and the transport matrix (FCOS supported / RHCOS gated-on-image).
  • go build ./..., go vet ./..., gofmt, full go test ./... — all green.

🤖 Generated with Claude Code

CoreOS-family images boot via Ignition, not cloud-init, which is why the
SSH/cloud-init executor previously marked them unsupported. Add an Ignition
seed-delivery mode: write a minimal Ignition v3 config authorising the per-run
SSH key for the core user and pass it to QEMU via
-fw_cfg name=opt/com.coreos/config (internal/vm/ignition.go).

Fedora CoreOS is now runnable and proven end-to-end: FCOS stable boots and the
validator load/attaches inside the guest (verified on kernel 7.0.11-200.fc44,
ringbuf-modern load=pass attach=1/1). ExecutionTransport reports fedora-coreos
supported; the profile is renamed fedora-coreos-stable-7.0 to match the real
kernel. Fetch the image with `make vm-image-fcos`.

RHEL CoreOS (rhcos) shares this exact Ignition+SSH boot path, so it is
mechanically supported — but its image ships only through the pull-secret-gated
OpenShift release payload and cannot be fetched/verified here, so it stays
non-runnable (transport reason updated) until an operator supplies the image.
RHCOS remains absent from the README "Distributions covered" section.

Tests: ignition writer/distro-detection/seed-selection/fw_cfg arg + transport
matrix; all green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@ErenAri ErenAri force-pushed the feat/coreos-ignition-boot branch from 43dd0fd to 5258113 Compare June 26, 2026 21:21
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@ErenAri ErenAri merged commit 378957d into main Jun 26, 2026
7 of 8 checks passed
@ErenAri ErenAri deleted the feat/coreos-ignition-boot branch June 26, 2026 21:28
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