如何删除一组不再需要的 Debian 软件包?

如何删除一组不再需要的 Debian 软件包?

在构建软件时,我有时需要安装仅构建软件包所需的库、二进制文件等,但后来我忘记删除它们,所以我最终不得不一次清理多个软件包;即使是那些我不想删除的。

解析日志文件来查找确切的包并不是最理想的,如果包足够旧的话,这也是一种巨大的痛苦。有没有办法促进这项任务?

答案1

我建议使用用户标签,这是 aptitude 的一个特征(apt 二进制没有这个)会对此有所帮助。安装包时添加--add-user-tag安装包时的选项,例如:

sudo aptitude --add-user-tag build-dep-package build-dep package

并删除它们只需使用:

sudo aptitude remove '?user-tag(build-dep-package)'

您还可以使用 删除标签--remove-user-tag build-dep-package

但这带来了一个问题,如果同一个包有两个标签怎么办?好吧,您只需使用 and/not 条件来防止这种情况发生:

sudo aptitude remove '?and(?user-tag(build-dep-package),?not(?user-tag(wanted-packages))'

要操作具有不同标签的多个包,请使用或:

sudo aptitude remove '?or(?user-tag(build-dep-package),?user-tag(wanted-packages)'

从长远来看,这非常有用,我还没有找到列出所有当前活动标签的方法。

答案2

我在博客文章中找到了 David Kalnischkies 的帖子 UNDO APT-GET BUILD-DEP(删除构建依赖项)

对于那些不知道的人来说,David 是主要的 apt 维护者,自 2009 年左右以来一直如此,因此可以肯定他知道自己在说什么。

DonKult • 3 年前

在尝试这个疯狂的命令行之前,请尝试以下选项:APT::Get::Build-Dep-Automatic

就像 apt-get build-dep -o APT::Get::Build-Dep-Automatic=true srcpkg1 srcpkg2 …

如果这对您有用并且您希望将其永久保留: echo APT::Get::Build-Dep-Automatic "true"; > /etc/apt/apt.conf.d/99markbuilddepauto

我不记得它是在哪个 APT 版本中添加的,但它必须足够老,至少可以用于几个 ubuntu 版本…顺便说一句:默认值在 2009 年 2 月 9 日在 ubuntu 中切换为“false”。

哦,只是为了记录一下:太疯狂了,因为它安装了 aptitude 来使用与 APT 附带的安装应用程序已经提供的相同功能:apt-mark。

但与往常一样,通过 6 小时的编码,您可以避免阅读手册页 5 分钟……

所以,

apt-get build-dep -o APT::Get::Build-Dep-Automatic=true srcpkg1 srcpkg2...

也许是一个合理的方法。我不知道这个选项的存在。截至目前我还无法在 apt 文档中找到它。如果有的话我会更新。

但是,另请注意 Debian 错误报告aptitude: APT::Get::Build-Dep-Automatic 不被尊重。标题说明了一切。

更新:经过测试,它似乎不起作用。我做到了

# apt-get build-dep -o APT::Get::Build-Dep-Automatic=true g++

进而

# apt-get autoremove

但它什么也没返回。也许我错过了一些东西。我暂时保留这个答案。

更新 2:我看到/var/lib/apt/extended_states包被正确标记为Auto-Installed: 1.所以,我一定是用autoremove错了。

更新3:尝试过

# apt-get build-dep -o APT::Get::Build-Dep-Automatic=true coreutils

而这一次

# apt-get autoremove

已正确卸载dh-buildinfo gperf libacl1-dev libattr1-dev

那么,为什么之前的尝试没有成功呢?我不确定,但假设 - 顶级软件包提供了手动安装的软件包所需的虚拟软件包。所以

gcj-jre-headless

Provides: java-gcj-compat-headless, java-runtime-headless, java-virtual-machine, java1-runtime-headless, java2-runtime-headless, java5-runtime-headless

ant

Depends: default-jre-headless | java5-runtime-headless | java6-runtime-headless | java7-runtime-headless, libxerces2-java

所以这里有一个重叠——即java5-runtime-headless。底线——这可能是一个不幸选择的例子。

答案3

这对您现有的开发包没有帮助,但为了将来的使用,请考虑使用mk-build-deps(在devscripts包中)为依赖项生成元包。

mk-build-deps只需要可用包的名称或其控制文件。如果您的软件包(尚)不可用或者您正在添加新的依赖项,则后者很有用。

如果需要,它可以为您安装生成的元包(以及依赖项)。

像往常一样,安装后,手册页中会提供完整的详细信息。

相关内容