Skip to content

ci: Regenerate the initramfs after installing bootc from copr - #2

Closed
cgwalters-bot wants to merge 4 commits into
mainfrom
bot/ci-regen-initramfs
Closed

cgwalters-bot wants to merge 4 commits into
mainfrom
bot/ci-regen-initramfs

Conversation

@cgwalters-bot

@cgwalters-bot cgwalters-bot commented Sep 26, 2026 •

Copy link
Copy Markdown
Collaborator

The CI image installs bootc from copr on top of centos-bootc but keeps the base image's initramfs. Current bootc writes only composefs.digest= in BLS entries, while the bootc 1.16.13 initramfs in centos-bootc:stream10 only starts bootc-root-setup.service with a composefs karg, so the composefs UEFI boot test ends in emergency mode (job). A newer bootc with an older initramfs isn't supported, so this regenerates the initramfs after installing bootc.

Tested on a 16-core RHEL 10 devspace, with the stream10 image built from Dockerfile (copr bootc 202609261137.g83d1589142) and rootless equivalents of the bootc-e2e steps (bcvk to-disk --filesystem ext4 in place of the privileged bootc install to-disk --via-loopback, then the same OVMF QEMU boot as scripts/test-uefi-vm-boot.sh):

  • The initramfs unit now has ConditionKernelCommandLine=|composefs.digest (before: only =composefs).
  • composefs UEFI boot: reaches login: with this change; on main it fails with "Failed to start initrd-switch-root.service" and enters emergency mode.
  • ostree UEFI boot reaches login: with this change.
  • tests/tests/bootupctl-status-in-bootc.sh and the build's bootc container lint --fatal-warnings pass.

Not run: the stream9, aarch64 and grubcc=1 (Fedora, Dockerfile.bls, which doesn't use the copr) variants, and the BIOS boot test.

Generated-by: https://github.com/cgwalters/#llms


Review draft in cgwalters-forge, not upstream yet. This section is removed when the PR is opened upstream.

  • Upstream: coreos/bootupd, base main
  • Board item: PVTI_lADOE9oHIs4BlJLczg9kEvU
  • Fork CI: off; the devspace testing described above is this PR's CI, and upstream CI runs once it is opened there

To review:

  • Approve, or comment /promote on a line of its own, to open it upstream, ready for review. Either covers only the commits pushed so far.
  • If upstream requires DCO, approving also signs off: promote adds Signed-off-by: Colin Walters <walters@verbum.org> to the commits lacking it (the bot's and yours; anyone else's only if you ask), with you as committer.
  • Add a /draft line (in the same comment or before) to open it upstream as a draft (/ready undoes that).
  • Close to drop it.
  • Edit the title and description freely: they become the upstream PR's. Review comments are squashed into the commits they concern, with a reply here.

@cgwalters-bot cgwalters-bot left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review guide for head e41a5ba99c: where to look closely and what is safe to skim. It is advice from the bot's reviewer and doesn't replace reading the diff; the review app walks it.

Two-line CI fix: after installing bootc from copr in the Dockerfile used by the bootc-e2e jobs, regenerate the initramfs so bootc-root-setup.service in the initrd matches the installed bootc (current bootc writes only composefs.digest=, which the 1.16.13 initramfs in centos-bootc:stream10 ignores). The dracut invocation matches the pattern in bootc docs (kver from /usr/lib/modules, output to /usr/lib/modules/KVER/initramfs.img); hostonly=no comes from the base image dracut.conf.d, so no extra flags are needed. Dockerfile.bls does not use the copr and is unaffected. Low risk; the only cost is an extra dracut run in every stream9/stream10/Fedora build of this Dockerfile.

Hotspots

  1. note · logic — Dockerfile:39-40 (e41a5ba): Assumes exactly one kernel dir under /usr/lib/modules (true for bootc base images, and bootc container lint enforces it). Runs unconditionally, including on Fedora bases where no copr bootc is installed; harmless but slower.

Johan-Liebert1 and others added 3 commits October 1, 2026 15:31
We have cases where `grub2/grub.cfg -> ../loader/grub.cfg` and
since we moved to cap-std APIs, the metadata gathering for the file
fails since the target leads to outside the filesystem (which is the
directory `grub2` in this case).

To fix, use `std::fs` APIs to get metadata

Use `GRUBCONFIG_FILE_MODE` constant instead of raw 0600 mode

Signed-off-by: Pragyan Poudyal <pragyanpoudyal41999@gmail.com>
bootc 1.16.14 (in copr) uses composefs.digest= cmdline, but since we
don't rebuild the initramfs, we never include that digest as a condition
for bootc-initramfs-setup to run which fails the VM startup

Disable C10S tests for composefs, for now

Signed-off-by: Pragyan Poudyal <pragyanpoudyal41999@gmail.com>
grubcfg: Handle symlink that lead outside of `grub2`
@cgwalters-bot

Copy link
Copy Markdown
Collaborator Author

Your approval was seen both times, and nothing happened because coreos/bootupd is on the human-text list: for those repos the bot does not open the upstream PR with its own title, description or commit messages. Approval alone is not enough there; it waits for you to edit the title, body and commit messages into your own words and then comment /promote --human-text on a line of its own.

The bug is that the bot never said so here. Tracked in cgwalters-forge/tracker#388.

Generated-by: https://github.com/cgwalters/#llms

@cgwalters-bot

Copy link
Copy Markdown
Collaborator Author

Correction to the above: your answer on tracker#245 (accept means post as the bot, upstream LLM rules advisory) makes the /promote --human-text step unnecessary here. The policy record for coreos/bootupd is flipped in cgwalters-bot/homegit#145, which needs your approval because only you can loosen a verdict. Once that merges, your approval on this PR promotes it as is.

Generated-by: https://github.com/cgwalters/#llms

cgwalters-bot added a commit to cgwalters-bot/homegit that referenced this pull request Oct 6, 2026
The operator approved cgwalters-forge/bootupd#2 twice and saw nothing
happen: coreos/bootupd is human-text, so the approval could not promote,
but that was only said in the sweep's watch.txt, which they don't read.
Eleven fork PRs are in that state.

So with --apply, an approved fork PR that isn't promoted now gets one
comment with the reason and their next step, and the same in its board
item's News. The comment is keyed by approval, head and reason: a sweep
with nothing new stays quiet, while approving again without fixing the
cause is answered again rather than met with the same silence. A head
that moved since the approval, which was not listed at all before, is
said once per approval however often the head moves after it.

A human-text PR approved with '/promote --human-text' was listed for a
promote "by hand", which in practice meant a model running the command.
The sweep runs it now: bot-pr promote is what checks that the text is
theirs, and it refuses as before when it isn't. A refused head is also
retried at once on a new approval instead of only after 6h, since
"fix it and /promote again" is the next step the comment gives.

Forge PRs are in the bot's own org, so none of this text goes upstream.

Generated-by: AI
cgwalters-bot added a commit to cgwalters-bot/homegit that referenced this pull request Oct 6, 2026
The operator approved cgwalters-forge/bootupd#2 twice and saw nothing
happen: coreos/bootupd is human-text, so the approval could not promote,
but that was only said in the sweep's watch.txt, which they don't read.
Eleven fork PRs are in that state.

So with --apply, an approved fork PR that isn't promoted now gets one
comment with the reason and their next step, and the same in its board
item's News. The comment is keyed by approval, head and reason: a sweep
with nothing new stays quiet, while approving again without fixing the
cause is answered again rather than met with the same silence. A head
that moved since the approval, which was not listed at all before, is
said once per approval however often the head moves after it.

A human-text PR approved with '/promote --human-text' was listed for a
promote "by hand", which in practice meant a model running the command.
The sweep runs it now: bot-pr promote is what checks that the text is
theirs, and it refuses as before when it isn't. A refused head is also
retried at once on a new approval instead of only after 6h, since
"fix it and /promote again" is the next step the comment gives.

Forge PRs are in the bot's own org, so none of this text goes upstream.

Generated-by: AI
cgwalters-bot added a commit to cgwalters-bot/homegit that referenced this pull request Oct 6, 2026
The operator approved cgwalters-forge/bootupd#2 twice and saw nothing
happen: coreos/bootupd is human-text, so the approval could not promote,
but that was only said in the sweep's watch.txt, which they don't read.
Eleven fork PRs are in that state.

So with --apply, an approved fork PR that isn't promoted now gets one
comment with the reason and their next step, and the same in its board
item's News. The comment is keyed by approval, head and reason: a sweep
with nothing new stays quiet, while approving again without fixing the
cause is answered again rather than met with the same silence. A head
that moved since the approval, which was not listed at all before, is
said once per approval however often the head moves after it.

A human-text PR approved with '/promote --human-text' was listed for a
promote "by hand", which in practice meant a model running the command.
The sweep runs it now: bot-pr promote is what checks that the text is
theirs, and it refuses as before when it isn't. A refused head is also
retried at once on a new approval instead of only after 6h, since
"fix it and /promote again" is the next step the comment gives.

Forge PRs are in the bot's own org, so none of this text goes upstream.

Generated-by: AI
cgwalters-bot added a commit to cgwalters-bot/homegit that referenced this pull request Oct 6, 2026
The operator approved cgwalters-forge/bootupd#2 twice and saw nothing
happen: coreos/bootupd is human-text, so the approval could not promote,
but that was only said in the sweep's watch.txt, which they don't read.
Eleven fork PRs are in that state.

So with --apply, an approved fork PR that isn't promoted now gets one
comment with the reason and their next step, and the same in its board
item's News. The comment is keyed by approval, head and reason: a sweep
with nothing new stays quiet, while approving again without fixing the
cause is answered again rather than met with the same silence. A head
that moved since the approval, which was not listed at all before, is
said once per approval however often the head moves after it.

A human-text PR approved with '/promote --human-text' was listed for a
promote "by hand", which in practice meant a model running the command.
The sweep runs it now: bot-pr promote is what checks that the text is
theirs, and it refuses as before when it isn't. A refused head is also
retried at once on a new approval instead of only after 6h, since
"fix it and /promote again" is the next step the comment gives.

Forge PRs are in the bot's own org, so none of this text goes upstream.

Generated-by: AI
cgwalters-bot added a commit to cgwalters-bot/homegit that referenced this pull request Oct 6, 2026
The operator approved cgwalters-forge/bootupd#2 twice and saw nothing
happen: coreos/bootupd is human-text, so the approval could not promote,
but that was only said in the sweep's watch.txt, which they don't read.
Eleven fork PRs are in that state.

So with --apply, an approved fork PR that isn't promoted now gets one
comment with the reason and their next step, and the same in its board
item's News. The comment is keyed by approval, head and reason: a sweep
with nothing new stays quiet, while approving again without fixing the
cause is answered again rather than met with the same silence. A head
that moved since the approval, which was not listed at all before, is
said once per approval however often the head moves after it.

A human-text PR approved with '/promote --human-text' was listed for a
promote "by hand", which in practice meant a model running the command.
The sweep runs it now: bot-pr promote is what checks that the text is
theirs, and it refuses as before when it isn't. A refused head is also
retried at once on a new approval instead of only after 6h, since
"fix it and /promote again" is the next step the comment gives.

Forge PRs are in the bot's own org, so none of this text goes upstream.

Generated-by: AI
@cgwalters-bot

Copy link
Copy Markdown
Collaborator Author

Not promoted: coreos/bootupd is human-text, so the title, body and commit messages sent there must be yours.

Next: edit this PR's title and body (dropping the Generated-by line), reword the commits and push them to this branch yourself, then comment /promote --human-text on a line of its own.

Generated-by: https://github.com/cgwalters/#llms

@cgwalters-bot

Copy link
Copy Markdown
Collaborator Author

Upstream LLM rules (advisory): coreos/bootupd's contribution policy record says human-text: code by the bot is fine, but the PR title and body, commit messages and comments must be cgwalters' own, except an answer on a thread where cgwalters summoned the bot. AI trailer: default (Generated-by: AI); nothing written, and precedent on main is Assisted-by (2 of the last 100 commits). The text sent there must be yours; the next comment says how.

Record: upstream-policy/coreos/bootupd.md, checked 2026-09-25 by the policy-check subagent (coordinator session 929c7a64, converted from an earlier read-only survey and re-read against current upstream).

Generated-by: https://github.com/cgwalters/#llms

@cgwalters-bot

Copy link
Copy Markdown
Collaborator Author

Upstream LLM rules (advisory): coreos/bootupd's contribution policy record says bot-ok: the bot may write the code and the text, with the AI trailer. AI trailer: default (Generated-by: AI); nothing written, and precedent on main is Assisted-by (2 of the last 100 commits). Nothing here holds this PR back: the bot promotes it now.

Record: upstream-policy/coreos/bootupd.md, checked 2026-09-25 by the policy-check subagent (coordinator session 929c7a64, converted from an earlier read-only survey and re-read against current upstream).

Generated-by: https://github.com/cgwalters/#llms

The CI image replaces the base image's bootc with a newer build from
copr but keeps the base image's initramfs, which bootc doesn't support.
It broke the stream10 composefs UEFI boot test once bootc started
writing only composefs.digest= in BLS entries: the bootc 1.16.13
initramfs in centos-bootc:stream10 only starts bootc-root-setup.service
with a composefs= karg, so switch-root fails.

Generated-by: AI
@cgwalters-bot
cgwalters-bot force-pushed the bot/ci-regen-initramfs branch from e41a5ba to 35948c7 Compare October 7, 2026 21:32
@cgwalters-bot

Copy link
Copy Markdown
Collaborator Author

Opened upstream as coreos#1168. Closing this review draft.

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.

3 participants