Centos7

理解和解決對 Centos 7 的依賴

  • June 14, 2020

多年來,我作為愛好者管理員解決了許多依賴關係問題:我只是刪除了一些包,直到整個問題得到解決,或者(如果後果很大)等到問題自行解決。

# 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.7to更新,0:6.9但它無法做到。然後我的猜測:刪除0:6.7會刪除libMagickCore.so.5,但最後一個是需要的php72w-pecl-imagick-3.4.3-1.2.w7.x86_64……那為什麼不直接留libMagickCore.so.5在系統中呢?可能是因為需要一個新的,但我看不出是哪一個……

我真的不明白幕後發生了什麼。

您可以從此範例中解釋如下錯誤:

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:是受影響的包。因為 repo 名稱以 為前綴@,所以包已經安裝。這個包聲明它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)上,儘管它在過去至少發生過一次(這幾乎是一場災難)。當它發生時,發行版還會重建該發行版中任何受影響的軟體包,但第三方也必須重建他們的軟體包,並且更新將被中斷,直到他們這樣做。

引用自:https://serverfault.com/questions/1021380