有没有办法从rpm包中提取spec文件(我只有RPM文件)
不是
rpm --scripts -qp my-great-app-1.1.2.rpm
(这种语法只能获取spec文件中的rpm脚本)
答案 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。