Я решал многие проблемы с зависимостями за многие годы в качестве администратора-любителя: я просто удалил какой-то пакет, пока все не решится, или (если последствия были бы слишком большими) ждал, пока проблема не решится сама собой.
# 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
к 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:
это затронутый пакет. Поскольку имя репо имеет префикс @
, пакет уже установлен. Этот пакет заявляет, что он 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, на котором он основан), хотя это было сделано хотя бы один раз в прошлом (что было довольно близко к катастрофе). Когда это произойдет, дистрибутив также перестроит все затронутые пакеты в этом дистрибутиве, но третьи стороны также должны перестроить свои пакеты, и обновление будет прервано, пока они этого не сделают.