在构建软件时,我有时需要安装仅构建软件包所需的库、二进制文件等,但后来我忘记删除它们,所以我最终不得不一次清理多个软件包;即使是那些我不想删除的。
解析日志文件来查找确切的包并不是最理想的,如果包足够旧的话,这也是一种巨大的痛苦。有没有办法促进这项任务?
答案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
只需要可用包的名称或其控制文件。如果您的软件包(尚)不可用或者您正在添加新的依赖项,则后者很有用。
如果需要,它可以为您安装生成的元包(以及依赖项)。
像往常一样,安装后,手册页中会提供完整的详细信息。