Image naming, building

There was an old initial discussion topic here: Keeping Images Current that was never fully discussed and fleshed out.

in short, image producers and consumers do not align on their desired image targets. producers wish to always build freshly using obvious targets (latest version of 10, for example) and consumers desire more static deployments.

we should resolve:

  1. image naming
  2. image build/release schedule (& associated naming convention)
    1. storage implications of not having rolling image updates (i.e. not overwriting named images)
  3. custom images and how they are stored/expired
  4. facility manager image management (build, pull, push, etc)

naming

  • the distro should be included explicitly
  • some kind of versioning (preferably official) should be indicated explicitly
  • if there is a purpose, project, or special role, it should be included somewhere

an example of an existing image name might be ubuntu2404 or fedora43, and this includes the 2 major information points needed, but there are different states of ubuntu2404 or fedora43 – early or late in the release cycle – that may change the way certain things operate, kernel patches, etc. see the examples in the next section about scheduling.

my current proposal is something like

  • distro/shortdistro – either ubuntu|fedora|debian|kali|etc or ubnt|fdra|debn|kali
  • dash
  • official major release version – 2604|44|13|2026.2
  • dash
  • point release OR function or role – 4|c or hypervisor|aarch64
  • dash (optional)
  • function or role hypervisor|aarch64|portalvte

so for example,

  • ubuntu 2404 release 4 on arm would be ubuntu-2404-4-arm64
  • fedora 44 hypervisor would be fedora-44-hypervisor
  • debian 13 would be debian-13

we should create a feature that allows us to specify minimal metadata such that we can include debian and ubuntu codenames for user convenience and legibility. that way we can display noble numbat, resolute racoon, and trixiealong side things like ubuntu 2404, 2604, and debian 13.

building/releasing schedule & associated names

  • examples of point releases & naming them

    24.04/ 2026-03-10 17:24:27
    24.04.2/ 2026-03-10 17:24:27
    24.04.3/ 2026-03-10 17:24:27
    24.04.4/

    here is an example of ubuntu server versions that are point released as things change within the package tree.

    these can either be referenced directly as ubuntu24044 or some other method like ubuntu-2404.4, or we could simply use the date that we auto-built the system and update the build process on the back-end to include the latest version, i.e. ubuntu-2404-202606 and have quarterly or semi-annual builds from whatever is latest at the time.

  • this would alter the naming of point releases from default image names to dated image names

  • ubuntu-2404-202512

  • fedora-43-202512

storage implications of scheduled builds

  • tbd, but each image costs about 4-10gb uncompressed i think, or 2-5gb compressed
  • given that scheduled builds are maintained and stored by the merge operators, we should consider an archival/expiration strategy, but allow users to utilize our old images by artifact and include them or upload them as a custom image

custom images & storage/expiration

  • custom images should probably not muck up the portal storage and be per facility?

facility manager operations WRT images

building

a facility manager should be able to trivially build and upload images to the facility. this must be a first class operation supported by mrg/mrs tools.

pulling

  • a facility manager should be able to pull our pre-built images
  • a facility manager should be able to schedule pulling our pre-built images or any given image registry from github or gitlab pipeline or custom location

pushing (portal → facility)

  • new feature: a facility manager should be able to “synch” remote images from other facilities or from the portal to the local facility image storage area.

This looks great to me. Two possible improvements:

  • ensure that all fields in image name are always populated, so if there is ubuntu2204-hypervisor then there should be something after fedora43, whatever that something is.
  • never overwrite images with newer versions, but we can overwrite pointers. for example there can be ubuntu2204-std that points to the newest version but once we end up working on packaging artifacts, an artifact should be able to pull from the node and record ubuntu2204-02042025 as the exact image used

Small note about image size:
We never store images uncompressed, but due to the image file mostly being sparse, even if it’s an 8 GB image, even without compression, on ext4, the file will get stored sparsely, so it’s less than 8 GB.

Compressed, they’re less than 1 GB (because of gitlab artifact limits), usually closer to 600-800 MB.

I would say that if you want to do point releases, then we need a better image constraint solver because of how it currently is. I think by default, the desired behavior is that you should get the latest image of whatever you ask for (so if you ask for Fedora 43 broadly, you get the latest Fedora 43), unless you specify the version specifically.

Alternatively, this could mean that the abbreviated names resolve to the latest one:

  • image==‘fedora’ resolves to the latest fedora
  • image==‘fedora-43’ resolves to the latest fedora 43
  • image==‘fedora-43-4’ resolves to fedora 43.4

For point release, if they have an actual minor version number, I’d probably prefer to use that.

ok. i dont know how to resolve links yet or if its possible. i have to look in to whether minio even supports linking or aliases.

so for now it looks like we would build something like

  • debian-130-std-x86
  • debian-12-std-x86
  • ubuntu-26040-std-x86
  • ubuntu-26040-std-aarch64
  • ubuntu-24040-std-x86
  • fedora-43-std-x86
  • fedora-43-hypervisor-x86
  • fedora-43-hyperivisor-aarch64
  • fedora-43-vte-x86
  • kali-2026.1-std-x86

does this make sense and should we move forward with naming images this way? its a lot of dashes and stuff and right now the only way i can think of to address the way ubuntu specifically does point releases is to include the 0 release in the naming convention. we can also eliminate it and just rebuild occasionally at the same major release version and ignore the point release numeral