DNF5-MODULARITY(7)
β¨ DNF5-MODULARITY β¨
okay bestie, welcome to the dnf5-modularity overview π
this is the manual page for the dnf5 project, and it's all about Modularity β sit down, grab a strawberry, we're doing this π
πΈ DESCRIPTION πΈ
Modularity is an alternative way of building, organizing and delivering packages. That's it, that's the vibe. For more details see: <https://docs.pagure.org/modularity/> π¦
π DEFINITIONS π
words we're gonna use, so we're all on the same page, no cap:
π modulemd
Every repository can contain modules metadata with modulemd documents. These documents hold metadata about modules such as Name, Stream or list of packages. it's giving "the module's whole personality in one file" β¨
π (non-modular) package
A package that doesn't belong to a module. simple as that π«Ά
π modular package
A package that belongs to a module. It is listed in modulemd under the artifacts section. Modular packages can be also identified by having %{modularitylabel} RPM header set. lowkey iconic, that header π
π (module) stream
A Stream is a collection of packages, a virtual repository. It is identified with Name and Stream from modulemd separated with colon, for example "postgresql:9.6".
Module streams can be active or inactive. active means the RPM packages from this stream are included in the set of available packages. Packages from inactive streams are filtered out. Streams are active either if marked as default or if they are explicitly enabled by a user action. Streams that satisfy dependencies of default or enabled streams are also considered active. Only one stream of a particular module can be active at a given point in time. one stream at a time bestie, it's monogamous π
π¦ PACKAGE FILTERING π¦
Without modules, packages with the highest version are used by default. standard behavior, we love her β
Module streams can distribute packages with lower versions than available in the repositories available to the operating system. To make such packages available for installs and upgrades, the non-modular packages are filtered out when their name or provide matches against a modular package name from any enabled, default, or dependent stream.
heads up: modular source packages will not cause non-modular binary packages to be filtered out. that's a whole different lane π
π DEMODULARIZED RPMS π
Contains names of RPMs excluded from package filtering for particular module stream. When defined in the latest active module, non-modular RPMs with the same name or provide which were previously filtered out will reappear β¨ like they were never gone, main character comeback energy
π₯ HOTFIX REPOSITORIES π₯
In special cases, a user wants to cherry-pick individual packages provided outside module streams and make them available on along with packages from the active streams. Under normal circumstances, such packages are filtered out or rejected from getting on the system by Fail-safe mechanisms. To make the system use packages from a repository regardless of their modularity, specify module_hotfixes=true in the .repo file. This protects the repository from package filtering. periodt π
Please note the hotfix packages do not override module packages β they only become part of the available package set. It's the package Epoch, Version and Release what determines if the package is the latest. so like, no queue-jumping, the version numbers decide π
π FAIL-SAFE MECHANISMS π
π REPOSITORIES WITH MODULE METADATA ARE UNAVAILABLE
When a repository with module metadata is unavailable, package filtering must keep working. Non-modular RPMs must remain unavailable and must never get on the system. no exceptions, no sneaking in π
This happens when:
- user disables a repository via
--disable-repoor uses--repo - user removes a
.repofile from disk - repository is not available and has
skip_if_unavailable=true
DNF5 keeps copies of the latest modulemd for every active stream and uses them if there's no modulemd available for the stream. This keeps package filtering working correctly. backup bestie behavior fr fr π«Ά
The copies are made any time a transaction is resolved and started. That includes RPM transactions as well as any dnf5 module <enable|disable|reset> operations.
When the fail-safe data is used, DNF5 show such modules as part of @modulefailsafe repository. yep, that's the name, remember it π
π ORPHANED MODULAR PACKAGES
All packages that are built as a part of a module have %{modularitylabel} RPM header set. If such package becomes part of RPM transaction and cannot be associated with any available modulemd, DNF5 prevents from getting it on the system (package is available, but cannot be installed, upgraded, etc.). so close and yet so far π
Packages from Hotfix repositories or Commandline repository are not affected by Fail-safe mechanisms. those ones get a pass π
β¨ Author β¨
See AUTHORS.md in dnf5 source distribution.
β¨ Copyright β¨
Contributors to the dnf5 project.
and that's the whole thing bestie π this page is from dnf5 and it's dated Sep 24, 2026 β so yeah, she's fresh, she's official, she ate and left no crumbs πβ go forth and modularize responsibly π§π
π¦ where this page comes from
- fedora 44: dnf5 5.4.6.0-1.fc44 Β· GPL-2.0-or-later
- fedora 44: dnf5 5.4.6.0-1.fc44 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms