CentOS 7 – Understanding and Resolving Dependencies

centos7dependenciesupdateyum

I've resolved many dependencies problems in many years as hobbyist administrator: I just removed some package until the whole thing get resolved or (if the consequences would have been to big) waited until the problem would solve by itself.

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

Now I would like to understand what the following means:

# 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

I suppose that the system will update ImageMagick.x86_64 from 0:6.7 to 0:6.9 but it is unable to do it.
Then my guess: removing 0:6.7 would remove libMagickCore.so.5 but the last one is needed by php72w-pecl-imagick-3.4.3-1.2.w7.x86_64… then why not just leave libMagickCore.so.5 in the system? probably because a new one is needed, but I do not see which one…

I really do not get what is going on behind the scene.

Best Answer

You can interpret the errors as follows from this example:

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

First, the Package: is the affected package. Because the repo name is prefixed with an @, the package is already installed. This package declares that it Requires: libMagickCore.so.5()(64bit).

The package Removing: shows that it provides libMagickCore.so.5()(64bit).

The package Updated By: (which is not yet installed) does not provide it, shown by Not found.

This means that attempting to upgrade ImageMagick would remove libMagickCore.so.5()(64bit) and thus cause php72w-pecl-imagick to break.


The root cause of this problem is that the upgraded ImageMagick package no longer provides libMagickCore.so.5 or libMagickWand.so.5. The new package has libMagickCore.so.6 and 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)
....

But your third party PHP packages have a dependency on libMagickCore.so.5 and libMagickWand.so.5. To resolve the problem, the maintainer of those packages needs to rebuild them against the new version of ImageMagick.

This sort of ABI change does not normally happen with CentOS (or RHEL on which it is based), though it has been done at least once in the past (which was fairly close to a disaster). When it does happen, the distro also rebuilds any affected packages in that distribution, but third parties also have to rebuild their packages, and updating will be broken until they do.