rpm包都有个头的,里边会记录压缩格式、cpio大小等,我今天发现很多包读取到的大小都是0,这导致rpm2cpio命令返回失败码,有很多包有这个问题。
比如
https://mirrors.163.com/openeuler/openEuler-22.03-LTS-SP2/update/source/Packages/infinispan-8.2.4-13.oe2203sp2.src.rpm
[lichaoran@LAPTOP-6KLLVI0M test]$ rpm2cpio …/infinispan-8.2.4-13.oe2203sp2.src.rpm |cpio -idum
17494 blocks
[lichaoran@LAPTOP-6KLLVI0M test]$ ls
CVE-2016-0750.patch CVE-2019-10174.patch infinispan-8.2.4.Final.tar.gz
CVE-2017-15089-1.patch CVE-2019-10174-pre.patch infinispan.spec
CVE-2017-15089-2.patch implement-abstract-functions-extended-from-class-Directory.patch lucene-6.patch
我这里执行了后,是正常,可以确认一下下载的包是否完整
能解压出来不代表没问题。
我要的是命令返回值。你知道在脚本中调用命令,返回值有多重要吗?
rpm2cpio …/infinispan-8.2.4-13.oe2203sp2.src.rpm >cpio
它返回 1
很多集成化脚本执行系统命令,返回错误会报异常。
我首先遇到的是osc(obs的命令行工具)中有使用相关代码,导致流程中断。
如果用其他发行版(比如Debian 12)的rpm2cpio命令来解析楼主贴出的rpm包,确实exit 1。
问题应该出在rpm2cpio.c里面的:
rc = (ufdCopy(gzdi, fdo) == payload_size) ? EXIT_SUCCESS : EXIT_FAILURE;
欧拉发行版(我这里用的是24.03)会返回EXIT_SUCCESS,debian 12会返回EXIT_FAILURE。
可能先用欧拉发行版24.03可以解决问题?