Commit Graph
3 Commits
Author SHA1 Message Date
Lukas GreveandClaude Sonnet 5 b8cd2966f4 build-image: serialize host-wide with flock, clean up stale mounts/devices
build-image / validate (push) Successful in 10s
ci / cook (push) Successful in 11s
build-image / build-image (phyllomeos-headless, 8192) (push) Successful in 23m38s
build-image / build-image (phyllomeos, 16384) (push) Successful in 32m1s
Gitea runs each matrix entry as its own task, so build-image.yaml's
`max-parallel: 1` never serialized the two editions -- both builds started
at once on the fedora:host runner and corrupted each other's global
anaconda/livemedia-creator state (/mnt/sysroot, /mnt/sysimage, loop and
device-mapper devices), surfacing as bootctl failing with "Couldn't find
EFI system partition" even though the dish's EFI partition was fine.

build-image.sh now takes a host-wide flock around livemedia-creator, and
under the lock first clears any stale mount/dm/loop device a previously
failed build left behind. Verified on the runner: both editions launched
concurrently now run serially under the lock and build successfully.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 12:46:08 +02:00
Lukas GreveandClaude Sonnet 5 67316d9852 cook: two default dishes (phyllomeos, phyllomeos-headless) + guest/experimental tiers; CI builds raw images
build-image / validate (push) Successful in 8s
ci / cook (push) Successful in 10s
build-image / build-image (phyllomeos, 16384) (push) Failing after 1m13s
build-image / build-image (phyllomeos-headless, 8192) (push) Failing after 11m10s
Manifest groups get a tier; only `default` is generated (make all TIER=...,
--tier). Default: phyllomeos (GNOME + virt-manager) and phyllomeos-headless,
Fedora 44, systemd-boot, CPU-agnostic hypervisor ingredient (hypervisor_type:
any). guest tier: guest-server, guest-desktop. experimental: biosboot/grub,
encrypted, rawhide. Generator clears stale recipes/dishes before writing.

build-image.sh: --dish and --tier; deploy.sh: --tier. build-iso.yaml replaced
by build-image.yaml: raw images for both editions on the fedora:host runner
(TMPDIR=/var/tmp, max-parallel 1), attached with the flattened kickstarts to
tagged releases. Live edition no longer built.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 11:35:28 +02:00
Lukas GreveandClaude Sonnet 5 dceb82f8f6 Add build-image.sh: raw/qcow2 disk images without libvirt/virt-install
Runs `livemedia-creator --no-virt --make-disk` directly on the host to
produce a disk image any VM manager can consume (e.g. via virtpull's
`virtpull local ... --wonder-vm NAME`), instead of deploy.sh's live
virt-install/libvirt session.

An earlier version wrapped this in `mock`, mirroring
.gitea/workflows/build-iso.yaml's ISO build. That doesn't work for
--make-disk: mock's chroot has no live systemd-udevd, so udev never
populates properties for the loop device livemedia-creator creates,
and blivet's device scan crashes. --make-iso never hits this since it
never touches block devices. Reproduced identically on Fedora 44 and
43 mock chroots, confirmed fixed by running directly on the host
instead (root required, for /dev/loop-control access).

Also fixes two real kickstart incompatibilities with the --no-virt
disk-image path (applied to a scratch copy, not the shared
ingredients): the `text` display-mode directive (needed for
virt-install's netinstall console) conflicts with livemedia-creator's
own display handling, and `part / --grow` with no explicit --size
crashes livemedia-creator's upfront disk-size calculation (works fine
under virt-install, which pre-creates the disk at a known size
instead) — now configurable via --root-size.

New --extra-ks FILE flag layers one-off local content (e.g. a bespoke
user/rootpw override) onto the scratch copy without touching tracked
ingredients, following the README's existing "bespoke dish not part
of the matrix" pattern.

Factored deploy/deploy-distro.sh's dish-picker into deploy/select-dish.sh,
shared by both scripts.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-18 20:04:49 +02:00