Bug 1780363 - When excludepkgs is set for one repository, package from a different repository is ignored as well
Summary: When excludepkgs is set for one repository, package from a different reposito...
Keywords:
Status: CLOSED NOTABUG
Alias: None
Product: Red Hat Enterprise Linux 8
Classification: Red Hat
Component: dnf
Version: 8.4
Hardware: x86_64
OS: Linux
medium
medium
Target Milestone: rc
: 8.0
Assignee: Marek Blaha
QA Contact: Radek Bíba
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2019-12-05 18:56 UTC by Geoff Montee
Modified: 2020-05-05 19:09 UTC (History)
3 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2020-04-20 06:27:30 UTC
Type: Bug
Target Upstream Version:


Attachments (Terms of Use)

Description Geoff Montee 2019-12-05 18:56:08 UTC
Description of problem:

The mariadb-server package included in RHEL/CentOS 8 currently has Epoch=3, while MariaDB's RHEL/CentOS 8 package currently has Epoch=0. This means that the default package in RHEL/CentOS 8 takes precedence over MariaDB's packages. This is being tracked by the following MariaDB bug:

https://jira.mariadb.org/browse/MDEV-20673

I tried to work around this by setting the following in the configuration for the AppStream repo:


excludepkgs=mariadb*


However, when this is set, dnf ignores the mariadb-server package in the AppStream repository, *and* it ignores the MariaDB-server package in MariaDB's repository.


Version-Release number of selected component (if applicable):


$ sudo rpm -qa | grep dnf
python3-libdnf-0.22.5-5.el8_0.x86_64
python3-dnf-plugin-spacewalk-2.8.5-9.module+el8+2754+6a08e8f4.noarch
libdnf-0.22.5-5.el8_0.x86_64
dnf-4.0.9.2-5.el8.noarch
dnf-plugins-core-4.0.2.2-3.el8.noarch
dnf-plugin-spacewalk-2.8.5-9.module+el8+2754+6a08e8f4.noarch
dnf-plugin-subscription-manager-1.23.8-35.el8.x86_64
python3-dnf-4.0.9.2-5.el8.noarch
python3-dnf-plugins-core-4.0.2.2-3.el8.noarch
dnf-utils-4.0.2.2-3.el8.noarch
dnf-data-4.0.9.2-5.el8.noarch


How reproducible:

Reproducible 100% of the time.

Steps to Reproduce:

1. Setup MariaDB's yum repository:

curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash

https://mariadb.com/kb/en/library/mariadb-package-repository-setup-and-usage/

2. Confirm that the MariaDB yum repository is setup and the MariaDB-server package is present:


$ sudo yum --repo='mariadb-main' repoquery --qf="%{NAME} %{EPOCH} %{VERSION} %{RELEASE}" MariaDB-server
Last metadata expiration check: 0:05:18 ago on Thu 05 Dec 2019 06:43:23 PM UTC.
MariaDB-server 0 10.4.10 1.el8
MariaDB-server 0 10.4.7 1.el8
MariaDB-server 0 10.4.8 1.el8


3. Confirm that the mariadb-server package in the RHEL/CentOS 8 AppStream repository takes precedence:


$ sudo yum repoquery --qf="%{NAME} %{EPOCH} %{VERSION} %{RELEASE}" MariaDB-server
Last metadata expiration check: 0:00:07 ago on Thu 05 Dec 2019 06:51:19 PM UTC.
mariadb-server 3 10.3.11 1.module+el8+2765+cfa4f87b
mariadb-server 3 10.3.11 2.module+el8+2885+7b8bb354
mariadb-server 3 10.3.17 1.module+el8.1.0+3974+90eded84


4. We only want to download MariaDB packages from MariaDB's yum repository, so now we should add excludepkgs=mariadb* to the repository configuration for the AppStream repository.

i.e. on my EC2 system, that means opening up /etc/yum.repos.d/redhat-rhui.repo, and setting the following configuration:


[rhui-rhel-8-appstream-rhui-rpms]
name=Red Hat Enterprise Linux 8 for $basearch - AppStream from RHUI (RPMs)
mirrorlist=https://rhui3.REGION.aws.ce.redhat.com/pulp/mirror/content/dist/rhel8/rhui/8/$basearch/appstream/os
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
sslverify=1
sslclientkey=/etc/pki/rhui/content-rhel8.key
sslclientcert=/etc/pki/rhui/product/content-rhel8.crt
sslcacert=/etc/pki/rhui/cdn.redhat.com-chain.crt
excludepkgs=mariadb*


4. Now, try to search for the MariaDB-server package again:


$ sudo yum info MariaDB-server
Last metadata expiration check: 0:00:10 ago on Thu 05 Dec 2019 06:52:03 PM UTC.
Error: No matching Packages to list


Actual results:

The MariaDB-server package is not found.

Expected results:

The MariaDB-server package from MariaDB's repository should be used.

Additional info:

