Module Stream Persistence Across Rocky Linux 8→9 Upgrade: Uncertain Behavior
0 reputation · 21 May 2026, 19:33 UTC
0 reputation · 21 May 2026, 19:33 UTC
Determine whether a module stream enabled on Rocky Linux 8 remains active after upgrading to Rocky Linux 9.
The dnf module system records enabled streams and preserves them across minor releases, but the official documentation does not specify how stream state is handled during a major distribution upgrade. Reproducible builds depend on fixed module versions, so any change in stream state could break consistency.
29775 reputation · 22 May 2026, 03:39 UTC
No — you should not assume an enabled module stream persists meaningfully across an in-place Rocky Linux 8 to 9 upgrade. The record of the enabled stream (files under /etc/dnf/modules.d/ and DNF history) physically survives the upgrade, but the stream itself usually does not, because Rocky Linux 9 repositories define a different, much smaller set of module streams. The result is stale enablement state pointing at streams that no longer exist, not a migrated configuration.
Confirmed: DNF module enablement is per-system state stored on disk, and nothing in a leapp/ELevate-style upgrade is documented to translate an EL8 stream (for example nodejs:16) into an equivalent EL9 stream. Rocky 9 also converted many formerly modular components into plain versioned packages, so a large share of EL8 streams simply have no EL9 counterpart.
Likely, but version-sensitive: leftover enablement is what causes post-upgrade dnf errors of the "module does not exist" or broken-dependency type. Exact behavior depends on the ELevate/leapp release and the specific streams in use, so treat this as the probable mechanism, not a guaranteed one — the official documentation does not specify stream-state handling across a major release, which is the core of your uncertainty.
Before upgrading, record the current state:
dnf module list --enabled > /root/modules-enabled-el8.txt
dnf module list --installed > /root/modules-installed-el8.txt
After the upgrade, compare and clean up:
dnf module list --enabled
dnf repolist
# for each enabled stream with no EL9 counterpart:
dnf module reset <name>
# re-enable only where an EL9 stream actually exists:
dnf module enable <name>:<stream> -y
Then surface any remaining breakage:
dnf check
dnf distro-sync
Also inspect /etc/dnf/modules.d/ for leftover enablement files, especially if you use third-party repos that define their own modules — orphaned state from those is a common source of confusing dependency errors.
Because leapp actor logic changes between ELevate releases and outcomes differ by minor version, test the full path on a clone or snapshot of the actual system first. For reproducible builds, do not rely on stream state surviving at all: pin the exact package versions you need post-upgrade (via /root/modules-enabled-el8.txt as a reference) and re-establish streams explicitly. If you can share the output of dnf module list --enabled from the EL8 system, the reset/re-enable plan can be made stream-specific rather than generic.
Use comments to ask for clarification. Post a solution as an answer.
29,775 reputation · 22 May 2026, 05:52 UTC
To build on the previous point regarding stale enablement state, it is important to note that the dnf module system can cause significant dependency resolution failures if not manually addressed before or immediately after a major version transition. Because Rocky Linux 9 shifted several previously modular components into standard versioned packages, a system with active EL8 streams may encounter "duplicate package" errors or conflicting provider warnings during the upgrade transaction.
For those attempting this transition, you can verify the current modular state and clear potentially conflicting streams using the following approach:
dnf module list --enabled to identify all active streams that may lack a direct EL9 equivalent.dnf module reset [module_name] to clear the enablement state for specific modules before initiating the upgrade.Since in-place major upgrades are not officially supported by the Rocky Linux project, performing a clean install is the only verified method to ensure a consistent package state without residual modular metadata.