Skip to content

RFC: Adding a "light" bootc mode #1668

@jeckersb

Description

@jeckersb

My initial inspiration for something like this came up while thinking about how to better integrate image-based bootc systems with traditional package-based systems. Somewhat similar to what @cgwalters has proposed in #1656 wherein he wants to make it easy to change a bootc system into a package-based system. My proposal here comes at things from a different angle and these ideas are not mutually exclusive, but both live in the space where we want to make it easier to transition between modes of operation.

In my proposal, we would support an installation mode where the system is initially created/provisioned using bootc, using a container image the same as any other bootc system. However, the difference would be that after the initial installation, the system would have a persistent read-write overlay on top of the root.

Some benefits from such an arrangement:

  • Installation via anaconda (or $other_installer) would be faster than doing a traditional package-based install. This needs verified since I have not actually tested install speeds of container-based vs package-based anaconda install flows. But it intuitively seems it should be the case if you can do all of the package transaction and scriptlet processing ahead of time that it's faster to lay it out onto disk from a container.
  • The system would always have a "factory reset" option which would be activated by discarding the overlay and rebooting the system to return to the initial state.
  • For the use cases where users would want a traditional package-based experience, this should provide it to them with very minimal overhead other than redirecting everything through overlayfs. They can still ad-hoc made modifications to the filesystem, install/remove packages as if the system were provisioned in package mode.
  • If we can add the ability to do bootc commit, this would allow users to make adhoc modifications to the system and then commit the system state into a container image. Then users could have system "checkpoints" they could rollback to in the future. (Something like btrfs snapshots would be better at this, but it gives us something similar).
  • Since the system is already installed as a bootc system, it means that if the user wanted to transition from the mutable package-based flow to an image-based mode during the system lifecycle, one could do so by disarding the overlay and doing a bootc switch to their desired image without needing to reinstall the system from scratch.

There's a whole lot of technical details being hand-waived away here, but it seems sane to me on the surface. Enough so that I felt it's worth bringing up for wider discussion.

I think this would be a desirable mode for distribution builders to utilize for default system deployment. For something like Fedora Workstation, I think it brings some tangible benefits over the traditional deployment style. The container images can be composed server-side separate from the installation media. Then a "workstation" install becomes using a generic installer image to install a specific container build. If we transition all of the atomic desktops to being bootc-based, then you could easily switch from a "default" workstation to an immutable silverblue or kinoite or whatever, switch back and forth freely, and you could even go back to the "default" experience if you don't like the atomic desktop experience. I think the "free" factory reset capability is a really nice bonus feature. Meanwhile I think users would generally be receptive to such an arrangement because if they choose not to use any of the image-based workflow they can continue to use the system in the same manner as before.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions