zlacker

bootc-image-builder: Build your entire OS from a Containerfile

submitted by twelve+(OP) on 2025-06-24 15:01:07 | 83 points 32 comments
[view article] [source] [links] [go to bottom]
replies(11): >>twelve+ZU8 >>tt7262+6V8 >>yjftsj+8Z8 >>westur+y09 >>indigo+V19 >>nullif+qd9 >>tmaier+dl9 >>hardwa+em9 >>Kudos+5o9 >>franga+yo9 >>rgovos+dp9
1. twelve+ZU8[view] [source] 2025-06-27 23:42:18
>>twelve+(OP)
We also have a GUI for trying this out!

https://github.com/podman-desktop/extension-bootc

We’re also starting to see other projects adopt a “OS as a Container image” such as Bazzite: https://bazzite.gg/ using bootc :)

Feel free to ask any questions!

replies(1): >>Chocol+Vq9
2. tt7262+6V8[view] [source] 2025-06-27 23:43:53
>>twelve+(OP)
You can also achieve this with your current system

> nix-build '<nixpkgs/nixos>' -A vm -I nixpkgs=channel:nixos-25.05 -I nixos-config=./configuration.nix

I use nixos btw

replies(1): >>indigo+329
3. yjftsj+8Z8[view] [source] 2025-06-28 00:48:20
>>twelve+(OP)
> A container for deploying bootable container images.

...as long as the images are in the Red Hat family (Fedora, CentOS Stream, RHEL).

replies(6): >>tayo42+I79 >>ethan_+ei9 >>whs+hu9 >>deivid+gA9 >>jeffro+2H9 >>eraser+eve
4. westur+y09[view] [source] 2025-06-28 01:12:44
>>twelve+(OP)
Does bootc-image-builder build Native Containers?

Do Native Containers work as VM images that can be stored in an OCI Image/Artifact/Package Registry?

I've been mentioning Native Containers since I realized that was how bazzite works now.

Is vagrant necessary anymore if host, vm, and container images can all be signed and stored in an OCI Image store?

From >>44137501 re: Firecracker and Microsandbox VMs :

> ostree native containers are bootable host images that can also be built and signed with a SLSA provenance attestation; https://coreos.github.io/rpm-ostree/container/

ublue-os/image-template: https://github.com/ublue-os/image-template :

> Build your own custom Universal Blue Image

ublue-os/akmods has nvidia GPU drivers, nvidia-open, zfs: https://github.com/ublue-os/akmods :

> A caching layer for pre-built Fedora akmod RPMs

> OCI images providing a set of cached kernel RPMs and extra kernel modules to Universal Blue images. Used for better hardware support and consistent build process.

nvidia-container-toolkit (CDI) is necessary for --gpus=all to do CUDA and libEGL 3D with podman. Is this also already installed in bazzite?

ublue-os/toolboxes: "quadlets and systemd service units for management", boxkit : https://github.com/ublue-os/toolboxes#images

ublue-os/devcontainer .devcontainer/devcontainer.json: https://github.com/ublue-os/devcontainer/blob/main/src/base/...

It looks like the Just Justfile 40-nvidia.just has moved due to image topology simplification? >>39364975 :

> ublue-os/config//build/ublue-os-just/40-nvidia.just defines the `ujust configure-nvidia` and `ujust toggle-nvk` commands

replies(1): >>lothar+r29
5. indigo+V19[view] [source] 2025-06-28 01:32:49
>>twelve+(OP)
Huh, this is kinda wild. So for esxi images, this would seem to beat/potentially be simpler than the traditional Packer + interacting with an ISO on esxi infra, yes?
replies(1): >>eraser+Wue
◧◩
6. indigo+329[view] [source] [discussion] 2025-06-28 01:34:29
>>tt7262+6V8
Can this do vmdk format?
replies(2): >>jchw+7c9 >>zimbat+As9
◧◩
7. lothar+r29[view] [source] [discussion] 2025-06-28 01:39:19
>>westur+y09
What does "native containers" mean in this context?
replies(1): >>westur+5zc
◧◩
8. tayo42+I79[view] [source] [discussion] 2025-06-28 03:12:47
>>yjftsj+8Z8
Is there something about this makes it red hat specific. An OS is just a specific collection of files in the end. Whether things are installed with rpm or Deb shouldn't matter?
replies(1): >>yjftsj+z89
◧◩◪
9. yjftsj+z89[view] [source] [discussion] 2025-06-28 03:31:00
>>tayo42+I79
You'd think so:) Unfortunately the current implementation hardcodes calls to dnf: https://github.com/osbuild/bootc-image-builder/issues/869
◧◩◪
10. jchw+7c9[view] [source] [discussion] 2025-06-28 04:45:12
>>indigo+329
I don't know the answer using the built-in VM attributes (I mean I'd guess probably, but I don't know how if so) but there's always nixos-generators for making VM images. Definitely used this for deploying VMs to cloud providers, haven't tried the VMWare one yet though.

https://github.com/nix-community/nixos-generators

11. nullif+qd9[view] [source] 2025-06-28 05:13:37
>>twelve+(OP)
I've been very excited on progress on bootc. I've tried to make my own coreos distro and its quite complicated in comparison.

I've used this to start from a minimal base and added what I've needed on top. Best of all, updates are delivered via a container registry.

◧◩
12. ethan_+ei9[view] [source] [discussion] 2025-06-28 06:42:47
>>yjftsj+8Z8
The project roadmap actually includes plans to expand beyond Red Hat family distributions - there's active work to add support for Debian/Ubuntu and potentially other distros.
13. tmaier+dl9[view] [source] 2025-06-28 07:40:49
>>twelve+(OP)
Universal Blue (Bluefin etc.) has a reusable GitHub template.

https://github.com/ublue-os/image-template

replies(1): >>eraser+lue
14. hardwa+em9[view] [source] 2025-06-28 07:55:49
>>twelve+(OP)
I wonder which gets more actual usage, this project or linuxkit.

Does anyone have experience worth sharing with both?

replies(1): >>Wuzado+Sx9
15. Kudos+5o9[view] [source] 2025-06-28 08:22:30
>>twelve+(OP)
I've used this to bootstrap bootc-based Fedora on my workstations. I've got a CI job that builds updated container images every night, a simple `rpm-ostree upgrade` pulls in the new image and `systemctl reboot` activates it.

What I like about this is always having a known working image I can quickly swap to, particularly for the machine with an nvidia card.

16. franga+yo9[view] [source] 2025-06-28 08:30:36
>>twelve+(OP)
I'd love to have something like this for embedded system images, like for Raspberry Pi deployments.
replies(1): >>eraser+9ve
17. rgovos+dp9[view] [source] 2025-06-28 08:39:01
>>twelve+(OP)
Roman Shtylman has an example of using a Dockerfile to produce a rootfs for the Jetson Nano: https://github.com/defunctzombie/jetson-nano-image-maker (2022)

I've always been hesitant to use this method over debootstrap: the Ubuntu container images ("FROM ubuntu:20.04") are created from a tarball that Ubuntu's convoluted CI system spits out and I'm not confident I understand if it's somehow suitable only for a container and not for real hardware.

replies(1): >>Valdik+LB9
◧◩
18. Chocol+Vq9[view] [source] [discussion] 2025-06-28 09:05:32
>>twelve+ZU8
Why swap from the OSTree storage to OCI? Doesn't that negate the space saving offered by OSTree having a content addressable store.
replies(1): >>jeffro+IG9
◧◩◪
19. zimbat+As9[view] [source] [discussion] 2025-06-28 09:31:23
>>indigo+329
Yes, you can target VMDK, AMIs, Azure, ...

`nixos-rebuild build-image --image-variant vmware`

See https://nixos.org/manual/nixos/stable/#sec-image-nixos-rebui...

◧◩
20. whs+hu9[view] [source] [discussion] 2025-06-28 09:51:26
>>yjftsj+8Z8
I was going to try this to perhaps use it in production. Turns out the RHEL clones like Alma or Rocky doesn't have this thing in production-ready grade. All options you have now are owned by Red Hat themselves.
replies(1): >>jeffro+jH9
◧◩
21. Wuzado+Sx9[view] [source] [discussion] 2025-06-28 10:41:18
>>hardwa+em9
If I had to wager a guess, bootc might get more actual use now that it's supported in RHEL 9.6 and 10 as "image mode". It's an exciting piece of technology, especially from the perspective of a platform engineer.

Also, bootc is a basis for the Universal Blue family of distros, especially Bazzite, which is very popular with gamers.

replies(1): >>hardwa+f5a
◧◩
22. deivid+gA9[view] [source] [discussion] 2025-06-28 11:15:45
>>yjftsj+8Z8
Booting Docker images is fairly straightforward, I wrote about how to do this manually some years ago: https://blog.davidv.dev/posts/docker-based-images-on-baremet...
◧◩
23. Valdik+LB9[view] [source] [discussion] 2025-06-28 11:40:07
>>rgovos+dp9
The alternative is mkosi from systemd developers

https://github.com/systemd/mkosi

However beware that they break backwards compatibility almost every 6 months. This is probably the most backwards-incompable project I know, you can't rely that the minor version update won't break your projects.

◧◩◪
24. jeffro+IG9[view] [source] [discussion] 2025-06-28 12:34:30
>>Chocol+Vq9
By using zstd:chunked, we get those atomic diffs at each layer using an enabled container registry. So diffs are still over the wire.
◧◩
25. jeffro+2H9[view] [source] [discussion] 2025-06-28 12:37:31
>>yjftsj+8Z8
Ublue also builds Ubuntu versions of a lot of this.
◧◩◪
26. jeffro+jH9[view] [source] [discussion] 2025-06-28 12:39:28
>>whs+hu9
Just ask Neil Gompa to ship it. He doesn’t love it, but he helps everyone who asks him for advice.
◧◩◪
27. hardwa+f5a[view] [source] [discussion] 2025-06-28 16:11:21
>>Wuzado+Sx9
yeah you're probably right -- going forward the usage is likely going to be a lot higher, at the very least.

I thought of the underlying tech for those other distros being ostree more than anything but this is the better interpretation.

◧◩◪
28. westur+5zc[view] [source] [discussion] 2025-06-29 18:40:06
>>lothar+r29
> ostree native containers are bootable host images that can also be built and signed with a SLSA provenance attestation

From https://coreos.github.io/rpm-ostree/container/#ostree-native... :

> rpm-ostree inherits work in ostree-rs-ext to create “container native ostree” functionality. This elevates OCI/docker containers to be natively supported as a transport mechanism for bootable operating systems.

I think it means simplification of complexity and unnecessary re-duplication.

◧◩
29. eraser+lue[view] [source] [discussion] 2025-06-30 12:56:53
>>tmaier+dl9
... and it works fabulously. I have been running Bluefin (same folks as Bazzite) from one of these templates for about 6 months and it has been a near on flawless experience. I have moved from Fedora 40->41->42 without having to touch a traditional "upgrade".

https://projectbluefin.io/

◧◩
30. eraser+Wue[view] [source] [discussion] 2025-06-30 12:58:43
>>indigo+V19
Arguably yes. I think the big improvement is that an upgrade is really just switching from image A to image B, rather than dozens to hundreds of individual package transactions. Furthermore parts of the system are fully mutable (e.g. /etc) allowing you to run automation against a system post install for more customisation.
◧◩
31. eraser+9ve[view] [source] [discussion] 2025-06-30 12:59:37
>>franga+yo9
Totally. Appliances are perfect candidates for this tech.
◧◩
32. eraser+eve[view] [source] [discussion] 2025-06-30 13:00:02
>>yjftsj+8Z8
bootc is a CNCF project now, so anybody can get on board.
[go to top]