一、情景
在Centos8中使用yum/dnf安装相关包时发生如下类似报错:
error: /var/cache/dnf/base-82351eca59c28538/packages/tar-1.30-9.el8.x86_64.rpm: signature hdr data: BAD, no. of bytes(13828) out of range
The downloaded packages were saved in cache until the next successful transaction.
You can remove cached packages by executing 'dnf clean packages'.
Error: error reading package header: '/var/cache/dnf/base-82351eca59c28538/packages/tar-1.30-9.el8.x86_64.rpm'
二、踩过的坑
网上的方法试过很多,下面的都不行:
- 更新rpm:yum update rpm/dnf update rpm
- 修改源CentOS-Base.repo,gpgcheck=0
- 在安装命令后增加选项:–nogpgcheck
- 清缓存,更新包仓库
sudo dnf clean packages
sudo dnf makecache
…
总结:
出现这个错误提示就是因为rpm包的版本太低导致的,问题是使用yum或者dnf安装的时候是要用到原始的rpm的,所以这里升级rpm自己也是报相同的错误
三、解决方法
不要使用yum/dnf升级rpm,先下载相关包再手动升级
1. 需要下载的包:
rpm-4.14.3-26.el8.x86_64.rpm
rpm-libs-4.14.3-26.el8.x86_64.rpm
rpm-build-libs-4.14.3-26.el8.x86_64.rpm
python3-rpm-4.14.3-26.el8.x86_64.rpm
rpm-plugin-selinux-4.14.3-26.el8.x86_64.rpm
rpm-plugin-systemd-inhibit-4.14.3-26.el8.x86_64.rpm
ima-evm-utils-1.3.2-12.el8.x86_64.rpm
elfutils-libs-0.189-3.el8.x86_64.rpm
elfutils-libelf-0.189-3.el8.x86_64.rpm
elfutils-libelf-devel-0.189-3.el8.x86_64.rpm
tpm2-tss-2.3.2-3.el8.x86_64.rpm
执行命令:
wget http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/rpm-4.14.3-26.el8.x86_64.rpm
wget http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/rpm-libs-4.14.3-26.el8.x86_64.rpm
wget http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/rpm-build-libs-4.14.3-26.el8.x86_64.rpm
wget http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/python3-rpm-4.14.3-26.el8.x86_64.rpm
wget http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/rpm-plugin-selinux-4.14.3-26.el8.x86_64.rpm
wget http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/rpm-plugin-systemd-inhibit-4.14.3-26.el8.x86_64.rpm
wget http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/ima-evm-utils-1.3.2-12.el8.x86_64.rpm
wget http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/elfutils-libs-0.189-3.el8.x86_64.rpm
wget http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/elfutils-libelf-0.189-3.el8.x86_64.rpm
wget http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/elfutils-libelf-devel-0.189-3.el8.x86_64.rpm
wget http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/tpm2-tss-2.3.2-3.el8.x86_64.rpm
2. 执行代码升级
rpm -Uvh --noverify --noplugins --nodigest --nosignature rpm-4.14.3-26.el8.x86_64.rpm rpm-libs-4.14.3-26.el8.x86_64.rpm rpm-build-libs-4.14.3-26.el8.x86_64.rpm python3-rpm-4.14.3-26.el8.x86_64.rpm rpm-plugin-selinux-4.14.3-26.el8.x86_64.rpm rpm-plugin-systemd-inhibit-4.14.3-26.el8.x86_64.rpm ima-evm-utils-1.3.2-12.el8.x86_64.rpm elfutils-libs-0.189-3.el8.x86_64.rpm elfutils-libelf-0.189-3.el8.x86_64.rpm elfutils-libelf-devel-0.189-3.el8.x86_64.rpm tpm2-tss-2.3.2-3.el8.x86_64.rpm
3. 相关依赖
在执行步骤2时可能会因为没有相关依赖报错,安装依赖
sudo dnf install libzstd
sudo dnf install pkgconf-pkg-config
sudo dnf install libzstd-devel
sudo dnf install zlib-devel
如果还有缺少其他依赖报错,依次解决即可
4. 其他
确保步骤1中的包全部安装好后,重新执行最开始使用yum/dnf安装相关包,问题解决
感谢:
https://mowblog.com/centos8%E5%8D%87%E7%BA%A7%E8%87%B3centos8-stream/