rpmrebuild

1.工具简介:rpmrebuild

rpmrebuild是一款经典的LinuxRPM包逆向与重构工具。
它的核心能力在于:在没有源代码(SRPM)的情况下,直接对已有的二进制.rpm包进行拆包、编辑和重新打包。

在进行软件跨平台移植、安全组件二次适配或临时修改某些内置配置文件时,如果你手头只有一个打好的二进制包,利用它的--edit-whole--change-files等功能,可以非常方便地进入沙箱修改文件并原地生成新包。

2.踩坑与报错排查

在最近处理一批由第三方跨平台工具打出来的RPM包时,发现官方原生版本的rpmrebuild存在两个严重的问题:

问题一:解包阶段直接崩溃,报错rpm2cpio:Nosuchfile

报错表现:

执行拆包命令时,工具直接报错退出:

复制代码
rpm2cpio::Nosuchfileordirectory
(RpmUnpack)rpm2cpiofailed,tryingrpm2archive,thismighttakelongtime

原因分析:

使用strace抓取底层系统调用后发现,传给rpm2cpio的参数是个空字符串。翻阅官方rpmrebuild.sh源码发现这是一个低级的变量名Bug:原作者在重构解压模块的RpmUnpack函数时,误将存储包路径的全局变量$RPMREBUILD_PAQUET写成了未被赋值的$PAQUET
处理方案:

在源码中将相关的$PAQUET变量彻底修正为正确的$RPMREBUILD_PAQUET

问题二:跨架构(非标架构)打包报错setarch:未识别的架构

报错表现:

当处理一些带有amd64(Debian系惯用命名)或aarch64标签的跨平台包时,工具会报错:

复制代码
setarch:amd64:未识别的架构
#或者在rpmbuild阶段报错:
错误:没有找到可供构建的兼容构架

原因分析:
rpmbuild拥有极其严格的构建环境校验(会去查对/usr/lib/rpm/rpmrc字典),它默认不认识amd64这种非标称呼。而rpmrebuild脚本试图调用setarch去模拟环境,在真正的异构或非标命名面前直接失效报错。
处理方案:

对源码进行深度改造。彻底废弃了原脚本中脆弱的setarch逻辑,并在参数解析器中原生引入了--force-arch参数。其底层逻辑是:在动态生成SPEC文件后,使用sed强行删除BuildArch属性让rpmbuild失去校验基准,随后通过命令行参数将用户指定的target和宏变量强行注入,实现无视宿主机物理架构的"强制交叉重打包"。

3. 开箱即用的修复版获取

如果你也遇到了上述报错,或者需要处理复杂的跨架构RPM包重构,为了避免浪费时间去踩这些上古bash脚本的坑,可以直接使用我修复并增强后的版本。
增强版主要特性:

修复了空变量导致解压失败的致命Bug

原生引入--force-arch=<arch>参数,完美绕过rpmbuild的严苛校验,实现 amd64等非标架构或异构架构的直接重压包

获取方式(GitHub):

👉 rpmrebuild - GitHub

(由于是 Fork 仓库,GitHub 默认搜索不到,请直接点击链接或使用 fork:true 语法搜索)

相关推荐
kaoa00024 分钟前
Linux入门攻坚——90、Hadoop-2-MapReduce计算框架及Hadoop生态系统概览
linux·hadoop·mapreduce
The Chosen One98540 分钟前
OS第二章随手记(2.1)
linux·运维·服务器·笔记
xx~t2 小时前
嵌入式——ARM——汇编1
linux·汇编·arm开发·嵌入式硬件·arm
ly76892 小时前
磁盘 I/O 延迟突增:用 iostat、blktrace 与火焰图定位到具体调用栈
java·linux·前端·数据库·iostat·磁盘 i/o·blktrace
程序员-Benothing2 小时前
Linux查找文件命令:find、locate、which、whereis实战
linux·运维·服务器
j7~2 小时前
【Linux网络加餐】(篇七)网络版计算器(中):协议落地、报文分隔与完整链路
linux·c++·网络编程·tcp·报文分割·网络计算器·协议落地
团子股股东峥哥2 小时前
day39-RHEL-访问网络附加存储
linux·运维·服务器
不会写代码的小可爱&&2 小时前
深入 Linux 内核内存管理:slab/slub 分配器原理剖析
linux·硬件架构
H_oRIZoN_3 小时前
Linux入门DAY44 ARM 入门 Day02|ARM 汇编指令、模式切换、栈操作、汇编 C 混合编程
linux·单片机·嵌入式硬件·arm·linux应用编程
程序员-Benothing4 小时前
Linux文件查看与编辑:cat、less、tail、vim快速入门
linux·运维·服务器