我的目标是找到某个软件包及其所属源包的所有反向依赖项。例如,我想要所有依赖于的软件包libsslcommon2
以及可以通过 进行安装的源包sudo apt-get source libsslcommon2
。
来自reverse-depends 手册页我理解我需要:
sudo reverse-depends `libsslcommon2`
效果很好。但是
sudo reverse-depends src:libsslcommon2
返回
reverse-depends: Error: Unknown package
但是相同的语法也适用src:bash
(如手册页中提到的)。
注意:通过以下方式安装/下载 bash 和 libsslcommon2 的源代码效果很好
sudo apt-get source libsslcommon2
sudo apt-get source bash
这里有什么问题?如何确定所有依赖于 libsslcommon 源包的包?
答案1
总结:您可以使用reverse-depends src:$(what-source libsslcommon2)
。
没有libsslcommon2
源包。相反,libsslcommon2
它是从以下二进制包构建的:源码qpid-cpp
包一般而言,二进制包可能与构建它所用的源包同名,也可能不同名,并且源包可能会提供多个二进制包。
源包的名称bash
也是bash
,但源包名称并不总是能从二进制包名称中猜出。
检查用于构建二进制包的源包的两种方法是:
- 在“Packages”下搜索二进制包名称https://launchpad.net/ubuntu。
- 使用
what-source
命令。(您必须安装什么实用程序 首先。要从命令行执行此操作,请运行sudo apt-get install what-utils
。)例如,what-source libsslcommon2
输出qpid-cpp
。
实际上,我通常使用 Launchpad,因为它通常同时包含我正在寻找的其他方便信息。但是使用 和what-source
,reverse-depends
您可以编写单个命令来列出与特定二进制包的源包关联的反向依赖项:
reverse-depends src:$(what-source libsslcommon2)
这使用命令替换--$(
)
表达式被括号内所写的命令的输出所替换。
您可能会对该命令的输出感到惊讶,至少从我的 15.04 系统运行时,该命令的输出是:
No reverse dependencies found
但其实这并不奇怪。这意味着除了从qpid-cpp
源包构建的二进制包之外,没有任何二进制包依赖于从qpid-cpp
源包构建的任何二进制包。例如:
ek@Io:~$ reverse-depends libsslcommon2
Reverse-Depends
===============
* libsslcommon2-dev
* qpid-client
* qpidd
Packages without architectures listed are reverse-dependencies in: amd64, arm64, armhf, i386, powerpc, ppc64el
ek@Io:~$ what-source libsslcommon2-dev
qpid-cpp
ek@Io:~$ what-source qpid-client
qpid-cpp
ek@Io:~$ what-source qpidd
qpid-cpp
最后,请注意:
你做不是需要运行
reverse-depends
(也不需要what-source
)以 root 身份。也就是说,sudo reverse-depends ...
没有必要;reverse-depends ...
而是运行。就
reverse-depends
实用程序而言,源包的反向依赖关系是从源包构建的二进制包的反向依赖关系。它们所依赖的特定二进制包在 的输出中列在包名称右侧的括号中reverse-depends src:...
。源包的反向依赖关系,如所列出的
reverse-depends
,仍然是二进制包,而不是源代码包。例如,输出reverse-depends src:bash
包括:* netscript-2.4 (for bash) * netscript-2.4-upstart (for bash)
即使没有
netscript-2.4-upstart
来源包。相反,netscript-2.4
和netscript-2.4-upstart
二进制包都是从netscript-2.4
源码包。源包的反向依赖项与包的反向构建依赖项不同。包的反向构建依赖项是需要该包才能构建的其他包,但在构建后不一定需要安装。如果您正在寻找反向构建依赖项,请使用
reverse-depends
标志调用-b
。
答案2
软件reverse-depends
不会自动检测生成给定二进制包的源包。src:
标签用于指示后面跟着的是源包的名称。碰巧的是,的源包名称bash
是bash
。但对于libsslcommon2
,源包名为qpid-cpp
:
$ reverse-depends -r utopic src:qpid-cpp
Reverse-Depends
===============
* qpidd-msgstore (for qpidd)
* qpidd-msgstore (for libqpidbroker2)
* qpidd-msgstore (for libqpidcommon2)
Packages without architectures listed are reverse-dependencies in: amd64, armhf, i386, ppc64el
apt-get
另一方面,知道源包(检查的输出apt-cache show libsslcommon2
)。