如何提取 rpm 前言

如何提取 rpm 前言

我正在一台非 Redhat 的机器上工作,我需要提取版本:xyz发行:abc来自机器上传递的一些 .rpm 的信息。

通常情况下,我们会这样做:

rpm -qip ./Foo.x.y.z.rpm | grep Version | awk ...

但这不是基于 redhat 的机器,所以我没有,rpm而且我也不想安装第二个包管理器。

我认为如果我这么做:

rpm2cpio ./Foo.x.y.z.rpm | cpio -idmv

然后,当提取 cpio 时,我会找到一些名为.preamble或包含数据的文件。但没有运气。有人知道其他方法吗?

答案1

rpm2cpio 的使用情况是提取不包含元数据的文件,这与您想要的正好相反。它与其他工具一样需要链接到 librpm。甚至 Midnight Commander 探索 rpm 文件时也使用 rpm 二进制文件。

在装有 yum 的系统上,使用 createrepo 从这些 rpm 创建存储库。将使用元数据生成 XML 和 sqlite。虽然比 rpm 二进制格式更容易解析,但如果您不使用 yum,则必须自己编写查询。保留 repodata,这样您就有了一个可以正常运行的 yum 存储库。

再往上一层抽象,系统生命周期工具包括内容管理。即 Katello 或 Red Hat Satellite。与 shell 脚本相比,它有点重量级,但您可以使用 API 获取主机及其订阅的包。

答案2

只需继续安装即可rpm。这是最简单的事情。您的发行版几乎肯定有它可供您使用。

现在您可以使用 RPM 查询格式来提取您想要的信息。

例如:

file=/path/to/filename.rpm

name=$(rpm --queryformat "%{name}" -qp $file)
version=$(rpm --queryformat "%{version}" -qp $file)
release=$(rpm --queryformat "%{release}" -qp $file)

echo "This RPM named $name has version $version release $release"

相关内容