The Build System
The CentOS Project uses and makes available several services that compose its build system. These tools are used by both the core project to produce the CentOS Linux and CentOS Stream distributions, and by the various Special Interest Group (SIG) projects.
All artifacts (RPMs, container images, ISO images) build using source code stored in a Git version control system. Repositories have different branches reflecting the build environment those sources will be used in. The CentOS Project has two primary locations for this content.
GitLab.com is the platform for developing CentOS Stream 9 and later. Projects are publicly accessible and a GitLab account can be used to contribute.
CentOS Git hosts content derived from Red Hat Enterprise Linux® source RPMs and content used by SIGs. The platform is a project-hosted instance of Pagure, a Git forge developed and used by Fedora®. Projects are publicly accessible, and a Fedora Account System (FAS) identity required for contributor access.
Though Git is a critical part of the Project’s build system, it is not the best solution for dealing with non-text objects such as upstream code tarballs and binary files. DistGit is an integration with Git that provides tooling to be able to accommodate the tracking of these assets alongside the RPM repositories. It creates a lookaside cache that stores the objects and modifies a designated file in the RPM repository that references them with a SHA hash. On CentOS Git this is the
.<package>.metadata file, and on GitLab the
sources file. During the build process objects referenced in the DistGit file will be pulled from the lookaside cache into the appropriate directories.
For example, the Git package repository:
SHA512 (git-2.31.1.tar.xz) = 9aa334a3e8519700ff5d112153ec42677722980094caa9d22aa91afdb65166bd9a98fa445c0d327c428ebfa73bf4832e9b3836109a1d9319feafe3191cfd170e
SHA512 (git-2.31.1.tar.sign) = 0a721876f9869d1dc9a43e7f83f8e63a3d8fa932ff2d2e69bb98f3e314e2e9a896c2171cb6a020d6c6e929fdf1af736dbeb3f25f93fb4d359a9aaa5b859069c3
The service that builds the various distribution deliverables (RPMs, container archives, disk images, LiveMedia installers, etc) is Koji. Within the CentOS Project infrastructure, there are three Koji instances:
CentOS Stream Build Service (KojiHub)
Builds CentOS Stream 9, pulling sources from Gitlab.
CentOS Build Service (MBOX Koji)
Builds CentOS Linux and CentOS Stream 8, pulling sources from CentOS Git.
Community Build Service (CBS)
Used by community projects, such as SIGs, to produce deliverables. Sources are pulled from CentOS Git.
Currently does not support Modularity packaging.
Migration in Progress
The CentOS Stream 8 build pipeline is migrating to the Koji instance used by CentOS Stream 9.