Назад | Перейти на главную страницу

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