从rpm包中提取spec文件

时间:2011-04-10 18:50:05

标签: linux rpm rpmbuild rpm-spec

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

不是

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

(这种语法只能获取spec文件中的rpm脚本)

7 个答案:

答案 0 :(得分:22)

安装 rpmrebuild 并解压缩rpm 文件的规范文件或已经已安装的软件包

示例:

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

答案 1 :(得分:13)

规范文件不存储在二进制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 (packager@cfengine.com)

你有一个网站和一个电子邮件地址,你可以询问一下spec文件或srpm文件。

答案 2 :(得分:7)

你可以使用

yumdownloader --source < something.rpm

然后:

rpm2cpio packagename | cpio -ivd

答案 3 :(得分:7)

Per @ 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

答案 4 :(得分:6)

spec文件通常不在rpm中。它们处于源rpm状态。

答案 5 :(得分:4)

rpmrebuild 是你的朋友。使用

rpmrebuild -e -p <rpm_file>

当它在编辑器中打开spec文件时,您也可以更改rpm规范。

答案 6 :(得分:0)

我可以通过此简单命令获取所有.spec,源代码和补丁

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

现在可以更改规格,更改src并重建RPM或SRPM。