我见过好几次有未满足依赖关系的人,apt-get 并没有直接说明问题是什么,比如这个:
The following packages have unmet dependencies:
libgl1-mesa-dri:i386 : Depends: libdrm-intel1:i386 (>= 2.4.38) but it is not going to be installed
Depends: libdrm-nouveau2:i386 (>= 2.4.38) but it is not going to be installed
Depends: libdrm-radeon1:i386 (>= 2.4.31) but it is not going to be installed
Depends: libdrm2:i386 (>= 2.4.38) but it is not going to be installed
Depends: libglapi-mesa:i386 but it is not going to be installed
libgl1-mesa-glx:i386 : Depends: libdrm2:i386 (>= 2.3.1) but it is not going to be installed
Depends: libglapi-mesa:i386 (= 9.2.1-1ubuntu3) but it is not going to be installed
Depends: libx11-6:i386 (>= 2:1.4.99.1) but it is not going to be installed
Depends: libxcb-dri2-0:i386 (>= 1.8) but it is not going to be installed
Depends: libxcb-glx0:i386 (>= 1.8) but it is not going to be installed
Depends: libxcb1:i386 but it is not going to be installed
Depends: libxdamage1:i386 (>= 1:1.1) but it is not going to be installed
Depends: libxext6:i386 but it is not going to be installed
Depends: libxfixes3:i386 but it is not going to be installed
Depends: libxxf86vm1:i386 but it is not going to be installed
Run Code Online (Sandbox Code Playgroud)
我知道遍历所有依赖项apt-get install libgl1-mesa-dri:i386 libdrm-intel1:i386直到找到可用的东西,但在这种情况下,由于包的数量,这将是一项痛苦的工作。有没有更简单的方法来做到这一点?
Fah*_*tha 11
尝试合理的第一件事是询问 apt 为什么它正在做它正在做的事情。这可以通过-o Debug::pkgProblemResolver=yes选项来完成。例如
apt-get -o Debug::pkgProblemResolver=yes install libgl1-mesa-dri:i386 libdrm-intel1:i386
Run Code Online (Sandbox Code Playgroud)
如果 apt 没有出现,调试此类问题的标准方法是检查错误消息中提到的每个包的可用版本的优先级编号。这通常使用apt-cache policy.
例如,要仅使用错误消息的第一部分,您应该运行
apt-cache policy libgl1-mesa-dri:i386 libdrm-intel1:i386 libdrm-nouveau2:i386 libdrm-radeon1:i386 libdrm2:i386 libglapi-mesa:i386
Run Code Online (Sandbox Code Playgroud)
然后如何进行取决于这显示了什么。只运行通常也很有用
apt-cache policy
Run Code Online (Sandbox Code Playgroud)
这将显示所有可用的包源,以及它们的优先级编号。这些信息通常在一个或两个的指定/etc/apt/sources.list或/etc/apt/sources.list.d。
在这里寻求帮助的人应该首先在他们的问题中发布这些命令的结果。这可能是确定问题的足够信息。
现实生活中的问题示例:
使用 backports 存储库后未满足的依赖项:用户包含 的源www.deb-multimedia.org,但没有将其固定到较低的优先级。切勿在未将其固定为较低优先级的情况下包含第三方来源。请注意,这对于为默认版本提供软件包的行为良好的存储库来说不是必需的,但www.deb-multimedia.org众所周知,它与 Debian 不兼容,并且一般来说,您不应该信任未知来源。更一般地,如果您知道存储库不是为与您的系统一起使用而设计的,请将其固定在较低的优先级。例如在 Debian
稳定版上测试/不稳定的源。
未满足的依赖项:用户以某种方式设法安装了一个不是他系统上默认版本的 python 版本。自然,所有的地狱都崩溃了。这个故事的寓意是,请确保您只安装适合您系统的软件包版本。上面apt-cache policy pkgname会告诉你。
dpkg / apt-get 想要安装和覆盖不同的包:即使他的底层dpkg数据库损坏,用户也尝试安装包。道德上,如果您看到来自dpkg某个或另一个包裹有问题的消息,在这种情况下
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. 2 not
fully installed or removed.
Run Code Online (Sandbox Code Playgroud)
你的包数据库有问题。首先修复它们,然后再尝试安装其他任何东西。如果apt-get -f install不起作用,您可能需要在dpkg级别操作以修复问题。
有很多信息可以帮助您:
包括有关以下内容的软件包的信息:
apt-cache policy name-of-packages-involved
Run Code Online (Sandbox Code Playgroud)
所以,在你的情况下是最小值的输出apt-cache policy libgl1-mesa-dri:i386 libdrm-intel1:i386 libgl1-mesa-glx:i386 libdrm-nouveau2:i386。
的输出也sudo apt-get check可能sudo dpkg -C提高了你拥有的机会。
sudo apt-get update和的完整输出cat /etc/apt/sources.list{,.d/*.list}在某些情况下会有所帮助。如果您尝试安装软件包,why-not可以通过 aptitude 命令的输出轻松弄清楚:
aptitude why-not sysvinit-core
i A systemd-sysv Breaks sysvinit-core
Run Code Online (Sandbox Code Playgroud)当寻求有关解决此问题的帮助时,请始终包含所询问的所有内容的完整输出,这将加快问题的解决。
| 归档时间: |
|
| 查看次数: |
3589 次 |
| 最近记录: |