我被要求"打开包装"来自第三方的二进制rpm,替换其中包含的一些java jar文件,并重新打包以使其安装类似于原始rpm(供内部使用,而不是重新分发)。
我尝试了以下内容:
1)使用alien
将rpm转换为tgz,解压缩它,修改它,重新压缩它然后再将其从tgz转换为rpm再次alien
2)安装rpm,修改jar,然后使用名为rpmrebuild
(http://rpmrebuild.sourceforge.net/)的工具来"重新生成"包裹。
这两种方法都导致了一连串的错误消息并失败了。
我一直在阅读的文档似乎表明尝试修改二进制转换器可能不是一个好主意。即"从预先编译的代码开始是不行的#34;来自(https://fedoraproject.org/wiki/How_to_create_an_RPM_package#The_basics_of_building_RPM_packages)
这是徒劳的吗?如果没有,我应该尝试其他工具/流程吗?
答案 0 :(得分:1)
确实,修补已经构建的.rpm文件听起来有问题,更好地重建它(甚至可能使用稍微不同的名称来清楚地区分它)。 这是我在这个相当奇怪的事情(但在现实生活中肯定可能......)的情况下做的,假设我们可以忽略任何许可相关或法律问题: 从.rpm包中解压缩文件,将它们放入版本控制系统,并根据此基本分支为重建创建一个单独的分支,在其中添加自定义.jar文件,并编写自定义.spec文件以构建rpm来自这些二进制文件的包(具有相同的依赖关系和%pre,%post脚本作为原始rpm)。通过这个工作流程,我们也可以按照第三方“上游”.rpm包的新版本,通过检查新的解压缩文件到基本分支,并将所需的位移动到另一个分支,并且易于跟踪已经存在的内容。与原始包相比更新/修改。还建议澄清.rpm包描述中包的内容,并将自己设置为它的维护者。如果其他软件包依赖于这个软件包,并且软件包名称与原始软件包不同(如上所述),可以使用新的.spec中的“提供”和“冲突”条目来确保依赖软件包此自定义程序包也实现了依赖关系,如果原始程序包已经在系统中,则不会安装此自定义程序包(反之亦然)。 要仅为安装文件创建.spec文件,请检查示例Build RPM to just install files或您最喜欢的rpm教程。
答案 1 :(得分:0)
阅读此内容的任何人的更新。尝试使用rpmrebuild
反转.spec文件然后重建包是一个麻烦的过程。
最终我们决定在不同的.rpm的单独进程中推送不同的.jars。更简单,更易于维护。