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


14

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

假设我还想安装另一个软件apt,但这取决于第一个软件。(Vim LaTeXSuite,因为手动安装以供系统范围使用很痛苦。)

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

我怎么能:

  • 告诉apt一个给定的包(例如texlive是否已经安装用于所有实际目的,并且它不应该作为其他包的依赖项安装?

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

我已经通过各种筛选apt-相关联机手册,以及来到了空,也发现了这个问题,在这个网站,但觉得有要做到这一点不太hackish的方式,不是吗?

(从我的Gentoo时代开始,我记得emerge --inject并且/etc/portage/package.provides,我基本上都在寻找apt等价物。)


TeX Live 2011最近已被添加到Debian Sid中,因此它迟早会传播给Mint(但是Ubuntu 12.04“错过了”它,所以不早于10月底的Ubuntu 12.10)。如果你真的喜欢冒险,你也许可以从Debian Sid那里获取软件包,但是因为在这种情况下它涉及很多软件包,所以它可能不是一个好的解决方案。在launchpad.net/~texlive-backports/+archive/ppa上设置了一个PPA (请参阅Ubuntu中的这个错误报告),您也可以在Mint中使用它。
Daniel Andersson


三年后没有评论downvote ...关心解释?
DevSolar 2015年

@DevSolar:看起来好像有人将这个问题串联下来并在事后三年回答,但没有澄清原因。最好只是耸耸肩继续前进,我猜:-)。
Daniel Andersson 2015年

Answers:


12

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

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


此外,如果您认为应该能够在没有指定依赖项的情况下安装软件包,则应该针对软件包提交错误,并解释不需要依赖项的情况。

在这种情况下texlive-base-bin至少在基础Debian发行版中似乎只是“推荐”而不是“依赖”(可能部分原因texlive是这样一个巨大的包),但因为在Debian上安装上游TeX Live是很常见的发行版本经常落后很多(因为包装是如此的野兽,它通常无法在没有实质性工作的情况下进行打包,这主要是由一个或几个人声称他们在Debian旁边生活),equivs技巧通常与TeX Live一起使用(哇,那句话失控:-))。


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


我不知道这是怎么发生的,但是Linux Mint让texlive成为一个“硬”依赖...会尝试这个equivs包。
DevSolar

equivs工作得很好。我创建了版本9999 texlive-base-bin,覆盖了同名的原始“虚拟”包(由提供texlive-binaries),安装vim-latexsuite没有任何麻烦。
DevSolar

1

您可以--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上有一个非常类似的问题值得关注


呃......没有这样的事情?(至少不是我在这里的Linux Mint 12盒子。)
DevSolar

1
嗯,我似乎犯了一个错误 - 它的dpkg,而不是apt-get - 编辑我的答案以反映这一点
Journeyman Geek

这让我感到困惑的是Debian衍生物:大量的包管理器接口。我认为混合它们时不会涉及跳闸?或者我必须坚持其中一个?
DevSolar

一切都是基于dpkg,本质上,apt和aptitude是前端,apt和aptitude的前端。当您要从.deb文件安装软件包时,通常使用dpkg。在大多数情况下,我倾向于坚持使用apt-get和dpkg。混合“默认”debian风味包经理通常应该是合理的安全
Journeyman Geek

这使得你的答案成为我实际问题的首选解决方案,因为没有什么依赖于vim-latexsuite。然而,这种解决方案并没有将“texlive”标记为存在,它只是让vim-latexsuite不再要求它。因此,丹尼尔的回答更符合问题的标题。Checkmark去找他,荣誉归你。;-)
DevSolar

1

以下将从.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-get upgrade升级软件包:

apt-mark hold freeradius
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.