如何“重新打包”一个RPM文件,例如使用cpio2rpm,而不安装该RPM?

9
  1. 我能够从RPM文件中提取文件,但是如何"重建"它,例如cpio2rpm?
  2. 我使用以下命令提取了RPM文件。 rpm2cpio theFileName.rpm | cpio –idmv
  3. 我需要修改一些Web应用程序文件,例如*.php、*.html或.js。这些文件不需要进行任何源重编译。所以我想要在不重建rpm的情况下替换或更改这些文件。由于我需要对多个平台(如Redhat Linux和SUSE)和多种架构(如32位和64位操作系统)执行此操作。
  4. 我希望只在一个系统上做出这些更改,而不需要重新构建rpm,并且不会有目标系统架构依赖性(如i386、64位)。
  5. 我不想使用命令rpmbuild –rebuild the.src.rpm,因为我没有源代码。我需要重新构建二进制.rpm文件(而不是源.rpm)。
  6. 我希望在没有源代码、独立于平台或架构的情况下完成此操作,如果可能的话,不使用规范文件。

    请问是否有任何解决方案或免费工具?

    非常感谢您花时间阅读并回复我的帖子。

3个回答

18

你可以使用rpmrebuild来修改实际的rpm文件(不需要安装它)。

大多数示例都使用复杂的内联编辑命令以特定方式修改已知文件,但您也可以使用普通编辑器。我曾用此方法来修复一个rpm文件中的shell脚本,而我没有该脚本的源代码。调用命令为

rpmrebuild -ep theFileName.rpm

这会将您放入一个编辑器中,其中包含RPM的规范文件。文件的名称将类似于~/.tmp/rpmrebuild.12839/work/spec.2。如果你查看这个例子中的~/.tmp/rpmrebuild.12839/work目录,你会发现用来制作该RPM的所有文件(在我的情况下,该文件位于该目录下的root/usr/sbin)。因此,去到另一个窗口,进入该目录并编辑需要更改的任何文件。

当你完成文件编辑后,回到包含规范文件的编辑窗口,进行任何必要的文件更改(我没有进行任何更改,因为我没有添加或删除文件),保存该文件,并回答“y”以回答“Do you want to continue”的问题。然后它将构建一个新的RPM文件,并告诉您它放置的位置(在我的情况下,是在~/rpmbuild/RPMS/x86_64/目录下)。


2
太好了!有没有办法在某个脚本中自动化它? - Ilya Ivanov

1

您可以使用rpmrebuild重新打包已安装的RPM(包括修改后的文件)。http://rpmrebuild.sourceforge.net/

显然,如果您的二进制文件(如果有)是平台/架构无关的,则可以在您希望的所有操作系统版本上运行,但如果它们只是Web文件,那么这应该不是问题。


0
原则上,您可以将任何想要打包成 RPM 文件的内容都打包进去。只需将您拥有的东西视为“源”,并编写一个 SPEC 文件,将数据放在已编译的二进制文件通常存放的位置即可。
关于 RPM,我认为“源”是“我拥有的”,“二进制”是“我需要运行的”。不是非常精确的术语,但它有助于使用 RPM。
您的 spec 文件看起来像任何其他 spec 文件,涉及参数等方面。但代码部分不同:
[...]
%prep
# Here you either have nothing to do or you already unpack the cpio and possibly modify it.

# %build can be omitted

%install
[ "${buildroot}" != "/" ] && [ -d ${buildroot} ] && rm -rf ${buildroot};
# Here you can either unpack the cpio or copy the data unpacked in %prep.
# Be careful to put it into %{buildroot} or $RPM_BUILD_ROOT.

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