From 43c9141d7d1dd64fe555a13ed9979fc43c7a19e1 Mon Sep 17 00:00:00 2001 From: Andrew Garner Date: Wed, 15 Apr 2026 00:43:24 -0500 Subject: [PATCH 1/2] Stub Percona Xtrabackup v2.4 This completes the removal of all MySQL v5.7 support from the release. Percona XtraDB Cluster v8.0 still depends on percona-xtrabackup v2.4 _binaries_ and will fail if they are not present. These old binaries are required _just in case_ the cluster upgrades from a Percona XtraDB Cluster v5.7 version. However, pxc-release explicitly rejects upgrades from old MySQL v5.7 data directories (this transtion should be completed under pxc/1.1.x versions) so percona-xtrabackup is no longer required. Since the Percona XtraDB Cluster v8.0 wsrep_sst_xtrabackup-v2 script requires the pxb-2.4/bin path to exist, the existing binaries are stubbed with a simple bash script that echos an expected version when the "pxb-2.4/bin/xtrabackup --version" option is passed and fails loudly otherwise. Removing provides two benefits: - Mitigate CVE scans against EOL software - Enable compilation support on ubuntu-resolute stemcells without patching GPLv2 Percona XtraBackup v2.4 source. --- config/blobs.yml | 8 --- packages/percona-xtrabackup-2.4/packaging | 73 ++++++----------------- packages/percona-xtrabackup-2.4/spec | 6 +- 3 files changed, 19 insertions(+), 68 deletions(-) diff --git a/config/blobs.yml b/config/blobs.yml index b332dfa7d..b5f1bdeff 100644 --- a/config/blobs.yml +++ b/config/blobs.yml @@ -6,10 +6,6 @@ Percona-XtraDB-Cluster-8.4.8-8.tar.gz: size: 506801118 object_id: 5b721094-02b7-4a5e-500e-028ba04fdc8a sha: sha256:dab67ec69fe96f2beeaa9c4d5b9c6bc82bcdd970ae9f732f7dd32d622c829666 -boost_1_59_0.tar.bz2: - size: 70389425 - object_id: 7344fc77-b911-45c2-5467-c6d5fcab6d29 - sha: sha256:727a932322d94287b62abb1bd2d41723eec4356a7728909e38adb65ca25241ca boost_1_77_0.tar.bz2: size: 110361537 object_id: d962752f-1ab7-4896-41d9-8deed29397ca @@ -30,10 +26,6 @@ libev-4.33.tar.gz: size: 569527 object_id: 0ea3b0f6-7b83-4fe5-7ff8-966bcc56ab73 sha: sha256:507eb7b8d1015fbec5b935f34ebed15bf346bed04a11ab82b8eee848c4205aea -percona-xtrabackup-2.4.29.tar.gz: - size: 64667518 - object_id: f196e2a0-e2ba-43ef-7d91-4319f8e6b927 - sha: sha256:c59f0d612ec6a0f530ca3645546fb8af690f62d3ecbd70d33f30d3f56d9e842e percona-xtrabackup-8.0.35-35.tar.gz: size: 447852862 object_id: cfe465d2-d13b-46a9-64f1-8ebb44bd7e08 diff --git a/packages/percona-xtrabackup-2.4/packaging b/packages/percona-xtrabackup-2.4/packaging index 0307b870d..e8341220f 100644 --- a/packages/percona-xtrabackup-2.4/packaging +++ b/packages/percona-xtrabackup-2.4/packaging @@ -1,57 +1,20 @@ #!/usr/bin/env bash -set -o errexit -set -o nounset - -main() { - install_build_dependencies - unpack_source - build_and_install -} - -install_build_dependencies() { - tar -xf libaio_*.tar.xz - cd libaio-*/ - make -j "$(nproc)" install prefix="${BOSH_INSTALL_TARGET}" - cd - - - tar -xf libev-*.tar.gz - cd libev-*/ - ./configure --prefix=/usr/local --disable-static - make -j "$(nproc)" install - ./configure --prefix="${BOSH_INSTALL_TARGET}" --libdir="${BOSH_INSTALL_TARGET}/lib/private" --disable-static - make -j "$(nproc)" install-exec - cd - -} - -unpack_source() { - tar -xf boost_1_59_0.tar.bz2 - tar -xf percona-xtrabackup-*.tar.gz -} - -build_and_install() { - cd percona-xtrabackup-*/ - mkdir bld && cd bld - - export LIBRARY_PATH="${BOSH_INSTALL_TARGET}/lib:${BOSH_INSTALL_TARGET}/lib/private" - export LD_LIBRARY_PATH="${BOSH_INSTALL_TARGET}/lib" - export CPLUS_INCLUDE_PATH="${BOSH_INSTALL_TARGET}/include" - export C_INCLUDE_PATH="${BOSH_INSTALL_TARGET}/include" - - # shellcheck disable=SC2016 - cmake .. \ - -DBUILD_CONFIG=xtrabackup_release \ - -DCMAKE_CXX_COMPILER=g++ \ - -DCMAKE_C_COMPILER=gcc \ - -DCMAKE_INSTALL_PREFIX="${BOSH_INSTALL_TARGET}" \ - -DCMAKE_INSTALL_RPATH='$ORIGIN/../lib/private;$ORIGIN/../lib' \ - -DINSTALL_MYSQLTESTDIR= \ - -DWITH_BOOST=../../boost_1_59_0 \ - -DWITH_MAN_PAGES=OFF \ - -DWITH_SSL=system - - make -j "$(nproc)" install/strip - rm -fr "${BOSH_INSTALL_TARGET}/man/" -} - -main +set -o errexit -o nounset + +mkdir -p "${BOSH_INSTALL_TARGET}/bin" +script="${BOSH_INSTALL_TARGET}/bin/xtrabackup" +cat >"$script" <<'EOF' +#!/bin/bash + +for arg in "$@";do + if [[ $arg == "--version" ]]; then + echo "xtrabackup version 2.4.29" + exit 0 + fi +done + +echo >&2 "MySQL v5.7 is not supported under this configuration." +exit 1 +EOF +chmod 0755 "${script}" diff --git a/packages/percona-xtrabackup-2.4/spec b/packages/percona-xtrabackup-2.4/spec index 492c70124..63209325f 100644 --- a/packages/percona-xtrabackup-2.4/spec +++ b/packages/percona-xtrabackup-2.4/spec @@ -3,8 +3,4 @@ name: percona-xtrabackup-2.4 dependencies: [] -files: -- boost_1_59_0.tar.bz2 -- percona-xtrabackup-2.4*.tar.gz -- libev-*.tar.gz -- libaio_*.tar.xz +files: [] From 7ef0874bb2e54acb8594ef5fdfc19235ead93c12 Mon Sep 17 00:00:00 2001 From: Andrew Garner Date: Wed, 15 Apr 2026 00:35:40 -0500 Subject: [PATCH 2/2] support compilation on ubuntu-resolute - Workaround: https://github.com/uutils/coreutils/issues/11469 - Use dynamically linked libboost_program_options Current galera cmake configuration does not like static linking under resolute cmake+gcc toolchains. This avoids needing to custom patch (GPLv2) build configuration. The libboost_program_options.so is now installed under the Percona XtraDB Cluster lib/private directory similar to other MySQL vendored thirdparty libraries. This largely impacts the bin/garbd binary (currently unused by pxc-release) - Adjust Boost configuration to adapt to cmake v4.2 removing builtin FindBoost.cmake module in favor of the boost provided by modern boost v1.70.0+ - Workaround legacy libtirpc conventions by using -std=gnu17 CFLAGS - ubuntu-resolute stemcells no longer provide libicu-dev packages, so use the bundled version instead --- packages/percona-xtrabackup-8.0/packaging | 7 +++++++ packages/percona-xtrabackup-8.4/packaging | 7 +++++++ packages/percona-xtradb-cluster-8.0/packaging | 15 +++++++++++++-- packages/percona-xtradb-cluster-8.4/packaging | 16 ++++++++++++++-- 4 files changed, 41 insertions(+), 4 deletions(-) diff --git a/packages/percona-xtrabackup-8.0/packaging b/packages/percona-xtrabackup-8.0/packaging index 59a58446e..b47fd6fa9 100755 --- a/packages/percona-xtrabackup-8.0/packaging +++ b/packages/percona-xtrabackup-8.0/packaging @@ -3,6 +3,13 @@ set -o errexit set -o nounset +# Workaround for uutils coreutils 0.7.0 (ubuntu-resolute): its `install -D` +# replaces symlink path components with real directories instead of following +# them. Resolve the real path so libaio's `make install` (which uses +# `install -D`) writes to the correct location on persistent disk. +# See https://github.com/uutils/coreutils/issues/11469 +BOSH_INSTALL_TARGET=$(readlink -f "${BOSH_INSTALL_TARGET}") + main() { install_build_dependencies unpack_source diff --git a/packages/percona-xtrabackup-8.4/packaging b/packages/percona-xtrabackup-8.4/packaging index 85a5cffc6..e1c0234f6 100644 --- a/packages/percona-xtrabackup-8.4/packaging +++ b/packages/percona-xtrabackup-8.4/packaging @@ -3,6 +3,13 @@ set -o errexit set -o nounset +# Workaround for uutils coreutils 0.7.0 (ubuntu-resolute): its `install -D` +# replaces symlink path components with real directories instead of following +# them. Resolve the real path so libaio's `make install` (which uses +# `install -D`) writes to the correct location on persistent disk. +# See https://github.com/uutils/coreutils/issues/11469 +BOSH_INSTALL_TARGET=$(readlink -f "${BOSH_INSTALL_TARGET}") + main() { install_build_dependencies unpack_source diff --git a/packages/percona-xtradb-cluster-8.0/packaging b/packages/percona-xtradb-cluster-8.0/packaging index 1201b8438..7cff68882 100644 --- a/packages/percona-xtradb-cluster-8.0/packaging +++ b/packages/percona-xtradb-cluster-8.0/packaging @@ -4,6 +4,13 @@ set -o errexit set -o nounset set -o pipefail +# Workaround for uutils coreutils 0.7.0 (ubuntu-resolute): its `install -D` +# replaces symlink path components with real directories instead of following +# them. Resolve the real path so libaio's `make install` (which uses +# `install -D`) writes to the correct location on persistent disk. +# See https://github.com/uutils/coreutils/issues/11469 +BOSH_INSTALL_TARGET=$(readlink -f "${BOSH_INSTALL_TARGET}") + main() { install_build_dependencies install_runtime_dependencies @@ -26,7 +33,9 @@ install_build_dependencies() { tar -xf boost_*.tar.bz2 cd boost_*/ ./bootstrap.sh --with-libraries=program_options,system - ./b2 -j "$(nproc)" link=static + ./b2 -j "$(nproc)" cxxstd=17 cxxflags="-fPIC" cflags="-fPIC" + mkdir -p "${BOSH_INSTALL_TARGET}/lib/private" + cp --preserve=all ./stage/lib/libboost_program_options.so.* "${BOSH_INSTALL_TARGET}/lib/private/" cd - tar -xf check_*.tar.gz @@ -78,7 +87,9 @@ build() { cmake .. \ -DBUILD_CONFIG=mysql_release \ -DBOOST_ROOT="${boost_dir}" \ + -DBoost_DIR="$(readlink -f "${boost_dir}"/stage/lib/cmake/Boost-*/)" \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_C_FLAGS="-std=gnu17" \ -DMINIMAL_RELWITHDEBINFO=OFF \ -DCMAKE_CXX_COMPILER=g++ \ -DCMAKE_C_COMPILER=gcc \ @@ -98,7 +109,7 @@ build() { -DWITH_AUTHENTICATION_KERBEROS=OFF \ -DWITH_PERCONA_AUTHENTICATION_LDAP=OFF \ -DWITH_BOOST="${boost_dir}" \ - -DWITH_ICU=system \ + -DWITH_ICU=bundled \ -DWITH_READLINE=system \ -DWITH_ROUTER=OFF \ -DWITH_GROUP_REPLICATION=OFF \ diff --git a/packages/percona-xtradb-cluster-8.4/packaging b/packages/percona-xtradb-cluster-8.4/packaging index e719cdea8..664d6adf1 100644 --- a/packages/percona-xtradb-cluster-8.4/packaging +++ b/packages/percona-xtradb-cluster-8.4/packaging @@ -4,6 +4,13 @@ set -o errexit set -o nounset set -o pipefail +# Workaround for uutils coreutils 0.7.0 (ubuntu-resolute): its `install -D` +# replaces symlink path components with real directories instead of following +# them. Resolve the real path so libaio's `make install` (which uses +# `install -D`) writes to the correct location on persistent disk. +# See https://github.com/uutils/coreutils/issues/11469 +BOSH_INSTALL_TARGET=$(readlink -f "${BOSH_INSTALL_TARGET}") + main() { install_build_dependencies install_runtime_dependencies @@ -26,7 +33,9 @@ install_build_dependencies() { tar -xf boost_*.tar.bz2 cd boost_*/ ./bootstrap.sh --with-libraries=program_options,system - ./b2 -j "$(nproc)" link=static + ./b2 -j "$(nproc)" cxxstd=17 cxxflags="-fPIC" cflags="-fPIC" + mkdir -p "${BOSH_INSTALL_TARGET}/lib/private" + cp --preserve=all ./stage/lib/libboost_program_options.so.* "${BOSH_INSTALL_TARGET}/lib/private/" cd - tar -xf check_*.tar.gz @@ -78,7 +87,9 @@ build() { cmake .. \ -DBUILD_CONFIG=mysql_release \ -DBOOST_ROOT="${boost_dir}" \ + -DBoost_DIR="$(readlink -f "${boost_dir}"/stage/lib/cmake/Boost-*/)" \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_C_FLAGS="-std=gnu17" \ -DMINIMAL_RELWITHDEBINFO=OFF \ -DCMAKE_CXX_COMPILER=g++ \ -DCMAKE_C_COMPILER=gcc \ @@ -97,7 +108,8 @@ build() { -DWITH_AUTHENTICATION_FIDO=OFF \ -DWITH_AUTHENTICATION_KERBEROS=OFF \ -DWITH_PERCONA_AUTHENTICATION_LDAP=OFF \ - -DWITH_ICU=system \ + -DWITH_BOOST="${boost_dir}" \ + -DWITH_ICU=bundled \ -DWITH_READLINE=system \ -DWITH_ROUTER=OFF \ -DWITH_GROUP_REPLICATION=OFF \