我正在使用基于非 redhat 的机器,我需要从机器上传递的一些 .rpm 中提取Version: xyz和Release: abc信息。
通常一个人会这样做:
rpm -qip ./Foo.x.y.z.rpm | grep Version | awk ...
但这不是基于 redhat 的机器,所以我没有rpm
,我也不想安装第二个包管理器。
我想如果我这样做:
rpm2cpio ./Foo.x.y.z.rpm | cpio -idmv
然后,当提取 cpio 时,我会找到一些名为.preamble
的文件或其中包含数据的文件。但没有运气。有人知道另一种方法吗?
rpm2cpio 用例是提取没有元数据的文件,这与您想要的相反。它像其他工具一样需要链接到 librpm。即使是探索 rpm 文件的 Midnight Commander 也使用 rpm 二进制文件。
在带有 yum 的系统上,使用 createrepo 从这些 rpm 创建存储库。XML 和 sqlite 将与元数据一起生成。虽然比 rpm 二进制格式更容易解析,但如果您不使用 yum,则必须自己编写查询。保留 repodata,这样你就有一个功能性的 yum repo。
再上一层抽象,系统生命周期工具包括内容管理。即 Katello 或 Red Hat Satellite。与 shell 脚本相比有点重量级,但您可以通过 API 获取主机和它们订阅的包。
继续安装
rpm
。这是最简单的事情。您的发行版几乎可以肯定有它可供您使用。现在您可以使用 RPM 查询格式来提取您想要的信息。
例如: