wake-up-neo.com

我如何去忽略某些依赖关系?

如何使apt-get忽略某些依赖项?例如,我想安装mailx,以便可以使用它从cron脚本/报告生成工具发送电子邮件。但是,安装mailx还会安装exim4和一堆我确实不需要的依赖项(我已经安装了Postfix),我想mailx也可以不用。

我如何忽略某些依赖项,但由于它是一个不错的工具,仍然使用apt-get?

93
FrancisV

简单易用的解决方案:只需在每个不需要的软件包后面加上一个额外的_-_即可。

没有_-_开关的示例:

_[email protected]:~# apt-get install bsd-mailx 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  exim4-base exim4-config exim4-daemon-light liblockfile-bin liblockfile1
[...]
_

避免切换到的示例安装_exim4-base_。请注意最后的_-_:

_[email protected]:~# apt-get install bsd-mailx exim4-base-
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package 'exim4-base' is not installed, so not removed
The following extra packages will be installed:
  liblockfile-bin liblockfile1 ssmtp
[...]
_

如您所见,_apt-get_不再尝试安装_exim4-base_程序包,并且也不再尝试安装其各种依赖项(_exim4-config_等)。

而且,如果您错了并且毕竟需要_exim4-base_依赖项,则可以稍后再___apt-get install_依赖!

51
Jealie

您可以像这样更改deb包的依赖项:

  1. 解压Deb:ar x golden-linux.deb(将创建三个文件:debian-binary control.tar.gz data.tar.gz)
  2. 解压控制档案:tar xzf control.tar.gz(将创建:postinst postrm preinst prerm md5sums控件)
  3. 修复control中的依赖性(使用文本编辑器)
  4. 重新包装control.tar.gz:tar --ignore-failed-read -cvzf control.tar.gz {post,pre}{inst,rm} md5sums control
  5. 重新包装deb:ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz(顺序很重要!请参见[注意])

[注意]:如果dpkg必须搜索数据部分的结束位置,那么它将无法快速读取软件包的元数据!

57
Janus Troelsen

使用--ignore-depends选项安装软件包后,转到并编辑/var/lib/dpkg/status文件,并删除您认为不需要的任何依赖项。请非常小心。为了一个部门。被要求,它比[〜#〜] be [〜#〜]更有可能

34
Manolis

您可以尝试--nodeps标记为apt-get
或下载软件包并使用dpkg和选项--ignore-depends

例如,如果要安装不具有依赖项foo的软件包bar

dpkg --ignore-depends=bar -i foo_1.2.3_AMD64.deb
26
Bart De Vos

由于从源代码安装了postfix,因此需要安装一个“虚拟”软件包,该软件包将满足mailx(或bsd-mailx)的邮件传输代理依赖性。存在于debian中的“ equivs”软件包可以创建这样的虚拟软件包,您可以安装该软件包以告诉dpkg“满足此依赖性”

告诉dpkg仅忽略依赖项不是一个好的解决方案,原因是您只告诉dpkg/apt对单个事务忽略它,而不能告诉它永远忽略依赖项。每次使用apt时,它都会检查all软件包的依赖性

15
stew

手动调整依赖项的另一种方法是:

apt-get download yourpackage
dpkg-deb -x yourpackage.deb PackageFolder
dpkg-deb --control yourpackage.deb PackageFolder/DEBIAN
vim PackageFolder/DEBIAN/control
dpkg -b PackageFolder yourpackage2.deb
apt-get install ./yourpackage2.deb
7
AndrewHarvey

我一直在运行Xen的Ubuntu 12.04 Server上寻找此选项。在我的域中,我使用-virtual内核,并且在每次内核软件包升级时都不断尝试安装grub。但是,使用p [yv] grub时,domU内部不需要使用grub。

我也一直在寻找-nodeps选项来apt-get,但是它没有用,所以最终在每次内核升级后都卸载/清除grub *。

毕竟,reading手册页确实有时会有所帮助-事实证明,在12.04上有一个类似的apt-get选项似乎是--no-install-recommends,在这种情况下实际上可以使用,因为grub是在软件包信息中列为“推荐”(我想是不是“真正的”依赖关系?)。

我将其添加到此处是因为在我的情况下,它解决了类似的问题,并且尚未提及“ --no-install-recommends”的提示。

7
memartin

您可以使用apt-get下载该软件包,然后使用dpkg安装该软件包,手动列出您希望忽略的依赖关系。

例如,如果我要下载mypackage但它依赖于libperl5.14,而我不想安装libperl5.14,因为我使用的是其他版本,则可以忽略此依赖性,如下所示:

apt-get download mypackage
dpkg -i --ignore-depends=libperl5.14 mypackage.deb
7
A.Badger

在我的debian系统上,bsd-mailx实际上取决于default-mta | mail-transport-agent(对于归档文件中的任何内容,您可以使用apt-cache show <pkg>来检查软件包所依赖的内容;对于已安装的软件包,可以使用dpkg -s <pkg>来检查软件包所依赖的内容。

可能是您的postfix软件包没有Provides: mail-transport-agent,所以apt并没有意识到您已安装MTA。如果是官方程序包,那就应该为此提交一个错误。

2
Andy

为此,您可以只安装 nail ,我认为这些依赖项没有?

apt-get install nail
1
jamespo