现象描述
CentOS 7.5 系统,sudo yum update,出现如下错误:
Error: Multilib version problems found. This often means that the root cause is something else and multilib version checking is just pointing out that there is a problem. Eg.:
1. You have an upgrade for audit-libs which is missing some dependency that another package requires. Yum is trying to solve this by installing an older version of audit-libs of the different architecture. If you exclude the bad architecture yum will tell you what the root cause is (which package requires what). You can try redoing the upgrade with --exclude audit-libs.otherarch ... this should give you an error message showing the root cause of the problem.
2. You have multiple architectures of audit-libs installed, but yum can only see an upgrade for one of those architectures.
If you don't want/need both architectures anymore then you can remove the one with the missing update and everything will work.
3. You have duplicate versions of audit-libs installed already. You can use "yum check" to get yum show these errors. ...you can also use --setopt=protected_multilib=false to remove this checking, however this is almost never the correct thing to do as something else is very likely to go wrong (often causing much more problems).
Protected multilib versions: -2.8.1-3.el7_5.1.i686 != audit-libs-2.8.1-3.el7.x86_64
Error: Protected multilib versions: systemd-libs-219-57.el7_5.1.i686 != systemd-libs-219-57.el7.x86_64
尝试单独更新相关软件包
单独更新audit-libs,失败
sudo yum update audit-libs
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.usc.edu
* elrepo-kernel: repos.lax-noc.com
* epel: mirrors.develooper.com
* extras: mirrors.xtom.com
* updates: mirror.hostduplex.com
* webtatic: us-east.repo.webtatic.com
Resolving Dependencies
--> Running transaction check
---> Package audit-libs.i686 0:2.8.1-3.el7 will be updated
---> Package audit-libs.x86_64 0:2.8.1-3.el7 will be updated
--> Processing Dependency: audit-libs(x86-64) = 2.8.1-3.el7 for package: audit-libs-python-2.8.1-3.el7.x86_64
--> Processing Dependency: audit-libs(x86-64) = 2.8.1-3.el7 for package: audit-2.8.1-3.el7.x86_64
---> Package audit-libs.i686 0:2.8.1-3.el7_5.1 will be an update
---> Package audit-libs.x86_64 0:2.8.1-3.el7_5.1 will be an update
--> Running transaction check
---> Package audit.x86_64 0:2.8.1-3.el7 will be updated
---> Package audit.x86_64 0:2.8.1-3.el7_5.1 will be an update
---> Package audit-libs-python.x86_64 0:2.8.1-3.el7 will be updated
---> Package audit-libs-python.x86_64 0:2.8.1-3.el7_5.1 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
=======================================================================================================================================================
Package Arch Version Repository Size
=======================================================================================================================================================
Updating:
audit-libs i686 2.8.1-3.el7_5.1 updates 100 k
audit-libs x86_64 2.8.1-3.el7_5.1 updates 99 k
Updating for dependencies:
audit x86_64 2.8.1-3.el7_5.1 updates 247 k
audit-libs-python x86_64 2.8.1-3.el7_5.1 updates 75 k
Transaction Summary
=======================================================================================================================================================
Upgrade 2 Packages (+2 Dependent packages)
Total size: 521 k
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction check error:
package audit-libs-2.8.1-3.el7_5.1.x86_64 is already installed
Error Summary
-------------
单独更新systemd-libs,失败
sudo yum update systemd-libs
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.usc.edu
* elrepo-kernel: repos.lax-noc.com
* epel: mirrors.develooper.com
* extras: mirrors.xtom.com
* updates: mirror.hostduplex.com
* webtatic: us-east.repo.webtatic.com
Resolving Dependencies
--> Running transaction check
---> Package systemd-libs.i686 0:219-57.el7 will be updated
--> Processing Dependency: systemd-libs = 219-57.el7 for package: systemd-219-57.el7.x86_64
--> Processing Dependency: systemd-libs = 219-57.el7 for package: libgudev1-219-57.el7.x86_64
---> Package systemd-libs.x86_64 0:219-57.el7 will be updated
--> Processing Dependency: systemd-libs = 219-57.el7 for package: systemd-219-57.el7.x86_64
---> Package systemd-libs.i686 0:219-57.el7_5.1 will be an update
---> Package systemd-libs.x86_64 0:219-57.el7_5.1 will be an update
--> Running transaction check
---> Package libgudev1.x86_64 0:219-57.el7 will be updated
---> Package libgudev1.x86_64 0:219-57.el7_5.1 will be an update
---> Package systemd-libs.i686 0:219-57.el7 will be updated
--> Processing Dependency: systemd-libs = 219-57.el7 for package: systemd-219-57.el7.x86_64
---> Package systemd-libs.x86_64 0:219-57.el7 will be updated
--> Processing Dependency: systemd-libs = 219-57.el7 for package: systemd-219-57.el7.x86_64
--> Finished Dependency Resolution
Error: Package: systemd-219-57.el7.x86_64 (@base)
Requires: systemd-libs = 219-57.el7
Removing: systemd-libs-219-57.el7.i686 (@base)
systemd-libs = 219-57.el7
Updated By: systemd-libs-219-57.el7_5.1.i686 (updates)
systemd-libs = 219-57.el7_5.1
You could try using --skip-broken to work around the problem
** Found 18 pre-existing rpmdb problem(s), 'yum check' output follows:
....
解决办法
系统是64位的,我们在上一步发现了两个不符合x86_64构架的包全名:
audit-libs.i686 0:2.8.1-3.el7
systemd-libs-219-57.el7.i686
需要做的就是移除它们:
sudo yum remove audit-libs.i686 0:2.8.1-3.el7
sudo yum remove systemd-libs-219-57.el7.i686
然后更新系统即可:
sudo yum update