![Centos8 dnf 更新事务检查错误](https://linux22.com/image/1613898/Centos8%20dnf%20%E6%9B%B4%E6%96%B0%E4%BA%8B%E5%8A%A1%E6%A3%80%E6%9F%A5%E9%94%99%E8%AF%AF.png)
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 --allowerasing
,dnf install -y gdbm --best --allowerasing
但dnf 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'.
答案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
将其更改gdbm
为gdbm
AND 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"