Bug #112949 | missing mysql-community-libs-compat rpms for 8.2.0 / 8.4 LTS | ||
---|---|---|---|
Submitted: | 3 Nov 2023 7:25 | Modified: | 11 Jun 21:56 |
Reporter: | Simon Mudd (OCA) | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Packaging | Severity: | S3 (Non-critical) |
Version: | 8.2.0, 8.3, 8.4 LTS | OS: | Any |
Assigned to: | CPU Architecture: | Any (RHEL rpms) | |
Tags: | .so, dependency, library, rpm |
[3 Nov 2023 7:25]
Simon Mudd
[3 Nov 2023 7:46]
Terje Røsten
Hi, thanks for your report!
[3 Nov 2023 21:49]
Simon Mudd
The interesting thing about this bug is that if it's not fixed it makes it harder and more messy to try 8.2 out on rpm based systems as the basic problem is true for RHEL 7/8/9 setups and I'd guess it's probably similar for SuSE. If you don't fix this until the next release, eg. 8.3 in January then people won't be able to easily use and test 8.2, which may mean they just skip it something I guess that you don't want. So please consider. Updating the packaging setup so that the appropriate lib-compat rpms are built to cover "compatibility" with 8.0 libraries and release new rpms, e.g. versioned 8.2.1 or 8.2.0-2 or whatever. However, to do this given the rpms are built from a spec file from the git source code you'd need to release an update to the git tree on ensure the code which I guess you use from packages/rpm-oel/mysql.spec.in is updated and the rpm build process based on that can be run. That would be good and allow us to upgrade to 8.2 while being able to use existing apps built/compiled against 8.0 libraries without change as change takes time. The other option would be to patch the src 8.2.0 src rpms appropriately so that the 8.2.0-2 or 8.2.1 rpms could be built. This might sound weird as you may not be aware of tooling to rebuild src.rpms and patch the content but I have done precisely that and you can see tooling to do that here: https://github.com/sjmudd/mysql-rpm-builder Pay attention to my last commit which to provide an example allows for 8.2.0 to be rebuilt from the original 8.0.2 src.rpms provided by Oracle but with the hypergraph optimiser enabled, if configured, a change compared to the default build which has it disabled. (The code seems to work from initial testing I've seen on this.) So following the same process you could provide a patch to my repo which would allow me to rebuild the 8.2.0 rpms and include the appropriate compat-lib rpms as part of the build and this would work on CentOS 8/9 and probably if I fixed my tooling on CentOS 7 too. [ Here as you see this already works on OEL 8/9 , CentOS 8/9 and I've tested it works. ] So an update to fix this would be really nice and would allow me to test more easily. Thanks for considering this.
[8 Dec 2023 13:51]
Terje Røsten
I have trouble to reproduce the issue: $ rpm -qa |grep mysql|sort mysql80-community-release-el8-8.noarch mysql-community-client-8.0.35-1.el8.x86_64 mysql-community-client-plugins-8.0.35-1.el8.x86_64 mysql-community-common-8.0.35-1.el8.x86_64 mysql-community-icu-data-files-8.0.35-1.el8.x86_64 mysql-community-libs-8.0.35-1.el8.x86_64 mysql-community-server-8.0.35-1.el8.x86_64 mysql-connector-python3-8.2.0-1.el8.x86_64 MySQL server and Python module from http://repo.mysql.com/yum/mysql-connectors-community/el/8/x86_64/ Upgrade to MySQL 8.2.0 seems to work fine: $ yum update mysql-community\* Dependencies resolved. ======================================================================================================================================== Package Architecture Version Repository Size ======================================================================================================================================== Upgrading: mysql-community-client x86_64 8.2.0-1.el8 mysql-innovation-community 16 M mysql-community-client-plugins x86_64 8.2.0-1.el8 mysql-innovation-community 5.7 M mysql-community-common x86_64 8.2.0-1.el8 mysql-innovation-community 674 k mysql-community-icu-data-files x86_64 8.2.0-1.el8 mysql-innovation-community 2.2 M mysql-community-libs x86_64 8.2.0-1.el8 mysql-innovation-community 1.5 M mysql-community-server x86_64 8.2.0-1.el8 mysql-innovation-community 65 M Transaction Summary ======================================================================================================================================== Upgrade 6 Packages I can't find package python-mysql-python at all.
[8 Dec 2023 14:39]
Daniël van Eeden
I think I was able to reproduce this with a OEL8 container: To setup the container: docker run -it oraclelinux:8 Then in the container: # Setup the MySQL YUM Repo yum module -y disable mysql rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el8-9.noarch.rpm yum-config-manager --disable mysql80-community yum-config-manager --enable mysql-innovation-community dnf makecache # This fails, there is no mysql-community-libs-compat dnf install -y mysql-community-libs-compat # This works as expected dnf install -y mysql-community-libs # This shows mysql-community-libs only provides libmysqlclient.so.22 and not libmysqlclient.so.21 rpm -ql mysql-community-libs | grep 'libmysqlclient.so' # See also this: dnf whatprovides /usr/lib64/mysql/libmysqlclient.so.22 dnf whatprovides /usr/lib64/mysql/libmysqlclient.so.21 # This shows that `mysql-libs` from `ol8_appstream` provides a `libmyqlclient.so.21`, but that's from 8.0.13 somehow, which isn't good. Some of the output: ============================================================= [root@5f696fc304fc /]# rpm -ql mysql-community-libs | grep 'libmysqlclient.so' /usr/lib64/mysql/libmysqlclient.so.22 /usr/lib64/mysql/libmysqlclient.so.22.1.0 [root@5f696fc304fc /]# ============================================================= ============================================================= [root@5f696fc304fc /]# dnf whatprovides /usr/lib64/mysql/libmysqlclient.so.22 Last metadata expiration check: 0:03:45 ago on Fri Dec 8 14:24:07 2023. mysql-community-libs-8.1.0-1.el8.x86_64 : Shared libraries for MySQL database client applications Repo : mysql-innovation-community Matched from: Filename : /usr/lib64/mysql/libmysqlclient.so.22 mysql-community-libs-8.2.0-1.el8.x86_64 : Shared libraries for MySQL database client applications Repo : @System Matched from: Filename : /usr/lib64/mysql/libmysqlclient.so.22 mysql-community-libs-8.2.0-1.el8.x86_64 : Shared libraries for MySQL database client applications Repo : mysql-innovation-community Matched from: Filename : /usr/lib64/mysql/libmysqlclient.so.22 [root@5f696fc304fc /]# dnf whatprovides /usr/lib64/mysql/libmysqlclient.so.21 Last metadata expiration check: 0:03:51 ago on Fri Dec 8 14:24:07 2023. mysql-libs-8.0.13-1.module+el8+5199+1dce7bb2.x86_64 : The shared libraries required for MySQL clients Repo : ol8_appstream Matched from: Filename : /usr/lib64/mysql/libmysqlclient.so.21 ============================================================= So this means that with 8.2.0 installed it might be difficult to use software that was compiled for libmysqlclient.so.21 iirc the aim of the `mysql-community-libs-compat` was to ship the libraries for software compiled against the version of MySQL that the OS shipped with. This unfortunately doesn't help with cases where software is compiled for a newer ABI version than the OS shipped with but not yet the latest available version. However that isn't in play here as OEL8 has a mysql-libs that is from 8.0.32 as you can see below. ============================================================= # rpm -ql mysql-libs | grep mysqlclient /usr/lib64/mysql/libmysqlclient.so.21 /usr/lib64/mysql/libmysqlclient.so.21.2.32 ============================================================= I think it would be good if the innovation releases would ship libmysqlclient for ABI 21 (8.0), 22 and whatever newer ABI versions might be between 21 and the next LTS.
[15 Dec 2023 14:38]
Simon Mudd
Terje Røsten, Daniël has provided you with some useful data but I think what is also possibly missing while 8.X+ is not a final version is that people may have other code on their systems which expects to run against the MySQL 8.0 libraries and these libraries are not present and can not be easily installed at the same time as the 8.2+ libraries on the same system. I haven't checked but in the past the mysql-community packages obsoleted the mysql-libs from the OS (to avoid rpm conflicts) and I believe that the current 8.2 packaging does the same. At least I see from the mysql.spec.in file: line 570: Obsoletes: mysql-libs < %{version}-%{release} which looks to me to prevent the OS 8.0 package libraries being installed. That's precisely why the libs-compat package was created to provide support for older libraries still being used by applications. You may argue that all code should be upgraded but code depending on MySQL dynamic system libraries may require the upstream code to be rebuilt and this takes time. So developers of applications will upgrade but only once the upgrade process for MySQL is seen as stable. In the meantime making it easy for people to try 8.1+ without having to touch existing applications using MySQL to make makes most sense and with 8.0 you provided 5.7 libraries so it would seem sensible with 8.2+ to do the same thing and also provide 8.0 library support.
[15 Dec 2023 14:40]
Simon Mudd
fix typo in tags
[15 Dec 2023 14:46]
Terje Røsten
Hi, thanks for feedback. Indeed, mysql-community-libs package from different major versions are not parallel installable at the moment which is a defect.
[25 May 18:48]
Simon Mudd
8.4.0 has been released, your new LTS major version and it has I believe the same issue. I see only the new library versions and no older libraries (or -compat rpms): [someuser@somehost ~]$ ls -l /usr/lib64/mysql total 70564 -rw-r--r-- 1 root root 64523404 Apr 10 10:06 libmysqlclient.a lrwxrwxrwx 1 root root 20 Apr 10 10:29 libmysqlclient.so -> libmysqlclient.so.24 lrwxrwxrwx 1 root root 24 Apr 10 10:29 libmysqlclient.so.24 -> libmysqlclient.so.24.0.0 -rwxr-xr-x 1 root root 7558760 Apr 10 10:40 libmysqlclient.so.24.0.0 -rw-r--r-- 1 root root 145782 Apr 10 10:03 libmysqlservices.a drwxr-xr-x 4 root root 28 Apr 10 10:29 mecab drwxr-xr-x 3 root root 8192 May 22 10:56 plugin drwxr-xr-x 3 root root 8192 May 22 10:53 private [someuser@somehost ~]$ rpm -qf /usr/lib64/mysql/libmysqlclient.so mysql-community-devel-8.4.0-1.el8.x86_64 [someuser@somehost ~]$ rpm -qf /usr/lib64/mysql/libmysqlclient.so.24 mysql-community-libs-8.4.0-1.el8.x86_64 [someuser@somehost ~]$ rpm -qa | grep mysql-community- | sort mysql-community-client-8.4.0-1.el8.x86_64 mysql-community-client-plugins-8.4.0-1.el8.x86_64 mysql-community-common-8.4.0-1.el8.x86_64 mysql-community-devel-8.4.0-1.el8.x86_64 mysql-community-icu-data-files-8.4.0-1.el8.x86_64 mysql-community-libs-8.4.0-1.el8.x86_64 mysql-community-server-8.4.0-1.el8.x86_64 mysql-community-server-debug-8.4.0-1.el8.x86_64 mysql-community-test-8.4.0-1.el8.x86_64 [someuser@somehost ~]$ What is the recommended way of providing an rpm which provides access to /usr/lib64/mysql/libmysqlclient.so.18* (MySQL 5.7) or /usr/lib64/mysql/libmysqlclient.so.21* (MySQL 8.0) libraries on a RHEL compatible system if the software I'm using is not owned by me, not open source and requires one of these libraries previously provided by the mysql-community-libs-8.0 or mysql-community-libs-compat-8.0 rpms? Providing a mysql-community-libs-compat-8.4.0 rpm would seem like the most appropriate solution. Without that I am unable to upgrade to MySQL 8.4 due to the loss of library support required by these applications. I agree that I can go to the vendor and request they repackage their software against 8.4.0 instead of or in addition to the current 8.0 (or 5.7) support but resolving that might take some time. I would fully understanding dropping support for 5.7 as it's "2 major versions old and no longer supported" but 8.0 is still supported and as such "external software" may be using and need libraries built against MySQL 8.0 libraries. It seems you no longer provide this.
[26 May 18:32]
Terje Røsten
Hi, there were some back and forth, now some changes are reverted: https://github.com/mysql/mysql-server/commit/cd3a00defb739cc1facb95d11bdaade7b7743864 however soname is kept at 24, so your problem is indeed still present. We hope introduce compat libs package for next release of 8.4 series.
[11 Jun 21:56]
Philip Olson
Posted by developer: Fixed as of the upcoming MySQL Server 8.4.1 and 9.0.0 releases, and here's the proposed changelog entry from the documentation team: Added the missing mysql-community-libs-compat package for the EL8 and EL9 platforms. Thank you for the bug report.