Package Management¶
To streamline cross-distro package management, Helios uses a centralized packages.yaml
system. This allows each logical package to be mapped to its appropriate name for each Linux distribution, while also enabling distros to inherit shared definitions from one or more package groups.
Structure of packages.yaml
¶
packages
Section¶
Each item in the packages
array defines a single logical package, and includes distro-specific keys for the corresponding package names:
packages:
- debian: mesa-va-drivers # VA-API support for Debian
rhel: mesa-va-drivers # Same package name for RHEL
alpine: mesa-va-gallium # Different package name for Alpine
- debian: libx11-6
rhel: libX11
alpine: libx11
- debian: extra-debian-only-pkg
This format enables clean mapping between distros for the same logical dependency, and avoids repeating similar entries in multiple places.
inherit
Section¶
This section defines which groups of package mappings each distro should inherit from.
In this example:
- Ubuntu inherits all packages defined under the
common
anddebian
groups. - RHEL, Debian, and Alpine all inherit from the
common
group. - Each distro may also have its own explicitly defined packages.
Package List Generation¶
A preprocessing step flattens the data into a list of distro-specific packages, combining:
- All package mappings from the inherited groups
- Any mappings explicitly defined for that distro
Each distro’s final list is saved as:
For example, /tmp/lists/ubuntu.list
will include packages from:
- The common
group
- The debian
group
- Any Ubuntu-specific entries (if present)
Build Integration¶
These generated lists are used directly in the image build process. Example from alma-9/build/system.sh
:
dnf install -y --allowerasing --setopt=install_weak_deps=False --best \
$(cat /tmp/lists/rhel.list) \
fastfetch
This example installs the complete set of packages for a RHEL-based image (including inherited packages from common
).