I recently tried to update some packages on my (fedora 27, x64) machine, which dnf complains is in conflict. However, I cannot figure out how to get dnf to tell me the cause of the conflict.This related question says that I should use --best to solve the problem, but this still doesn't tell me why a seemingly non-conflicting situation is considered a conflict.
The TL;DR of this question is: how do I get dnf to tell me which packages are conflicting and what the associated dependents are?
The following is the conflict:
$dnf update Last metadata expiration check: 1:49:45 ago on Tue 27 Nov 2018 03:16:34 PM CET. Dependencies resolved. Problem: problem with installed package i3status-2.12-1.fc27.x86_64 - package i3status-2.12-1.fc27.x86_64 requires libconfuse.so.1()(64bit), but none of the providers can be installed - cannot install both libconfuse-3.2.2-1.fc27.x86_64 and libconfuse-3.2-3.fc27.x86_64 - cannot install both libconfuse-3.2-3.fc27.x86_64 and libconfuse-3.2.2-1.fc27.x86_64 - cannot install the best update candidate for package libconfuse-3.2-3.fc27.x86_64 I figured out (with dnf --deplist info) that i3status-2.12-1.fc27.x86_64 depends on libconfuse-3.2-3.fc27.x86_64:
dependency: libconfuse.so.1()(64bit) provider: libconfuse-3.2-3.fc27.x86_64 However, I cannot for the life of me figure out what thing depends on the older libconfuse-3.2.2-1.fc27.x86_64 package. I assumed reverse dependencies of installed packages would be easy to search, but the solution suggested here states that dnf repoquery --available --alldeps --source --whatrequires libconfuse-3.2.2-1.fc27.x86_64 should do the trick; however the output is:
Last metadata expiration check: 1:59:58 ago on Tue 27 Nov 2018 03:16:34 PM CET. libconfuse-3.2.2-1.fc27.src.rpm And of that rpm, there are no dependencies at all. In other words, the only package that requires this is the package itself, but this doesn't happen all the time, so I'm guessing this list is somehow incomplete. Digging into dnf repoquery a bit, I found that dnf repoquery --all --installed --whatrequires libconfuse should give me the desired output. This says:
i3status-0:2.12-1.fc27.x86_64 Which is the package that was originally listed as the package I want to update, yet as already pointed out above, this depends on libconfuse.so.1()(64bit) provided by libconfuse-3.2-3.fc27.x86_64. In other words, there should be no conflict, according to this output. What am I missing here?
dnf, an error in thei3statuspackage dependencies, in thelibconfusepackage specification, or in my understanding of howdnfhandles dependencies (I assumed the last of these was the issue).