43

有没有办法从 rpm 包中提取规范文件(我只有 RPM 文件)

不是由

   rpm --scripts -qp my-great-app-1.1.2.rpm 

(此语法仅从 rpm 获取规范文件)

4

7 回答 7

25

安装rpmrebuild并“提取”(实际上是重新创建)您的 rpm文件或已安装的 package的规范文件。

例子:

rpmrebuild --package --notest-install -e oracle-instantclient-basic-10.2.0.4-1.x86_64.rpm
rpmrebuild -s hercules.spec hercules
于 2013-01-05T04:06:26.963 回答
16

规范文件不存储在二进制 rpm 中,除非打包程序出于某种原因特别包含它(实际上没有理由这样做)。您可以从二进制 rpm 获得的唯一信息是返回的信息和列出rpm -qi <package>的文件。rpm -ql <package>如果你需要更多,你必须找到源包。如果 Google / 供应商的网站无法为您提供这些信息,则应在 Packager 字段中提供任何主管人员打包的任何联系信息。例如,下面是 RHEL 附带的一个包和来自第三方供应商的一个包:

$ rpm --qf '%{Packager}\n' -q redhat-release
Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
$ rpm --qf '%{Packager}\n' -q cfengine-community
CFEngine AS (packager@cfengine.com)

在那里,您分别有一个网站和一个电子邮件地址,您可以在其中询问规范文件或 srpm 文件。

于 2011-09-28T18:54:18.923 回答
12

spec 文件通常不在 rpm 中。它们在源 rpm 中。

于 2011-04-10T19:35:31.720 回答
10

你可以使用

yumdownloader --source < something.rpm

然后:

rpm2cpio packagename | cpio -ivd
于 2012-05-04T02:14:54.813 回答
10

根据@RumpleStiltskin 的回答,原始规范文件可以在可以提取的源 rpm 中找到。要获取源 rpm,请运行以下命令:

yum install yum-utils # Only required if yumdownloader is not installed
yumdownloader --source <package name, like 'emacs-nox'>

这会将包安装到当前目录。要提取它运行:

rpm2cpio <package name>.src.rpm | cpio -civ '*.spec'

.spec文件将在您的当前目录中。

如果由于某种原因无法安装 yum-utils,请查看其中的文件/etc/yum.repos.d/并查找引用源 rpm 存储库的部分。您可以在浏览器中输入值baseurl并手动搜索源包。提取.spec仍然需要rpm2cpio.

于 2017-10-19T22:15:49.153 回答
7

rpmrebuild是你的朋友。利用

rpmrebuild -e -p <rpm_file>

当它在编辑器中打开规范文件时,您还可以对 rpm 规范进行更改。

于 2015-02-18T20:18:09.990 回答
-3

我可以通过这个简单的命令获取我所有的 .spec、源代码和补丁

$ rpmbuild --recompile --noclean ./SRPMS/somerpm.src.rpm

现在可以更改规范、src 并重建 RPM 或 SRPM。

于 2019-06-05T12:50:25.710 回答