Managing Software Versions with AlmaLinux DNF Module Streams
Learn how to enable a specific AppStream module stream in AlmaLinux 8 or 9 to install a desired software version, verify the selection, and avoid common modularity pitfalls.
01 Oct 2026, 05:54 UTC

Solving Version Conflicts with AppStream Modularity
When deploying applications on AlmaLinux 8 or 9, the base repository may provide a version of a tool that does not match your application's requirement. Enabling a specific AppStream module stream tells DNF to use only that version and its dependencies.
Worked Example: Switching to Node.js 18
- List available streams for the module:
dnf module list nodejs - Reset any existing stream selection to avoid conflicts:
dnf module reset nodejs -y - Enable the desired stream (version 18):
dnf module enable nodejs:18 -y - Install the package; DNF will pull from the enabled stream:
dnf install nodejs -y
Module Profiles
Profiles refine the set of packages installed from a stream. Common profiles include common (default), minimal (runtime only), and devel (includes headers). Enable a profile with:
dnf module enable nodejs:18/devel -y
Limits and Common Mistakes
- Mutual exclusivity: Only one stream per module can be active. Enabling a second stream without resetting first leaves the module in a conflicted state and DNF will refuse related installs.
- Resetting removes the pin: Running
dnf module resetdoes not uninstall the software, but it clears the stream selection. Subsequent installs may revert to the default stream, potentially upgrading or downgrading the package and breaking dependencies. - Third‑party repo interference: Repositories such as EPEL or Remi that provide the same software can bypass modularity. If a third‑party version satisfies a dependency, DNF may install it instead of the streamed version, causing library mismatches.
Verification and Diagnostics
| Goal | Command | Expected Result |
|---|---|---|
| Confirm active stream | dnf module info nodejs | The enabled stream shows [e] next to the version (e.g., 18). |
| Check installed version | rpm -qi nodejs | The version string matches the selected stream (e.g., 18.x.x). |
| Test dependency resolution | dnf install --assumeno nodejs | The transaction summary lists packages from the AppStream repository, not from a third‑party repo. |
Enabled streams are recorded in /etc/dnf/modules.d/. Inspect the XML files there to audit system‑wide module selections.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.