有没有办法从 rpm 包中提取规范文件(我只有 RPM 文件)
不是由
rpm --scripts -qp my-great-app-1.1.2.rpm
(此语法仅从 rpm 获取规范文件)
安装rpmrebuild并“提取”(实际上是重新创建)您的 rpm文件或已安装的 package的规范文件。
例子:
rpmrebuild --package --notest-install -e oracle-instantclient-basic-10.2.0.4-1.x86_64.rpm
rpmrebuild -s hercules.spec hercules
规范文件不存储在二进制 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 文件。
spec 文件通常不在 rpm 中。它们在源 rpm 中。
你可以使用
yumdownloader --source < something.rpm
然后:
rpm2cpio packagename | cpio -ivd
根据@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
.
rpmrebuild是你的朋友。利用
rpmrebuild -e -p <rpm_file>
当它在编辑器中打开规范文件时,您还可以对 rpm 规范进行更改。
我可以通过这个简单的命令获取我所有的 .spec、源代码和补丁
$ rpmbuild --recompile --noclean ./SRPMS/somerpm.src.rpm
现在可以更改规范、src 并重建 RPM 或 SRPM。