从rpm包中提取spec文件

问题描述 投票:0回答:8

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

不是由

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

(此语法不能获取规范文件,只能从 rpm 中获取脚本)

linux rpm rpmbuild rpm-spec
8个回答
30
投票

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

示例:

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

16
投票

spec 文件不会存储在二进制 rpm 中,除非打包者出于某种原因特别包含它(并且确实没有理由这样做)。您可以从二进制 rpm 获得的唯一信息是

rpm -qi <package>
返回的信息以及
rpm -ql <package>
列出的文件。如果您需要更多,则必须找到源包。如果 Google/供应商的网站未能为您提供该信息,则“打包者”字段中应提供由任何有能力的人员打包的任何内容的联系信息。例如,以下是 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])

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


11
投票

spec 文件通常不在 rpm 中。它们采用源转速。


10
投票

你可以使用

yumdownloader --source < something.rpm

然后:

rpm2cpio packagename | cpio -ivd

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


9
投票

rpmrebuild 是你的朋友。使用

rpmrebuild -e -p <rpm_file>

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


0
投票

只有src.rpm包,源码包,有spec文件

没有 src.rpm 很难或几乎不可能重建软件包,例如 plesk for Linux 提供的 rpm 软件包,您既无法提取规范文件,也无法提取源代码。

现在,在Fedora Linux中你有了rpmdevtools包,你可以使用rpmdev-extract轻松提取一个rpm的文件


-3
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.