如何编辑和重新打包RPM的源代码?

时间:2015-08-12 08:01:28

标签: build development-environment patch rpm rpmbuild

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

我想做的就是在更大的程序中更改几行代码。

我遇到的问题:

  1. 获取已安装系统的源代码(例如EPEL的SRPM,原始tarball,其他内容)。我应该使用什么来源?

  2. 将源代码转换为可编辑的表单 - 我可以使用自己喜欢的编辑器编辑。我怎么知道我正在编辑代码部署,错误和所有? (rpm -ivh x.src.rpm给了我在SOURCES目录中乱丢的补丁文件的tar文件和数据库......我怎么能把它弄好?)

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

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

  5. 将我的编辑内容转换为针对上一个源的补丁,并构建新的RPM以在某个远程系统上进行测试(这是RPM的最大承诺 - 原始源和hacky补丁)。如果我对原始目录和编辑目录进行差异处理,则生成的补丁包含我不想删除的各种垃圾,因为我还在开发(例如目标代码)。 (实际上,我在这一点上没有'原创'来做差异...因为当我意识到我可以“改进”它时,我只是随便看着代码...)我应该使用一些修订版本吗?控制系统跟踪我正在做出的改变?

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

    执行(比方说)安全修复的人如何实际执行extract-edit-compile-test循环?

1 个答案:

答案 0 :(得分:0)

SRPM是(相对)自包含的:通常有一些关于构建要求的假设没有反映在spec文件中。

  • 我首先考虑SRPM,并重新构建它以解决构建要求的问题(添加构建它所需的任何东西)。
  • 然后,从SRPM中提取spec-file和sources,将补丁和tar文件放入unrpm,并从spec-file构建
  • 接下来,修改规范文件以添加我的自己的补丁文件(或脚本更改),
  • 最后,我的更改了SRPM。

为了提取,我使用cpio脚本(实际上是oncomplete="#{rich:component('popupPanelId') == null ? 'alert(\'not found\')' : 'alert(\'found\')'}" 的包装器),它可以是网络上的found

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