For several years I’ve been avoiding learning about the dnf command as a form of pointless protest at it’s replacement of yum. I mean it largely does the same thing as yum, works with yum repositories, and still seems fairly complicated. Also it seems pretty slow. and it wants to synchronize its cache all the time, usually at inconvenient moments.

I also suspect that one of the reasons to change the command from yum to dnf was to eliminate the reference to the origins i.e. the “yellow dog updater” flavour of linux. But possibly not. However 15 years of typing yum update -y is going to take some unlearning in the fingers.

However at some point I was going to have to read the man-page, and work out how to do some more sophisticated querying of packages and capabilties and today that opportunity arose…

I was trying to install the Sequeler package from the fedora repos, and unfortunately it has some package dependency issues getting it to work with mysql. The package itself installs, but then there are “No MySQL support” error messages when you try to connect to the database. The solution seems to be to install libgda-mysql but this package is not compatible with the current stable mariadb package in fedora.

If you try to install the libga-mysql package you get this nasty message;

sudo dnf install libgda-mysql
Last metadata expiration check: 0:07:34 ago on Wed 07 Feb 2018 14:59:38 GMT.
Error: 
 Problem: problem with installed package mariadb-tokudb-engine-3:10.2.12-5.fc27.x86_64
  - package mariadb-tokudb-engine-3:10.2.12-5.fc27.x86_64 requires mariadb-server(x86-64) = 3:10.2.12-5.fc27, but none of the providers can be installed
  - package mariadb-server-3:10.2.12-5.fc27.x86_64 requires mariadb-common(x86-64) = 3:10.2.12-5.fc27, but none of the providers can be installed
  - cannot install both mariadb-common-3:10.2.9-3.fc27.x86_64 and mariadb-common-3:10.2.12-5.fc27.x86_64
  - package mariadb-libs-3:10.2.9-3.fc27.x86_64 requires mariadb-common(x86-64) = 3:10.2.9-3.fc27, but none of the providers can be installed
  - package libgda-mysql-1:5.2.2-11.fc24.x86_64 requires libmysqlclient.so.18()(64bit), but none of the providers can be installed
  - conflicting requests
(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages)

Some troubleshooting must be done.

  - package libgda-mysql-1:5.2.2-11.fc24.x86_64 requires 
  libmysqlclient.so.18()(64bit), but none of the providers can be installed

This message indicates that libga-mysql package depends on something in mariadb-libs-3:10.2.9-3 (an older package) which is no longer available in the current package mariadb-libs-10.2.12-5

We can inspect the libgda-mysql package and see what capabilities its actually dependent on, and dnf helpfully suggests solutions at the same time.

$ dnf deplist libgda-mysql
package: libgda-mysql-1:5.2.2-11.fc24.x86_64
...
  dependency: libmysqlclient.so.18()(64bit)
   provider: mariadb-libs-3:10.2.9-3.fc27.x86_64
  dependency: libmysqlclient.so.18(libmysqlclient_18)(64bit)
   provider: mariadb-libs-3:10.2.9-3.fc27.x86_64
...

So dnf seems to think that on old version of mariadb-libs is the only package that can provide those specific capabilities e.g. libmysqlclient.so.18()(64bit)

Looking at the currently installed package for mariadb-libs we can see that its capabilities are similar but do not match that required and provided.

$ rpm -q --provides mariadb-libs | grep libmysql
libmariadb.so.3(libmysqlclient_18)(64bit)

$ dnf repoquery -l mariadb-libs | grep mysqlclient.so.18
/usr/lib/mysql/libmysqlclient.so.18
/usr/lib64/mysql/libmysqlclient.so.18

$ dnf repoquery --provides mariadb-libs | grep libmysqlc
...
libmariadb.so.3(libmysqlclient_18)
libmariadb.so.3(libmysqlclient_18)(64bit)
libmysqlclient.so.18
libmysqlclient.so.18()(64bit)
libmysqlclient.so.18(libmysqlclient_16)
libmysqlclient.so.18(libmysqlclient_16)(64bit)
libmysqlclient.so.18(libmysqlclient_18)
libmysqlclient.so.18(libmysqlclient_18)(64bit)


$ dnf repoquery --requires  libgda-mysql | grep libmysql
libmysqlclient.so.18()(64bit)
libmysqlclient.so.18(libmysqlclient_18)(64bit)

in summary

the 10.2.9-3 version of mariadb-libs declares capabilities including;

$ dnf repoquery -l  mariadb-libs-3:10.2.9-3.fc27
...
/usr/lib/mysql/libmysqlclient.so.18
/usr/lib64/mysql/libmysqlclient.so.18
...
]$ yum repoquery --provides mariadb-libs-3:10.2.9-3.fc27
config(mariadb-libs) = 3:10.2.9-3.fc27
libmariadb.so.3
libmariadb.so.3()(64bit)
libmariadb.so.3(libmariadb_3)
libmariadb.so.3(libmariadb_3)(64bit)
libmariadb.so.3(libmariadbclient_18)
libmariadb.so.3(libmariadbclient_18)(64bit)
libmariadb.so.3(libmysqlclient_18)
libmariadb.so.3(libmysqlclient_18)(64bit)
libmysqlclient.so.18
libmysqlclient.so.18()(64bit)
libmysqlclient.so.18(libmysqlclient_16)
libmysqlclient.so.18(libmysqlclient_16)(64bit)
libmysqlclient.so.18(libmysqlclient_18)
libmysqlclient.so.18(libmysqlclient_18)(64bit)
mariadb-libs = 3:10.2.9-3.fc27
mariadb-libs(x86-32) = 3:10.2.9-3.fc27
mariadb-libs(x86-64) = 3:10.2.9-3.fc27
mysql-libs = 3:10.2.9-3.fc27
mysql-libs(x86-32) = 3:10.2.9-3.fc27
mysql-libs(x86-64) = 3:10.2.9-3.fc27

and those capabilities have been removed from the current package

$ yum repoquery --provides mariadb-libs-3:10.2.12-5.fc27
config(mariadb-libs) = 3:10.2.12-5.fc27
libmariadb.so.3
libmariadb.so.3()(64bit)
libmariadb.so.3(libmariadb_3)
libmariadb.so.3(libmariadb_3)(64bit)
libmariadb.so.3(libmariadbclient_18)
libmariadb.so.3(libmariadbclient_18)(64bit)
libmariadb.so.3(libmysqlclient_18)
libmariadb.so.3(libmysqlclient_18)(64bit)
mariadb-libs = 3:10.2.12-5.fc27
mariadb-libs(x86-32) = 3:10.2.12-5.fc27
mariadb-libs(x86-64) = 3:10.2.12-5.fc27
mysql-libs = 3:10.2.12-5.fc27
mysql-libs(x86-32) = 3:10.2.12-5.fc27
mysql-libs(x86-64) = 3:10.2.12-5.fc27