有没有办法从rpm包中提取spec文件(我只有RPM文件)
不是由
rpm --scripts -qp my-great-app-1.1.2.rpm
(此语法不能获取规范文件,只能从 rpm 中获取脚本)
安装 rpmrebuild 并“提取”(实际上是重新创建)您的 rpm file 的规范文件或您已经安装的软件包。
示例:
rpmrebuild --package --notest-install -e oracle-instantclient-basic-10.2.0.4-1.x86_64.rpm
rpmrebuild -s hercules.spec hercules
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 文件。
spec 文件通常不在 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 规范。
只有src.rpm包,源码包,有spec文件
没有 src.rpm 很难或几乎不可能重建软件包,例如 plesk for Linux 提供的 rpm 软件包,您既无法提取规范文件,也无法提取源代码。
现在,在Fedora Linux中你有了rpmdevtools包,你可以使用rpmdev-extract轻松提取一个rpm的文件
我可以通过这个简单的命令获取我所有的.spec、源代码、补丁
$ rpmbuild --recompile --noclean ./SRPMS/somerpm.src.rpm
现在可以更改规格、src 并重建 RPM 或 SRPM。