4

如何检测 RPM 是源 rpm 还是二进制 rpm?

显然我不想依赖文件名。

4

4 回答 4

3

源 rpm 由标头中存在的 SOURCERPM 标记定义。如果一个 rpm 有一个 SOURCERPM 标签,这意味着该 rpm 是一个二进制 rpm(SOURCERPM 标签说明了用于构建二进制 rpm 的 srpm)。如果没有 SOURCERPM 标签,则 rpm 是 srpm。

我不确定这是否是 srpm 的任何“官方”定义,但它是rpmbuild当前和其他实用程序用于确定给定 rpm 是否是参考 rpm 实现中的 srpm 的逻辑(参见headerIsSource( ) 在 lib/headerutil.c 中)。所以看起来很合理。

这是一种使用rpm命令行实用程序检查 rpm 中是否存在 SOURCERPM 标记的方法:

$ rpm --query --package foo-1.2.3-1.src.rpm \
      --queryformat "%|SOURCERPM?{binary-rpm}:{source-rpm}|\n"
source-rpm
$ rpm --query --package foo-1.2.3-1.el7.x86_64.rpm \
      --queryformat "%|SOURCERPM?{binary-rpm}:{source-rpm}|\n"
binary-rpm
于 2014-12-14T06:03:22.860 回答
1

源 rpm 包含 Linux 应用程序的实际源代码和补丁文件。所有源 rpm 文件都有 src.rpm 扩展名

如果您在基于 Intel 的计算机上使用 RPM,您通常会期望在那里找到 i386。如果您使用 x86_64 位计算机,您将在 RPM 文件名中看到 x86_64。普通的 rpm 文件只有二进制文件,根本没有源代码。

以下链接帮助我了解源与二进制 RPM

编辑:

  • 检查 RPM 签名包

rpm --checksig 文件

  • 显示包裹信息

rpm -qi 文件

我认为没有为此目的的内置工具。利用 RPM 相关命令,或者您可以创建一个 shell 脚本作为随时检查的工具(它可以节省您的时间)。

于 2012-09-25T15:14:51.310 回答
0

我不相信有任何明确的方法可以做你想做的事,尽管你可以应用一些启发式方法来做出合理的猜测。

  1. 使用rpm -qi -p rpmfilename并查看是否有“Source RPM:”值。

  2. rpmlsrpmdevtools包装中使用。仅根据检查输出,SRPMS 似乎包含一个 .tar.gz 或 .tar.bz2 和一个 .spec 文件。

我认为这会让你接近答案,但它不会是确定的。这是否足够取决于在您的情况下完全正确的重要性。

于 2012-09-25T16:02:38.453 回答
0

rpm -qlp rpmfilename | grep -c /usr/src/redhat将计算它包含多少源文件(通常是源存档、一个规范文件和一些补丁)。如果您以编程方式执行此操作,grep -q将返回匹配或不匹配。

于 2012-09-26T02:15:00.303 回答