运行后sudo dnf system-upgrade download --refresh --releasever=32 --allowerasing
我得到以下巨大的错误列表:
rpmlib(PayloadIsZstd) <= 5.4.18-1 is needed by python3-audit-3.0-0.19.20191104git1c2f876.fc32.x86_64
rpmlib(PayloadIsZstd) <= 5.4.18-1 is needed by kexi-3.1.0-7.fc32.x86_64
rpmlib(PayloadIsZstd) <= 5.4.18-1 is needed by kexi-libs-3.1.0-7.fc32.x86_64
rpmlib(PayloadIsZstd) <= 5.4.18-1 is needed by alternatives-1.11-6.fc32.x86_64
...
看完之后https://serverfault.com/questions/280099/how-do-i-install-an-rpm-that-complains-about-rpmlibfiledigests-4-6-0-1我认为这是因为 Fedora-25 和 Fedora-32 之间的某些 RPM 版本引入了“PayloadIsZstd”功能。
我怎样才能解决这个问题?
我尝试备份 rpm 和 rpm-libs 文件并强制安装 Fedora 32 rpm(奇怪的是现有的二进制文件会兼容?):
# Probably a really stupid idea. Don't do this, it's super hard to undo.
$ sudo rpm -ivhU ~/Downloads/rpm-libs-4.15.1-3.fc32.1.x86_64.rpm ~/Downloads/rpm-4.15.1-3.fc32.1.x86_64.rpm --replacepkgs --nodeps --force --nomd5
...
error: unpacking of archive failed: cpio: Bad magic
现在我想我应该尝试中间版本,例如希望 Fedora 30 rpm 有 PayloadIsZstd。
有没有更好的办法?
更新
我最终先升级到 Fedora 30,然后升级到 32 以解决 rpm 功能依赖性,从而解决了上述问题。还有一些依赖性问题。第一次安装失败(重新启动回到 FC25),我猜是因为我仍然有软件包排队,--releasever=32
并且在选择 之前没有先删除它们--releasever=30
。简单地重复dnf system-upgrade
+dnf system-upgrade reboot
第二次就成功了。
答案1
根据https://fedoraproject.org/wiki/Changes/Switch_RPMs_to_zstd_compressionZstd 压缩是在 Fedora 31 中引入的,因此也许您可以在升级之前先尝试从 Fedora 31 安装 rpm-libs。这不一定有效,因为 rpm-libs 可能依赖于其他尚未安装的库,例如 glibc。简而言之,我看不出你有什么简单的出路。现在从头开始重新安装可能是一个更好的主意。