如何检测 RPM 是源 rpm 还是二进制 rpm?
显然我不想依赖文件名。
源 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
源 rpm 包含 Linux 应用程序的实际源代码和补丁文件。所有源 rpm 文件都有 src.rpm 扩展名
如果您在基于 Intel 的计算机上使用 RPM,您通常会期望在那里找到 i386。如果您使用 x86_64 位计算机,您将在 RPM 文件名中看到 x86_64。普通的 rpm 文件只有二进制文件,根本没有源代码。
以下链接帮助我了解源与二进制 RPM
编辑:
rpm --checksig 文件
rpm -qi 文件
我认为没有为此目的的内置工具。利用 RPM 相关命令,或者您可以创建一个 shell 脚本作为随时检查的工具(它可以节省您的时间)。
我不相信有任何明确的方法可以做你想做的事,尽管你可以应用一些启发式方法来做出合理的猜测。
使用rpm -qi -p
rpmfilename并查看是否有“Source RPM:”值。
rpmls
从rpmdevtools
包装中使用。仅根据检查输出,SRPMS 似乎包含一个 .tar.gz 或 .tar.bz2 和一个 .spec 文件。
我认为这会让你接近答案,但它不会是确定的。这是否足够取决于在您的情况下完全正确的重要性。
rpm -qlp rpmfilename | grep -c /usr/src/redhat
将计算它包含多少源文件(通常是源存档、一个规范文件和一些补丁)。如果您以编程方式执行此操作,grep -q
将返回匹配或不匹配。