如何告诉 apt 依赖关系已被手动解决?

如何告诉 apt 依赖关系已被手动解决?

假设有一个软件我不想通过 安装apt,而是手动安装。(TeXLive,因为我想使用 2011 版本,但apt只有 2009 版本。)

假设有其他我想通过安装的软件apt,但是依靠在第一个软件上。(Vim LaTeXSuite,因为手动安装以供全系统使用很麻烦。)

默认情况下,apt不会“看到”第一个软件,并继续安装大量不需要和不受欢迎的垃圾(例如 TeXLive 2009)只是为了满足依赖元数据。

我怎样才能:

  • 告诉apt给定的包(例如texlive为了所有实际目的而安装,并且它不应该作为其他包的依赖项来安装?

  • 告诉apt安装给定的包(例如vim-latexsuite)而不关心它的依赖关系?

我浏览了各种apt相关的手册页,但一无所获,还发现这个问题在这个网站上,但感觉这是一种不那么黑客的方式来做到这一点,不是吗?

(从我使用 Gentoo 的时候起,我记得emerge --inject/etc/portage/package.provides,并且基本上正在寻找apt等效物。)

答案1

您应该使用该equivs包来生成提供这些依赖项的元包,然后使用它dpkg来安装这些包。

安装equivs并阅读其文档应该足够了,但是本指南适用于 Ubuntu非常广泛并且也应该适用于其他 APT 系统。


此外,如果您认为某个软件包可以在没有指定依赖项的情况下安装,那么您应该针对该软件包提交错误报告,并解释不需要该依赖项的情况。

在这种情况下texlive-base-bin至少在基础 Debian 发行版中似乎只是“推荐”而不是“依赖”(可能部分原因是这个texlive软件包非常庞大),但是因为在 Debian 上安装上游 TeX Live 是很常见的,因为发行版版本经常落后很多(因为这个软件包非常庞大,经常需要大量工作才能打包,而这大多是由一个或几个人完成的,他们声称自己除了 Debian 之外还有其他生活),这个equivs技巧经常与 TeX Live 一起使用(哇,这句话失控了 :-) )。


添加:对于那些希望在软件包系统之外安装 TeXLive 的人来说,有关更详细的说明,TeX.SX 上的这些说明更加全面,并且很可能会继续保持更新。它们还包括有关该equivs步骤的更明确的说明。

答案2

以下命令将从 .deb 文件中删除依赖项,在本例中是从 freeradius 中删除 libperl5.20 依赖项:

dpkg-deb -x freeradius_2.2.5+dfsg-0.2+deb8u1_amd64.deb freeradius
dpkg-deb -e freeradius_2.2.5+dfsg-0.2+deb8u1_amd64.deb freeradius/DEBIAN
sed -i  -e 's/, libperl5.20 (>= 5.20.2)//g' freeradius/DEBIAN/control
dpkg-deb -b freeradius freeradius_2.2.5+dfsg-0.2+deb8u1_amd64.deb

这样,您就可以安装该包而无需 apt 知道依赖项的存在。

如果您正在手动安装特定版本的软件包,那么您可能还希望停止apt-get upgrade在将来升级该软件包:

apt-mark hold freeradius

答案3

您可以--nodeps在 dpkg 上使用标志,它应该安装完全没有任何依赖关系的包。

   --ignore-depends=package,...
          Ignore  dependency-checking for specified packages (actu-
          ally, checking is performed, but only warnings about con-
          flicts are given, nothing else)

有一个Serverfault 上非常类似的问题也值得一看

相关内容