我正在一台非 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"