Custom image: good to install these much packages?, future of custom images

I am new into ublue and I have been using bluefin since a couple of days. I have been liking it so far. I did not expect it to be so good( Since I have been a long time(~2 years) archlinux-hyprland+qtile daily driver.

For the sake of reproducibility of my current setup of bluefin linux I am building an image of my own using blue-build on top of bluefin.

I am installing a few packages which are not installable via flathub(due to unavailability or unverified packages) and not available in brew either. The thing is I wanna stay aligned with the vision of ublue. Therefore I wanna ask, “can somebody review my recipe.yml?”

I don’t know about ublue’s vision, but the image config you’re doing is mostly right. Some things I see:

  • The modules directory is meant for your own modules, not .yml configurations.
    https://blue-build.org/how-to/making-modules/

  • Your .yml files should be placed somewhere under the recipes directory.
    https://blue-build.org/how-to/multiple-files/

  • Not that it’s wrong, but if you don’t want to remove anything using that rpm-ostree module, you don’t need to specify the remove:

  • Not wrong, but you could also use a container for android-tools and export adb + fastboot to host, that’s what I’m doing currently but I also thought about just including it in the image, since that’s basically the only thing I export from that container.

Enjoy making your own image, it’s fun.

Thank you for response.

  • Ahh, I see where the other .yml’s must be placed.
  • I am putting ‘em in `recipes/addons’ folder.
  • I had left it for references but ig the docs will serve that purpose.
  • Same here.

Haha, it is really fun to build your own image. I will soon add config files for various applications ig.

Btw do you think ublue will continue providing the freedom to users to build their own images as they will be soon enabling LayeringLock. I know we can disable it later but hey… that will not be something default. (Ig when you use custom images you are putting your immutability at risk anyways?)

Small distinction here. The BlueBuild image builder is not “part of” ublue. Its a different org that was previously part of uBlue. uBlue has their own image template in github that you can use to build “ublue images”.

As far as I understand, the BlueBuild uses a little bit different kind of building process.

What’s the difference between BlueBuild and Universal Blue?

Universal Blue is an open source project started by cloud developers that builds amazing custom images based on atomic Fedora along with related experiments, while BlueBuild only builds tools for custom image creation. The project now known as BlueBuild started out as just a part of Universal Blue, but was eventually split from it due to diverging from the scope and being mostly unrelated to the project’s main maintainers.

I’m guessing here, but I think LayeringLock is related to rpm-ostree on a booted system (local layering), I don’t think it’ll affect image building in any way.

1 Like

Ohhh. I see.

Thank you for clarifying this.

I am not clear about it either. Also keeping the image pristine means the image shall be same across everywhere no?.

but I don’t really know.

Yeah the layering lock doesn’t really affect the ability to build custom images. Its just the booted images layering will be locked in the default images.

Haven’t looked into custom images that much but I guess there would be a way to change that default during creation of the image.

1 Like

By making changes, you might introduce problems and it might be harder to support you, yes. Ublue team does not want that.

Also will the LayeringLock prevent an user to rebase onto a custom image if the image has Layered packages?

You are right. Ig the best way to use it would be to know what you are doing. From ublue’s side it will be functional always. But upon the user’s action the immutability is solely dependent.

Going out of my knowledge zone but the image that gets pulled, doesn’t have those “layered packages” in sense as they are built directly to the image being pulled.

The Layering lock will prevent the user from installing a package on top of the image, just like you would do currently for example rpm-ostree install <packagename>

2 Likes

Hmmm. So the `LayeringLock’ will be only a users-space level thing. And thus will affect the user upon execution of installs via rpm-ostree.

Yeap. So you can stuff your image full of whatever you like and it will not show up as layered packages for the user. It will be just another image (full of stuff).

Of course your image would increase in size and make updates slower.

Check this out. These three are the packages I incorporated in the custom image. (there was fish as well but fish is in bluefin image itself so ig not showing up)

Try rpm-ostree reset, reboot and see if the pakages you included in your recipe are installed.

1 Like

Ahh you are right. It is gone now

Thanks

Just a clarification that this change is Bluefin-only and as others have pointed out, it only puts the ability to do a local change behind a config flag.

From a technical perspective it would be impossible for us to ever remove the ability for anyone to make a custom image since that’s a fundamental part of the tech stack, our project wouldn’t be able to exist otherwise, heh. We’re also a custom image. :smile:

As to the amount of packages you can include on an image, that’s up to the amount of hardware you have to make the thing, you could make one huge fat image if you wanted. During one of the talks at Devconf Dan Walsh mentioned that some of their AI images are north of 200(!) GB so you should be good assuming you have the disk space to do all of that. (For comparison Bluefin is 9GB and Bluefin DX is 12GB)

2 Likes

It is really assuring to know.

I really am loving bluefin.

Thanks for your great work sir.

1 Like