commit 49cf12279c2d649fbf89fffbb8fcacf27856522f Author: Marius Schiffer Date: Sat Mar 26 11:22:42 2022 +0000 Add ceph diff --git a/ceph/PKGBUILD b/ceph/PKGBUILD new file mode 100644 index 0000000..7770938 --- /dev/null +++ b/ceph/PKGBUILD @@ -0,0 +1,352 @@ +# Maintainer: Thore Bödecker +# Contributor: Sébastien "Seblu" Luttringer + +# TODO +# Dashboard (ng not found?) + +pkgbase='ceph' +pkgname=('ceph' 'ceph-libs' 'ceph-mgr') +_zstdver=1.5.0 +pkgver=16.2.7 +pkgrel=1 +pkgdesc='Distributed, fault-tolerant storage platform delivering object, block, and file system' +arch=('x86_64') +url='https://ceph.com/' +license=('GPL') +makedepends=("zstd" 'bash' 'bc' 'boost' 'boost-libs' 'bzip2' 'c-ares' 'cmake' 'coreutils' 'coffeescript' + 'cpio' 'crypto++' 'cryptsetup' 'cunit' 'curl' 'cython' 'expat' + 'fcgi' 'fontconfig' 'fuse2' 'fuse3' 'fmt' 'gcc' 'gcc-libs' 'git' 'glibc' 'gmock' 'gnutls' + 'gperf' 'gperftools' 'gptfdisk' 'gtest' 'hwloc' 'inetutils' 'java-runtime' + 'jq' 'jre11-openjdk-headless' 'junit' 'keyutils' 'leveldb' 'libaio' + 'libatomic_ops' 'libcap' 'libcap-ng' 'libcroco' 'libcurl-compat' + 'libedit' 'libgudev' 'libnl' 'librabbitmq-c' 'libtool' 'util-linux' + 'libuv' 'libxml2' 'librdkafka' 'libpciaccess' 'lsb-release' 'lua' 'lz4' 'ncurses' + 'nss' 'numactl' 'oath-toolkit' 'openssl' 'parted' 'pcre' 'pcre2' 'pkgconf' 'protobuf' + 'procps-ng' 'python-astroid' 'python-attrs' 'python-bcrypt' + 'python-cheroot' 'python-cherrypy' 'python-coverage' 'python-dateutil' + 'python-elasticsearch' 'python-flask' 'python-flask-restful' + 'python-google-api-python-client' 'python-google-auth' + 'python-google-auth-httplib2' 'python-grpcio' 'python-isort' + 'python-jinja' 'python-lazy-object-proxy' 'python-mccabe' + 'python-isodate' 'python-defusedxml' 'python-pkgconfig' 'python-protobuf' + 'python-lxml' 'python-xmlsec' 'python-yaml' + 'python-more-itertools' 'python-numpy' 'python-pbr' 'python-pecan' + 'python-pip' 'python-pluggy' 'python-portend' 'python-prettytable' + 'python-prometheus_client' 'python-py' 'python-pycparser' + 'python-pyjwt' 'python-pyopenssl' 'python-pytz' 'python-requests' + 'python-routes' 'python-scikit-learn' 'python-scipy' + 'python-setuptools' 'python-six' 'python-sphinx' 'python-tempora' + 'python-virtualenv' 'python-werkzeug' 'python-wrapt' 'rabbitmq' + 'sed' 'snappy' 'socat' 'systemd' 'systemd-libs' 'valgrind' + 'xfsprogs' 'xmlstarlet' 'xmlsec' 'xxhash' 'yaml-cpp' 'yasm' 'zlib' ) +checkdepends=('python-mock' 'python-nose' 'python-pycodestyle' 'python-pylint' + 'python-pytest' 'python-pytest-cov') +options=('emptydirs') +source=( + "https://download.ceph.com/tarballs/${pkgbase}-${pkgver}.tar.gz" + 'ceph.sysusers' + "zstd-${_zstdver}.tar.gz::https://github.com/facebook/zstd/archive/v${_zstdver}.tar.gz" + #'glibc2.32-strsignal-compat-backported.patch' + 'ceph-14.2.0-cflags.patch' + 'ceph-12.2.4-boost-build-none-options.patch' + 'ceph-13.2.0-cflags.patch' + 'ceph-13.2.2-dont-install-sysvinit-script.patch' + # 'ceph-14.2.0-link-crc32-statically.patch' + 'ceph-14.2.0-cython-0.29.patch' + 'ceph-15.2.0-rocksdb-cmake.patch' + 'ceph-16.2.0-liburing.patch' + # 'ceph-15.2.5-missing-includes.patch' + 'disable-empty-readable.sh-test.patch' + + + # Add python >= 3.8 workaround logic for incompatible modules + # This has been designated for upstream backporting into the octupus (15) and pacific (16) branches. + # TODO: check if merged and included in next releases + # https://tracker.ceph.com/issues/45147 + # https://github.com/ceph/ceph/pull/34846 + # 'backport_mgr_disabled_modules_workaround_PR34846.patch' +) +sha512sums=('SKIP' + '4354001c1abd9a0c385ba7bd529e3638fb6660b6a88d4e49706d4ac21c81b8e829303a20fb5445730bdac18c4865efb10bc809c1cd56d743c12aa9a52e160049' + '25b657529a698eec891f92ff4a085d1fd95d2ff938ce52c8a4ff6163eb0b668ec642dd09e0db190652638cd92371006afa01d8e437437762c4097ad301675c33' + '9e6bb46d5bbdc5d93f4f026b2a8d6bdb692d9ea6e7018c1bb0188d95ea8574c76238d968b340fd67ddaa3d8183b310e393e3549dc3a63a795fde696413b0ca94' + '6ff46a90d76f667fa23be0f9eb1ed2fb7e30af9a2621aec19944d0a22a431a0f5721603c588286e483ff55c14aac920adfccb039c9678a87cc59640dd70367ae' + '8ec0d668fefee12d2c7f5b5297dd81fc6a559f5823d069e6395d9b4240110eb8f95049d3054697a459948c1f3784b4450539849cf9d7f3b1aa1c7fbd96c475df' + 'ea069b75b786c22166c609b127b512802cc5c6e9512d792d7b7b34d276f5b86d57c8c35cfc7b5c855a59c0ba87ba1aabe2ca26da72b26bff46b6ba8410ddb27e' + '82c1608928ee669ef60b8930ce82c443152c446e669e7bde9ce32f78571afb19a9620c3818b69ac8cb3ea33e7d7ac40f77c89162c71b19b157336d907fa23e3d' + 'SKIP' + '8258661e56b5360f4260fdd29b07bac4d415068a112b61ca8c55c529fb1593d8d61a0d59a4eec8f1567b97167c058082198d008f55f8ee701cb46489df5f7823' + '2234d005df71b3b6013e6b76ad07a5791e3af7efec5f41c78eb1a9c92a22a67f0be9560be59b52534e90bfe251bcf32c33d5d40163f3f8f7e7420691f0f4a222' + '79e337a78cc4bd9ed8c8ab66831b3efd5a3a34e16d2c73ecedef03d2a34c7ac65ea25641a808913cd2dc2dc0f992fac35822efe4188622add6898dce1e5f13e3' + '4b4d0528d909fb735975db290bc8495ee626fc78d68b82b3525326cb69326cfc310c3078c529246f3d76cec590a3a7c4e92950009211590ebfe55583c4f5b71d') + + +# -fno-plt causes linker errors (undefined reference to internal methods) +# similar issue: https://bugs.archlinux.org/task/54845 +# https://github.com/intel/media-driver/commit/d95d8f7ab7ac94a2e0f4ee6a4b4794898dc2d3b7 +# as of today (2019-07-12) the upstream maintainers do not consider this a bug in their code +# (IMHO rightfully so) and thus we strip the option here +export CFLAGS="${CFLAGS/-fno-plt/}" +export CXXFLAGS="${CXXFLAGS/-fno-plt/}" + + +prepare() { + cd "${srcdir}/${pkgbase}-${pkgver}" + + # apply patches from the source array + local filename + for filename in "${source[@]%%::*}"; do + if [[ "${filename}" =~ \.patch$ ]]; then + echo "Applying patch ${filename##*/}" + patch -p1 -N -i "${srcdir}/${filename##*/}" + fi + done + + # temporarily disable unsubscriptable-object (buggy on Python 3.9) + # https://github.com/PyCQA/pylint/issues/3882 + sed -i '/^disable=/a\ unsubscriptable-object,' \ + src/pybind/mgr/dashboard/.pylintrc + + # mypy complains about this but the exception is handled; not sure what's up + sed -i 's/from base64 import encodestring$/& # type: ignore/' \ + src/pybind/mgr/dashboard/awsauth.py + + # suppress deprecation warnings + sed -i '/#ifndef CEPH_CONFIG_H/i#define BOOST_ALLOW_DEPRECATED_HEADERS' \ + src/common/config.h + sed -i '/#ifndef CEPH_TYPES_H/i#define BOOST_ALLOW_DEPRECATED_HEADERS' \ + src/include/types.h + + # fix boost stuff for system-boost + find . -name '*.cmake' -or -name 'CMakeLists.txt' -print0 | xargs --null \ + sed -r \ + -e 's|Boost::|boost_|g' \ + -e 's|Boost_|boost_|g' \ + -e 's|[Bb]oost_boost|boost_system|g' -i || exit 1 + + # remove bundled zstd and replace with newer release + #rm -rf src/zstd + #ln -sf "${srcdir}/zstd-${_zstdver}" src/zstd + + # remove tests that require root privileges + rm src/test/cli/ceph-authtool/cap*.t + + # disable/remove broken tests + sed -i '/add_ceph_test(smoke.sh/d' src/test/CMakeLists.txt + sed -i '/add_ceph_test(safe-to-destroy.sh/d' src/test/osd/CMakeLists.txt +} + +build() { + cd "${srcdir}/${pkgbase}-${pkgver}" + + # workaround for boost 1.74 -- similar fix exists upstream but I could + # not get it to work: https://github.com/ceph/ceph/commit/3d708219092d + CPPFLAGS+=' -DBOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT' + + export CFLAGS+=" ${CPPFLAGS}" + export CXXFLAGS+=" ${CPPFLAGS}" + export PYTHON_VERSION="$(python --version | awk '{print $2}')" + export PYTHON_INCLUDE_DIR="$(python -c "from sysconfig import get_path; print(get_path('include'))")" + export CMAKE_BUILD_TYPE='RelWithDebInfo' + export CMAKE_WARN_UNUSED_CLI=no + + cmake \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_SYSCONFDIR=/etc \ + -DCMAKE_INSTALL_SBINDIR=/usr/bin \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib \ + -DCEPH_SYSTEMD_ENV_DIR=/etc/default \ + -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib \ + -DCMAKE_INSTALL_SYSTEMD_SERVICEDIR=/usr/lib/systemd/system \ + -DCMAKE_VERBOSE_MAKEFILE=ON \ + -DENABLE_GIT_VERSION=ON \ + -DWITH_PYTHON2=OFF \ + -DWITH_PYTHON3="${PYTHON_VERSION}" \ + -DMGR_PYTHON_VERSION=3 \ + -DPYTHON_INCLUDE_DIR="${PYTHON_INCLUDE_DIR:?}" \ + -DWITH_BABELTRACE=OFF \ + -DWITH_LTTNG=OFF \ + -DWITH_OPENLDAP=OFF \ + -DWITH_RDMA=OFF \ + -DWITH_OCF=OFF \ + -DWITH_DPDK=OFF \ + -DWITH_SPDK=OFF \ + -DWITH_CEPHFS=ON \ + -DWITH_CEPHFS_JAVA=ON \ + -DWITH_CEPHFS_SHELL=ON \ + -DWITH_FUSE=ON \ + -DWITH_LZ4=ON \ + -DWITH_XFS=ON \ + -DWITH_MGR=ON \ + -DWITH_MGR_DASHBOARD_FRONTEND=OFF \ + -DDASHBOARD_FRONTEND_LANGS="ALL" \ + -DWITH_RADOSGW=ON \ + -DWITH_RADOSGW_FCGI_FRONTEND=OFF \ + -DWITH_RADOSGW_BEAST_FRONTEND=ON \ + -DWITH_RADOSGW_BEAST_OPENSSL=ON \ + -DWITH_RADOSGW_AMQP_ENDPOINT=OFF \ + -DWITH_LIBURING=ON \ + -DWITH_SYSTEM_LIBURING=ON \ + -DWITH_SYSTEMD=ON \ + -DWITH_SYSTEM_BOOST=ON \ + -DWITH_BOOST_CONTEXT=ON \ + -DWITH_SYSTEM_GTEST=OFF \ + -DWITH_SYSTEM_NPM=OFF \ + -DENABLE_SHARED=ON \ + -DWITH_TESTS=ON \ + -Wno-dev + + VERBOSE=1 make -C build all +} + +### +### testsuite currently broken, needs some debugging +### +# check() { +# cd "${srcdir}/${pkgbase}-${pkgver}" +# +# export CTEST_PARALLEL_LEVEL=8 +# export CTEST_OUTPUT_ON_FAILURE=1 +# VERBOSE=1 make -C build check +# +# # sometimes processes are not properly terminated... +# for process in ceph-mon ceph-mgr ceph-osd; do +# pkill -9 "${process}" || true +# done +# } + +package_ceph-libs() { + depends=('boost-libs' 'curl' 'glibc' 'keyutils' 'libutil-linux' 'bzip2' 'lz4' 'nss' + 'oath-toolkit' 'python' 'snappy' 'systemd-libs' 'fmt') + + cd "${srcdir}/${pkgbase}-${pkgver}" + + # main install + VERBOSE=1 make DESTDIR="${pkgdir}" -C build install + + # remove stuff that goes into the ceph package + rm -rf "${pkgdir}"/usr/lib/{ceph/mgr,systemd,sysusers.d,tmpfiles.d} + rm -rf "${pkgdir}/usr/share" + rm -rf "${pkgdir}/usr/sbin" + rm -rf "${pkgdir}/usr/bin" + rm -rf "${pkgdir}/etc" + rm -rf "${pkgdir}/var" +} + +package_ceph() { + depends=("ceph-libs=${pkgver}-${pkgrel}" + 'boost-libs' 'curl' 'fuse2' 'fuse3' 'fmt' 'glibc' 'gperftools' 'java-runtime' + 'keyutils' 'leveldb' 'libaio' 'libutil-linux' 'librdkafka' + 'lsb-release' 'ncurses' + 'nss' 'oath-toolkit' 'python' 'python-bcrypt' 'python-setuptools' + 'python-prettytable' 'python-cmd2' 'python-dateutil' 'snappy' 'sudo' 'systemd-libs' + 'python-flask' 'python-pecan' 'python-pyopenssl' 'python-requests' 'python-werkzeug' 'xfsprogs' + 'python-yaml' 'python-pyaml') + + cd "${srcdir}/${pkgbase}-${pkgver}" + + # main install + VERBOSE=1 make DESTDIR="${pkgdir}" -C build install + + # fix sbin dir (cmake opt seems to have no effect) + mv "${pkgdir}"/usr/sbin/* "${pkgdir}/usr/bin/" + rm -rf "${pkgdir}/usr/sbin" + + # remove stuff that is in the ceph-libs package + find "${pkgdir}/usr/lib" -maxdepth 1 -type f -delete + find "${pkgdir}/usr/lib" -maxdepth 1 -type l -delete + find "${pkgdir}/usr/lib/ceph" -maxdepth 1 -type f -delete + find "${pkgdir}/usr/lib/ceph" -maxdepth 1 -type l -delete + rm -rf "${pkgdir}"/usr/lib/{ceph/{compressor,crypto,erasure-code},rados-classes} + rm -rf "${pkgdir}"/usr/lib/python* + rm -rf "${pkgdir}/usr/include" + + # remove stuff that is in the ceph-mgr package + rm -rf "${pkgdir}"/usr/{bin/ceph-mgr,share/ceph/mgr,lib/systemd/system/ceph-mgr*} + + # remove _test_ binaries from the package, not needed + find "${pkgdir}/usr/bin" -maxdepth 1 -type f -iname 'ceph_test_*' -delete + + # install tmpfiles.d and sysusers.d stuff + install -Dm644 "${srcdir}/${pkgbase}-${pkgver}/systemd/ceph.tmpfiles.d" \ + "${pkgdir}/usr/lib/tmpfiles.d/${pkgbase}.conf" + install -Dm644 "${srcdir}/ceph.sysusers" \ + "${pkgdir}/usr/lib/sysusers.d/${pkgbase}.conf" + + # remove debian init script + rm -rf "${pkgdir}/etc/init.d" + + # remove drop.ceph.com ssh stuff + rm -f "${pkgdir}"/usr/share/ceph/id_rsa_drop.ceph.com + rm -f "${pkgdir}"/usr/share/ceph/id_rsa_drop.ceph.com.pub + rm -f "${pkgdir}"/usr/share/ceph/known_hosts_drop.ceph.com + + # fix bash completions path + install -d -m 755 "${pkgdir}/usr/share/bash-completion" + mv "${pkgdir}"/{etc/bash_completion.d,usr/share/bash-completion/completions} + + # fix EnvironmentFile location in systemd service files + sed -i 's|/etc/sysconfig/|/etc/conf.d/|g' "${pkgdir}"/usr/lib/systemd/system/*.service + + # prepare some paths and set correct permissions + install -D -d -m750 -o 0 -g 340 "${pkgdir}/etc/ceph" + install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/log/ceph" + install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph" + install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/bootstrap-mds" + install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/bootstrap-osd" + install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/bootstrap-rgw" + install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/mon" + install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/osd" +} + +package_ceph-mgr() { + depends=("ceph=${pkgver}-${pkgrel}" "ceph-libs=${pkgver}-${pkgrel}" + 'bash' 'boost-libs' 'coffeescript' 'curl' 'gperftools' 'nodejs' 'nss' + 'python' 'python-cherrypy' 'python-flask-restful' 'python-pecan' + 'python-pyjwt' 'python-routes' 'python-jsonpatch' 'python-more-itertools' 'python-numpy' + 'python-scipy' 'python-six') + optdepends=('python-influxdb: influx module' + 'python-kubernetes: rook module' + 'python-prometheus_client: prometheus module' + 'python-remoto: ssh module') + conflicts=('ceph<14.2.1-1') + + cd "${srcdir}/${pkgbase}-${pkgver}" + + # main install + VERBOSE=1 make DESTDIR="${pkgdir}" -C build install + + # fix sbin dir (cmake opt seems to have no effect) + mv "${pkgdir}"/usr/sbin/* "${pkgdir}/usr/bin/" + rm -rf "${pkgdir}/usr/sbin" + + # remove everything except mgr related stuff, rest is in ceph/ceph-libs + rm -rf "${pkgdir}"/usr/lib/{ceph/{compressor,crypto,erasure-code},rados-classes} + rm -rf "${pkgdir}/usr/include" + find "${pkgdir}/usr/bin" -maxdepth 1 -type f -not -name 'ceph-mgr' -delete + find "${pkgdir}"/usr/lib/systemd/system -maxdepth 1 -type f -not -iname 'ceph-mgr*' -delete + find "${pkgdir}"/usr/lib -maxdepth 1 -type f -delete + find "${pkgdir}"/usr/lib -maxdepth 1 -type l -delete + rm -rf "${pkgdir}"/etc + rm -rf "${pkgdir}"/var + rm -rf "${pkgdir}"/usr/lib/{ceph,sysusers.d,tmpfiles.d} + rm -rf "${pkgdir}"/usr/lib/python* + rm -rf "${pkgdir}"/usr/share/{bash-completion,doc,java,man} + + # remove debian init script + rm -rf "${pkgdir}/etc/init.d" + + # remove drop.ceph.com ssh stuff + rm -f "${pkgdir}"/usr/share/ceph/id_rsa_drop.ceph.com + rm -f "${pkgdir}"/usr/share/ceph/id_rsa_drop.ceph.com.pub + rm -f "${pkgdir}"/usr/share/ceph/known_hosts_drop.ceph.com + + # fix EnvironmentFile location in systemd service files + sed -i 's|/etc/sysconfig/|/etc/conf.d/|g' "${pkgdir}"/usr/lib/systemd/system/*.service + + # prepare some paths and set correct permissions + install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/mgr" +} + +# vim:set ts=2 sw=2 et: diff --git a/ceph/backport_mgr_disabled_modules_workaround_PR34846.patch b/ceph/backport_mgr_disabled_modules_workaround_PR34846.patch new file mode 100644 index 0000000..469bf65 --- /dev/null +++ b/ceph/backport_mgr_disabled_modules_workaround_PR34846.patch @@ -0,0 +1,207 @@ +From 40d06ce623f19172721a2f1d5b4f4f8b642a3077 Mon Sep 17 00:00:00 2001 +From: Kefu Chai +Date: Thu, 30 Apr 2020 10:43:01 +0800 +Subject: [PATCH] mgr/PyModuleRegistry: probe modules using std::filesystem + +for better readability + +Signed-off-by: Kefu Chai +--- + src/mgr/PyModuleRegistry.cc | 43 +++++++++++++++++-------------------- + 1 file changed, 20 insertions(+), 23 deletions(-) + +diff --git a/src/mgr/PyModuleRegistry.cc b/src/mgr/PyModuleRegistry.cc +index 440f7c8bafc1e..466da5d404964 100644 +--- a/src/mgr/PyModuleRegistry.cc ++++ b/src/mgr/PyModuleRegistry.cc +@@ -11,6 +11,17 @@ + * Foundation. See file COPYING. + */ + ++#include "PyModuleRegistry.h" ++ ++#if __has_include() ++#include ++namespace fs = std::filesystem; ++#elif __has_include() ++#include ++namespace fs = std::experimental::filesystem; ++#else ++#error std::filesystem not available! ++#endif + + #include "include/stringify.h" + #include "common/errno.h" +@@ -24,8 +35,6 @@ + + #include "ActivePyModules.h" + +-#include "PyModuleRegistry.h" +- + #define dout_context g_ceph_context + #define dout_subsys ceph_subsys_mgr + +@@ -258,29 +267,17 @@ void PyModuleRegistry::shutdown() + + std::set PyModuleRegistry::probe_modules(const std::string &path) const + { +- DIR *dir = opendir(path.c_str()); +- if (!dir) { +- return {}; +- } +- +- std::set modules_out; +- struct dirent *entry = NULL; +- while ((entry = readdir(dir)) != NULL) { +- string n(entry->d_name); +- string fn = path + "/" + n; +- struct stat st; +- int r = ::stat(fn.c_str(), &st); +- if (r == 0 && S_ISDIR(st.st_mode)) { +- string initfn = fn + "/module.py"; +- r = ::stat(initfn.c_str(), &st); +- if (r == 0) { +- modules_out.insert(n); +- } ++ std::set modules; ++ for (const auto& entry: fs::directory_iterator(path)) { ++ if (!fs::is_directory(entry)) { ++ continue; ++ } ++ auto module_path = entry.path() / "module.py"; ++ if (fs::exists(module_path)) { ++ modules.emplace(entry.path().filename()); + } + } +- closedir(dir); +- +- return modules_out; ++ return modules; + } + + int PyModuleRegistry::handle_command( +From 067adbf9a032b5de793fd0b41b071f24f075270a Mon Sep 17 00:00:00 2001 +From: Kefu Chai +Date: Thu, 30 Apr 2020 11:34:07 +0800 +Subject: [PATCH] mgr: do not load disabled modules + +an option named "mgr_disabled_modules" is added in this change to +prevent mgr from loading modules listed in this option. because mgr +loads *all* modules found in the configured path, and per +https://tracker.ceph.com/issues/45147, python subinterpreter could hang +when loading numpy, so this behavior practically creates a deadlock +in mgr. + +this issue is found when mgr uses python3.8 runtime. in development +environment, it'd be inconvenient to disable the offending mgr module +without changing the source code, even if we can choose to not install +them, for instance, the enduser can workaround this issue by +uninstalling `ceph-mgr-diskprediction-local`. + +an option would be useful in this case, so we can add the module to the +list before mgr tries to load it. + +as this issue is found with python3.8 + diskprediction_local (numpy), so +this mgr module is disabled by default if mgr is compiled with python3.8 +runtime. + +Fixes: https://tracker.ceph.com/issues/45147 +Signed-off-by: Kefu Chai +--- + CMakeLists.txt | 5 +++++ + src/common/options.cc | 14 ++++++++++++++ + src/include/config-h.in.cmake | 3 +++ + src/mgr/PyModuleRegistry.cc | 11 ++++++++++- + 4 files changed, 32 insertions(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 0f7e86414c2d2..fa00d1316bcc0 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -442,6 +442,11 @@ if(WITH_MGR) + set(MGR_PYTHON_LIBRARIES ${Python3_LIBRARIES}) + set(MGR_PYTHON_VERSION_MAJOR ${Python3_VERSION_MAJOR}) + set(MGR_PYTHON_VERSION_MINOR ${Python3_VERSION_MINOR}) ++ # https://tracker.ceph.com/issues/45147 ++ if(Python3_VERSION VERSION_GREATER_EQUAL 3.8) ++ set(MGR_DISABLED_MODULES "diskprediction_local") ++ message(STATUS "mgr module disabled for ${Python3_VERSION}: ${MGR_DISABLED_MODULES}") ++ endif() + # Boost dependency check deferred to Boost section + endif(WITH_MGR) + +diff --git a/src/common/options.cc b/src/common/options.cc +index be1e955ab51ea..c78d9b69d7591 100644 +--- a/src/common/options.cc ++++ b/src/common/options.cc +@@ -5169,6 +5169,20 @@ std::vector