Comment 1 Marek Blaha 2019-12-09 16:22:26 UTC
The situation is pretty much the same as in the bug https://bugzilla.redhat.com/show_bug.cgi?id=1777393
Again the problem is that dnf (according to the modularity specifications - see https://dnf.readthedocs.io/en/latest/command_ref.html#modular-filtering) filters out all packages "from inactive module streams, as well as non-modular packages with the same name *OR PROVIDES* as a package from an active module stream". So this is not DNF bug, but the modularity feature.

Specifically for the mariadb:

1. list all MariaDB-server packages regardless the modularity
$ dnf --setopt=*.module_hotfixes=1 repoquery MariaDB-server
MariaDB-server-0:10.4.10-1.el8.x86_64
MariaDB-server-0:10.4.7-1.el8.x86_64
MariaDB-server-0:10.4.8-1.el8.x86_64
mariadb-server-3:10.3.17-1.module+el8.1.0+3974+90eded84.x86_64

2. list all provides of the MariaDB-server-0:10.4.10-1.el8.x86_64 package
$ dnf --setopt=*.module_hotfixes=1 repoquery --provides MariaDB-server-0:10.4.10-1.el8.x86_64
MariaDB
MariaDB-server = 10.4.10-1.el8
MariaDB-server(x86-64) = 10.4.10-1.el8
MySQL
MySQL-server
config(MariaDB-server) = 10.4.10-1.el8
config(mysql-server) = 10.4.10-1.el8
libmariadbd.so.19()(64bit)
msqlormysql
mysql-server
mysql-server = 10.4.10-1.el8
mysql-server(x86-64) = 10.4.10-1.el8

3. find out which modules contain artifacts with the same name as any of those provides (use only those provides that could possibly be package names):
$ dnf module provides MariaDB MariaDB-server MySQL MySQL-server msqlormysql mysql-server
mysql-server-8.0.17-3.module+el8.0.0+3898+e09bb8de.x86_64
Module   : mysql:8.0:8000020190807131617:f8e95b4e:x86_64
Profiles : server
Repo     : rhel-AppStream
Summary  : MySQL Module

4. list all the artifacts of the mysql:8.0 stream:
$ dnf module info mysql:8.0
Name             : mysql
Stream           : 8.0 [d][x]
Version          : 8000020190807131617
Context          : f8e95b4e
Architecture     : x86_64
Profiles         : client, server [d]
Default profiles : server
Repo             : rhel-AppStream
Summary          : MySQL Module
Description      : MySQL is a multi-user, multi-threaded SQL database server. MySQL is a client/server implementation consisting of a server daemon (mysqld) and many different client programs and libraries. The base package contains the standard MySQL client programs and generic MySQL files.
Requires         : platform:[el8]
Artifacts        : mecab-0:0.996-1.module+el8.0.0+3898+e09bb8de.9.src
                 : mecab-0:0.996-1.module+el8.0.0+3898+e09bb8de.9.x86_64
                 : mecab-debuginfo-0:0.996-1.module+el8.0.0+3898+e09bb8de.9.x86_64
                 : mecab-debugsource-0:0.996-1.module+el8.0.0+3898+e09bb8de.9.x86_64
                 : mecab-ipadic-0:2.7.0.20070801-16.module+el8.0.0+3898+e09bb8de.src
                 : mecab-ipadic-0:2.7.0.20070801-16.module+el8.0.0+3898+e09bb8de.x86_64
                 : mecab-ipadic-EUCJP-0:2.7.0.20070801-16.module+el8.0.0+3898+e09bb8de.x86_64
                 : mysql-0:8.0.17-3.module+el8.0.0+3898+e09bb8de.src
                 : mysql-0:8.0.17-3.module+el8.0.0+3898+e09bb8de.x86_64
                 : mysql-common-0:8.0.17-3.module+el8.0.0+3898+e09bb8de.x86_64
                 : mysql-debuginfo-0:8.0.17-3.module+el8.0.0+3898+e09bb8de.x86_64
                 : mysql-debugsource-0:8.0.17-3.module+el8.0.0+3898+e09bb8de.x86_64
                 : mysql-devel-0:8.0.17-3.module+el8.0.0+3898+e09bb8de.x86_64
                 : mysql-devel-debuginfo-0:8.0.17-3.module+el8.0.0+3898+e09bb8de.x86_64
                 : mysql-errmsg-0:8.0.17-3.module+el8.0.0+3898+e09bb8de.x86_64
                 : mysql-libs-0:8.0.17-3.module+el8.0.0+3898+e09bb8de.x86_64
                 : mysql-libs-debuginfo-0:8.0.17-3.module+el8.0.0+3898+e09bb8de.x86_64
                 : mysql-server-0:8.0.17-3.module+el8.0.0+3898+e09bb8de.x86_64
                 : mysql-server-debuginfo-0:8.0.17-3.module+el8.0.0+3898+e09bb8de.x86_64
                 : mysql-test-0:8.0.17-3.module+el8.0.0+3898+e09bb8de.x86_64
                 : mysql-test-debuginfo-0:8.0.17-3.module+el8.0.0+3898+e09bb8de.x86_64

4. the stream "8.0" of the module mysql contains artifact mysql-server-0:8.0.17-3.module+el8.0.0+3898+e09bb8de.x86_64. The stream is default and that means it is active => all non-modular packages with either name mysql-server or provide mysql-server are going to be filtered out. The package MariaDB-server provides "mysql-server" and thus will be filtered out.

5. to be able to install MariaDB-server package, we need to disable mysql module (and also the module mariadb for similar reasons)
$ dnf module disable mysql mariadb

6. package MariaDB-server is available
$ dnf info MariaDB-server
Available Packages
Name         : MariaDB-server
Version      : 10.4.10
Release      : 1.el8
Architecture : x86_64
Size         : 26 M
Source       : MariaDB-server-10.4.10-1.el8.src.rpm
Repository   : mariadb-main
Summary      : MariaDB: a very fast and robust SQL database server
URL          : http://mariadb.org
License      : GPLv2
Description  : MariaDB: a very fast and robust SQL database server

Comment 4 Marek Blaha 2020-04-20 06:27:30 UTC
Given that DNF behaves exactly according to modularity specification I'm closing this as "not a bug".
In case you didn't consider the explanation from comment#1 sufficient please do not hesitate to reopen the bug.


Note You need to log in before you can comment on or make changes to this bug.