Dnf upgrade failed due to missing dependencies, DNF module in failsafe

Hello,

First time poster, please correct any mistakes I make or any information I’m missing. Most of my servers run Debian stable, so I’m familiar with Linux system administration generally, but this is the first RHEL-derivative that I’ve run in production.

I inherited a Rocky Linux 8.8 virtual machine. Given that Rocky 8.8 has been out of support for some years now, I’d like to upgrade to Rocky 8.10 (the current long-term stable, if I’m reading the documentation properly. Running a dnf -y upgrade produces the following output:

Last metadata expiration check: 2:35:07 ago on Fri 23 Jan 2026 09:15:44 AM EST.
Error:
Problem 1: package util-linux-user-2.32.1-47.el8_10.x86_64 from baseos requires util-linux = 2.32.1-47.el8_10, but none of the providers can be installed

cannot install the best update candidate for package util-linux-user-2.32.1-42.el8_8.x86_64

package util-linux-2.32.1-47.el8_10.x86_64 from baseos is filtered out by modular filtering
Problem 2: package sqlite-3.26.0-20.el8_10.x86_64 from baseos requires sqlite-libs = 3.26.0-20.el8_10, but none of the providers can be installed

cannot install the best update candidate for package sqlite-3.26.0-17.el8_7.x86_64

package sqlite-libs-3.26.0-20.el8_10.i686 from baseos is filtered out by modular filtering

package sqlite-libs-3.26.0-20.el8_10.x86_64 from baseos is filtered out by modular filtering
Problem 3: package rpm-plugin-systemd-inhibit-4.14.3-32.el8_10.x86_64 from baseos requires rpm-libs(x86-64) = 4.14.3-32.el8_10, but none of the providers can be installed

cannot install the best update candidate for package rpm-plugin-systemd-inhibit-4.14.3-26.el8.x86_64

package rpm-libs-4.14.3-32.el8_10.x86_64 from baseos is filtered out by modular filtering
Problem 4: package rpm-build-libs-4.14.3-32.el8_10.x86_64 from baseos requires rpm-libs(x86-64) = 4.14.3-32.el8_10, but none of the providers can be installed

cannot install the best update candidate for package rpm-build-libs-4.14.3-26.el8.x86_64

package rpm-libs-4.14.3-32.el8_10.x86_64 from baseos is filtered out by modular filtering
Problem 5: package python3-rpm-4.14.3-32.el8_10.x86_64 from baseos requires rpm-libs(x86-64) = 4.14.3-32.el8_10, but none of the providers can be installed

cannot install the best update candidate for package python3-rpm-4.14.3-26.el8.x86_64

package rpm-libs-4.14.3-32.el8_10.x86_64 from baseos is filtered out by modular filtering
Problem 6: package openssh-server-8.0p1-27.el8_10.x86_64 from baseos requires openssh = 8.0p1-27.el8_10, but none of the providers can be installed

cannot install the best update candidate for package openssh-server-8.0p1-17.el8_7.x86_64

package openssh-8.0p1-27.el8_10.x86_64 from baseos is filtered out by modular filtering
Problem 7: package grub2-tools-extra-1:2.02-169.el8_10.rocky.0.1.x86_64 from baseos requires grub2-tools-minimal = 1:2.02-169.el8_10.rocky.0.1, but none of the providers can be installed

cannot install the best update candidate for package grub2-tools-extra-1:2.02-148.el8.rocky.0.3.x86_64

package grub2-tools-minimal-1:2.02-169.el8_10.rocky.0.1.x86_64 from baseos is filtered out by modular filtering
Problem 8: package grub2-pc-1:2.02-169.el8_10.rocky.0.1.x86_64 from baseos requires grub2-tools-minimal = 1:2.02-169.el8_10.rocky.0.1, but none of the providers can be installed

cannot install the best update candidate for package grub2-pc-1:2.02-148.el8.rocky.0.3.x86_64

package grub2-tools-minimal-1:2.02-169.el8_10.rocky.0.1.x86_64 from baseos is filtered out by modular filtering
Problem 9: package grub2-pc-modules-1:2.02-169.el8_10.rocky.0.1.noarch from baseos requires grub2-common = 1:2.02-169.el8_10.rocky.0.1, but none of the providers can be installed

cannot install the best update candidate for package grub2-pc-modules-1:2.02-148.el8.rocky.0.3.noarch

package grub2-common-1:2.02-169.el8_10.rocky.0.1.noarch from baseos is filtered out by modular filtering
Problem 10: package python3-magic-5.33-27.el8_10.noarch from baseos requires file = 5.33-27.el8_10, but none of the providers can be installed

cannot install the best update candidate for package python3-magic-5.33-24.el8.noarch

package file-5.33-27.el8_10.x86_64 from baseos is filtered out by modular filtering
Problem 11: package dracut-squash-049-239.git20251127.el8_10.x86_64 from baseos requires dracut = 049-239.git20251127.el8_10, but none of the providers can be installed

cannot install the best update candidate for package dracut-squash-049-223.git20230119.el8.x86_64

package dracut-049-239.git20251127.el8_10.x86_64 from baseos is filtered out by modular filtering
Problem 12: package cryptsetup-2.3.7-7.el8.x86_64 from baseos requires cryptsetup-libs = 2.3.7-7.el8, but none of the providers can be installed

cannot install the best update candidate for package cryptsetup-2.3.7-5.el8.x86_64

package cryptsetup-libs-2.3.7-7.el8.i686 from baseos is filtered out by modular filtering

package cryptsetup-libs-2.3.7-7.el8.x86_64 from baseos is filtered out by modular filtering
Problem 13: package NetworkManager-tui-1:1.40.16-20.el8_10.x86_64 from baseos requires NetworkManager-libnm(x86-64) = 1:1.40.16-20.el8_10, but none of the providers can be installed

cannot install the best update candidate for package NetworkManager-tui-1:1.40.16-1.el8.x86_64

package NetworkManager-libnm-1:1.40.16-20.el8_10.x86_64 from baseos is filtered out by modular filtering
Problem 14: package NetworkManager-team-1:1.40.16-20.el8_10.x86_64 from baseos requires NetworkManager(x86-64) = 1:1.40.16-20.el8_10, but none of the providers can be installed

cannot install the best update candidate for package NetworkManager-team-1:1.40.16-1.el8.x86_64

package NetworkManager-1:1.40.16-20.el8_10.x86_64 from baseos is filtered out by modular filtering
Problem 15: cannot install the best update candidate for package grub2-tools-1:2.02-148.el8.rocky.0.3.x86_64

both package grub2-tools-efi-1:2.02-169.el8_10.rocky.0.1.x86_64 from baseos and grub2-tools-1:2.02-169.el8_10.rocky.0.1.x86_64 from baseos obsolete grub2-tools < 1:2.02-169.el8_10.rocky.0.1

package grub2-tools-extra-1:2.02-169.el8_10.rocky.0.1.x86_64 from baseos requires grub2-tools-minimal = 1:2.02-169.el8_10.rocky.0.1, but none of the providers can be installed

package grub2-tools-1:2.02-169.el8_10.rocky.0.1.x86_64 from baseos is filtered out by modular filtering

package grub2-tools-minimal-1:2.02-169.el8_10.rocky.0.1.x86_64 from baseos is filtered out by modular filtering
(try to add ‘–skip-broken’ to skip uninstallable packages or ‘–nobest’ to use not only best candidate packages)

It would appear, from my reading, that there are newer versions of packages available in the repositories (specifically the 8.10 versions, given the el8_10 in the version string), but some of the dependencies for those packages are not available. This is backed up by dnf info. Here’s the output of dnf info sqlite, one of the packages that is failing:

Last metadata expiration check: 2:55:29 ago on Fri 23 Jan 2026 09:15:44 AM EST.
Installed Packages
Name         : sqlite
Version      : 3.26.0
Release      : 17.el8_7
Architecture : x86_64
Size         : 1.3 M
Source       : sqlite-3.26.0-17.el8_7.src.rpm
Repository   : 

From repo    : anaconda
Summary      : Library that implements an embeddable SQL database engine
URL          : http://www.sqlite.org/
License      : Public Domain
Description  : SQLite is a C library that implements an SQL database engine. A large
: subset of SQL92 is supported. A complete database is stored in a
: single disk file. The API is designed for convenience and ease of use.
: Applications that link against SQLite can enjoy the power and
: flexibility of an SQL database without the administrative hassles of
: supporting a separate database server.  Version 2 and version 3 binaries
: are named to permit each to be installed on a single host

Available Packages
Name         : sqlite
Version      : 3.26.0
Release      : 20.el8_10
Architecture : x86_64
Size         : 668 k
Source       : sqlite-3.26.0-20.el8_10.src.rpm
Repository   : baseos
Summary      : Library that implements an embeddable SQL database engine
URL          : http://www.sqlite.org/
License      : Public Domain
Description  : SQLite is a C library that implements an SQL database engine. A large
: subset of SQL92 is supported. A complete database is stored in a
: single disk file. The API is designed for convenience and ease of use.
: Applications that link against SQLite can enjoy the power and
: flexibility of an SQL database without the administrative hassles of
: supporting a separate database server.  Version 2 and version 3 binaries
: are named to permit each to be installed on a single host

Name         : sqlite
Version      : 3.26.0
Release      : 20.el8_10
Architecture : i686
Size         : 714 k
Source       : sqlite-3.26.0-20.el8_10.src.rpm
Repository   : baseos
Summary      : Library that implements an embeddable SQL database engine
URL          : http://www.sqlite.org/
License      : Public Domain
Description  : SQLite is a C library that implements an SQL database engine. A large
: subset of SQL92 is supported. A complete database is stored in a
: single disk file. The API is designed for convenience and ease of use.
: Applications that link against SQLite can enjoy the power and
: flexibility of an SQL database without the administrative hassles of
: supporting a separate database server.  Version 2 and version 3 binaries
: are named to permit each to be installed on a single host

An available upgrade to the 8.10 version. sqlite depends on sqlite-libs. Here’s the output for dnf info sqlite-libs:

Last metadata expiration check: 2:57:48 ago on Fri 23 Jan 2026 09:15:44 AM EST.
Installed Packages
Name : sqlite-libs
Version : 3.26.0
Release : 17.el8_7
Architecture : x86_64
Size : 1.1 M
Source : sqlite-3.26.0-17.el8_7.src.rpm
Repository : @System
From repo : anaconda
Summary : Shared library for the sqlite3 embeddable SQL database engine.
URL : ``http://www.sqlite.org/
License : Public Domain
Description : This package contains the shared library for sqlite.

No upgrades available.

Here’s the output of dnf repolist -v:

Loaded plugins: builddep, changelog, config-manager, copr, debug, debuginfo-install, dnf-transaction-json, download, generate_completion_cache, groups-manager, kpatch, needs-restarting, playground, repoclosure, repodiff, repograph, repomanage, reposync, system-upgrade
DNF version: 4.7.0
cachedir: /var/cache/dnf
Last metadata expiration check: 0:01:41 ago on Fri 23 Jan 2026 12:15:30 PM EST.
Repo-id            : appstream
Repo-name          : Rocky Linux 8 - AppStream
Repo-revision      : 8
Repo-distro-tags      : [cpe:/o:rocky:rocky:8]:  ,  , 8, L, R, c, i, k, n, o, u, x, y
Repo-updated       : Mon 19 Jan 2026 06:09:36 PM EST
Repo-pkgs          : 13,287
Repo-available-pkgs: 10,651
Repo-size          : 47 G
Repo-mirrors       : https://mirrors.rockylinux.org/mirrorlist?arch=x86_64&repo=AppStream-8
Repo-baseurl       : https://dl.rockylinux.org/pub/rocky/8.10/AppStream/x86_64/os/ (38 more)
Repo-expire        : 172,800 second(s) (last: Fri 23 Jan 2026 12:14:55 PM EST)
Repo-filename      : /etc/yum.repos.d/Rocky-AppStream.repo

Repo-id            : baseos
Repo-name          : Rocky Linux 8 - BaseOS
Repo-revision      : 8
Repo-distro-tags      : [cpe:/o:rocky:rocky:8]:  ,  , 8, L, R, c, i, k, n, o, u, x, y
Repo-updated       : Mon 19 Jan 2026 06:09:49 PM EST
Repo-pkgs          : 6,126
Repo-available-pkgs: 5,406
Repo-size          : 26 G
Repo-mirrors       : https://mirrors.rockylinux.org/mirrorlist?arch=x86_64&repo=BaseOS-8
Repo-baseurl       : https://mirrors.iu13.net/rocky/8.10/BaseOS/x86_64/os/ (38 more)
Repo-expire        : 172,800 second(s) (last: Fri 23 Jan 2026 12:15:10 PM EST)
Repo-filename      : /etc/yum.repos.d/Rocky-BaseOS.repo

Repo-id            : epel
Repo-name          : Extra Packages for Enterprise Linux 8 - x86_64
Repo-revision      : 1769131235
Repo-updated       : Thu 22 Jan 2026 08:20:57 PM EST
Repo-pkgs          : 10,368
Repo-available-pkgs: 10,362
Repo-size          : 19 G
Repo-metalink      : https://mirrors.fedoraproject.org/metalink?repo=epel-8&arch=x86_64&infra=$infra&content=pub/rocky
Updated          : Fri 23 Jan 2026 12:15:30 PM EST
Repo-baseurl       : https://ftp-chi.osuosl.org/pub/fedora-epel/8/Everything/x86_64/ (179 more)
Repo-expire        : 172,800 second(s) (last: Fri 23 Jan 2026 12:15:30 PM EST)
Repo-filename      : /etc/yum.repos.d/epel.repo

Repo-id            : extras
Repo-name          : Rocky Linux 8 - Extras
Repo-revision      : 1768860394
Repo-distro-tags      : [cpe:/o:rocky:rocky:8]:  ,  , 8, L, R, c, i, k, n, o, u, x, y
Repo-updated       : Mon 19 Jan 2026 05:06:34 PM EST
Repo-pkgs          : 62
Repo-available-pkgs: 62
Repo-size          : 6.3 M
Repo-mirrors       : https://mirrors.rockylinux.org/mirrorlist?arch=x86_64&repo=extras-8
Repo-baseurl       : http://mirror.rnet.missouri.edu/rocky/8.10/extras/x86_64/os/ (38 more)
Repo-expire        : 172,800 second(s) (last: Fri 23 Jan 2026 12:15:28 PM EST)
Repo-filename      : /etc/yum.repos.d/Rocky-Extras.repo
Total packages: 29,843

I tried a dnf clean all, with no change in behavior.

Reading the error message, I see that there’s a recurring message: package [the dependency that I need to install the updated package].el8_10.x86_64 from baseos is filtered out by modular filtering.

Frankly, I don’t understand what package modules are and the documentation I’ve found has confused me further (Here, here, some more but I can only put 2 links in a post).

Here’s some additional information that might help someone determine what’s happened to this system:

Output of dnf module list –enabled:

Last metadata expiration check: 0:07:07 ago on Fri 23 Jan 2026 12:52:55 PM EST.
@modulefailsafe
Name            Stream       Profiles Summary
build           stable [e]   everythi 
ng

Rocky Linux 8 - AppStream
Name            Stream       Profiles Summary
container-tools rhel8 [d][e] common [ Most recent (rolling) versions of podman, buildah, skopeo, runc, conmon, runc, con
d]       mon, CRIU, Udica, etc as well as dependencies such as container-selinux built and
tested together, and updated as frequently as every 12 weeks.
python36        3.6 [d][e]   build, c Python programming language, version 3.6
ommon [d
]

Output of dnf module list –installed is empty.

Some of the dependencies of packages I need appear to be provided by a module, but not all of them. For instance, dnf module provides cryptsetup-libs shows:

Last metadata expiration check: 0:08:51 ago on Fri 23 Jan 2026 12:52:55 PM EST.
cryptsetup-libs-2.3.7-5.el8.x86_64
Module : build:stable:1:abcdef12:
Profiles : everything
Repo : @modulefailsafe
Summary :

but dnf module provides sqlite-libs shows:

Last metadata expiration check: 0:12:57 ago on Fri 23 Jan 2026 12:52:55 PM EST.

/etc/dnf/modules.d contains three files, build.module, container-tools.module, & python36.module. I see that this “build” module is in a failsafe state?

My best guess is that a previous sysadmin or a network admin did some fiddling and somehow broke this “build” RPM module. If anyone has documentation to point me to or suggestions on solutions, I would really appreciate it.

Looks like you have a “custom module” that is messing it up. Try to disable the custom module, or better still just create a new (clean) VM.

I’ve resolved this issue, some more information for anyone else who finds this in the future:

Package modularity was an idea introduced into Fedora (and then ultimately Fedora-derived distributions like RHEL and Rocky) which appears to be trying to solve some of the same problems as containers (maybe?) by offering a way to provide multiple package versions in a single repository. If you had multiple supported versions of a database or a code runtime or something of that nature, you could publish them in a modular repository and people would have access to both. Package modularity was deprecated and I don’t see any movement on their issue tracker for the last three years.

Someone (presumably the network admin who had initially stood up this server) had created a file under /etc/dnf/modules.d called “build.module” to define a package module on the system. However, it wasn’t set up properly and (as far as I can tell) never worked. I assume this was done in lieu of trying to pin package versions, but I can’t say for sure. The build module (which is not in the official repos, it was a custom one, as @gerry666uk discerned) was in a failsafe state and blocked the installation of the un-modular versions of the packages it was “providing”.

Resolving the issue ended up being as simple as running dnf module reset build. From there, a normal update and reboot got all the packages upgraded and Rocky up to version 8.10.

If you’re going to try this, I’d suggest taking a full system backup beforehand. The package version upgrades didn’t break anything in the application that this server is running, but I can only assume this custom module was made with the thought that they might.

1 Like