APT:如何安装推荐的依赖项,并且在安装包被删除之前不自动删除它们

APT:如何安装推荐的依赖项,并且在安装包被删除之前不自动删除它们

假设一个软件包foo有 推荐依赖项bar和 建议依赖项baz。如何配置 APT 以实现以下行为?

  1. apt install foo: 安装foo并且bar; 不安装baz
  2. apt autoremove: 没有变化
  3. apt remove foo:卸载foo
  4. apt autoremove:卸载bar

我曾尝试在以下位置设置这些选项/etc/apt/apt.conf.d/99-norecommends

APT::AutoRemove::RecommendsImportant "false";
APT::AutoRemove::SuggestsImportant "false";

但是,在上述情况下,这会导致bar在步骤 2 中被卸载。

什么样的 APT 配置选项组合才能够满足我的目标?

更新:我在虚拟机中安装了 Debian 的新实例,没有进行任何配置更改,并运行了以下命令:

  1. apt update; apt upgrade:没有什么过时的
  2. apt install exim4:安装了很多东西(如有错别字,请谅解,这些内容都是我手动从虚拟机中转录出来的)
    • exim4-base
    • mariadb-common
    • libwrap0
    • libython2.7
    • exim4-daemon-light
    • libltd17
    • libunbound8
    • mailutils-common
    • libgsas17
    • psmisc
    • exim4-config
    • libntlm0
    • guile-2.2-libs
    • mailutils
    • mysql-common
    • libmailutils5
    • exim4
    • libevent-2.1-6
    • libmariadb3
    • libgc1c2
    • libgnutls-dane0
    • libkyotocabinet16v5
    • libfribidi0
    • liblz02-2
  3. apt purge exim4exim4已卸载
  4. apt autoremove:没有卸载任何内容

如何让其他 23 个软件包自动删除?我不想回顾我的 apt 日志来尝试重建完全撤消命令需要执行的操作apt install {...},尤其是如果中间安装可能需要一些自动安装的软件包。

顺便说一句,这显然与手册页冲突apt-get

消除

remove 与 install 相同,只是删除的是软件包而不是安装。

清除

purge 与 remove 相同,只是删除和清除了软件包

我的上述测试表明installremove/purge并不像那里所述的那样对称。

答案1

这些是您需要的设置:

APT::Get::Install-Recommends "false";
APT::Get::Install-Suggests "false";

答案2

  1. 用于防止在执行或时apt-mark hold删除所需的包。purgeremove

男人apt-mark:

PREVENT CHANGES FOR A PACKAGE

hold
   hold is used to mark a package as held back, which will prevent
the package from being automatically installed, upgraded or removed.

您已拥有Suggest软件包列表:package.list

cat package.list |xargs sudo apt-mark hold
  1. 在执行sudo apt autoremove取消保留操作之前:

    cat package.list |xargs sudo apt-mark unhold
    

答案3

由于我对此一直感到困惑,我向 apt 提交了一个错误https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=981168。当然,结果证明这不是一个错误,而且有合理的解释。引用热心维护者 Julian Andres Klode 的话(我exim4在这里的问题中给出了安装然后卸载的相同示例):

最有可能的:

exim4 依赖于 exim4-daemon-$something,它们都提供 mail-transport-agent。如果一个已安装的软件包依赖/推荐/建议 mail-transport-agent,则不会自动删除它。

这不是一个错误,我们最终可能会得到一个很酷的功能来撤消历史记录,但它还没有出现,而且我不想在错误中追踪它。

此外:

作为加分项,我确实有一个系统清理脚本,可以删除尽可能多的自动安装的软件包,同时保留所有手动安装的软件包:

http://salsa.debian.org/jak/cleanup

克隆它,安装 clasp,然后运行 ​​./program_builder.py 让它为您提供可删除的包列表。

这非常彻底,但比 apt 的自动删除功能安全性低很多。

我需要致力于向 apt 添加一个 clasp 解决后端,然后我们也可以在 apt 中拥有一个彻底的自动删除代码(并尽可能解决依赖关系和订购安装:D)。

听起来有一天这可能会实现,但在此之前我们可能不得不查看我们的 APT 日志或使用提到的清理脚本。

相关内容