我如何让 apt-get 忽略一些依赖关系?

我如何让 apt-get 忽略一些依赖关系?

如何让 apt-get 忽略某些依赖项?例如,我想安装邮箱因此我可以使用它从 cron 脚本/报告生成工具发送电子邮件。但是,安装 mailx 也会安装exim4以及一大堆依赖项(我已经安装了 Postfix),我并不真正需要它们,而且我猜 mailx 没有它们也可以生存。

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

答案1

简单易行的解决方案:-只需在每个不需要的包后面加上一个 extra 即可。

不使用开关的示例-

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稍后再处理!

答案2

你可以像这样更改 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 必须搜索数据部分结束的位置,它将无法快速读取包的元数据!

答案3

使用该--ignore-depends 选项安装软件包后,去编辑文件/var/lib/dpkg/status,删除您认为不需要的任何依赖项。一定要非常小心。为了让依赖项成为必需,它很可能必需的

答案4

由于您是从源代码安装的 postfix,因此您需要安装一个“虚拟”包,以满足 mailx(或 bsd-mailx)的 mail-transport-agent 依赖性。debian 中的“equivs”包用于创建这样的虚拟包,您可以安装它来告诉 dpkg“此依赖性已得到满足”

告诉 dpkg 简单地忽略依赖项不是一个好的解决方案,因为你只是告诉 dpkg/apt 忽略单个事务,你不能告诉它永远忽略依赖项。每次你使用 apt 时,它都会检查依赖项全部

相关内容