假设有一个软件我不想通过 安装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 上非常类似的问题也值得一看