注意可能的重复:
AFAIK,这不是添加 PPA 后如何解决未满足的依赖项的副本?否则,请使用那里的任何答案解决我在下面提到的测试问题来证明这一点。
背景:
我之前遇到过这个问题How to fix installation wine on Ubuntu 14.04.3LTS 64 bit。它是通过对目标包 ( wine
) 的所有递归依赖项进行手动/人工审查来解决的。
重现问题(测试用例):
让我们只用 1 个故障包来安静地简化相同的情况。
- 在 VirtualBox 上安装全新的 Ubuntu 14.04。
- 打开
software-properties-gtk
并启用backports
存储库。 获取最后的包列表
sudo apt-get update
运行
apt-get -s install wine
确认wine
可以安装。libcgmanager0
从 backports安装麻烦的包$ apt-cache policy libcgmanager0 libcgmanager0: Installed: 0.24-0ubuntu5 Candidate: 0.24-0ubuntu7.5 Version table: 0.39-2ubuntu2~ubuntu14.04.1 0 100 http://dz.archive.ubuntu.com/ubuntu/ trusty-backports/main amd64 Packages 0.24-0ubuntu7.5 0 500 http://dz.archive.ubuntu.com/ubuntu/ trusty-updates/main amd64 Packages 0.24-0ubuntu7.1 0 500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages *** 0.24-0ubuntu5 0 500 http://dz.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages 100 /var/lib/dpkg/status
强制
apt
安装libcgmanager0
版本0.39-2ubuntu2~ubuntu14.04.1
sudo apt-get install libcgmanager0=0.39-2ubuntu2~ubuntu14.04.1
现在我们在后台遇到与上述问题相同的用户情况,wine 安装失败,依赖未满足,仅显示第一级依赖包。
apt-get -s install wine
Reading package lists... Done Building dependency tree Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: wine : Depends: wine1.6 but it is not going to be installed E: Unable to correct problems, you have held broken packages.
apt-get -s install wine1.6
Reading package lists... Done Building dependency tree Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: wine1.6 : Depends: wine1.6-i386 (= 1:1.6.2-0ubuntu4) E: Unable to correct problems, you have held broken packages.
apt-get -s install wine1.6-i386
Reading package lists... Done Building dependency tree Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: wine1.6-i386:i386 : Depends: libglu1-mesa:i386 but it is not going to be installed or libglu1:i386 Depends: libgphoto2-6:i386 (>= 2.5.2) but it is not going to be installed Depends: libgphoto2-port10:i386 (>= 2.5.2) but it is not going to be installed Recommends: libsane:i386 but it is not going to be installed E: Unable to correct problems, you have held broken packages.
一个一个地遵循依赖关系是不切实际apt-get install
的。
理想的解决方案:
真正的问题在这里
apt
无法安装libcgmanager0:i386
版本0.39-2ubuntu2~ubuntu14.04.1
,因为 backports 存储库的优先级100
低于存储库中0.24-0ubuntu7.5
的版本updates
500
apt
无法安装libcgmanager0:i386
版本0.24-0ubuntu7.5
,因为libcgmanager0:amd64
安装了不同的版本0.39-2ubuntu2~ubuntu14.04.1
最快的解决方法是,强制从 backports 安装相同的 i386 版本
sudo apt-get install libcgmanager0:i386=0.39-2ubuntu2~ubuntu14.04.1
或将其 (amd64) 降级到常规存储库中的任何版本
sudo apt-get install libcgmanager0=0.24-0ubuntu7.5
我尝试过的方法/工具:
- 禁用 PPA 与问题无关。
aptitude
在交互模式下使用,仅带来具有许多删除( >200 !!!)的解决方案。apt-get install
按照依赖树手动使用。不切实际,因为第一级和第二级依赖项没有提出有关冲突的有意义的消息。debfoster
可以生成递归依赖项,但仅限于已安装的包。但是wine
还没有安装。
主题/我的兴趣:
假设我想在不知道 libcgmanager0
软件包问题(或者libcgmanager0:amd64=0.39-2ubuntu2~ubuntu14.04.1
已经安装的软件包)的情况下安装 wine。
我正在寻找一种调试方法或一种方法来了解有问题的包的名称并快速了解发生了什么。
通常如何调试未满足的依赖项问题?
dpkg
//apt
中可能有一些新选项aptitude
可以跟踪内部依赖项解析器。这可以显示libcgmanager0
在它的输出中。如果对此没有规范的答案,谁能告诉我一种更好的方法来生成递归依赖项列表或使用更多细节模拟依赖项解析器以帮助解决问题?
为什么所有的依赖?因为我想一次检查所有包的以下命令的输出。
apt-cache policy <all-dependencies>
apt-get -s install <all-dependencies>
根本原因(更新)
几年后在这里问 Ubuntu。我注意到一件事可以帮助解决这个问题。
apt
,aptitude
&dpkg
如果它是主要的(通常),则不指示体系结构amd64
,因此它们总是显示没有体系结构的包名称。例如,他们将架构后缀放在其他架构package-name:i368
上。这让新用户感到困惑,因为它发生在我身上。我假设它们是同一个包。例子:
他们实际上是这个意思:
调试和故障排除命令(原始答案)
学分和感谢转到@muru。
我正在寻找任何可以显示故障包名称的命令或调试选项(
libcgmanager0
在这个测试用例中)。apt-get -s -o Debug::pkgProblemResolver=yes install wine
它有一个冗长的输出,安静的很难理解。如果我熟悉它,应该没问题。
echo q | aptitude -s install wine
最小输出但清楚地注意到冲突。
我一直在寻找的另一点是最小化 OP 请求的输出。而不是仅请求
apt-cache policy
第一级/第二级依赖项。我会同时请求所有递归依赖项。apt-rdepends wine 2>/dev/null | grep "^[a-zA-Z]" | sort
请注意,它
apt-rdepends
正在模拟apt-cache
,因此其结果可能与 不同debfoster
。还有一点,这两个工具都不区分 arch(i386 或 amd64),它们只是显示名称。由于上面的链接稍后可能会被删除,这里是上面所有命令的完整输出。