理解并解决 Centos 7 上的依赖关系

理解并解决 Centos 7 上的依赖关系

作为业余管理员,多年来我已经解决了许多依赖性问题:我只是删除了一些包,直到整个问题得到解决,或者(如果后果太大)等到问题自行解决。

# cat /etc/centos-release
CentOS Linux release 7.8.2003 (Core)

现在我想了解以下内容的含义:

# yum update
Loaded plugins: fastestmirror, replace
Loading mirror speeds from cached hostfile
 * base: ...
 * epel: ...
 * extras: ...
 * updates: ...
 * webtatic: ...
Resolving Dependencies
--> Running transaction check
---> Package ImageMagick.x86_64 0:6.7.8.9-18.el7 will be updated
--> Processing Dependency: libMagickCore.so.5()(64bit) for package: php72w-pecl-imagick-3.4.3-1.2.w7.x86_64
--> Processing Dependency: libMagickWand.so.5()(64bit) for package: php72w-pecl-imagick-3.4.3-1.2.w7.x86_64
---> Package ImageMagick.x86_64 0:6.9.10.68-3.el7 will be an update
--> Finished Dependency Resolution
Error: Package: php72w-pecl-imagick-3.4.3-1.2.w7.x86_64 (@webtatic)
           Requires: libMagickCore.so.5()(64bit)
           Removing: ImageMagick-6.7.8.9-18.el7.x86_64 (@base)
               libMagickCore.so.5()(64bit)
           Updated By: ImageMagick-6.9.10.68-3.el7.x86_64 (base)
               Not found
Error: Package: php72w-pecl-imagick-3.4.3-1.2.w7.x86_64 (@webtatic)
           Requires: libMagickWand.so.5()(64bit)
           Removing: ImageMagick-6.7.8.9-18.el7.x86_64 (@base)
               libMagickWand.so.5()(64bit)
           Updated By: ImageMagick-6.9.10.68-3.el7.x86_64 (base)
               Not found
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

我猜想系统会ImageMagick.x86_64从更新0:6.70:6.9但无法做到。那么我的猜测是:删除0:6.7会删除libMagickCore.so.5但最后一个需要php72w-pecl-imagick-3.4.3-1.2.w7.x86_64... 那么为什么不留libMagickCore.so.5在系统中呢?可能是因为需要一个新的,但我不知道哪一个...

我真的不明白幕后到底发生了什么。

答案1

您可以从此示例中按如下方式解释错误:

Error: Package: php72w-pecl-imagick-3.4.3-1.2.w7.x86_64 (@webtatic)
           Requires: libMagickCore.so.5()(64bit)
           Removing: ImageMagick-6.7.8.9-18.el7.x86_64 (@base)
               libMagickCore.so.5()(64bit)
           Updated By: ImageMagick-6.9.10.68-3.el7.x86_64 (base)
               Not found

首先,Package:受影响的软件包是 。由于存储库名称以 为前缀@,因此该软件包已安装。此软件包声明它Requires: libMagickCore.so.5()(64bit)

该包Removing:显示它提供了libMagickCore.so.5()(64bit)

该包Updated By:(尚未安装)不提供它,如 显示Not found

这意味着尝试升级ImageMagick将会删除libMagickCore.so.5()(64bit)并因此导致php72w-pecl-imagick中断。


导致该问题的根本原因是升级后的 ImageMagick 软件包不再提供 libMagickCore.so.5 或 libMagickWand.so.5,新软件包中有 libMagickCore.so.6 和 libMagickWand.so.6。

[root@vmtest-centos7 ~]# rpm -q --provides ImageMagick
ImageMagick = 6.9.10.68-3.el7
ImageMagick(x86-64) = 6.9.10.68-3.el7
libMagickCore-6.Q16.so.6()(64bit)
libMagickWand-6.Q16.so.6()(64bit)
....

但是您的第三方 PHP 软件包依赖于 libMagickCore.so.5 和 libMagickWand.so.5。要解决此问题,这些软件包的维护者需要针对新版本的 ImageMagick 重建它们。

这种 ABI 更改通常不会发生在 CentOS(或其所基于的 RHEL)上,尽管过去至少发生过一次(那是距离灾难很近)。发生这种情况时,发行版还会重建该发行版中所有受影响的软件包,但第三方也必须重建他们的软件包,并且更新将会中断,直到他们重建为止。

相关内容