【问题标题】:How to "repackage" a RPM file for example cpio2rpm without installing the RPM?如何在不安装 RPM 的情况下“重新打包”一个 RPM 文件,例如 cpio2rpm?
【发布时间】:2012-05-14 09:36:53
【问题描述】:
  1. 我可以从 RPM 文件中提取文件,但是如何“重建”它,例如 cpio2rpm?
  2. 我已经使用以下命令提取了 RPM 文件。 rpm2cpio 文件名.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. 我想在不依赖源代码和平台或架构的情况下执行此操作,并且尽可能不使用规范文件。

    任何朋友,请您提出任何解决方案或任何免费工具。

    感谢所有花时间阅读和回复我的帖子的人。

【问题讨论】:

    标签: linux rpm rebuild


    【解决方案1】:

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

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

    rpmrebuild -ep theFileName.rpm
    

    这会将您置于带有 RPM 规范文件的编辑器中。文件名类似于~/.tmp/rpmrebuild.12839/work/spec.2。如果你查看,在这个例子中,~/.tmp/rpmrebuild.12839/work,你会发现所有用于制作 RPM 的文件(在我的例子中,该文件位于该目录中的root/usr/sbin)。因此,转到另一个窗口,cd 到该目录,然后编辑您需要更改的任何文件。

    完成文件编辑后,返回带有规范文件的编辑窗口,对该文件进行任何您需要的更改(我没有任何更改,因为我没有添加或删除文件),保存文件,然后对“您要继续”问题说“y”。然后它会构建一个新的 RPM 文件,并告诉你它放在哪里(在我的例子中,在 ~/rpmbuild/RPMS/x86_64/ 中)

    【讨论】:

    • 太棒了!有没有办法在某些脚本中自动化它?
    【解决方案2】:

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

    显然,您的二进制文件(如果有的话)必须独立于平台/架构,才能在您希望的所有操作系统风格上运行,但听起来它们只是 Web 文件,不应该成为问题。

    【讨论】:

      【解决方案3】:

      原则上,您可以将所需的所有内容打包到 RPM 文件中。只需将您拥有的内容视为“源”并编写一个 SPEC 文件,将数据放在编译后的二进制文件通常会去的地方。

      关于 RPM,我认为“源”“我有什么”和“二进制”“我需要运行什么”。不是很准确的术语,但它有助于使用 RPM。

      您的规范文件看起来像任何其他规范文件,涉及参数等。但代码部分不同:

      [...]
      %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.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-27
        • 2016-12-23
        相关资源
        最近更新 更多