如何使apt-get忽略某些依赖项?例如,我想安装mailx,以便可以使用它从cron脚本/报告生成工具发送电子邮件。但是,安装mailx还会安装exim4和一堆我确实不需要的依赖项(我已经安装了Postfix),我猜想mailx也可以不用。
我如何忽略某些依赖关系,但由于它是一个很好的工具,仍然使用apt-get?
APT::Install-Recommends "false";
到中即可apt.conf
。
如何使apt-get忽略某些依赖项?例如,我想安装mailx,以便可以使用它从cron脚本/报告生成工具发送电子邮件。但是,安装mailx还会安装exim4和一堆我确实不需要的依赖项(我已经安装了Postfix),我猜想mailx也可以不用。
我如何忽略某些依赖关系,但由于它是一个很好的工具,仍然使用apt-get?
APT::Install-Recommends "false";
到中即可apt.conf
。
Answers:
简单易用的解决方案:只需-
在每个不需要的软件包后加上多余的内容即可。
不带-
开关的示例:
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
稍后再处理!
gnupg2
无pinentry-gtk2
以避免X DEPS)
Depends: xxx but it is not going to be installed
。您可以使用apt-get install --no-install-recommends PACKAGE
您可以像这样更改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
(使用文本编辑器)tar --ignore-failed-read -cvzf control.tar.gz {post,pre}{inst,rm} md5sums control
ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz
重要命令!请参阅[Note])[注意]:如果dpkg必须搜索数据部分的结尾,它将无法快速读取该软件包的元数据!
libmng1.so.1
即使将符号链接设置为,它也可以正常工作,但仍需要一个应用程序libmng1.so.2
。apt-get
只是无法被笼罩,并一直让我烦恼未满足的依赖关系(即使安装了完全不相关的东西!)。多么垃圾的概念。
gnome-settings-daemon
想要,gnome-settings-daemon-schemas=3.8.6.1-0ubuntu11
但我已经有了gnome-settings-daemon-schemas=3.8.6.1-0ubuntu11.2
(<-注意最后的“ .2”)。通过此过程,我可以编辑程序包并强制其使用较新的11.2版本。谢谢!
FILES=$(tar zxvf control.tar.gz)
将文件列表存储在变量中。4. tar zcf control.tar.gz $FILES
-创建没有管,可在单个步骤中存档或重定向使用原始文件列表(修改后)。
--ignore-failed-read
以便tar
忽略命令行其余部分中丢失的文件。(例如,prerm
,postrm
是从许多包不存在的。)另外,压缩包可以.xz
,而不是.gz
在Debian文档格式(例如新版本data.tar.xz
)。
使用--ignore-depends
选项安装软件包后,请去编辑/var/lib/dpkg/status
文件,并删除您认为不需要的任何依赖项。请非常小心。为了一个部门。被需要,就非常有可能更BE需要
/var/lib/dpkg/status
,可能需要完成安装sudo apt-get -f install
(无需指定软件包)。
您可以尝试使用--nodeps
标记apt-get
。
或下载软件包并使用dpkg
选件进行安装--ignore-depends
。
例如,如果要安装foo
不依赖的软件包bar
:
dpkg --ignore-depends=bar -i foo_1.2.3_amd64.deb
--no-install-recommends
为我工作。
由于从源代码安装了postfix,因此需要安装一个“虚拟”软件包,该软件包将满足mailx(或bsd-mailx)的邮件传输代理依赖关系。存在于debian中的“ equivs”软件包可以创建这样的虚拟软件包,您可以安装该软件包以告诉dpkg“满足此依赖性”
告诉dpkg仅忽略依赖项不是一个好的解决方案,原因是您只告诉dpkg / apt对单个事务忽略它,而不能告诉它永远忽略依赖项。每次使用apt时,它都会检查所有软件包的依赖关系
equivs-control <name>
,编辑生成的文件以提供正确的依赖关系并使用一个漂亮的名称,然后运行equivs-build <name>
,最后运行dpkg -i
生成的.deb文件。
我一直在运行Xen的Ubuntu 12.04 Server上寻找此选项。在我的域中,我使用-virtual内核,并且在每次内核软件包升级时都不断尝试安装grub。但是,使用p [yv] grub时,domU内部不需要使用grub。
我也一直在寻找-nodeps选项来apt-get,但是它没有用,所以最终在每次内核升级后都卸载/清除grub *。
毕竟,真正阅读手册页有时会有所帮助-事实证明,在12.04上使用类似的apt-get选项似乎是--no-install-recommends,在这种情况下该方法实际上是有效的,因为grub在手册中列为“推荐”。包信息(我想它不是“真正的”依赖项吗?)。
我将其添加到此处是因为在我的情况下,它解决了类似的问题,并且尚未提及“ --no-install-recommends”的提示。
好吧-不要
在成功的道路上,利用他人的工作非常重要。从源代码(tarball)构建某些软件时,您会错过使用发行版的程序包管理器工作的机会。
您将不会获得“免费”更新。大多数时候,没有人从源头更新过它们安装的软件包。因为他们需要跟踪软件的新版本,所以重建它和所有依赖程序(请记住它们)。
您的发行版存储库中的其他软件包将有问题。这正是问题中提到的情况:ubuntu有一个出色的软件包管理器,并且一些非常好的人维护软件包。他们决定,要使mailx程序正常工作,您需要MTA。因此,如果您从ubuntu来源安装了postfix,则不会要求您安装exim。
如果由于某种原因将服务器的维护工作转移给其他人(例如,您的项目变得非常成功,并且您决定在忙于其他事情的同时聘请其他人来管理服务器),那么他自然会期望dpkg --get-selections
能够获得所有已安装的软件包。
尝试尽可能使用发行版的软件包管理软件。如果找不到预编译的软件包,则学习构建自己的软件包,您将成为更好的专业人员。