this is my very first post here, so please direct me to a somewhere else if this is the wrong place to ask.
I did run a (mostly) successful CentOS 8.4 to Rocky 8.4 conversion by using the migrate2rocky.sh script with some minor unrelated tweaks. However, some additional packages were installed in the migration process to resolve recursive dependencies that were not necessary in CentOS 8.4.
I’ve looked into this and one of the reasons seems to be that the package systemtap-runtime-4.4-11.el8_4.x86_64 has different library version dependencies in CentOS 8.4 and Rocky 8.4.
This is an excerpt from ‘yum deplist systemtap-runtime-4.4-11.el8_4.x86_64’ command on CentOS 8.4:
Also note that in CentOS 8.4 there are two providers of libdyninstAPI.so.10.2: dyninst-10.2.1-2.el8.x86_64 and gcc-toolset-10-dyninst-10.2.1-2.el8.x86_64, with the former being installed in my original CentOS 8.4 system. Whereas, in Rocky 8.4, there is only one provider of library version libsymtabAPI.so.10.1, which is gcc-toolset-9-dyninst-10.1.0-1.el8.x86_64.
So I finally ended up with gcc-toolset-9-dyninst-10.1.0-1.el8.x86_64 being installed in Rocky 8.4 together with all it’s recursive dependencies including the environment-modules-4.5.2-1.el8.x86_64 package, which messed up with the Lmod installation (from EPEL) from the original CentOS 8.4 .
I actually expected the packages in CentOS 8.4 and Rocky 8.4 to be binary compatible, also with respect to the library versions they depend on. Is this a wrong expectation or is this a bug in Rocky’s current systemtap-runtime-4.4-11 package?
Both of those packages do provide the libdyninstAPI.so.10.2, but the gcc-toolset has it under /opt/rh/gcc-toolset-10/root.
Each gcc-toolset actually has their own systemtap.
The systemtap-runtime should use (and can see only) the libraries provided by dyninst (unless you scl enable the toolset).
Since toolsets use scl (Software Collections tool) and scl now can call module, you get the environment-modules …
Furthermore, systemtap-runtime should not see the toolset’s libdyninstAPI.so.10.1 (unless you scl enable…)
Yes, if systemtap-runtime-4.4-11 depends on libdyninstAPI.so.10.1()(64bit) and not libdyninstAPI.so.10.2()(64bit), then that package’s spec has an error.
Well, scl was definitely not enabled in the original CentOS 8.4 system. The scl-utils package was not even installed in there, but has been installed automatically as a dependency of gcc-toolset-9-runtime.x86_64 during the migration process to Rocky 8.4 (together with environment-modules which is required by scl-utils). I do assume this has happened because the gcc-toolset-9-runtime package is the only provider of libdyninstAPI.so.10.1 on which the systemtap-runtime-4.4-11 depends in Rocky 8.4. I have now also checked the rpm package files systemtap-runtime-4.4-11.el8_4.x86_64.rpm from the CentOS and Alma repos and both of them require library version libdyninstAPI.so.10.2 rather than libdyninstAPI.so.10.1. So I also assume this is a bug in the Rocky rpm package. I am going to file a bug report in the Rocky bugzilla …
This isn’t a bug of the spec file or the RPM itself. It is a bug in which the order of packages were built to begin with. If packages are not built in a correct order, old libraries are likely to be picked up as a result. This is one of those rare cases where systemtap was built/updated before dyninst. With that being said, the mirrors should have the fixes soon. Apologies for the mess.
Is the output of rpm -qpR package.rpm always supposed to be exactly the same for one and the same package file from Rocky 8.4 and CentOS 8.4? Or are there differences to be expected without being an indication of broken binary compatibility.
I did some spot checks with rpm files from the CentOS 8 and Rocky 8 repos and noticed differences for some of them.
ok. I don’t think of explicit package dependencies in the spec files but of
automatic library dependencies that are added when a binary package is built
and may depend on the build environment.
For example, the perf-4.18.0-305.17.1.el8_4.x86_64.rpm from CentOS 8 does have
an automatic dependency from
while the very same rpm file from Rocky 8 does not. So in CentOS 8.4 the perf
binary links against libdebuginfod.so.1 (for whatever reasons) while in
Rocky 8.4 it does not:
while the very same CentOS 8.4 package file does not.
A third example would be gnome-color-manager-3.28.0-3.el8.x86_64.rpm (among
some others) which depends on libexiv2.so.27 in Rocky 8.4 but on libexiv2.so.26 in the CentOS 8.4 rpm packages.
I also noticed quite a number of rpm packages that depend on librt.so.1
in CentOS 8.4 but not so in the Rocky 8.4 packages.
Does that count as breakage of binary compatibility?
We do not count to breaking of binary compatibility unless it inherently breaks the expected usage of said binaries or libraries. This typically comes down to the order in which the packages were built. In the case of perf, that comes from the kernel builds, so I cannot comment on why that link is not there. As for librt.so.1 this likely occurred as a direct result of us not having i686 packages when we initially started building Rocky, and it also likely happened because of us using the newer file package which breaks a lot of the dep solving. The only packages that do not ask for librt.so.1 right now is: