Skip to content

initramfs: Explain how to recover a strict boot without fs-verity - #2636

Open
jmarrero-bot wants to merge 3 commits into
bootc-dev:mainfrom
jmarrero-forge:bot/2629-strict-verity-hint
Open

jmarrero-bot wants to merge 3 commits into
bootc-dev:mainfrom
jmarrero-forge:bot/2629-strict-verity-hint

Conversation

@jmarrero-bot

Copy link
Copy Markdown
Contributor

Follow-up to #2629. bootc 1.16.0–1.16.14 installs onto ext4 made without -O verity now stop in the initramfs, and the only message is "fs-verity is not supported by filesystem". This adds the recovery steps to that error: boot the previous deployment, add ? to the entry (which gives up enforcement), or reinstall onto a filesystem with fs-verity. The text is added only when the command line is strict and measuring fs-verity fails as unsupported.

A second commit documents this in bootc-composefs(7) (a new "Strict boot entries without fs-verity" section: who is affected, the pre-upgrade check, recovery), with small matching fixes to bootc-root-setup.service(5) and the installation guide.

A third commit rewords the bootc install --allow-missing-verity help (and the regenerated install man pages): it adds the ? marker and relaxes the repository policy, but an install onto ext4 created without -O verity still fails with it, as it has since v1.17.0.

The affected set, the recovery testing and the pre-upgrade check are in #2629 (see the summary comment there).

Testing:

  • Booted a 1.16.14 to-filesystem install on ext4 without verity, then switched to a build with this commit. The boot fails with the new text, followed by the original error chain.
  • A normal strict install on ext4 with verity still boots. This was tested with the commit's first revision, which differs only in the message wording.
  • The bootc-initramfs-setup unit tests pass (11).
  • The initramfs commit is a clean cherry-pick onto main. Main's tree at 00574d5 is identical to initramfs: Enforce fs-verity for strict composefs boots #2629's tested head c53c2fc.
  • Docs commit: rendered through the GitHub markdown API (anchors resolve); the check script is the one from the initramfs: Enforce fs-verity for strict composefs boots #2629 comment. mdbook and the guide man page generation were not run.
  • Help-text commit, on a devspace (16 cores): just update-generated produced exactly the committed man pages, just validate (fmt, clippy, docs, generated-file check) and just unit-tests (546 passed) passed on the commit's first wording; the final revision changes only the doc comment and man page text, and was regenerated again with no diff.

The Signed-off-by: Joseph Marrero Corchado <jmarrero@redhat.com> on these commits was added on jmarrero's approval of the review draft: jmarrero-forge#14 (comment)

Generated-by: https://github.com/jmarrero-bot#llms

bootc 1.16.0 through 1.16.14 could install with a strict composefs=
argument onto an ext4 filesystem made without -O verity (to-filesystem
or to-existing-root onto a filesystem another tool created). Those
systems booted only because the repository metadata turned enforcement
off. Now that a strict command line always requires fs-verity, their
next deployment stops in the initramfs with just "fs-verity is not
supported by filesystem", which doesn't tell the user that the system
is fine and how to get it booting again.

When the command line is strict and the filesystem can't do fs-verity
at all, say what happened and list the ways out: the previous
deployment, adding '?' to the entry (giving up enforcement), or a
reinstall onto a filesystem with fs-verity.

Generated-by: AI
Signed-off-by: Joseph Marrero Corchado <jmarrero@redhat.com>
The composefs docs still described fs-verity enforcement as something
only a UKI could relax, and didn't say that the kernel command line
alone now decides it. Since a strict composefs= argument always requires
fs-verity, systems that bootc 1.16.0 through 1.16.14 installed onto ext4
without -O verity stop booting on their next deployment. The new
initramfs error points at the recovery options; the docs now say who is
affected, how to check before upgrading, and how to recover, using the
same wording as the error.

The bootc-root-setup.service(5) and installation pages get the matching
small corrections.

Generated-by: AI
Signed-off-by: Joseph Marrero Corchado <jmarrero@redhat.com>
The help said the flag makes fs-verity optional "in case the filesystem
doesn't support it", which reads as a way to install onto any
filesystem. It isn't: bootc picks the provisional repository's policy
from the filesystem type, so on ext4 the repository starts out strict
and the install fails writing meta.json when the filesystem was made
without -O verity, flag or not. What the flag actually changes is the
boot policy (the '?' marker) and the recorded repository policy, and an
image with a UKI ignores it in favor of its own command line.

That ext4 case has failed since 9ccd87d (v1.17.0) started choosing the
policy before inspecting the image; 1.16 created the repository relaxed
when the flag was given. Whether the code should honor the flag there
again is a separate question; this documents what it does today.

Generated-by: AI
Signed-off-by: Joseph Marrero Corchado <jmarrero@redhat.com>
@github-actions github-actions Bot added area/install Issues related to `bootc install` area/documentation Updates to the documentation labels Nov 7, 2026
@bootc-bot
bootc-bot Bot requested a review from henrywang November 7, 2026 17:22
@jmarrero-bot

Copy link
Copy Markdown
Contributor Author

A question for the team on the third commit (--allow-missing-verity help). It documents today's behavior: an install onto ext4 created without -O verity fails even with the flag. That looks like a side effect rather than a decision.

Since 9ccd87d ("composefs: Enforce boot policy during staged installs", #2248, first in v1.17.0), install creates a strict provisional repository whenever the filesystem type supports fs-verity (provisional_relaxed = !state.composefs_fsverity_supported in install.rs). The flag is only applied after the image is imported, through final_repository_policy, and by then writing meta.json with fs-verity has already failed. 1.16 created the repository relaxed when the flag was given. The type check can't tell ext4 with -O verity from ext4 without it.

Should the provisional repository honor an explicit --allow-missing-verity? That would be a separate PR, and the help would then drop the sentence saying such installs fail. cc @cgwalters, since this is your commit.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/documentation Updates to the documentation area/install Issues related to `bootc install`

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant