如何检测RPM是源rpm还是二进制rpm?
显然我不想依赖文件名。
答案 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 --checksig file
rpm -qi文件
我认为没有用于此目的的内置工具。利用RPM相关命令,或者您可以创建一个shell脚本作为随时检查的工具(它可以节省您的时间)。
答案 2 :(得分:0)
我不相信有任何明确的方法可以做你想做的事情,尽管你可以应用一些启发式来做出合理的猜测。
使用rpm -qi -p
rpmfilename 并查看是否存在“Source RPM:”值。
使用rpmls
包中的rpmdevtools
。仅基于检查输出,SRPMS似乎包含.tar.gz或.tar.bz2和.spec文件。
我认为这会让你关闭得到一个答案,但它不会是明确的。这是否足够将取决于在您的情况下完全正确的重要性。
答案 3 :(得分:0)
rpm -qlp rpmfilename | grep -c /usr/src/redhat
将计算它包含的源文件数量(通常是源存档,spec文件和少量补丁)。如果您以编程方式执行此操作,grep -q
将返回匹配或不匹配。