我正在构建实时 CD,为了减小 CD 映像的大小,我需要放弃一些软件包。默认情况下,会安装推荐的软件包,关闭该开关会使 CD 从充斥着我不需要的垃圾(为什么我需要 QT4 设计器,因为我正在捆绑一个 Python QT 程序?)变成几乎无法使用。
理想的情况是,一些工具以软件包列表作为输入,并抓取它们的依赖关系图,然后仅有的“依赖”链接,但会打印出它找到的“推荐”链接,从而有效地向我显示根据我输入到该工具中的软件包将要安装的推荐软件包的“顶级”。这将帮助我决定需要包含哪些软件包,然后我可以对该组软件包重新运行该工具,直到不再需要任何软件包为止。
其他工具类似的东西apt-cache depends
会转储所有内容,如果我 grep “推荐”,这将向我显示推荐包也推荐的包,而我并不需要这些包。
例如,如果:
- A 依赖于 B,
- B 推荐 C,
- C 依赖于 D,并且
- D 推荐 E。
如果我向这个假设的工具询问包 A,那么我希望它只给我包 C 作为输出——我不希望包含包 E,因为我甚至不知道我是否想要包 C。
是否有这样的工具,或者是否有一种利用现有工具实现这一目标的简单方法?
答案1
我认为该apt-rdepends
工具正是您想要的。通过 apt-get 安装软件包,然后运行此命令(用您的软件包“A”替换我在示例中使用的软件包“apt”):
apt-rdepends --follow=Depends --show=Recommends apt 2>/dev/null | grep Recommends
Recommends: gnupg
Recommends: libc6-i686
Recommends: gnupg-curl
Recommends: libldap-2.4-2 (>= 2.4.7)
如果您省略,grep
您还将看到带有“推荐”链接的软件包。它非常简单,完全符合您的要求,但可能有一个问题:您无法知道apt-rdepends
何时停止,即它将遵循“依赖”链接到任意递归级别。
阅读手册页以了解有关命令行选项的更多信息。这是一个非常棒的工具,您甚至可以进行反向依赖搜索!