2011-04-10 74 views
26

spec文件有什么办法来提取rpm包的规范文件(我只有RPM文件)提取rpm包

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

(这句法不能得到规范文件只有rpm的脚本)

+0

你确定spec文件存储在RPM中吗?在.src.rpm中,当然,但对于正常的RPM我根本不确定。 – Mat 2011-04-10 18:57:13

+0

因此,如果我只有rpm文件,我可以获取spec文件,请帮助 – jon 2011-04-10 18:59:27

+0

查找源RPM或该软件包的主页。 – Mat 2011-04-10 19:00:27

回答

6

spec文件通常不是rpm。它们的源代码为rpm。

+0

我可以再次重建转速不规范文件? – jon 2011-04-10 19:41:35

+0

@jon:AFAIK,不可能“构建”它,但是,我认为,只需通过查看以二进制rpm打包的文件,只需安装一节即可编写一个spec文件, – 2011-04-10 19:43:47

+0

“通过查看打包的文件在二进制rpm中“请解释一下? – jon 2011-04-10 20:08:41

12

spec文件不是存储在二进制rpms中,除非打包者由于某种原因明确包含它(并且实际上没有理由这么做)。您可以从二进制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 ([email protected]) 

有你有一个网站和一个电子邮件地址,分别为,在那里你可以问一个spec文件或SRPM文件。

5

你可以使用

yumdownloader --source < something.rpm 

则:

rpm2cpio packagename | cpio -ivd 
+5

只能获得将要安装的文件,而不是spec文件。 – 2012-08-23 21:21:33

+1

rpm -i pkg.src.rpm会将其解压到rpmbuild目录 – qrtt1 2012-11-17 08:44:21

15

安装rpmrebuild并提取您的转文件或者您已经安装的软件包的规范文件。

例子:

rpmrebuild --package --notest-install -e oracle-instantclient-basic-10.2.0.4-1.x86_64.rpm 
rpmrebuild -s hercules.spec hercules 
+10

查看rpmrebuild的代码,然后实际测试它,它不会“提取”spec文件;它会重新生成大部分spec文件(头文件,日志文件,前/后脚本)。但是,重建至关重要,它实际上并没有得到%prep或%build部分;它只是将它们保留为默认值(分别为“make clean”和“make install”)。我怀疑这是因为/那/信息没有存储在RPM中。因此,虽然这应该在最常见的情况下起作用,但它看起来并不普遍(尤其是对于包含复杂编译步骤的软件包)。 :/ – dannysauer 2015-07-22 20:16:47

+0

dannysauer:肯定的,实际上它是没有开采,因为这是一个重建的规范文件(“提取物”是问题)。该规范不是RPM包的一部分,因此重建是获得“规范模板”的唯一方法。但在许多情况下,这可能是一个很好的起点。过去它有时帮助我修复二进制rpm包。 – reichhart 2017-06-24 01:54:24

1

rpmrebuild是你的朋友。使用

rpmrebuild -e -p <rpm_file> 

由于它在编辑器中打开了spec文件,您还可以对rpm spec进行更改。

+1

rpmrebuild在2年前已经提到 – reichhart 2017-06-24 01:56:00

2

根据@RumpleStiltskin的回答,原始spec文件位于可以提取的源rpms中。要获得源rpms,请运行以下命令:

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