我最近尝试更新我的(fedora 27,x64)机器上的一些软件包,它dnf
抱怨有冲突。但是,我不知道如何dnf
告诉我冲突的原因。这个相关问题说我应该--best
用解决问题,但这仍然没有告诉我为什么看似不冲突的情况被视为冲突。
这个问题的 TL;DR 是:我如何才能dnf
告诉我哪些软件包存在冲突以及相关的依赖项是什么?
以下为冲突情况:
$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
我发现(与dnf --deplist info
)这i3status-2.12-1.fc27.x86_64
取决于libconfuse-3.2-3.fc27.x86_64
:
dependency: libconfuse.so.1()(64bit)
provider: libconfuse-3.2-3.fc27.x86_64
然而,我一生都无法弄清楚哪些东西取决于旧libconfuse-3.2.2-1.fc27.x86_64
包。我假设已安装软件包的反向依赖关系很容易搜索,但解决方案建议这里说明dnf repoquery --available --alldeps --source --whatrequires libconfuse-3.2.2-1.fc27.x86_64
应该可以解决问题;然而输出是:
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
并且该 rpm 根本不存在依赖关系。换句话说,唯一需要这个的包是包本身,但这种情况不会一直发生,所以我猜这个列表在某种程度上是不完整的。深入研究了dnf repoquery
一下,我发现这dnf repoquery --all --installed --whatrequires libconfuse
应该给我想要的输出。这说:
i3status-0:2.12-1.fc27.x86_64
哪个包最初被列为我要更新的包,但正如上面已经指出的,这libconfuse.so.1()(64bit)
取决于libconfuse-3.2-3.fc27.x86_64
.换句话说,根据此输出,不应存在冲突。我在这里缺少什么?
答案1
以下命令将返回一个列表已安装依赖的包混淆库以及它们所依赖的确切版本和架构:
sudo dnf repoquery --whatdepends libconfuse \
--queryformat "%{name}.%{arch} %{version}-%{release}" 2>/dev/null \
| grep -F -f <(sudo dnf list installed \
| tr -s '[[:space:]]' | cut -d ' ' -f-2) \
| xargs -L1 sudo dnf repoquery --deplist 2>/dev/null \
| grep 'package\|libconfuse'
(确保更换两个都的出现混淆库与库名dnf有冲突,不带任何版本号,否则无法运行)