如何让 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 包的依赖项:
- 解压 deb:(
ar x golden-linux.deb
将会创建三个文件:debian-binary control.tar.gz data.tar.gz) - 解压控制档案:(
tar xzf control.tar.gz
将创建:postinst postrm preinst prerm md5sums 控制) - 修复依赖关系
control
(使用文本编辑器) - 重新打包 control.tar.gz:
tar --ignore-failed-read -cvzf control.tar.gz {post,pre}{inst,rm} md5sums control
- 重新打包 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 时,它都会检查依赖项全部包