解包RPM文件并重新打包

24

我有一个RPM文件。我需要对该RPM进行一些更改,重新打包并进行测试。是否有人可以帮助我?

2个回答

19

修改没有源代码的RPM的最佳方法是按照以下步骤进行:

  1. 使用rpm2cpio命令将rpm解包到目录中
  2. 在该子目录内进行必要的更改
  3. 创建一个“虚拟”的spec文件并进行构建。

这个虚拟spec文件可能看起来像这样:

Name: blah
Version: 1.0
Release: 1
Summary: blah
License: blah
Distribution: blah
Group: blah
Packager: me
BuildRoot: /path/to/dir/with/mods

%description
blah

%files
/path/to/dir/with/mods/*

将这里的每个 "blah" 替换为实际值(使用 rpm -qpi rpm文件 获取值)。将BuildRoot替换为您拥有修改的rpm解包的目录。然后运行 rpmbuild -bb dummy.spec

由于没有定义预处理/设置/构建/安装步骤,因此它将只获取BuildRoot中的内容并制作RPM。

如果rpm软件包具有脚本文件,则还必须将它们放入此虚拟spec文件中。要查看软件包是否有任何脚本,请运行: rpm -qp --scripts rpm文件。对于依赖项、先决条件等情况也是如此。

可能还有其他细节我没提到,但这已经足够让你开始了。

更新: 值得一提的是,还有一个名为 http://rpmrebuild.sourceforge.net/ 的工具。


1
如果不指定/修改rpmbuildBUILDROOT设置,这将无法正常工作。 - jmtd
我认为%files应该相对于BuildRoot - dma_k
缺少一步,您还需要提取 cpio 存档。第一步应该是:rpm2cpio pkg_name.rpm | cpio -idmv - Hi-Angel

0

我认为这是一个叫做“补丁”的概念。我开始使用link来打第一个srpm的补丁。但基本思路是:获取srpm,安装srpm,在构建区目录中创建您的补丁,并在spec文件中指定补丁文件%patch0 -p1。然后进行rpm构建。愉快地打补丁吧!


我面临的主要问题是没有源RPM。我只有RPM构建文件。 - Monojeet
@Monojeet,然后找出源rpm?这是很合理的,因为在打补丁时,我们需要的是 rpm而不是已构建的rpm。 - Jasonw
考虑获取SRPM。我可以知道那个RPM的名称吗? - Jasonw
这是一个专有的应用程序构建RPM。只是想确保没有任何可能在没有SRPM的情况下编辑RPM。 - Monojeet
啊哈..又有一个问题。如果您想保护您的rpm的完整性,可能应该签署您的rpm软件包。您可以阅读此链接了解rpmrebuild:http://magazine.redhat.com/2007/12/04/hacking-rpms-with-rpmrebuild/ - Jasonw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接