理解和解決對 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.7
to更新,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)上,儘管它在過去至少發生過一次(這幾乎是一場災難)。當它發生時,發行版還會重建該發行版中任何受影響的軟體包,但第三方也必須重建他們的軟體包,並且更新將被中斷,直到他們這樣做。