Centos8 dnf 更新事务检查错误

Centos8 dnf 更新事务检查错误

dnf update将我的 centos7 升级到 centos8 后,出现此错误

Error: Transaction check error:
  file /usr/lib64/libgdbm_compat.so.4.0.0 from install of gdbm-libs-1:1.18-1.el8.x86_64 conflicts with file from package gdbm-1.10-8.el7.x86_64

我试过了dnf install -y libgdbm --best --allowerasingdnf install -y gdbm --best --allowerasingdnf update仍然出现这个错误。

我怎样才能解决这个问题?

更新 :

dnf upgrade --best --allowerasing结果如下:

Error: transaction check vs depsolve:
(gcc >= 8 with gcc < 9) is needed by annobin-8.78-1.el8.x86_64
rpmlib(RichDependencies) <= 4.12.0-1 is needed by annobin-8.78-1.el8.x86_64
(annobin if gcc) is needed by redhat-rpm-config-120-1.el8.noarch
rpmlib(RichDependencies) <= 4.12.0-1 is needed by redhat-rpm-config-120-1.el8.noarch
To diagnose the problem, try running: 'rpm -Va --nofiles --nodigest'.
You probably have corrupted RPMDB, running 'rpm --rebuilddb' might fix the issue.
The downloaded packages were saved in cache until the next successful transaction.
You can remove cached packages by executing 'dnf clean packages'.

https://forums.centos.org/viewtopic.php?f=54&t=73160

答案1

好像它gdbm改变了包装方式。

旧版本gdbm-1.10-8.el7.x86_64提供的文件与新版本相同gdbm-libs-1:1.18-1.el8.x86_64,因此您能做的最好的事情就是gdbm-1.10-8.el7.x86_64在重试更新之前手动删除它:

dnf remove gdbm-1.10-8.el7.x86_64

如果这不起作用,因为有人需要,/usr/lib64/libgdbm_compat.so.4.0.0那么您可以使用更复杂的swap命令:

dnf swap gdbm-1.10-8.el7.x86_64 gdbm-libs-1:1.18-1.el8.x86_64

编辑

看起来我们需要说服dnf将其更改gdbmgdbmAND gdbm-libs。尝试使用:

dnf install gdbm gdbm-libs --best --allowerasing

笔记:我尝试了 centos7 - centos8 升级程序,遇到了多个问题。我不得不删除相当多的软件包,才能使迁移工作顺利进行。当软件包中的文件发生变化、重命名等时,就会出现问题。我认为既然我已经完成了这一部分,那么剩下的部分应该会很顺利。祝你好运。

答案2

我设法通过使用 rpm(并忽略依赖项)手动更新 gdbm 和 gdbm-libs 来解决这个问题。

sudo rpm -e --nodeps gdbm-1.10-8.el7.x86_64
sudo rpm -i /var/cache/dnf/baseos-929b586ef1f72f69/packages/gdbm-libs-1.18-1.el8.x86_64.rpm

dnf如果您没有将缺失的软件包纳入要升级的软件包集,则可能需要手动下载它们。此外,我必须删除 python3-pip-9.0.3 和 python36-rpmconf,同样,rpm还要忽略依赖项。然后我开始了 distro-sync。

本质上,我所做的就是删除 报告的有问题的软件包dnf,然后dnf重新开始。但要小心,不要删除对rpm和至关重要的东西dnf,否则,您将无法升级系统。

答案3

在一台服务器上,Swap 无法正常工作。另一台服务器从 7.7 --> 8.0 --> 8.1 顺利完成,除了一些小软件包和 GPG 密钥问题。

如果停留在 8.X 并且无法升级或安装任何东西,只需直接从 rpm 重新安装 centos-relase 7。http://mirror.centos.org/centos/7/os/x86_64/Packages/centos-release-7-7.1908.0.el7.centos.x86_64.rpm

它将允许您继续使用 gdbm-1。

答案4

今天成功将 Centos 7 升级到 8,然后从 8 升级到 Rocky Linux 8,感谢您的建议。

使用本指南 -https://techviewleo.com/how-to-migrate-from-centos-7-to-rocky-linux-8/

此步骤中存在许多冲突的包:

sudo dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync

因此我首先删除了:

dnf remove NetworkManager
dnf remove dracut-network.x86_64
dnf remove python36-rpmconf

我也这样做了:

sudo rpm -e --nodeps gdbm-1.10-8.el7.x86_64
sudo rpm -i /var/cache/dnf/baseos-xxxxxxxxx/packages/gdbm-libs-1.18-1.el8.x86_64.rpm

然后升级命令开始工作,但没有 Appstream repo(1559/1559 步骤完成):

dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync --disablerepo=appstream

然后它开始起作用(869/869 步骤):

dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync

重启之前的最后一件事:

dnf -y groupupdate "Core" "Minimal Install"

相关内容