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

时间:2012-09-25 15:11:47

标签: rpm rpm-spec

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

显然我不想依赖文件名。

4 个答案:

答案 0 :(得分:3)

源rpms由标头中SOURCERPM标记的存在来定义。如果rpm具有SOURCERPM标记,则表示rpm是二进制rpm(SOURCERPM标记表示srpm用于构建二进制rpm)。如果没有SOURCERPM标记,那么rpm就是srpm。

我不确定这是否是srpm的任何“官方”定义,但是rpmbuild和其他实用程序当前用来确定给定rpm是否为srpm的逻辑参考rpm实现(参见headerIsSource() in 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

答案 1 :(得分:1)

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

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

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

编辑:

  • 检查RPM签名包
  

rpm --checksig file

  • 显示包裹信息
  

rpm -qi文件

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

答案 2 :(得分:0)

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

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

  2. 使用rpmls包中的rpmdevtools。仅基于检查输出,SRPMS似乎包含.tar.gz或.tar.bz2和.spec文件。

  3. 我认为这会让你关闭得到一个答案,但它不会是明确的。这是否足够将取决于在您的情况下完全正确的重要性。

答案 3 :(得分:0)

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