如何忽略某些依赖项但由于它是一个很好的工具,仍然使用apt-get吗?
#1 楼
简单易用的解决方案:只需在每个不需要的软件包后面加上一个额外的-
。不带
-
开关的示例: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
依赖性,则可以稍后再对其进行查询!评论
这是避免安装任何特定依赖项的最佳方法。其他答案要么避免安装所有依赖项,要么在安装依赖项后将其卸载,要么建议乏味地编辑软件包。
–尼尔
16年2月11日,0:02
这正是我所需要的! (安装gnupg2而不使用pinentry-gtk2以避免X deps)
–lapo
16年8月27日在13:34
然而,那真的很棒,在我的情况下,apt-get拒绝安装“未满足的依赖项”(我使用此方法指定的)的软件包。特别是一个100 MB的文档包,我不在乎。
–罗夫
18年1月14日在22:11
仅适用于可选依赖项,不适用于必需的依赖项。错误信息:取决于:xxx,但是不会被安装。您可以使用apt-get install --no-install-recommends PACKAGE跳过所有可选软件包
– koppor
18年4月5日,0:06
也不适用于虚拟软件包。但请参阅unix.stackexchange.com/a/404449/23542
– artfulrobot
19年1月28日在19:39
#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
(重要的顺序!请参阅[Note])[Note]:如果dpkg必须搜索软件包的元数据,则它无法快速读取该软件包的元数据数据部分结束!
评论
很好,它为我解决了从“ raring8”到“ raring6”的特殊依赖情况,但是相同的版本=(,非常感谢
–Felipe Alcacibar
13年7月18日在16:36
我也谢谢你我必须使用它,因为应用程序需要libmng1.so.1,即使它与设置为libmng1.so.2的符号链接完美配合也是如此。 apt-get只是不能被套住,并一直困扰着我关于未满足的依赖项(即使安装了完全不相关的东西!)。多么垃圾的概念。
–syntaxerror
2014-12-15在2:45
很好的解决方案,谢谢。我对步骤2和4进行了一些修改:2. FILES = $(tar zxvf control.tar.gz)将文件列表存储在变量中。 4. tar zcf control.tar.gz $ FILES-使用原始文件列表(修改后),无需管道或重定向即可一步创建归档文件。
–布雷特
16年5月23日在16:30
另一个建议。对于#4:添加--ignore-failed-read,以便tar忽略命令行其余部分中丢失的文件。 (例如,许多软件包中没有prerm,postrm。)此外,在Debian档案格式的较新版本(例如data.tar.xz)中,压缩包可以是.xz而不是.gz。
–丹·伦斯基
18年1月9日在17:19
我认为可以在serverfault.com/a/859394/312306上以“更清洁”的方式进行操作
–SebMa
19年5月2日在16:31
#3 楼
使用--ignore-depends
选项安装软件包后,请去编辑/var/lib/dpkg/status
文件,并删除您认为不需要的任何依赖项。 请非常小心。为了一个部门。必不可少的东西
评论
更新/ var / lib / dpkg / status后,可能需要使用sudo apt-get -f install(无需指定软件包)完成安装。
– Zmicier Zaleznicenka
15年6月18日在9:20
也可以在这里找到:superuser.com/a/815371/127024。
–约翰
15年12月30日在19:08
这使我感到毛骨悚然,但是它完美地工作了!
–David Schmitt
18/12/19在13:16
#4 楼
您可以尝试使用带有--nodeps
的apt-get
标志。,或者下载该软件包并使用带有选项
dpkg
的--ignore-depends
安装它。例如,如果您要安装不依赖
foo
的软件包bar
:dpkg --ignore-depends=bar -i foo_1.2.3_amd64.deb
评论
您拥有哪个APT版本?我的(0.8.10)没有这样的选择。
– tshepang
2011-3-22在12:25
告诉dpkg忽略依赖关系不是他的选择。它仅告诉dpkg忽略此事务的依赖关系,它将在下一次执行任何操作时尝试满足这些依赖关系或删除pacakge。
–炖
2011-3-23在20:13
APT 0.8.16 BTW仍然没有运气。太糟糕了,因为似乎没有合理的选择。您在2011年使用了哪个版本才能使其正常工作?
–基督徒
13年7月12日在4:10
您可以使用apt-get下载,然后使用dpkg
–弗雷德里克·罗斯(Frederick Roth)
15年1月8日在9:14
--no-install-recommends对我有用。
– OlleHärstedt
16-10-13在18:45
#5 楼
由于从源代码安装了postfix,因此需要安装一个“虚拟”软件包,该软件包将满足mailx(或bsd-mailx)的邮件传输代理依赖性。存在于debian中的“ equivs”软件包可以创建一个虚拟软件包,您可以安装该软件包以告诉dpkg“此依赖关系已满足”。告诉dpkg仅仅忽略依赖关系并不是一个好的解决方案,是您只告诉dpkg / apt对于单个事务忽略它,您不能告诉它永远忽略依赖项。每次使用apt时,它都会检查所有软件包的依赖关系
评论
另请参见链接到教程(尽管过于复杂)superuser.com/a/416560/128960的答案。简短的版本是:运行equivs-control <名称>,编辑生成的文件以提供正确的依赖关系并使用一个漂亮的名称,然后运行equivs-build <名称>,最后dpkg -i生成.deb文件。
–基督徒
13年7月12日在7:36
恕我直言,这确实是最好的解决方案。这里要求的所有其他解决方案都有点过于粗暴。只需完成一次,然后您就可以根据自编译的软件安装任何软件了……因此,我们支持这个答案!
–地毯
16年4月23日在15:36
#6 楼
手动调整依赖项的另一种方法是: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 楼
您可以使用apt-get下载该软件包,然后使用dpkg安装该软件包,手动列出您希望忽略的依赖项。例如,如果我要下载mypackage但它取决于libperl5.14而且我不想安装libperl5.14,因为我有不同的版本,我可以忽略这种依赖性,如下所示:
apt-get download mypackage
dpkg -i --ignore-depends=libperl5.14 mypackage.deb
评论
只需提及,这会使您容易“崩溃”。在修复丢失的依赖项之前,它不会让您安装其他软件包。
– drpexe
16-10-6在18:42
#8 楼
我一直在运行Xen的Ubuntu 12.04 Server上寻找此选项。在我的域中,我使用-virtual内核,并且在每次内核软件包升级时都不断尝试安装grub。但是,在使用p [yv] grub时,domU内部不需要使用Grub。我也一直在寻找-nodeps选项来进行apt-get,但是它没有用,所以结束了
毕竟,真正阅读手册页有时会有所帮助-事实证明,在12.04上使用类似的apt-get选项似乎是--no-install-推荐,在这种情况下实际可行,因为grub在软件包信息中被列为“推荐”(我想这不是“真正的”依赖吗?)。
我在这里添加了它因为就我而言,它解决了类似的问题,并且尚未提及“ --no-install-recommends”的提示。
#9 楼
在我的debian系统上,bsd-mailx实际上取决于default-mta | mail-transport-agent
(对于归档文件中的任何内容,您可以使用apt-cache show <pkg>
来检查软件包所依赖的内容;对于已安装的软件包,您可以使用dpkg -s <pkg>
来检查该软件包所依赖的内容。这可能是因为您的postfix软件包没有没有
Provides: mail-transport-agent
,因此apt不会意识到您已经安装了MTA。如果它是官方软件包,则值得为此提交一个错误。#10 楼
为此,您可以只安装钉子,我认为这些钉子没有这些依赖项?apt-get install nail
#11 楼
这是我开发lansmtpd
的原因之一。它不是很抛光,但是我目前没有安装postfix
或exim4
使用它。 (我最终将对其进行抛光,使其更易于安装。)另一个好处是,如果这样配置,即使Internet断开,来自cron的电子邮件也会在局域网上的所有计算机上传递。
#12 楼
好吧-别。在成功的道路上,使用他人的工作非常重要。从源代码(tarball)构建某些软件时,您会错过使用发行版的程序包管理器工作的机会。
您将不会获得“免费”更新。大多数时候,没有人从源头更新过他们安装的软件包。由于他们需要跟踪软件的新版本,因此请重建它和所有依赖程序(请记住它们)。
发行版存储库中的其他软件包会出现问题。这正是问题中提到的情况:ubuntu有一个出色的软件包管理器,并且一些非常好的人维护软件包。他们决定,要使mailx程序正常运行,您需要MTA。因此,如果您是从ubuntu来源安装postfix的,则不会要求您安装exim。
如果由于某种原因,服务器的维护工作转移给了其他人(例如,您的项目变得非常成功,您决定当您忙于其他工作时,请其他人来管理服务器),他自然会希望运行
dpkg --get-selections
来获取所有已安装的软件包。请尽可能多地使用发行版的软件包管理软件。如果找不到预构建的软件包,您将学会构建自己的软件包,您将成为更好的专业人员。
评论
如何安装postfix?通过debian软件包?还是您从源代码安装了postfix?是的,Postfix是从源安装的。
Debian的mailx包仅“推荐” exim4,不需要它。如果您不想安装推荐的软件包,只需添加APT :: Install-Recommends“ false”;转到您的apt.conf。
我在unix.stackexchange.com上找到了满意的答案; unix.stackexchange.com/a/404449/23542