我如何得到apt-get来忽略一些依赖关系?

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

我如何忽略一些依赖,但仍然使用apt-get,因为它是一个很好的工具?

    你可以用apt-get来试试--nodeps标志。
    或者下载软件包并使用dpkg (选项--ignore-depends

    你可以像这样改变deb包的依赖关系:

    1. 解压deb: ar x golden-linux.deb (会创build三个文件:debian-binary control.tar.gz data.tar.gz)
    2. 解压控制档案: tar xzf control.tar.gz (将创build:postinst postrm preinst mr5sums控制)
    3. 修复control依赖关系(使用文本编辑器)
    4. 重新包装control.tar.gz: tar c {post,pre}{inst,rm} md5sums control | gzip -c > control.tar.gz tar c {post,pre}{inst,rm} md5sums control | gzip -c > control.tar.gz
    5. 重新包装deb: ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz (重要命令!请参阅[注意])

    [注意]:如果dpkg必须search数据部分结束的地方,将无法快速读取包的元数据!

    使用--ignore-depends选项安装软件包后,请转至编辑/var/lib/dpkg/status文件,然后删除您认为不需要的任何依赖项。 只要非常小心。 为了一个dep。 被要求,这是很有可能被要求

    简单而简单的解决scheme:只需指定不需要的软件包,然后添加一个额外的软件包。

    没有-开关的例子:

     root@debian:~# 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例子。 注意-最后:

     root@debian:~# 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它!

    由于您是从源代码安装的后缀,您需要安装一个“虚拟”软件包,以满足mailx(或bsd-mailx)的邮件传输代理依赖性。 debian中的“equivs”包存在于创build这样一个虚拟包,你可以安装它来告诉dpkg“这个依赖是满足的”

    告诉dpkg简单地忽略依赖关系的原因并不是一个好的解决scheme,因为你只告诉dpkg / apt在一个事务中忽略它,你不能告诉它永远忽略依赖关系。 每次使用apt时,都会检查所有软件包的依赖关系

    我一直在运行Xen的Ubuntu 12.04服务器上寻找这个选项。 在我的域中,我使用了-virtual内核,并且apt会持续地尝试在每个内核包升级的情况下安装grub。 但是在使用p [yv] grub时,在domU中不需要Grub。

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

    毕竟,真正阅读手册页有时会有所帮助 – 事实上,在12.04上的类似apt-get选项似乎是–no-install-recommends,在这种情况下实际上起作用,因为grub被列为“推荐”包信息(我猜这样它不是一个“真正的”依赖?)。

    我在这里添加这个,因为在我的情况下,它解决了类似的问题,提示' – 无安装推荐'还没有提到。

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

    例如,如果我想下载mypackage,但它取决于libperl5.14,我不想安装libperl5.14,因为我有一个不同的版本,我可以忽略这个依赖如下:

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

    为了这个目的,你可以安装钉我不认为有这些依赖?

     apt-get install nail 

    在我的debian系统上,bsd-mailx实际上依赖于default-mta | mail-transport-agent default-mta | mail-transport-agent (您可以通过apt-cache show <pkg>来查看软件包依赖于归档文件或dpkg -s <pkg>的安装软件包。

    这可能是你的后缀包没有Provides: mail-transport-agent所以apt没有意识到你已经安装了MTA。 如果这是一个官方的软件包,那么值得提出一个错误。

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

     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 

    那么 – 不要。

    在任何成功的道路上,使用别人的工作是非常重要的。 当您从源代码(tarball)构build一些软件时,您错过了使用发行版软件包pipe理器工作的机会。

    你不会得到“免费”的更新。 大多数情况下,从来没有更新从源安装的软件包。 因为他们需要跟踪软件的新版本,重build它和所有的依赖程序(尝试记住它们)。

    您的发行版本中的其他软件包会有问题。 这个问题就是这样说的:ubuntu有一个很棒的包pipe理器和一些非常好的维护包的人。 他们决定,为了让mailx程序正常工作,你需要一个MTA。 所以如果你从源码安装了postfix,ubuntu不会要求你安装exim。

    如果由于某种原因,服务器的维护传递给其他人(例如,你的项目变得非常成功,你决定聘请另一个人来pipe理服务器,而你忙于其他的东西),他自然会期望运行dpkg --get-selectionsselect获取所有安装的软件包。

    尽量使用发行版的软件包pipe理软件。 学习如果你不能find一个预编译你自己的软件包,你会成为一个更好的专业。