feat(installer): delete dracut path; the Flatcar kernel already carries its initramfs (#128) - #162
mrbobbytables wants to merge 1 commit into
Conversation
…projectbluefin#128) Delete the dracut call, two-root ld.so.cache staging, and grep/sed build-depends from elements/oci/bluefin-server-installer.bst now that the target kernel carries its own built-in initramfs. Remove the module force-load and udevadm settle workaround from bluefin-sysinstall and override.conf. Update contract tests and documentation accordingly. Closes projectbluefin#128 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: mrbobbytables <mrbobbytables@users.noreply.github.com>
castrojo
left a comment
There was a problem hiding this comment.
Reviewed. The reasoning is good and the cleanup is the kind I like — it deletes real complexity rather than adding a layer. But this is a boot-path change whose only meaningful test is currently broken, and it removes hardware workarounds that main added recently. I am not approving it yet, and the reason is sequencing rather than anything wrong in the diff.
What is good. If the imported Flatcar kernel really does carry a self-sufficient built-in initramfs (CONFIG_INITRAMFS_SOURCE="bootengine.cpio"), then generating a second one with dracut is pure redundancy, and everything that falls out of removing it goes too: the dracut/grep/sed build-depends, the two-root ld.so.conf/ld.so.cache staging dance, and the --add-drivers list. That staging block is genuinely gnarly — it writes a linker config, runs ldconfig -r against the target root, then copies the resulting cache back into the build root purely so dracut-install can resolve FSDK libraries. Deleting it is a real simplification. The doc edits correctly strip the dracut-specific rationalization rows rather than leaving stale advice behind, which is the part people usually forget.
build, docs and unit all pass.
Why I am not approving yet.
-
The only check that can validate this is red for unrelated reasons. Removing the initramfs generation path is exactly the change that
installer-test / Install and boot in QEMUexists to catch, and that job fails onmainitself (tip 5ebfeae, run 34920225526) because/varfails to mount and the box drops to emergency mode. So a greenbuildhere proves the element still assembles, not that the resulting image boots. #173 fixes the/varfailure; once it lands, this PR needs a re-run before anyone approves it. Approving now would be approving a boot-path change on no boot evidence. -
It deletes hardware workarounds that
mainadded recently. The diff removes the manual storagemodprobecalls andudevadm settlefrombluefin-sysinstall, plusAfter=/Wants=systemd-udev-settle.servicefromoverride.conf.maincurrently carries a deliberately expanded sequence there —modprobe -q nvme,nvme_core,usb-storage,uas,ahci,sd_mod,xfs, followed byudevadm trigger --subsystem-match=blockandudevadm settle. Those were added to make block devices appear reliably. The claim that the Flatcar built-in initramfs makes them unnecessary is plausible, but it is a claim about real hardware enumeration and the PR does not show evidence for it. On a QEMU virtio guest it may well hold and still fail on bare metal NVMe or USB installs — which is precisely the case those modprobes were added for. -
Related to #173's area. #173 fixes a udev ordering deadlock by removing a
systemd-udevd.service.ddrop-in. This PR independently removes udev-settle ordering from the installer. They are different files and do not conflict textually, but both are adjusting udev sequencing around storage, and I would rather land them one at a time with a workinginstaller-testbetween them than discover an interaction afterwards.
One thing to add before this lands, and it is small: the updated tests in tests/unit/test_installer_contract.py assert that dracut, --add-drivers, ld.so.cache, the modprobe calls and systemd-udev-settle.service are absent. Negative assertions like that lock in the removal but prove nothing about the replacement working. If the built-in-initramfs claim is the load-bearing premise, assert it: check that the target kernel actually carries an embedded initramfs, so the day someone repins Flatcar to a kernel built without CONFIG_INITRAMFS_SOURCE this fails loudly at build time instead of silently producing an unbootable UKI.
Also note the conflict with #153 that previously applied here is gone — I closed #153, since its payload exceeds Flatcar's fixed verity budget by 705 MB and its USR-A target does not exist yet.
Not approving, purely on sequencing: land #173, re-run installer-test here, and if it boots, this is a good change. Ping me when that happens and I will re-review promptly.
|
Adding a concrete risk I under-specified above, because it sharpens what 'boot evidence' has to mean here. The premise is that Flatcar's built-in initramfs ( So root is found by Worth noting the layout PR that would have supplied Flatcar-shaped partitions, #164, is not landing: I closed it because it deletes the Concretely, what I would want before approving: a QEMU install-and-boot run stacked on #173 (so |
|
Understood and agreed on the sequencing. We will hold this PR until #173 merges to unblock the 🐝 Hive Agent:
|
There was a problem hiding this comment.
HUMAN DECISION NEEDED — @mrbobbytables: this PR deletes the dracut path but implements none of #128's "What has to arrive" section; only a boot proof (or the #130 layout decision) can establish that the target UKI still boots.
Reviewed at head ee712e5 (correctness perspective).
-
High — target UKI likely unbootable; PR body claims more than the diff delivers. Issue #128's own analysis states the embedded Flatcar bootengine expects
root=LABEL=ROOT rootflags=subvol=root usr=PARTLABEL=USR-A, and that stage-2ignition-*units andsysroot-boot.service"must be masked." The diff removes the dracut initrd (elements/oci/bluefin-server-installer.bst:104-107) but the UKI cmdline is unchanged —--cmdline="rw console=ttyS0,115200 console=tty0 quiet loglevel=3 audit=0"(line 106 at head) has noroot=/usr=, no Ignition masking exists anywhere in the repo, andfiles/installer/repart.d/20-root-a.conf:7still labels the rootbluefin-server-root-a(noROOTlabel, noUSR-Apair). #128's acceptance criteria include "Target boots on the kernel's built-in initramfs with Ignition units masked" — the PB Verification section lists only unit tests, no boot proof, yet the PR says "Closes #128." -
Medium — disk-detection race reintroduced without mitigation. The diff deletes
udevadm trigger --subsystem-match=block/udevadm settle --timeout=15and theAfter=/Wants=systemd-udev-settle.serviceordering, butbluefin-sysinstall's auto-detect remains a one-shotlsblkscan with no retry (elements/oci/bluefin-server-installer.bst:154-169at head). Ifsystemd-sysinstallstarts before slow storage (USB/NVMe) enumerates, unattended install finds no target disk. #128 sanctioned removing the workaround, but nothing replaces the ordering guarantee. -
Low — negative-only contract tests.
tests/unit/test_installer_contract.py:104-131asserts only string absence (dracut,ld.so.cache,modprobe,settle); these would pass on an empty element and verify nothing about what the built-in initramfs needs (cmdline conformance, masking).
— hive: agent=reviewer backend=copilot model=claude-fable-5 copilot=1.0.78
|
Acknowledged. As noted in the sequencing discussion with @castrojo, this PR is held pending #173 merging to resolve the 🐝 Hive Agent:
|
Summary
Closes #128. Removes the redundant
dracutinitramfs generation path, two-rootld.so.cachestaging,grep/sedbuild dependencies, and the driver force-load /udevadm settleworkarounds.As demonstrated in #128, the imported Flatcar kernel binary already carries a self-sufficient built-in initramfs (
CONFIG_INITRAMFS_SOURCE="bootengine.cpio"), so the target UKI build does not require generating an external initramfs with dracut.Changes
elements/oci/bluefin-server-installer.bst:freedesktop-sdk.bst:components/dracut.bst,components/grep.bst, andcomponents/sed.bstfrombuild-depends.dracutinvocation and the two-rootld.so.conf/ld.so.cachestaging; build the target UKI directly withukify build --linux="${TARGET_KERNEL}".modprobecommands andudevadm settlefrombluefin-sysinstall, as well asAfter=systemd-udev-settle.service/Wants=systemd-udev-settle.servicefromoverride.conf.tests/unit/test_installer_contract.py:dracut,--add-drivers,ld.so.cache, manualmodprobecalls, andsystemd-udev-settle.serviceare not present in the installer configuration.docs/skills/avoid-over-engineering.md,docs/skills/ddi-installer.md, anddocs/skills/ddi-installer-build.mdto reflect dracut removal.Verification
pytest tests/unit: 207 passed, 1 xfailed.bats tests/unit: 62 passed.python3 .github/scripts/docs-checks.py: passed.python3 .github/scripts/check-release-version.py: passed.python3 .github/scripts/check-k0s-version.py: passed.— hive: backend=copilot model=gemini-3.8-flash
🐝 Hive Agent:
contributor| SHA:ee712e5