假设一个软件包foo
有 推荐依赖项bar
和 建议依赖项baz
。如何配置 APT 以实现以下行为?
apt install foo
: 安装foo
并且bar
; 不安装baz
apt autoremove
: 没有变化apt remove foo
:卸载foo
apt autoremove
:卸载bar
我曾尝试在以下位置设置这些选项/etc/apt/apt.conf.d/99-norecommends
:
APT::AutoRemove::RecommendsImportant "false";
APT::AutoRemove::SuggestsImportant "false";
但是,在上述情况下,这会导致bar
在步骤 2 中被卸载。
什么样的 APT 配置选项组合才能够满足我的目标?
更新:我在虚拟机中安装了 Debian 的新实例,没有进行任何配置更改,并运行了以下命令:
apt update; apt upgrade
:没有什么过时的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
apt purge exim4
:exim4
已卸载apt autoremove
:没有卸载任何内容
如何让其他 23 个软件包自动删除?我不想回顾我的 apt 日志来尝试重建完全撤消命令需要执行的操作apt install {...}
,尤其是如果中间安装可能需要一些自动安装的软件包。
顺便说一句,这显然与手册页冲突apt-get
:
消除
remove 与 install 相同,只是删除的是软件包而不是安装。
清除
purge 与 remove 相同,只是删除和清除了软件包
我的上述测试表明install
和remove
/purge
并不像那里所述的那样对称。
答案1
这些是您需要的设置:
APT::Get::Install-Recommends "false";
APT::Get::Install-Suggests "false";
答案2
- 用于防止在执行或时
apt-mark hold
删除所需的包。purge
remove
男人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
在执行
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 日志或使用提到的清理脚本。