Skip to content

feat(appliance): generic kernel variant — hi-res console for the console-window user#533

Merged
aaronsb merged 3 commits into
mainfrom
feat/appliance-generic-kernel
Jun 16, 2026
Merged

feat(appliance): generic kernel variant — hi-res console for the console-window user#533
aaronsb merged 3 commits into
mainfrom
feat/appliance-generic-kernel

Conversation

@aaronsb

@aaronsb aaronsb commented Jun 16, 2026

Copy link
Copy Markdown
Owner

What

Adds a second appliance kernel variant, selected at build time, and ships both on the release.

  • build-appliance.sh --kernel cloud|generic (default cloud, unchanged).
    • generic swaps cloud→generic kernel, purges the cloud kernel, and sets GRUB_GFXMODE/gfxpayload=keep → a real framebuffer console. Also brings AHCI/SATA (the ADR-119 CD-drive carrier lever).
    • Generic artifacts get a -generic name suffix so both coexist in out/.
  • publish.sh appliance now builds + attaches both variants (cloud unsuffixed, generic -generic) to the GitHub release.
  • ADR-119 §E records the two-variant decision; appliance/README documents --kernel and which variant for whom.

Why

The Debian cloud kernel ships no DRM/framebuffer (console locked at 80×25) or AHCI drivers. That's fine headless — but the homelab/desktop user runs this in a VirtualBox/VMware/Hyper-V window and reads the console there; it never occurs to them to switch to tty1 or SSH. For them the cramped 80×25 is the product. cloud stays the default (the expected, lean, headless shape); generic is the opt-in for the console-window user.

Validation

Booted a throwaway generic build (network-less, on a copy so the artifact stays clean):

cloud (before) generic (now)
kernel …-cloud-amd64 6.1.0-49-amd64
DRM/fb none card0 + fb0 @ 1280×800
console 80×25 160×50

Test

  • bash -n on both scripts; publish.sh appliance --dry-run exercises both-variant resolution.
  • ADR lint / doclint / link_check: 0/0.

aaronsb added 3 commits June 16, 2026 15:00
The Debian cloud kernel ships no DRM/framebuffer (console locked at 80x25) or
AHCI drivers — fine headless, but the homelab/desktop user reads the console in
a VirtualBox/VMware window and it never occurs to them to switch to tty1. Add
--kernel cloud|generic (default cloud, unchanged). generic swaps cloud→generic
kernel, purges the cloud kernel, and sets GRUB_GFXMODE/gfxpayload=keep for a real
framebuffer console (validated: 160x50 vs 80x25, fb0 + DRM present). Also brings
AHCI/SATA — the ADR-119 CD-drive carrier lever. Generic artifacts get a
'-generic' name suffix so both variants coexist.
publish.sh appliance now builds + attaches BOTH variants (cloud unsuffixed,
generic -generic) to the release. ADR-119 §E records the two-variant decision
(cloud default for the headless/cloud common case; generic for the console-window
user) and the README documents --kernel + which variant for whom.
…p-build

- C1: cloud-kernel purge uses '&&' (not ';') so a failed purge aborts instead of
  being masked by autoremove; add a hard post-condition that a bootable non-cloud
  kernel survives the swap (fail loud rather than ship a kernel-less image).
- M1: publish.sh --skip-build now warns+skips a variant whose OVA is absent and
  publishes whatever IS ready (was: abort the whole run); hard-fail only post-build
  or when zero OVAs found. Dry-run reports the resolved asset set.
@aaronsb aaronsb merged commit fb27e07 into main Jun 16, 2026
6 checks passed
@aaronsb aaronsb deleted the feat/appliance-generic-kernel branch June 16, 2026 22:12
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