| build_configs.json | ||
| example.json | ||
| README.md | ||
build_configs
Per-package build overrides for AlmaLinux Build System (ALBS).
This repository contains a single file build_configs.json that defines per-package build parameters.
Format
{
"package_name": {
"branch_pattern": {
"secure_boot": true,
"platform_flavors": ["flavor-name"],
"linked_builds": [123],
"mock_options": {
"definitions": {"key": "value"},
"module_enable": ["module:stream"],
"yum_exclude": ["package-name"],
"with": ["option"],
"without": ["option"]
}
}
}
}
The top-level key is the source package name (as in the SRPM filename, e.g. kernel, dotnet8.0, gcc-toolset-14-gcc).
Each package maps one or more branch patterns to an overrides object. Patterns use fnmatch syntax and are matched against the build_configs_branch field in the product's albs_config (e.g. almalinux-epel-10, kitten-epel-10) or the git_branch for git-based builds.
When multiple patterns match, the most specific one wins (more literal characters = higher priority).
Field Reference
Per-build parameters
These affect the entire ALBS build. If packages in the same batch have different values for these, they are automatically split into separate ALBS builds.
| Field | Type | Default | Description |
|---|---|---|---|
secure_boot |
bool |
false |
Enable SecureBoot signing for the build |
platform_flavors |
list[str] |
[] |
Additional platform flavors (appended to the product's base flavors) |
linked_builds |
list[int] |
[] |
ALBS build IDs to link (appended to product-level linked_builds) |
Per-task parameters (mock_options)
These are applied per-package within a single ALBS build. Different mock_options do not require separate builds.
| Field | Type | Default | Description |
|---|---|---|---|
mock_options.definitions |
dict[str, str] |
{} |
RPM macro definitions (merged with product-level definitions; package values win on conflict) |
mock_options.module_enable |
list[str] |
[] |
DNF module streams to enable in the chroot (format: module:stream) |
mock_options.yum_exclude |
list[str] |
[] |
Packages to exclude from the mock chroot |
mock_options.with |
list[str] |
[] |
--with conditional build options |
mock_options.without |
list[str] |
[] |
--without conditional build options |
Branch Patterns
Patterns use fnmatch syntax. Common conventions:
| Pattern | Matches | Use case |
|---|---|---|
a* |
a8, a9, a10, almalinux-epel-10 |
AlmaLinux branches |
c* |
c8, c8s, c9s, c10s |
CentOS Stream branches |
c8 |
c8 only |
Exact CentOS 8 branch |
* |
Everything | Catch-all for all branches |
*portable* |
a10-portable, c10s-portable |
Portable builds |
almalinux-epel-10 |
almalinux-epel-10 only |
Exact EPEL for AlmaLinux 10 |
kitten-epel-10 |
kitten-epel-10 only |
Exact EPEL for AlmaLinux Kitten 10 |
When multiple patterns match, specificity is determined by the number of literal (non-wildcard) characters. For example, *portable* beats * because it has more literal content.
Examples
SecureBoot signing
{
"kernel": {
"a*": { "secure_boot": true }
},
"grub2": {
"a*": { "secure_boot": true }
}
}
Kernel and grub2 will have is_secure_boot: true in ALBS builds for all AlmaLinux branches.
Platform flavors (dotnet)
{
"dotnet8.0": {
"c*": { "platform_flavors": ["dotnet-build"] }
}
}
dotnet8.0 builds for CentOS Stream branches will include the dotnet-build flavor (appended to the product's base flavors).
RPM macro definitions (gcc-toolset)
{
"gcc-toolset-14-gcc": {
"c*": {
"mock_options": {
"definitions": { "scl": "gcc-toolset-14" }
}
}
}
}
The %scl macro will be set to gcc-toolset-14 in the mock chroot. This is merged with any product-level definitions (e.g. epel: 10).
Module dependencies
{
"sssd": {
"c8": {
"mock_options": {
"module_enable": ["idm:DL1"]
}
},
"a8": {
"mock_options": {
"module_enable": ["idm:DL1"]
}
}
}
}
sssd on EL8 branches requires the idm:DL1 module stream enabled in the build chroot.
SecureBoot + custom definitions
{
"nvidia-open-kmod": {
"a*": {
"secure_boot": true,
"mock_options": {
"definitions": { "modsign_os": "almalinux-nvidia-signing" }
}
}
}
}
nvidia-open-kmod gets both SecureBoot signing and a custom signing identity macro.
Portable builds (disable %check)
{
"java-21-openjdk": {
"*": { "platform_flavors": ["java-portable"] },
"*portable*": {
"mock_options": {
"definitions": { "__spec_check_template": "exit 0;" }
}
}
}
}
All java-21-openjdk builds get the java-portable flavor. Portable branch builds additionally skip %check via a mock definition override. The *portable* pattern is more specific than * and takes priority for portable branches.
How It Works
releng-monitoringfetches this file periodically (every 30 minutes)- When creating ALBS builds, it looks up each package name and matches against branch patterns
- Per-build overrides (
secure_boot,platform_flavors) determine build grouping — packages with different per-build params go into separate ALBS builds - Per-task overrides (
mock_options) are applied individually to each package's task within a build - Product-level
albs_config(fromrepositories.yaml) is always the base layer; this file acts as an overlay
Adding a New Package
- Add a new top-level key with the source package name
- Add one or more branch patterns with the desired overrides
- Commit and push — changes take effect within 30 minutes (next refresh cycle)
{
"my-package": {
"a*": {
"mock_options": {
"definitions": { "my_macro": "value" }
}
}
}
}