【问题标题】:How do I edit and repackage the source code of a RPM?如何编辑和重新打包 RPM 的源代码?
【发布时间】:2015-11-04 17:14:57
【问题描述】:

这个问题的标题并没有反映出我多年来对 RPM 系统的愤怒。开发系统(./configure; make; make install;)和 rpm 系统(tar 文件、补丁文件、规范文件、神秘的构建脚本、环境和工具)之间存在巨大的鸿沟,我无法弥合。

我只想在一个更大的程序中更改几行代码。

我遇到的问题:

  1. 在安装时获取系统的源代码(例如,来自 EPEL 的 SRPM、原始 tarball 等)。我应该使用什么来源?

  2. 将该源代码转换为可随时编辑的表单 - 我可以使用我最喜欢的编辑器进行编辑。我怎么知道我正在编辑部署的代码、错误和所有内容? (rpm -ivh x.src.rpm 给了我在 SOURCES 目录中散落的 tar 文件和补丁文件的 squabs ......我怎样才能让它正确?)

  3. 编辑代码以实现一些惊人的 hack(这部分我实际上可以做到)。

  4. 编译已编辑的惊人代码 - 只需在原地编译即可。通常我可以做到这一点,但有时有一只手会很好,例如将 ./configure 设置为使用默认 /usr/local 和 /lost+found/opt/etc/opt 或任何疯狂的默认 autoconf 决定使用以外的其他内容。

  5. 将我的编辑转换为针对先前源的补丁并构建新的 RPM 以在某些远程系统上进行测试(这是 RPM 的巨大承诺 - 原始源和 hacky 补丁)。如果我对原始目录和编辑后的目录进行比较,则生成的补丁包含各种我不想删除的垃圾,因为我仍在开发中(例如目标代码)。 (实际上,此时我没有'原始'来做差异......因为当我意识到我可以“改进”它时,我只是随便看看代码......)我应该使用一些修订控制系统来跟踪我所做的更改?

这应该很简单,但不知何故,我所能做的就是编辑代码。在我编辑完代码之后,它永远无法克服困难,即使它是一个已经解决的问题。我对一个开源项目有一个很好的修复,但是每次我完成我惊人的 hack 的开发,深入研究代码并使其编译(并且可能工作)时,我都完全被难住了。没有任何东西可以将我修改过的、现在令人惊叹的源代码树变成 RPM。我最终部署了源代码(到 /usr/local),因为这至少可行。

进行(比如说)安全修复的人实际上是如何进行提取-编辑-编译-测试循环的?

【问题讨论】:

  • 我似乎看不到明确的问题。您是否遵循文档? wiki.centos.org/HowTos/RebuildSRPM 应该可以帮助您入门。它指的是owlriver.com/tips/patching_srpms,它描述了您的确切问题。
  • 这些是很好的链接,但说真的,它真的那么好吗? owlriver.com 链接将此作为测试的一部分 - ./configure --sysconfdir=/etc/joe - 这正是说明了问题。重新设计 srpm 文件中已经存在的几乎所有内容是否不可避免?

标签: build development-environment patch rpm rpmbuild


【解决方案1】:

SRPM 是(相对)独立的:通常有一些关于构建要求的假设没有反映在规范文件中。

  • 我将首先采用 SRPM,然后重新构建它以解决构建需求问题(添加构建所需的任何内容)。
  • 然后,从 SRPM 中提取规范文件和源代码,将补丁和 tar 文件放入 ~/rpmbuild/SOURCES,并从规范文件构建
  • 接下来,修改规范文件以添加我的自己的补丁文件(或脚本更改),
  • 我的更改终于有了一个新的 SRPM。

为了提取,我使用unrpm 脚本(本质上是cpio 的包装),它可以是网络上的found

这里讨论制作您自己的补丁文件:

【讨论】:

  • 这不行 - 我需要编辑代码 - ccc 文件。我正在制作补丁,而不是应用预打包的补丁。除此之外,如何并不是一件小事,当我说错话时,RPM 系统很乐意删除我的更改。
  • 那是在“修改规范文件”等(真的)。我添加了一些帮助链接。
  • 链接以各种方式说“这很糟糕”,并且“非常适合简单的情况”,例如““注意不要实际编译代码!”(它会删除您的更改)和“获取原始源代码树的基本副本”,它假定原始源代码树是可用格式。对于许多项目来说,这是根本不是这样。我不想在/usr/local/etc的土地上编辑原文,然后为Linux编译...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-18
  • 1970-01-01
  • 2021-04-19
  • 2015-11-05
  • 1970-01-01
相关资源
最近更新 更多