Bug #118796 | Rebuilding 9.4.0 / 8.4.6 rpms from src rpm does not work on OL10 | ||
---|---|---|---|
Submitted: | 6 Aug 22:31 | Modified: | 9 Aug 16:33 |
Reporter: | Simon Mudd (OCA) | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | MySQL Server: Compiling | Severity: | S3 (Non-critical) |
Version: | 9.4.0 / 8.4.6 | OS: | Oracle Linux (10) |
Assigned to: | CPU Architecture: | x86 |
[6 Aug 22:31]
Simon Mudd
[6 Aug 22:33]
Simon Mudd
rpm build log for 9.4.0 on ol10
Attachment: build.log.gz (application/x-gzip, text), 1.14 MiB.
[7 Aug 6:52]
Simon Mudd
Additional thoughts: Usually this sort of problem is caused by: - missing BuildRequires: in the spec file, meaning that some needed rpms are not installed on the build environment - potentially some rpmbuild flags have been provided during the upstream build which change the behaviour of the rpm build process. Not providing those changes the build process Oracle does not share the full build process (which would be nice) at least for the MySQL community builds. The process for building Enterprise versions, which are under a different non-GPL license, does not need to be shared. This process is repeatable is effectively a clean-room build which could be reproducible by Oracle staff. It is true that the oraclelinux:10 base container is a moving target but it's intended to be stable enough to build against using the script I shared which just pulls down the latest version of specific rpms from the oraclelinux repos.
[7 Aug 7:03]
Simon Mudd
This should be built on a container with at least 16 GB of RAM and the process generally works against arm64 (docker on osx) and x86_64 containers. The build log was taken from a run on a docker x86_64 container.
[7 Aug 7:37]
Simon Mudd
I followed the same process against 8.4.6 to see if this would work. The only difference in the procedure was to pull the 8.4.6 src rpm from https://dev.mysql.com/get/Downloads/MySQL-9.0/mysql-community-8.4.6-1.el10.src.rpm This failed with a different error: ... cd /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/debug/sql && /usr/bin/g++ -DBOOST_NO_CXX98_FUNCTION_BASE -DHAVE_EXT_BACKTRACE -DHAVE_TLSv13 -DLZ4_DISABLE_DEPRECATE_WARNINGS -DMYSQL_SERVER -DPROTOBUF_USE_DLLS -DRAPIDJSON_HAS_STDSTRING=1 -DRAPIDJSON_NO_SIZETYPEDEFINE -DRAPIDJSON_SCHEMA_USE_INTERNALREGEX=0 -DRAPIDJSON_SCHEMA_USE_STDREGEX=1 -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -D_USE_MATH_DEFINES -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/debug -I/home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/debug/include -I/home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6 -I/home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/include -I/home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/libs -I/home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/libbacktrace/include -I/home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/router/src/harness/include -isystem /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/protobuf/protobuf-24.4/src -isystem /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/libedit/libedit-20240808-3.1/src/editline -isystem /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/icu/icu-release-77-1/source/common -isystem /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/icu/icu-release-77-1/source/stubdata -isystem /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/icu/icu-release-77-1/source/i18n -isystem /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/unordered_dense/unordered_dense-4.4.0/include -isystem /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/zlib/zlib-1.3.1 -isystem /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/debug/extra/zlib/zlib-1.3.1 -isystem /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/rapidjson/include -isystem /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/zstd/zstd-1.5.7/lib -isystem /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/lz4/lz4-1.10.0/lib -isystem /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/abseil/abseil-cpp-20230802.1 -isystem /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/plugin/x/client -isystem /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/debug/plugin/x/generated/protobuf_lite -isystem /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/debug/plugin/x/generated -isystem /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/include/boost_1_84_0/patches -isystem /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/boost/boost_1_84_0 -std=c++20 -fno-omit-frame-pointer -ftls-model=initial-exec -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wno-complain-wrong-lang -Werror=format-security -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64-v3 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -Wall -Wextra -Wformat-security -Wvla -Wundef -Wmissing-format-attribute -Woverloaded-virtual -Wcast-qual -Wimplicit-fallthrough=5 -Wstringop-truncation -Wsuggest-override -Wmissing-include-dirs -Wextra-semi -Wlogical-op -Werror -DSAFE_MUTEX -DENABLED_DEBUG_SYNC -g -std=gnu++20 -fPIC -Wshadow=local -MD -MT sql/CMakeFiles/sql_gis.dir/gis/frechet_distance.cc.o -MF CMakeFiles/sql_gis.dir/gis/frechet_distance.cc.o.d -o CMakeFiles/sql_gis.dir/gis/frechet_distance.cc.o -c /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/sql/gis/frechet_distance.cc In file included from /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/boost/boost_1_84_0/boost/geometry/core/coordinate_promotion.hpp:16, from /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/boost/boost_1_84_0/boost/geometry/core/radian_access.hpp:30, from /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/boost/boost_1_84_0/boost/geometry/geometry.hpp:50, from /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/boost/boost_1_84_0/boost/geometry.hpp:17, from /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/sql/gis/distance_functor.h:38, from /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/sql/gis/distance.cc:29: /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/boost/boost_1_84_0/boost/multiprecision/cpp_bin_float.hpp:40:10: fatal error: quadmath.h: No such file or directory 40 | #include <quadmath.h> | ^~~~~~~~~~~~ compilation terminated. In file included from /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/boost/boost_1_84_0/boost/geometry/core/coordinate_promotion.hpp:16, from /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/boost/boost_1_84_0/boost/geometry/core/radian_access.hpp:30, from /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/boost/boost_1_84_0/boost/geometry/geometry.hpp:50, from /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/boost/boost_1_84_0/boost/geometry.hpp:17, from /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/sql/gis/covered_by.cc:28: /home/rpmbuild/rpmbuild/BUILD/mysql-8.4.6/mysql-8.4.6/extra/boost/boost_1_84_0/boost/multiprecision/cpp_bin_float.hpp:40:10: fatal error: quadmath.h: No such file or directory 40 | #include <quadmath.h> | ^~~~~~~~~~~~ compilation terminated. ... Also I checked the compiler version installed into the container: bash-5.2# rpm -qa | grep gcc libgcc-14.2.1-7.el10.x86_64 gcc-14.2.1-7.el10.x86_64 annobin-plugin-gcc-12.92-1.el10.x86_64 gcc-c++-14.2.1-7.el10.x86_64 gcc-plugin-annobin-14.2.1-7.el10.x86_64 bash-5.2# In theory Oracle Linux 10 is now generally available according to https://blogs.oracle.com/linux/post/oracle-linux-10-now-generally-available Perhaps what I'm seeing are some toothing problems of the OS, the compiler or the docker container setup?
[7 Aug 7:41]
Simon Mudd
I also checked the build configuration I use against working 9.4.0 on OL9. The only difference is the OS setup which uses an oraclelinux:9 container vs a oraclelinux:10 container and the difference in the rpms installed into the container to allow for building are shown below: bash-5.2# diff -u ol9__9.4.0.sh ol10__9.4.0.sh --- ol9__9.4.0.sh 2025-08-06 12:55:10.050324458 +0000 +++ ol10__9.4.0.sh 2025-08-06 18:38:25.918657551 +0000 @@ -2,7 +2,7 @@ ############################################################################ # # -# OS Setup functions for OS9 # +# OS Setup for OL10 for 9.4.0 # # # ############################################################################ @@ -13,18 +13,18 @@ yum update -y yum install -y 'dnf-command(config-manager)' -# OEL9 differences vs CentOS 9 stream +# OEL10 differences vs CentOS 10 stream if rpm -q centos-stream-release 2>&1 >/dev/null; then - echo "- found CentOS 9 stream" + echo "- found CentOS 10 stream" extra_repo=crb elif rpm -q oraclelinux-release 2>&1 >/dev/null; then - echo "- found Oracle Linux 9" - extra_repo=ol9_codeready_builder + echo "- found Oracle Linux 10" + extra_repo=ol10_codeready_builder elif rpm -q almalinux-release 2>&1 >/dev/null; then - echo "- found Alma Linux 9" + echo "- found Alma Linux 10" extra_repo=crb elif rpm -q rocky-release 2>&1 >/dev/null; then - echo "- found Rocky Linux 9" + echo "- found Rocky Linux 10" extra_repo=crb else echo "- OS not recognised, giving up" @@ -54,43 +54,16 @@ perl-JSON rpcgen \ rpm-build \ time \ - gcc-toolset-12-annobin-annocheck \ - gcc-toolset-12-annobin-plugin-gcc \ - gcc-toolset-12-binutils \ - gcc-toolset-12-dwz \ - gcc-toolset-12-gcc \ - gcc-toolset-12-gcc-c++ \ - gcc-toolset-14-annobin-annocheck \ - gcc-toolset-14-annobin-plugin-gcc \ - gcc-toolset-14-binutils \ - gcc-toolset-14-dwz \ - gcc-toolset-14-gcc \ - gcc-toolset-14-gcc-c++ \ + annobin-annocheck \ + annobin-plugin-gcc \ + binutils \ + dwz \ + gcc \ + gcc-c++ \ wget \ zlib-devel -# FIXME: Handle aarch64 architecture. -# See: https://bugs.mysql.com/bug.php?id=108049. Without this symlink the -# build process will fail to find something the code needs to complete -# the build. -# -# Even better in 9.X we have to support this symlinking in CentOS9 for -# both gcctoolset-12 (8.0/8.4 compat builds) and gcctoolset-13/14 (9.0 builds) -ARCH=$(uname -m) # to handle x86_64 and aarch64 -gcctoolset_versions="12 13 14" -for version in $gcctoolset_versions; do - PLUGINDIR=/opt/rh/gcc-toolset-$version/root/usr/lib/gcc/$ARCH-redhat-linux/$version/plugin - if [ -d $PLUGINDIR ]; then - pushd $PLUGINDIR - - echo "Handling CentOS 9 workaround symlinks for gcc-toolset-$version" - for p in annobin.so annobin.so.0.0.0 gcc-annobin.so gcc-annobin.so.0.0.0; do - echo "Symlinking missing $p..." - test -e $p || ln -s gts-annobin.so.0.0.0 $p - done - popd - fi -done +# temporarily remove the arch gcc-toolset plugindir patching echo "########################################################" echo "# os preparation complete #" bash-5.2# So I am confused that this is not working as expected.
[7 Aug 13:18]
MySQL Verification Team
Thanks for the report. I can reproduce the problem, verifying the bug so that engineering team can take a look.
[7 Aug 14:22]
MySQL Verification Team
Do you have libquadmath installed ? https://bugs.mysql.com/bug.php?id=117443 -- Shane Bester, MySQL Senior Principal Technical Support Engineer Oracle Corporation http://dev.mysql.com/
[7 Aug 17:44]
Simon Mudd
let me check the rpm -qa list I grabbed prior to building. I'll upload it.
[7 Aug 17:46]
Simon Mudd
uploaded rpm-qa file. To answer your question, no it was not installed.
[7 Aug 22:27]
Simon Mudd
I notice that: - 9.4.0 includes boost 1.87.0 source code. - 8.4.6 includes boost 1.84.0 source code. So clearly we need to be careful comparing what's required. this bug report was initially pinned against 9.4.0 though I shared issues with 8.4.6 (released at the same time). I've not tried rebuilding 8.0.43 yet to see if that's successful or not. Also once the reason for this building failing is determined it would be good to provide updated src and binary rpms even if the behaviour of the binary rpms will not be expected to change. Not doing this will make 9.4.0 (and 8.4.6) rpm build from a src rpm always be broken and it won't be obvious why. Updating them (and providing an update on github to the packaging/rpm-oel/mysql.spec.in file would ensure that the updated rpm packages are clean and known to be rebuildable. Otherwise people like myself will need to provide special workarounds to rebuild these versions forever.
[8 Aug 7:04]
Simon Mudd
I was asked: "Do you have libquadmath installed ?" This was not installed. Installing libquadmath-devel on the 8.4.6 build was not enough, further errors emerged. It also did not seem to make much difference with the 9.4.0 build. I will see if I can take a look at the 8.4 diffs or the 9.3-9.4 diffs to see if I can identify what else may be missing. However, having said that it should be straightforward for the rpm build team to compare their rpm -qa package list to mine and from that figure out what may be missing.
[8 Aug 7:50]
Simon Mudd
I have modified the Synopsis to mention 8.4.6 in addition to 9.4.0. I mentioned in previous comments 8.0.43 which was released at the same time but notice that there are no MySQL 8.0.43 rpms provide by Oracle for OL10, thus 8.0.43 references in this ticket are not appropriate. I am assuming that this is because of 8.0 going end of life in April 2026 so there's no desire to add to the support burden and also 8.4.6 LTS is a long term supported version for MySQL which can be used on OL10 for some time.
[8 Aug 16:15]
MySQL Verification Team
Hi Simon, I can work out what exactly you are missing if that info is of use to you but I'm sure you can do it too, I verified the bug as src.rpm should provide all this data. While back libaio was a problem, now we know about libquadmath but obviously there are few more. Thanks for help sorting this out.
[9 Aug 16:33]
Simon Mudd
It's not apparent to me exactly what's missing as I'm not a C/C++ developer and I don't have a working setup to compare the failed build against. Clearly your rpm build team have been able to build the rpms correctly so their environment is "complete". If you're able to provide me a list of missing rpms that would be most helpful as then I can modify my build environment script to include these rpms and the build should then be successful. That would be for 8.4.0 and 9.4.0, the build environments may be different. Traditionally the gcc version was different between 8.0 / 8.4 and 9.x but it may be on OL10 that you're currently using the same tool chain. While it would be good to get new src / binary rpms updated (and the github git repo updated) that would be less necessary as anyone trying to figure this out could find the missing dependencies in this bug report. I'd expect if you don't do this that when 8.4.7 / 9.5.0 are released the updates will be applied there.