RPM转DEB上传JFrog Artifactory后apt update报MergeList错误如何解决?
故障根因
你遇到的Problem with MergeList错误核心原因是RPM转DEB过程中,RPM专属的内部依赖被错误带入了DEB包的元数据,apt无法识别这类依赖格式导致解析失败。
从你提供的Packages文件差异可以看到,问题包的Depends字段包含4个rpmlib(xxx)开头的依赖项,这类依赖是RPM包管理器的内部规则依赖,仅在RPM生态内有效,Debian系的apt完全不识别该类依赖的语法和语义,解析到第21个依赖项(对应错误提示的Problem parsing dependency 21)时直接崩溃,导致整个软件源索引文件解析失败。
针对性问题解答
为什么只有这组Oracle包会触发故障?
其他你转换过的RPM包在构建时没有内置这类rpmlib前缀的内部依赖声明,或依赖项数量未触发apt的解析异常;而Oracle Instant Client的官方RPM包在构建时强制嵌入了多个rpmlib规则依赖,转换工具默认不会过滤这类RPM专属依赖,就直接写入了DEB包的control元数据中。
为什么只有RPM转换得到的包会出现该问题?
原生DEB包的构建流程完全遵循Debian生态的依赖规则,不会引入RPM生态专属的依赖项;只有跨格式转换的场景下,转换工具未做生态专属依赖过滤时,才会将RPM侧的无效依赖带入DEB元数据。
另外你当前依赖里写的libaio也不符合Debian系的包命名规则,Debian/Ubuntu下对应的包名为libaio1,也可能后续安装时触发依赖缺失问题。
修复方案
在使用fpm执行转换时,添加参数过滤所有rpmlib前缀的依赖,同时修正依赖名称即可:
fpm --name ${name} -s rpm -t deb \ --depends libaio1 \ --exclude-deps 'rpmlib*' \ 你的原RPM包路径
转换完成后可以执行dpkg -I 生成的deb包查看DEBIAN/control的依赖字段,确认无rpmlib相关依赖后再上传到Artifactory即可。
内容的提问来源于stack exchange,提问作者Bruce Edge

