从 rpm 包中提取规范文件
Posted
技术标签:
【中文标题】从 rpm 包中提取规范文件【英文标题】:extract the spec file from rpm package 【发布时间】:2011-08-02 14:32:53 【问题描述】:有没有办法(我只有 RPM 文件)
不是由
rpm --scripts -qp my-great-app-1.1.2.rpm
(此语法不获取规范文件,仅从 rpm 获取脚本)
【问题讨论】:
您确定规范文件存储在 RPM 中吗?在 .src.rpm 中,当然可以,但对于正常的 RPM,我完全不确定。 所以如果我只有 rpm 文件可以获取规范文件,请帮助 查找源 RPM,或该软件包的主页。 我只有 rpm 文件没有源码 给我一个例子,如何做到这一点,vi 怎么样?我在rpm中看到很多字符和中文单词,我找不到这种方式的规范-:( 【参考方案1】:安装 rpmrebuild 并“提取”(实际上是重新创建)您的 rpm 文件或您已经安装的包的规范文件。
例子:
rpmrebuild --package --notest-install -e oracle-instantclient-basic-10.2.0.4-1.x86_64.rpm
rpmrebuild -s hercules.spec hercules
【讨论】:
查看 rpmrebuild 的代码然后实际测试它,它并没有“提取”规范文件;它会重新生成大部分规范文件(标题、日志、前/后脚本)。但是,对于重建至关重要的是,它实际上并没有得到 %prep 或 %build 部分;它只是将它们保留为默认值(分别为“make clean”和“make install”)。我怀疑这是因为 /that/ 信息没有存储在 RPM 中。因此,虽然这应该适用于最一般的情况,但它看起来并不普遍适用(尤其是对于具有复杂编译步骤的包)。 :// dannysauer:当然,实际上它不是提取,因为它是规范文件的重建(“提取”是问题)。规范不是 RPM 包的一部分,因此重建是获得“规范模板”的唯一方法。但在许多情况下,这可能是一个很好的起点。过去它有时会帮助我修复二进制 rpm 包。【参考方案2】:spec 文件不存储在二进制 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 文件。
【讨论】:
【参考方案3】:spec 文件通常不在 rpm 中。它们在源 rpm 中。
【讨论】:
我可以在没有规范文件的情况下再次重建 rpm 吗? @jon:AFAIK,不可能“构建”它。但是,我认为,您可以通过查看二进制 rpm 中打包的文件来编写一个仅包含安装部分的规范文件。 “通过查看打包在二进制rpm中的文件”请解释一下? 那么如何从 srpm 中提取它们?【参考方案4】:你可以使用
yumdownloader --source < something.rpm
然后:
rpm2cpio packagename | cpio -ivd
【讨论】:
只获取将要安装的文件,而不是spec文件。 rpm -i pkg.src.rpm 会解压到rpmbuild目录 问题不在于源 rpm,而在于二进制 rpm。如果 OP 有 src.rpm 那么这很容易,他不会问这个问题。【参考方案5】:根据@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
。
【讨论】:
【参考方案6】:rpmrebuild 是你的朋友。使用
rpmrebuild -e -p <rpm_file>
当它在编辑器中打开规范文件时,您还可以对 rpm 规范进行更改。
【讨论】:
【参考方案7】:我可以通过这个简单的命令获取我所有的 .spec、源代码和补丁
$ rpmbuild --recompile --noclean ./SRPMS/somerpm.src.rpm
现在可以更改规范、源代码并重新构建 RPM 或 SRPM。
【讨论】:
这不能回答问题。明确说明:“我只有 RPM 文件”以上是关于从 rpm 包中提取规范文件的主要内容,如果未能解决你的问题,请参考以下文章