diff --git a/testing/ceph19/10-isal.patch b/testing/ceph19/10-isal.patch new file mode 100644 index 00000000000..8854e7da716 --- /dev/null +++ b/testing/ceph19/10-isal.patch @@ -0,0 +1,259 @@ +diff -Nurp a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt +--- a/src/common/CMakeLists.txt 2024-07-27 19:25:51.996571738 +0000 ++++ b/src/common/CMakeLists.txt 2024-07-27 20:13:53.191996427 +0000 +@@ -212,9 +212,8 @@ if(HAVE_INTEL) + list(APPEND crc32_srcs + crc32c_intel_fast.c) + if(HAVE_NASM_X64) +- set(CMAKE_ASM_FLAGS "-i ${PROJECT_SOURCE_DIR}/src/isa-l/include/ ${CMAKE_ASM_FLAGS}") ++# set(CMAKE_ASM_FLAGS "-i ${PROJECT_SOURCE_DIR}/src/isa-l/include/ ${CMAKE_ASM_FLAGS}") + list(APPEND crc32_srcs +- ${PROJECT_SOURCE_DIR}/src/isa-l/crc/crc32_iscsi_00.asm + crc32c_intel_fast_zero_asm.s) + endif(HAVE_NASM_X64) + elseif(HAVE_POWER8) +@@ -239,6 +238,10 @@ endif() + target_link_libraries(crc32 + arch) + ++if(HAVE_NASM_X64) ++pkg_check_modules(ISAL IMPORTED_TARGET libisal) ++target_link_libraries(crc32 PkgConfig::ISAL) ++endif(HAVE_NASM_X64) + add_library(common_utf8 STATIC utf8.c) + + if(HAVE_KEYUTILS) +diff -Nurp a/src/compressor/zlib/CMakeLists.txt b/src/compressor/zlib/CMakeLists.txt +--- a/src/compressor/zlib/CMakeLists.txt 2024-07-27 19:25:51.998571765 +0000 ++++ b/src/compressor/zlib/CMakeLists.txt 2024-07-27 20:06:34.792969004 +0000 +@@ -5,77 +5,11 @@ if(HAVE_INTEL_SSE4_1 AND HAVE_NASM_X64_A + set(zlib_sources + CompressionPluginZlib.cc + ZlibCompressor.cc +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/hufftables_c.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_base.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_icf_base.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/adler32_base.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/flatten_ll.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/encode_df.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_icf_body.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_inflate.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/huff_codes.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/crc/crc_base_aliases.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/crc/crc_base.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/crc/crc64_base.c +- ) +- list(APPEND zlib_sources +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_body.asm +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_finish.asm +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_icf_body_h1_gr_bt.asm +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_icf_finish.asm +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/rfc1951_lookup.asm +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/adler32_sse.asm +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/adler32_avx2_4.asm +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_multibinary.asm +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_update_histogram_01.asm +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_update_histogram_04.asm +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_decode_block_stateless_01.asm +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_decode_block_stateless_04.asm +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_inflate_multibinary.asm +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/encode_df_04.asm +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/encode_df_06.asm +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/proc_heap.asm +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_deflate_hash.asm +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_gen_icf_map_lh1_06.asm +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_gen_icf_map_lh1_04.asm +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_set_long_icf_fg_04.asm +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_set_long_icf_fg_06.asm + ) + elseif(HAVE_ARMV8_SIMD) +- set(zlib_asm_sources +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/aarch64/igzip_inflate_multibinary_arm64.S +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/aarch64/igzip_multibinary_arm64.S +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/aarch64/igzip_deflate_body_aarch64.S +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/aarch64/igzip_deflate_finish_aarch64.S +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/aarch64/isal_deflate_icf_body_hash_hist.S +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/aarch64/isal_deflate_icf_finish_hash_hist.S +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/aarch64/igzip_set_long_icf_fg.S +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/aarch64/isal_update_histogram.S +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/aarch64/igzip_deflate_hash_aarch64.S +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/aarch64/igzip_decode_huffman_code_block_aarch64.S +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/aarch64/igzip_isal_adler32_neon.S +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/aarch64/encode_df.S +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/aarch64/gen_icf_map.S +- ) + set(zlib_sources + CompressionPluginZlib.cc + ZlibCompressor.cc +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/hufftables_c.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_base.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_icf_base.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/adler32_base.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/flatten_ll.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/encode_df.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_icf_body.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_inflate.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/huff_codes.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/proc_heap_base.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/aarch64/igzip_multibinary_aarch64_dispatcher.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/crc/crc_base_aliases.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/crc/crc_base.c +- ${CMAKE_SOURCE_DIR}/src/isa-l/crc/crc64_base.c + ${zlib_asm_sources} + ) + set_source_files_properties(${zlib_asm_sources} PROPERTIES +@@ -89,8 +23,13 @@ else() + ) + endif() + ++pkg_check_modules(ISAL IMPORTED_TARGET libisal) + add_library(ceph_zlib SHARED ${zlib_sources}) + target_link_libraries(ceph_zlib ZLIB::ZLIB compressor $<$:ceph-common>) ++if(HAVE_NASM_X64_AVX2 OR HAVE_ARMV8_SIMD) ++target_link_libraries(ceph_zlib PkgConfig::ISAL) ++endif() ++ + if(HAVE_QATZIP AND HAVE_QAT) + target_link_libraries(ceph_zlib qat_compressor) + endif() +diff -Nurp a/src/compressor/zlib/ZlibCompressor.cc b/src/compressor/zlib/ZlibCompressor.cc +--- a/src/compressor/zlib/ZlibCompressor.cc 2024-07-27 19:25:52.003571834 +0000 ++++ b/src/compressor/zlib/ZlibCompressor.cc 2024-07-27 20:07:44.992931520 +0000 +@@ -16,7 +16,7 @@ + #include "common/debug.h" + #include "ZlibCompressor.h" + #include "osd/osd_types.h" +-#include "isa-l/include/igzip_lib.h" ++#include "isa-l/igzip_lib.h" + #ifdef HAVE_QATZIP + #include "compressor/QatAccel.h" + #endif +diff -Nurp a/src/compressor/zstd/ZstdCompressor.h b/src/compressor/zstd/ZstdCompressor.h +--- a/src/compressor/zstd/ZstdCompressor.h 2024-07-27 19:25:52.005571861 +0000 ++++ b/src/compressor/zstd/ZstdCompressor.h 2024-07-27 19:28:09.601450158 +0000 +@@ -16,7 +16,7 @@ + #define CEPH_ZSTDCOMPRESSOR_H + + #define ZSTD_STATIC_LINKING_ONLY +-#include "zstd/lib/zstd.h" ++#include "zstd.h" + + #include "include/buffer.h" + #include "include/encoding.h" +diff -Nurp a/src/erasure-code/isa/CMakeLists.txt b/src/erasure-code/isa/CMakeLists.txt +--- a/src/erasure-code/isa/CMakeLists.txt 2024-07-27 19:25:52.000571793 +0000 ++++ b/src/erasure-code/isa/CMakeLists.txt 2024-07-27 19:28:09.599450130 +0000 +@@ -1,59 +1,10 @@ + # ISA + set(isal_src_dir ${CMAKE_SOURCE_DIR}/src/isa-l) +-include_directories(${isal_src_dir}/include) ++# include_directories(${isal_src_dir}/include) + + if(HAVE_NASM_X64_AVX2) +- set(CMAKE_ASM_FLAGS "-i ${isal_src_dir}/include/ ${CMAKE_ASM_FLAGS}") ++ # set(CMAKE_ASM_FLAGS "-i ${isal_src_dir}/include/ ${CMAKE_ASM_FLAGS}") + set(isa_srcs +- ${isal_src_dir}/erasure_code/ec_base.c +- ${isal_src_dir}/erasure_code/gf_2vect_dot_prod_sse.asm +- ${isal_src_dir}/erasure_code/gf_3vect_dot_prod_sse.asm +- ${isal_src_dir}/erasure_code/gf_4vect_dot_prod_sse.asm +- ${isal_src_dir}/erasure_code/gf_5vect_dot_prod_sse.asm +- ${isal_src_dir}/erasure_code/gf_6vect_dot_prod_sse.asm +- ${isal_src_dir}/erasure_code/gf_vect_dot_prod_sse.asm +- ${isal_src_dir}/erasure_code/gf_2vect_mad_avx2.asm +- ${isal_src_dir}/erasure_code/gf_3vect_mad_avx2.asm +- ${isal_src_dir}/erasure_code/gf_4vect_mad_avx2.asm +- ${isal_src_dir}/erasure_code/gf_5vect_mad_avx2.asm +- ${isal_src_dir}/erasure_code/gf_6vect_mad_avx2.asm +- ${isal_src_dir}/erasure_code/gf_vect_mad_avx2.asm +- ${isal_src_dir}/erasure_code/ec_highlevel_func.c +- ${isal_src_dir}/erasure_code/gf_2vect_mad_avx.asm +- ${isal_src_dir}/erasure_code/gf_3vect_mad_avx.asm +- ${isal_src_dir}/erasure_code/gf_4vect_mad_avx.asm +- ${isal_src_dir}/erasure_code/gf_5vect_mad_avx.asm +- ${isal_src_dir}/erasure_code/gf_6vect_mad_avx.asm +- ${isal_src_dir}/erasure_code/gf_vect_mad_avx.asm +- ${isal_src_dir}/erasure_code/ec_multibinary.asm +- ${isal_src_dir}/erasure_code/gf_2vect_mad_sse.asm +- ${isal_src_dir}/erasure_code/gf_3vect_mad_sse.asm +- ${isal_src_dir}/erasure_code/gf_4vect_mad_sse.asm +- ${isal_src_dir}/erasure_code/gf_5vect_mad_sse.asm +- ${isal_src_dir}/erasure_code/gf_6vect_mad_sse.asm +- ${isal_src_dir}/erasure_code/gf_vect_mad_sse.asm +- ${isal_src_dir}/erasure_code/gf_2vect_dot_prod_avx2.asm +- ${isal_src_dir}/erasure_code/gf_3vect_dot_prod_avx2.asm +- ${isal_src_dir}/erasure_code/gf_4vect_dot_prod_avx2.asm +- ${isal_src_dir}/erasure_code/gf_5vect_dot_prod_avx2.asm +- ${isal_src_dir}/erasure_code/gf_6vect_dot_prod_avx2.asm +- ${isal_src_dir}/erasure_code/gf_vect_dot_prod_avx2.asm +- ${isal_src_dir}/erasure_code/gf_vect_mul_avx.asm +- ${isal_src_dir}/erasure_code/gf_2vect_dot_prod_avx.asm +- ${isal_src_dir}/erasure_code/gf_3vect_dot_prod_avx.asm +- ${isal_src_dir}/erasure_code/gf_4vect_dot_prod_avx.asm +- ${isal_src_dir}/erasure_code/gf_5vect_dot_prod_avx.asm +- ${isal_src_dir}/erasure_code/gf_6vect_dot_prod_avx.asm +- ${isal_src_dir}/erasure_code/gf_vect_dot_prod_avx.asm +- ${isal_src_dir}/erasure_code/gf_vect_mul_sse.asm +- ${isal_src_dir}/erasure_code/gf_2vect_dot_prod_avx512.asm +- ${isal_src_dir}/erasure_code/gf_2vect_mad_avx512.asm +- ${isal_src_dir}/erasure_code/gf_3vect_dot_prod_avx512.asm +- ${isal_src_dir}/erasure_code/gf_3vect_mad_avx512.asm +- ${isal_src_dir}/erasure_code/gf_4vect_dot_prod_avx512.asm +- ${isal_src_dir}/erasure_code/gf_4vect_mad_avx512.asm +- ${isal_src_dir}/erasure_code/gf_vect_dot_prod_avx512.asm +- ${isal_src_dir}/erasure_code/gf_vect_mad_avx512.asm + ErasureCodeIsa.cc + ErasureCodeIsaTableCache.cc + ErasureCodePluginIsa.cc +@@ -61,22 +12,6 @@ if(HAVE_NASM_X64_AVX2) + ) + elseif(HAVE_ARMV8_SIMD) + set(isa_srcs +- ${isal_src_dir}/erasure_code/ec_base.c +- ${isal_src_dir}/erasure_code/aarch64/ec_aarch64_highlevel_func.c +- ${isal_src_dir}/erasure_code/aarch64/ec_aarch64_dispatcher.c +- ${isal_src_dir}/erasure_code/aarch64/gf_2vect_dot_prod_neon.S +- ${isal_src_dir}/erasure_code/aarch64/gf_2vect_mad_neon.S +- ${isal_src_dir}/erasure_code/aarch64/gf_3vect_dot_prod_neon.S +- ${isal_src_dir}/erasure_code/aarch64/gf_3vect_mad_neon.S +- ${isal_src_dir}/erasure_code/aarch64/gf_4vect_dot_prod_neon.S +- ${isal_src_dir}/erasure_code/aarch64/gf_4vect_mad_neon.S +- ${isal_src_dir}/erasure_code/aarch64/gf_5vect_dot_prod_neon.S +- ${isal_src_dir}/erasure_code/aarch64/gf_5vect_mad_neon.S +- ${isal_src_dir}/erasure_code/aarch64/gf_6vect_mad_neon.S +- ${isal_src_dir}/erasure_code/aarch64/gf_vect_dot_prod_neon.S +- ${isal_src_dir}/erasure_code/aarch64/gf_vect_mad_neon.S +- ${isal_src_dir}/erasure_code/aarch64/gf_vect_mul_neon.S +- ${isal_src_dir}/erasure_code/aarch64/ec_multibinary_arm.S + ErasureCodeIsa.cc + ErasureCodeIsaTableCache.cc + ErasureCodePluginIsa.cc +@@ -88,10 +23,14 @@ elseif(HAVE_ARMV8_SIMD) + ) + endif() + ++pkg_check_modules(ISAL IMPORTED_TARGET libisal) + add_library(ec_isa SHARED + ${isa_srcs} + $) + target_link_libraries(ec_isa ${EXTRALIBS}) ++if(HAVE_NASM_X64_AVX2 OR HAVE_ARMV8_SIMD) ++target_link_libraries(ec_isa PkgConfig::ISAL) ++endif() + set_target_properties(ec_isa PROPERTIES + INSTALL_RPATH "") + install(TARGETS ec_isa DESTINATION ${erasure_plugin_dir}) +diff -Nurp a/src/erasure-code/isa/ErasureCodeIsa.cc b/src/erasure-code/isa/ErasureCodeIsa.cc +--- a/src/erasure-code/isa/ErasureCodeIsa.cc 2024-07-27 19:25:52.001571806 +0000 ++++ b/src/erasure-code/isa/ErasureCodeIsa.cc 2024-07-27 19:28:09.600450144 +0000 +@@ -25,7 +25,7 @@ using namespace ceph; + + // ----------------------------------------------------------------------------- + extern "C" { +-#include "isa-l/include/erasure_code.h" ++#include "isa-l/erasure_code.h" + } + // ----------------------------------------------------------------------------- + #define dout_context g_ceph_context diff --git a/testing/ceph19/10-isal_crypto.patch b/testing/ceph19/10-isal_crypto.patch new file mode 100644 index 00000000000..70a512217cc --- /dev/null +++ b/testing/ceph19/10-isal_crypto.patch @@ -0,0 +1,43 @@ +diff -Nurp a/src/crypto/isa-l/CMakeLists.txt b/src/crypto/isa-l/CMakeLists.txt +--- a/src/crypto/isa-l/CMakeLists.txt 2023-10-07 11:38:41.978488294 +0000 ++++ b/src/crypto/isa-l/CMakeLists.txt 2023-10-07 11:42:58.266169084 +0000 +@@ -3,33 +3,19 @@ set(CMAKE_ASM_FLAGS "-i ${isal_dir}/aes/ + + set(isal_crypto_plugin_srcs + isal_crypto_accel.cc +- isal_crypto_plugin.cc +- ${isal_dir}/aes/cbc_pre.c +- ${isal_dir}/aes/cbc_multibinary.asm +- ${isal_dir}/aes/keyexp_128.asm +- ${isal_dir}/aes/keyexp_192.asm +- ${isal_dir}/aes/keyexp_256.asm +- ${isal_dir}/aes/keyexp_multibinary.asm +- ${isal_dir}/aes/cbc_dec_128_x4_sse.asm +- ${isal_dir}/aes/cbc_dec_128_x8_avx.asm +- ${isal_dir}/aes/cbc_dec_192_x4_sse.asm +- ${isal_dir}/aes/cbc_dec_192_x8_avx.asm +- ${isal_dir}/aes/cbc_dec_256_x4_sse.asm +- ${isal_dir}/aes/cbc_dec_256_x8_avx.asm +- ${isal_dir}/aes/cbc_enc_128_x4_sb.asm +- ${isal_dir}/aes/cbc_enc_128_x8_sb.asm +- ${isal_dir}/aes/cbc_enc_192_x4_sb.asm +- ${isal_dir}/aes/cbc_enc_192_x8_sb.asm +- ${isal_dir}/aes/cbc_enc_256_x4_sb.asm +- ${isal_dir}/aes/cbc_enc_256_x8_sb.asm) ++ isal_crypto_plugin.cc) + + if(HAVE_NASM_X64) + add_dependencies(crypto_plugins ceph_crypto_isal) + endif(HAVE_NASM_X64) + + add_library(ceph_crypto_isal SHARED ${isal_crypto_plugin_srcs}) +-target_include_directories(ceph_crypto_isal PRIVATE ${isal_dir}/include) + ++if(HAVE_NASM_X64) ++find_package(PkgConfig) ++pkg_check_modules(ISALCRYPTO REQUIRED IMPORTED_TARGET libisal_crypto) ++target_link_libraries(ceph_crypto_isal PkgConfig::ISALCRYPTO) ++endif(HAVE_NASM_X64) + target_link_libraries(ceph_crypto_isal PRIVATE spawn) + + set_target_properties(ceph_crypto_isal PROPERTIES diff --git a/testing/ceph19/10-musl-fixes.patch b/testing/ceph19/10-musl-fixes.patch new file mode 100644 index 00000000000..1b7c9079c1d --- /dev/null +++ b/testing/ceph19/10-musl-fixes.patch @@ -0,0 +1,15 @@ +fix for musl + +diff -Nurp a/src/tools/rbd_nbd/rbd-nbd.cc b/src/tools/rbd_nbd/rbd-nbd.cc +--- a/src/tools/rbd_nbd/rbd-nbd.cc 2020-11-21 08:06:35.834423310 +0000 ++++ b/src/tools/rbd_nbd/rbd-nbd.cc 2020-11-21 08:21:12.067978842 +0000 +@@ -576,7 +576,8 @@ private: + for (unsigned i = 0; i < cmdline.size(); i++) { + char *arg = &cmdline[i]; + if (i == 0) { +- if (strcmp(basename(arg) , "rbd-nbd") != 0) { ++ const char *fname = strrchr(arg, '/'); ++ if (strcmp(fname ? fname+1 : arg, "rbd-nbd") != 0) { + return -EINVAL; + } + } else { diff --git a/testing/ceph19/10-seastar.patch b/testing/ceph19/10-seastar.patch new file mode 100644 index 00000000000..8b39e7a1f69 --- /dev/null +++ b/testing/ceph19/10-seastar.patch @@ -0,0 +1,74 @@ +diff -Nurp a/src/CMakeLists.txt b/src/CMakeLists.txt +--- a/src/CMakeLists.txt 2024-07-27 20:23:55.379291046 +0000 ++++ b/src/CMakeLists.txt 2024-07-27 20:25:46.359819714 +0000 +@@ -367,41 +367,6 @@ set_target_properties(Boost::MPL PROPERT + "BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS;BOOST_MPL_LIMIT_LIST_SIZE=30") + + if(WITH_SEASTAR) +- find_package(c-ares 1.13.0 QUIET) +- if(NOT c-ares_FOUND) +- message(STATUS "Could not find c-ares, will build it") +- include(Buildc-ares) +- build_c_ares() +- endif() +- macro(find_package name) +- if(NOT TARGET ${name}) +- _find_package(${ARGV}) +- endif() +- endmacro () +- set(Seastar_API_LEVEL "6" CACHE STRING "" FORCE) +- set(Seastar_HWLOC OFF CACHE BOOL "" FORCE) +- set(Seastar_STD_OPTIONAL_VARIANT_STRINGVIEW ON CACHE BOOL "" FORCE) +- if(Seastar_DPDK) +- find_package(dpdk QUIET) +- if(NOT DPDK_FOUND) +- include(BuildDPDK) +- build_dpdk(${CMAKE_BINARY_DIR}/src/dpdk) +- endif() +- endif() +- list(APPEND Seastar_CXX_FLAGS +- "-DSEASTAR_NO_EXCEPTION_HACK" +- "-Wno-error" +- "-Wno-sign-compare" +- "-Wno-attributes" +- "-Wno-pessimizing-move" +- "-Wno-address-of-packed-member" +- "-Wno-non-virtual-dtor") +- set(Seastar_CXX_FLAGS "${Seastar_CXX_FLAGS}" CACHE STRING "" FORCE) +- add_subdirectory(seastar) +- # create the directory so cmake won't complain when looking at the imported +- # target: Seastar exports this directory created at build-time +- file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/seastar/gen/include") +- file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/seastar/gen/src") + add_subdirectory(crimson) + endif() + +diff -Nurp a/src/crimson/CMakeLists.txt b/src/crimson/CMakeLists.txt +--- a/src/crimson/CMakeLists.txt 2024-07-27 20:23:55.380291060 +0000 ++++ b/src/crimson/CMakeLists.txt 2024-07-27 20:24:14.390552917 +0000 +@@ -6,10 +6,11 @@ if((CMAKE_CXX_COMPILER_ID STREQUAL GNU A + list(APPEND crimson_cflag_definitions + "BOOST_ASIO_DISABLE_CONCEPTS") + endif() ++pkg_check_modules(SEASTAR IMPORTED_TARGET seastar) + set_target_properties(crimson::cflags PROPERTIES + INTERFACE_COMPILE_DEFINITIONS "${crimson_cflag_definitions}" + INTERFACE_COMPILE_OPTIONS $<$:-Wno-non-virtual-dtor> +- INTERFACE_LINK_LIBRARIES Seastar::seastar) ++ INTERFACE_LINK_LIBRARIES PkgConfig::SEASTAR) + + set(crimson_common_srcs + common/assert.cc +diff -Nurp a/src/crimson/os/alienstore/CMakeLists.txt b/src/crimson/os/alienstore/CMakeLists.txt +--- a/src/crimson/os/alienstore/CMakeLists.txt 2024-07-27 20:23:55.382291087 +0000 ++++ b/src/crimson/os/alienstore/CMakeLists.txt 2024-07-27 20:24:14.390552917 +0000 +@@ -2,8 +2,7 @@ include_directories(SYSTEM "${CMAKE_SOUR + + add_library(alien::cflags INTERFACE IMPORTED) + set_target_properties(alien::cflags PROPERTIES +- INTERFACE_COMPILE_DEFINITIONS "WITH_SEASTAR;WITH_ALIEN" +- INTERFACE_INCLUDE_DIRECTORIES $) ++ INTERFACE_COMPILE_DEFINITIONS "WITH_SEASTAR;WITH_ALIEN") + + set(crimson_alien_common_srcs + ${PROJECT_SOURCE_DIR}/src/common/admin_socket.cc diff --git a/testing/ceph19/10-xxhash.patch b/testing/ceph19/10-xxhash.patch new file mode 100644 index 00000000000..782b49bebd5 --- /dev/null +++ b/testing/ceph19/10-xxhash.patch @@ -0,0 +1,70 @@ +diff -Nurp a/src/CMakeLists.txt b/src/CMakeLists.txt +--- a/src/CMakeLists.txt 2024-07-27 20:20:32.740499875 +0000 ++++ b/src/CMakeLists.txt 2024-07-27 20:20:52.206768005 +0000 +@@ -414,7 +414,6 @@ set(libcommon_files + ${CMAKE_BINARY_DIR}/src/include/ceph_ver.h + ceph_ver.c + global/global_context.cc +- xxHash/xxhash.c + common/error_code.cc + common/tracer.cc + log/Log.cc +@@ -449,6 +448,8 @@ add_library(common-objs OBJECT ${libcomm + target_compile_definitions(common-objs PRIVATE + $) + add_dependencies(common-objs legacy-option-headers) ++pkg_check_modules(XXHASH IMPORTED_TARGET libxxhash) ++target_link_libraries(common-objs PkgConfig::XXHASH) + + if(WITH_JAEGER) + add_dependencies(common-objs jaeger_base) +diff -Nurp a/src/common/Checksummer.h b/src/common/Checksummer.h +--- a/src/common/Checksummer.h 2024-07-27 20:20:32.742499903 +0000 ++++ b/src/common/Checksummer.h 2024-07-27 20:20:52.206768005 +0000 +@@ -8,7 +8,7 @@ + #include "include/byteorder.h" + #include "include/ceph_assert.h" + +-#include "xxHash/xxhash.h" ++#include "xxhash.h" + + class Checksummer { + public: +diff -Nurp a/src/crimson/CMakeLists.txt b/src/crimson/CMakeLists.txt +--- a/src/crimson/CMakeLists.txt 2024-07-27 20:20:32.746499958 +0000 ++++ b/src/crimson/CMakeLists.txt 2024-07-27 20:21:52.466598032 +0000 +@@ -122,7 +122,6 @@ add_library(crimson-common STATIC + ${PROJECT_SOURCE_DIR}/src/osd/OSDMap.cc + ${PROJECT_SOURCE_DIR}/src/osd/PGPeeringEvent.cc + ${PROJECT_SOURCE_DIR}/src/common/scrub_types.cc +- ${PROJECT_SOURCE_DIR}/src/xxHash/xxhash.c + ${crimson_common_srcs} + $ + $) +@@ -146,10 +145,12 @@ if(NOT WITH_SYSTEM_BOOST) + list(APPEND crimson_common_deps ${ZLIB_LIBRARIES}) + endif() + ++pkg_check_modules(XXHASH IMPORTED_TARGET libxxhash) + target_link_libraries(crimson-common + PUBLIC + ${crimson_common_public_deps} + PRIVATE ++ PkgConfig::XXHASH + crc32 arch + ${crimson_common_deps} + OpenSSL::Crypto) +diff -Nurp a/src/os/CMakeLists.txt b/src/os/CMakeLists.txt +--- a/src/os/CMakeLists.txt 2024-07-27 20:20:32.744499930 +0000 ++++ b/src/os/CMakeLists.txt 2024-07-27 20:20:52.207768019 +0000 +@@ -46,8 +46,9 @@ if(HAVE_LIBZFS) + list(APPEND libos_srcs $) + endif() + ++pkg_check_modules(XXHASH IMPORTED_TARGET libxxhash) + add_library(os STATIC ${libos_srcs}) +-target_link_libraries(os blk) ++target_link_libraries(os blk PkgConfig::XXHASH) + + target_link_libraries(os heap_profiler kv) + diff --git a/testing/ceph19/11-dump_time_header_impl.patch b/testing/ceph19/11-dump_time_header_impl.patch new file mode 100644 index 00000000000..d19e7ed596a --- /dev/null +++ b/testing/ceph19/11-dump_time_header_impl.patch @@ -0,0 +1,34 @@ +Patch by Robin Mueller + +The strftime method of the libmusl writes 'UTC' instead of 'GMT' when +the character Z is used in the format pattern, and it looks like the +S3 clients don't like 'UTC' in the date strings. + +This patch replaces 'UTC' with 'GMT' at the relevant location. + +--- a/src/rgw/rgw_rest.cc 2021-07-08 16:03:56.000000000 +0200 ++++ b/src/rgw/rgw_rest.cc 2021-08-19 09:48:30.339492024 +0200 +@@ -436,8 +436,21 @@ + return 0; + } + +- return strftime(timestr, sizeof(timestr), +- "%a, %d %b %Y %H:%M:%S %Z", tmp); ++ size_t len = strftime(timestr, sizeof(timestr), ++ "%a, %d %b %Y %H:%M:%S %Z", tmp); ++ ++ int position = 0; ++ while (timestr[position] != 'U' && len - position > 3) ++ position++; ++ ++ if (len - position == 3) { ++ char substr[4]; ++ memcpy(substr, ×tr[position], 4); ++ ++ if (strcmp(substr, "UTC") == 0) ++ memcpy(×tr[position], "GMT", 3); ++ } ++ return len; + } + + void dump_time_header(struct req_state *s, const char *name, real_time t) diff --git a/testing/ceph19/11-lfs.patch b/testing/ceph19/11-lfs.patch new file mode 100644 index 00000000000..7a6c5614722 --- /dev/null +++ b/testing/ceph19/11-lfs.patch @@ -0,0 +1,93 @@ +--- a/src/common/buffer.cc ++++ b/src/common/buffer.cc +@@ -1680,7 +1680,7 @@ + if (len > st.st_size - off) { + len = st.st_size - off; + } +- ssize_t ret = lseek64(fd, off, SEEK_SET); ++ ssize_t ret = lseek(fd, off, SEEK_SET); + if (ret != (ssize_t)off) { + return -errno; + } +@@ -1804,7 +1804,7 @@ + #ifdef HAVE_PWRITEV + r = ::pwritev(fd, vec, veclen, offset); + #else +- r = ::lseek64(fd, offset, SEEK_SET); ++ r = ::lseek(fd, offset, SEEK_SET); + if (r != offset) { + return -errno; + } +@@ -1969,7 +1969,7 @@ + + int buffer::list::write_fd(int fd, uint64_t offset) const + { +- int r = ::lseek64(fd, offset, SEEK_SET); ++ int r = ::lseek(fd, offset, SEEK_SET); + if (r != offset) + return -errno; + +--- a/src/os/fs/FS.cc ++++ b/src/os/fs/FS.cc +@@ -170,7 +170,7 @@ + // fall back to writing zeros + ceph::bufferlist bl; + bl.append_zero(length); +- r = ::lseek64(fd, offset, SEEK_SET); ++ r = ::lseek(fd, offset, SEEK_SET); + if (r < 0) { + r = -errno; + goto out; +--- a/src/tools/cephfs/Dumper.cc ++++ b/src/tools/cephfs/Dumper.cc +@@ -137,8 +137,8 @@ + } + + // write the data +- off64_t seeked = ::lseek64(fd, start, SEEK_SET); +- if (seeked == (off64_t)-1) { ++ off_t seeked = ::lseek(fd, start, SEEK_SET); ++ if (seeked == (off_t)-1) { + r = errno; + derr << "Error " << r << " (" << cpp_strerror(r) << ") seeking to 0x" << std::hex << start << std::dec << dendl; + ::close(fd); +@@ -402,7 +402,7 @@ + while (left > 0) { + // Read + bufferlist j; +- lseek64(fd, pos, SEEK_SET); ++ lseek(fd, pos, SEEK_SET); + uint64_t l = std::min(left, 1024*1024); + j.read_fd(fd, l); + +--- a/src/tools/rbd/action/Export.cc ++++ b/src/tools/rbd/action/Export.cc +@@ -360,7 +360,7 @@ + return; + } + +- uint64_t chkret = lseek64(m_fd, m_dest_offset, SEEK_SET); ++ uint64_t chkret = lseek(m_fd, m_dest_offset, SEEK_SET); + if (chkret != m_dest_offset) { + cerr << "rbd: error seeking destination image to offset " + << m_dest_offset << std::endl; +@@ -545,7 +545,7 @@ + if (r < 0) + return r; + +- uint64_t chkret = lseek64(fd, file_size, SEEK_SET); ++ uint64_t chkret = lseek(fd, file_size, SEEK_SET); + if (chkret != file_size) + r = errno; + } +--- a/src/tools/rbd/action/Import.cc ++++ b/src/tools/rbd/action/Import.cc +@@ -339,7 +339,7 @@ + } + } else { + // lseek to skip this tag +- off64_t offs = lseek64(fd, length, SEEK_CUR); ++ off_t offs = lseek(fd, length, SEEK_CUR); + if (offs < 0) { + return -errno; + } diff --git a/testing/ceph19/11-parse_rfc1123_alt.patch b/testing/ceph19/11-parse_rfc1123_alt.patch new file mode 100644 index 00000000000..4c1b5c25f70 --- /dev/null +++ b/testing/ceph19/11-parse_rfc1123_alt.patch @@ -0,0 +1,53 @@ +Patch by Robin Mueller + +libmusl doesn't support the z character in the format pattern for strptime this +is a special functionality of glibc. + +patch is slightly adapted version of glibc code: +https://elixir.bootlin.com/glibc/latest/source/time/strptime_l.c#L776 + +--- a/src/rgw/rgw_common.cc 2021-07-08 16:03:56.000000000 +0200 ++++ b/src/rgw/rgw_common.cc 2021-08-18 13:08:22.938903459 +0200 +@@ -531,7 +531,41 @@ + { + // FIPS zeroization audit 20191115: this memset is not security related. + memset(t, 0, sizeof(*t)); +- return check_str_end(strptime(s, "%a, %d %b %Y %H:%M:%S %z", t)); ++ s = strptime(s, "%a, %d %b %Y %H:%M:%S", t); ++ if (s) { ++ s++; ++ int val; ++ val = 0; ++ while (isspace(*s)) ++ ++s; ++ if (*s == 'Z') { ++ ++s; ++ t->tm_gmtoff = 0; ++ } else { ++ if (*s != '+' && *s != '-') ++ return false; ++ bool neg = *s++ == '-'; ++ int n = 0; ++ while (n < 4 && *s >= '0' && *s <= '9') { ++ val = val * 10 + *s++ - '0'; ++ ++n; ++ if (*s == ':' && n == 2 && isdigit (*(s + 1))) ++ ++s; ++ } ++ if (n == 2) ++ val *= 100; ++ else if (n != 4) ++ /* Only two or four digits recognized. */ ++ return false; ++ else if (val % 100 >= 60) ++ /* Minutes valid range is 0 through 59. */ ++ return false; ++ t->tm_gmtoff = (val / 100) * 3600 + (val % 100) * 60; ++ if (neg) ++ t->tm_gmtoff = -t->tm_gmtoff; ++ } ++ } ++ return check_str_end(s); + } + + bool parse_rfc2616(const char *s, struct tm *t) diff --git a/testing/ceph19/21-yarn.patch b/testing/ceph19/21-yarn.patch new file mode 100644 index 00000000000..797251b8a25 --- /dev/null +++ b/testing/ceph19/21-yarn.patch @@ -0,0 +1,21 @@ +diff -Nurp a/src/pybind/mgr/dashboard/frontend/CMakeLists.txt b/src/pybind/mgr/dashboard/frontend/CMakeLists.txt +--- a/src/pybind/mgr/dashboard/frontend/CMakeLists.txt 2023-10-24 11:56:46.686189574 +0000 ++++ b/src/pybind/mgr/dashboard/frontend/CMakeLists.txt 2023-10-24 12:01:01.169464299 +0000 +@@ -83,7 +83,7 @@ endif(WITH_SYSTEM_NPM) + + add_npm_command( + OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/node_modules" +- COMMAND CYPRESS_CACHE_FOLDER=${CMAKE_SOURCE_DIR}/build/src/pybind/mgr/dashboard/cypress NG_CLI_ANALYTICS=false npm ci -f ${mgr-dashboard-userconfig} ++ COMMAND CYPRESS_CACHE_FOLDER=${CMAKE_SOURCE_DIR}/build/src/pybind/mgr/dashboard/cypress NG_CLI_ANALYTICS=false yarn install --network-timeout 600000 --frozen-lockfile ${mgr-dashboard-userconfig} + DEPENDS package.json + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "dashboard frontend dependencies are being installed" +@@ -116,7 +116,7 @@ endif() + + add_npm_command( + OUTPUT "${frontend_dist_dir}" +- COMMAND DASHBOARD_FRONTEND_LANGS="${DASHBOARD_FRONTEND_LANGS}" npm run build:localize -- ${npm_args} ++ COMMAND DASHBOARD_FRONTEND_LANGS="${DASHBOARD_FRONTEND_LANGS}" yarn run build:localize ${npm_args} + DEPENDS ${frontend_src} node_modules + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "dashboard frontend is being created" diff --git a/testing/ceph19/35-fix_ErasureCodeShec.patch b/testing/ceph19/35-fix_ErasureCodeShec.patch new file mode 100644 index 00000000000..0ab2cc2ed0c --- /dev/null +++ b/testing/ceph19/35-fix_ErasureCodeShec.patch @@ -0,0 +1,17 @@ +patch by Vladimir Bashkirtsev + +diff -uNr ceph-15.2.4/src/erasure-code/shec/ErasureCodeShec.cc ceph-15.2.4-fix_ErasureCodeShec/src/erasure-code/shec/ErasureCodeShec.cc +--- ceph-15.2.4/src/erasure-code/shec/ErasureCodeShec.cc 2020-07-01 01:10:51.000000000 +0930 ++++ ceph-15.2.4-fix_ErasureCodeShec/src/erasure-code/shec/ErasureCodeShec.cc 2020-11-14 00:46:20.029488684 +1030 +@@ -197,7 +197,10 @@ + } + unsigned int k = get_data_chunk_count(); + unsigned int m = get_chunk_count() - k; +- unsigned blocksize = (*chunks.begin()).second.length(); ++ unsigned blocksize = 0; ++ if (chunks.size() > 0) { ++ blocksize = (*chunks.begin()).second.length(); ++ } + for (unsigned int i = 0; i < k + m; i++) { + if (chunks.find(i) == chunks.end()) { + bufferlist tmp; diff --git a/testing/ceph19/47-bcrypt.patch b/testing/ceph19/47-bcrypt.patch new file mode 100644 index 00000000000..326ce100c8f --- /dev/null +++ b/testing/ceph19/47-bcrypt.patch @@ -0,0 +1,26 @@ +https://gitlab.alpinelinux.org/alpine/aports/-/issues/15620 + +diff -Nurp a/src/pybind/mgr/dashboard/services/access_control.py b/src/pybind/mgr/dashboard/services/access_control.py +--- a/src/pybind/mgr/dashboard/services/access_control.py 2024-01-03 00:12:46.140405728 +0000 ++++ b/src/pybind/mgr/dashboard/services/access_control.py 2024-01-03 00:14:22.825611708 +0000 +@@ -12,7 +12,7 @@ from datetime import datetime, timedelta + from string import ascii_lowercase, ascii_uppercase, digits, punctuation + from typing import List, Optional, Sequence + +-import bcrypt ++import bcrypt_ceph as bcrypt + from mgr_module import CLICheckNonemptyFileInput, CLIReadCommand, CLIWriteCommand + from mgr_util import password_hash + +diff -Nurp a/src/pybind/mgr/mgr_util.py b/src/pybind/mgr/mgr_util.py +--- a/src/pybind/mgr/mgr_util.py 2024-01-03 00:11:59.903829031 +0000 ++++ b/src/pybind/mgr/mgr_util.py 2024-01-03 00:13:56.113278518 +0000 +@@ -3,7 +3,7 @@ import os + if 'UNITTEST' in os.environ: + import tests + +-import bcrypt ++import bcrypt_ceph as bcrypt + import cephfs + import contextlib + import datetime diff --git a/testing/ceph19/APKBUILD b/testing/ceph19/APKBUILD new file mode 100644 index 00000000000..6f55fbdffb9 --- /dev/null +++ b/testing/ceph19/APKBUILD @@ -0,0 +1,761 @@ +# Contributor: John Coyle +# Contributor: Iggy Jackson +# Contributor: Duncan Bellamy +# Maintainer: Duncan Bellamy +_pkgname=ceph +pkgver=19.1.1 +pkgrel=0 +_majorver=${pkgver%%.*} +pkgname=$_pkgname$_majorver +pkgdesc="Ceph is a distributed object store and file system, version $_majorver" +pkgusers="ceph" +pkggroups="ceph" +url="https://ceph.io/en/" +# 32-bit: needs more patching specific to 32bit builds +arch="all !armhf !armv7 !x86" +# https://github.com/ceph/ceph/blob/master/COPYING +license="LGPL-2.1-only AND LGPL-2.0-or-later AND GPL-2.0-only AND GPL-3.0-only AND CC-BY-SA-1.0 AND BSL-1.0 AND GPL-2.0-or-later WITH Autoconf-exception-2.0 AND BSD-3-Clause AND MIT AND custom" +depends="$pkgname-mds=$pkgver-r$pkgrel $pkgname-mgr=$pkgver-r$pkgrel $pkgname-mon=$pkgver-r$pkgrel $pkgname-osd=$pkgver-r$pkgrel" +builddir="$srcdir/ceph-$pkgver" +_lua=5.4 +_base_deps=" + cryptsetup + e2fsprogs + logrotate + parted + psmisc + xfsprogs + " +_osd_daemon_deps="fuse snappy lz4-libs" +_osd_tools_deps="lz4-libs" +_ceph_volume_deps="$pkgname-common=$pkgver-r$pkgrel $pkgname-osd-tools=$pkgver-r$pkgrel lvm2 py3-$pkgname-common=$pkgver-r$pkgrel" +_ceph_test_deps=" + gtest-dev + py3-coverage + py3-flake8 + py3-nodeenv + py3-pytest + py3-tox + py3-yaml + xmlstarlet + " +_dashboard_deps=" + py3-bcrypt-ceph + py3-cherrypy + py3-more-itertools + py3-openssl + py3-prettytable + py3-requests + py3-routes + py3-yaml + " +_mgr_modules_deps=" + py3-bcrypt-ceph + py3-cherrypy + py3-dateutil + py3-natsort + py3-openssl + py3-pecan + py3-requests + py3-werkzeug + " +_arrow_deps="apache-arrow-dev c-ares-dev re2-dev" +makedepends=" + acl-dev + argp-standalone + bc + boost-dev + btrfs-progs + bzip2-dev + cmake + coreutils + cryptsetup-dev + cunit-dev + curl-dev + cython + diffutils + doxygen + eudev-dev + expat-dev + fcgi-dev + flex + fmt-dev + fuse-dev + git + graphviz-dev + gperf + isa-l-dev + jq + keyutils-dev + libaio-dev + libatomic_ops-dev + libcap-dev + libcap-ng-dev + libedit-dev + librdkafka-dev + libnl3-dev + libtirpc-dev + libtool + liburing-dev + libxml2-dev + linux-headers + lmdb-dev + lua$_lua-dev + lvm2-dev + lz4-dev + nasm + nodejs + npm + nss-dev + oath-toolkit-dev + openldap-dev + openssl-dev>3 + procps + python3-dev + py3-setuptools + py3-sphinx + rabbitmq-c-dev + readline-dev + rocksdb7-dev + rpcgen + samurai + snappy-dev + sqlite-dev + userspace-rcu-dev + util-linux-dev + xfsprogs-dev + xxhash-dev + yarn + zstd-dev + $_dashboard_deps + $_mgr_modules_deps + $_base_deps + $_osd_daemon_deps + $_osd_tools_deps + $_ceph_volume_deps + $_ceph_test_deps + $_arrow_deps + " +case "$CARCH" in +aarch64|x86_64) makedepends="$makedepends isa-l_crypto-dev" ;; +esac +source="https://download.ceph.com/tarballs/ceph-$pkgver.tar.gz + ceph.confd + ceph.initd + 10-isal_crypto.patch + 10-isal.patch + 10-musl-fixes.patch + 10-xxhash.patch + 11-dump_time_header_impl.patch + 11-lfs.patch + 11-parse_rfc1123_alt.patch + 21-yarn.patch + 35-fix_ErasureCodeShec.patch + 47-bcrypt.patch + gcc13.patch + gcc14.patch + boost-url.patch + ppc64le.patch + " +# to prevent things from installing wrong ceph libs, since they have the same SOMAJOR +sonameprefix="ceph$_majorver:so:" +options="!check" # todo +subpackages=" + $pkgname-doc + $pkgname-base + $pkgname-common + $pkgname-mds + $pkgname-mgr-diskprediction-local:mgr_diskpredicton_local:noarch + $pkgname-mgr-modules-core:mgr_modules_core:noarch + $pkgname-mgr-rook:mgr_rook:noarch + $pkgname-mgr-k8events:mgr_k8events:noarch + $pkgname-mgr + $pkgname-mon::noarch + $pkgname-mon-daemon:mon_daemon + $pkgname-mon-tools:mon_tools + $pkgname-mount:ceph_mount + $pkgname-fuse:ceph_fuse + $pkgname-openrc + $pkgname-osd::noarch + $pkgname-osd-daemon:osd_daemon + $pkgname-osd-tools:osd_tools + $pkgname-volume:ceph_volume:noarch + $pkgname-radosgw + $pkgname-bash-completion:bash_completion:noarch + $pkgname-dev + $pkgname-user::noarch + $pkgname-utils + $pkgname-cephadm::noarch + cephfs$_majorver-mirror:mirror + cephfs$_majorver-shell:shell:noarch + cephfs$_majorver-top:top:noarch + rbd-fuse$_majorver:rbd_fuse + rbd-mirror$_majorver:rbd_mirror + rbd-nbd$_majorver:rbd_nbd + librbd$_majorver:librbd + libcephfs$_majorver:libcephfs + libcephsqlite$_majorver:libcephsqlite + librados$_majorver:librados + py3-rados$_majorver:_py3_rados + libradosstriper$_majorver:libradosstriper + py3-rbd$_majorver:_py3_rbd + py3-cephfs$_majorver:_py3_cephfs + py3-$pkgname-common:_py3_ceph_common:noarch + " +case "$CARCH" in +riscv64) ;; +*) subpackages="$pkgname-mgr-dashboard:mgr_dashboard:noarch $subpackages" ;; +esac + +# Whether this package is the default (latest) ceph version. +_default_ceph="no" + +if [ "$_default_ceph" = yes ]; then + provides="ceph=$pkgver-r$pkgrel" + replaces="ceph" + subpackages="$subpackages ceph-dev:_dev" +fi + +_ceph_uid=167 +_ceph_gid=167 + +_py3_sitelib() { + python3 -c "import site; print(site.getsitepackages()[0])" +} + +prepare() { + default_prepare + rm -r src/isa-l + rm -r src/xxHash +} + +build() { + export CEPH_BUILD_VIRTUALENV="$builddir" + export CFLAGS="${CFLAGS/-fno-plt} -O2 -DNDEBUG" + export CXXFLAGS="${CXXFLAGS/-fno-plt} -O2 -DNDEBUG -Wno-deprecated-declarations -fno-permissive" + + case "$CARCH" in + riscv64) local _dash="OFF" ;; + *) local _dash="ON" ;; + esac + + cmake -B build -G Ninja -Wno-dev \ + -DCMAKE_BUILD_TYPE=MinSizeRel \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib \ + -DCMAKE_INSTALL_LOCALSTATEDIR=/var \ + -DCMAKE_INSTALL_SYSCONFDIR=/etc \ + -DNINJA_MAX_COMPILE_JOBS=$JOBS \ + -DALLOCATOR=libc \ + -DENABLE_GIT_VERSION=OFF \ + -DLUA_LIBRARIES=/usr/lib/lua"$_lua"/liblua.so \ + -DWITH_BABELTRACE=OFF \ + -DWITH_JAEGER=OFF \ + -DWITH_LTTNG=OFF \ + -DWITH_MANPAGE=ON \ + -DWITH_MGR_DASHBOARD_FRONTEND="$_dash" \ + -DWITH_PYTHON3=3 \ + -DWITH_RADOSGW_AMQP_ENDPOINT=OFF \ + -DWITH_RADOSGW_SELECT_PARQUET=ON \ + -DWITH_RADOSGW_POSIX=OFF \ + -DWITH_RDMA=OFF \ + -DWITH_REENTRANT_STRSIGNAL=ON \ + -DWITH_SEASTAR=OFF \ + -DWITH_SPDK=OFF \ + -DWITH_SYSTEMD=OFF \ + -DWITH_CEPHFS_SHELL=ON \ + -DWITH_SYSTEM_ARROW=ON \ + -DWITH_SYSTEM_BOOST=ON \ + -DWITH_SYSTEM_FMT=OFF \ + -DWITH_SYSTEM_LIBURING=ON \ + -DWITH_SYSTEM_NPM=ON \ + -DWITH_SYSTEM_ROCKSDB=ON \ + -DWITH_SYSTEM_ZSTD=ON \ + -DWITH_QATLIB=OFF \ + -DWITH_QATZIP=OFF \ + -DWITH_TESTS="$(want_check && echo ON || echo OFF)" \ + -DWITH_THREAD_SAFE_RES_QUERY=ON + + export NODE_OPTIONS="--openssl-legacy-provider" + cmake --build build --target common-options-objs + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # remove the upstream init file and put in openrc ones + rm -f "$pkgdir"/etc/init.d/ceph + install -D -m 755 "$srcdir"/"$_pkgname".initd "$pkgdir"/etc/init.d/ceph + install -D -m 644 "$srcdir"/"$_pkgname".confd "$pkgdir"/etc/conf.d/ceph + + # move mount.* binaries to /sbin + mkdir -p "$pkgdir"/sbin + mv "$pkgdir"/usr/sbin/mount.* "$pkgdir"/sbin + + install -m 644 -D src/etc-rbdmap "$pkgdir"/etc/ceph/rbdmap + install -m 644 -D src/logrotate.conf "$pkgdir"/etc/logrotate.d/ceph + install -m 644 -D etc/sysctl/90-ceph-osd.conf "$pkgdir"/etc/sysctl.d/90-ceph-osd.conf + + # udev rules + install -m 644 -D udev/50-rbd.rules "$pkgdir"/usr/lib/udev/rules.d/50-rbd.rules + # sudoers.d + install -m 600 -D sudoers.d/ceph-smartctl "$pkgdir"/etc/sudoers.d/ceph-smartctl + + # delete systemd related stuff + rm -f "$pkgdir"/usr/sbin/ceph-volume-systemd + + # move docs to docs + mkdir -p "$pkgdir"/usr/share/doc/ceph/dashboard + mv "$pkgdir"/usr/share/ceph/mgr/dashboard/*.rst "$pkgdir"/usr/share/doc/ceph/dashboard/ + mv "$pkgdir"/usr/share/ceph/mgr/cephadm/HACKING.rst "$pkgdir"/usr/share/doc/ceph/cephadm-HACKING.rst +} + +check() { + cd "$builddir"/build + CTEST_OUTPUT_ON_FAILURE=TRUE ctest +} + +_dev() { + mkdir -p "$subpkgdir" + depends="$pkgname-dev=$pkgver-r$pkgrel" +} + +# This subpackage is a little weird and a side effect of trying to keep +# the daemon packages as small as possible. We might be able to roll this into +# the base/common package later if we can slim those down or break them up in a +# different way +user() { + pkgdesc="Minimal package to create a user for other ceph packages." + depends="" + install="$pkgname-user.pre-install" + _default_replace_majorversion + + mkdir -p "$subpkgdir" +} + +base() { + pkgdesc="Base is the package that includes all the files shared amongst ceph servers" + depends="$_base_deps + $pkgname-user=$pkgver-r$pkgrel + $pkgname-common=$pkgver-r$pkgrel + librbd$_majorver=$pkgver-r$pkgrel + librados$_majorver=$pkgver-r$pkgrel + libcephfs$_majorver=$pkgver-r$pkgrel + " + _default_replace_majorversion + + amove usr/bin/ceph-crash \ + usr/bin/crushtool \ + usr/bin/*maptool \ + usr/bin/ceph-kvstore-tool \ + usr/bin/ceph-run \ + usr/sbin/ceph-create-keys \ + usr/libexec/ceph/ceph_common.sh \ + usr/lib/rados-classes/*.so* \ + usr/lib/ceph/erasure-code/libec_*.so* \ + usr/lib/ceph/compressor/libceph_*.so* \ + usr/lib/ceph/crypto/libceph_*.so* \ + usr/lib/ceph/extblkdev/*.so* \ + etc/logrotate.d/ceph + for dir in crash crash/posted tmp bootstrap-osd bootstrap-mds \ + bootstrap-rgw bootstrap-mgr bootstrap-rbd \ + bootstrap-rbd-mirror; do + + install -m 750 -o $_ceph_uid -g $_ceph_gid -d \ + "$subpkgdir"/var/lib/ceph/$dir + done +} + +common() { + pkgdesc="Common utilities to mount and interact with a ceph storage cluster." + depends="py3-cephfs$_majorver=$pkgver-r$pkgrel + py3-prettytable + py3-rados$_majorver=$pkgver-r$pkgrel + py3-rbd$_majorver=$pkgver-r$pkgrel + " + _default_replace_majorversion + + amove usr/bin/ceph \ + usr/bin/ceph-authtool \ + usr/bin/ceph-conf \ + usr/bin/ceph-rbdnamer \ + usr/bin/rados \ + usr/bin/rbd \ + usr/bin/rbdmap \ + usr/share/ceph/*.ceph.com* \ + etc/ceph/rbdmap + + amove "$(_py3_sitelib)"/ceph_argparse.py* "$(_py3_sitelib)"/ceph_daemon.py* + + amove usr/lib/udev/rules.d/50-rbd.rules + install -m 3770 -o $_ceph_uid -g $_ceph_gid -d \ + "$subpkgdir"/var/log/ceph + install -m 750 -o $_ceph_uid -g $_ceph_gid -d \ + "$subpkgdir"/var/lib/ceph +} + +mds() { + pkgdesc="Metadata server daemon for the Ceph distributed file system." + depends="$pkgname-base=$pkgver-r$pkgrel" + _default_replace_majorversion + + amove usr/bin/ceph-mds + install -m 750 -o $_ceph_uid -g $_ceph_gid -d \ + "$subpkgdir"/var/lib/ceph/mds +} + +mon() { + pkgdesc="Cluster monitor daemon virtual package for the Ceph distributed file system." + depends="$pkgname-base=$pkgver-r$pkgrel + $pkgname-mon-daemon=$pkgver-r$pkgrel + $pkgname-mon-tools=$pkgver-r$pkgrel + " + _default_replace_majorversion + + mkdir -p "$subpkgdir" +} + +mon_daemon() { + pkgdesc="Cluster monitor daemon for the Ceph distributed file system." + depends="$pkgname-user=$pkgver-r$pkgrel" + _default_replace_majorversion + + amove usr/bin/ceph-mon + install -m 750 -o $_ceph_uid -g $_ceph_gid -d \ + "$subpkgdir"/var/lib/ceph/mon +} + +mon_tools() { + pkgdesc="Cluster monitor tools for the Ceph distributed file system." + depends= + _default_replace_majorversion + + amove usr/bin/ceph-monstore-tool + install -m 750 -o $_ceph_uid -g $_ceph_gid -d \ + "$subpkgdir"/var/lib/ceph/mon +} + +ceph_fuse() { + pkgdesc="FUSE based client for Ceph distributed network file system." + depends= + _default_replace_majorversion + + amove usr/bin/ceph-fuse sbin/mount.fuse.ceph +} + +ceph_mount() { + pkgdesc="CephFS mount tools" + depends="librados$_majorver=$pkgver-r$pkgrel" + _default_replace_majorversion + + amove sbin/mount.ceph +} + +rbd_fuse() { + pkgdesc="FUSE based client to map Ceph rbd images to files." + depends= + _default_replace_majorversion + + amove usr/bin/rbd-fuse +} + +rbd_mirror() { + pkgdesc="Daemon for mirroring RBD images between Ceph clusters." + depends="$pkgname-common=$pkgver-r$pkgrel" + _default_replace_majorversion + + amove usr/bin/rbd-mirror +} + +rbd_nbd() { + pkgdesc="NBD based client to map Ceph rbd images to local device." + depends= + _default_replace_majorversion + + amove usr/bin/rbd-nbd +} + +radosgw() { + pkgdesc="Rados REST gateway which implements Amazon's S3 and OpenStack's Swift APIs." + depends="$pkgname-common=$pkgver-r$pkgrel oath-toolkit-liboath" + _default_replace_majorversion + + amove usr/bin/radosgw* + amove usr/bin/rgw-* + mkdir -p "$subpkgdir"/var/lib/ceph/radosgw +} + +osd() { + pkgdesc="Object storage daemon virtual package for the Ceph distributed file system." + depends="$pkgname-osd-daemon=$pkgver-r$pkgrel + $pkgname-osd-tools=$pkgver-r$pkgrel + $pkgname-volume=$pkgver-r$pkgrel" + _default_replace_majorversion + + mkdir -p "$subpkgdir" +} + +osd_daemon() { + pkgdesc="Object storage daemon for the Ceph distributed file system." + depends="$_osd_daemon_deps $pkgname-user=$pkgver-r$pkgrel" + _default_replace_majorversion + + amove usr/bin/ceph-osd \ + usr/libexec/ceph/ceph-osd-prestart.sh \ + etc/sudoers.d/ceph-smartctl \ + etc/sysctl.d/90-ceph-osd.conf + install -m 750 -o $_ceph_uid -g $_ceph_gid -d \ + "$subpkgdir"/var/lib/ceph/osd +} + +osd_tools() { + pkgdesc="Object storage daemon tools for the Ceph distributed file system." + depends="$pkgname-base=$pkgver-r$pkgrel $_osd_tools_deps" + _default_replace_majorversion + + amove usr/bin/ceph-clsinfo usr/bin/ceph-*-tool + install -m 750 -o $_ceph_uid -g $_ceph_gid -d \ + "$subpkgdir"/var/lib/ceph/osd +} + +ceph_volume() { + pkgdesc="ceph-volume tool for the Ceph distributed file system." + depends="$_ceph_volume_deps" + _default_replace_majorversion + + amove usr/sbin/ceph-volume \ + "$(_py3_sitelib)"/ceph_volume "$(_py3_sitelib)"/ceph_volume-* +} + +librados() { + pkgdesc="RADOS distributed object store client library" + depends= + _default_replace_majorversion + + amove usr/lib/librados.so.* usr/lib/ceph/libceph-common.so.* +} + +_py3_rados() { + pkgdesc="Python libraries for the RADOS object store" + depends=py3-$pkgname-common=$pkgver-r$pkgrel + _default_replace_majorversion + + amove "$(_py3_sitelib)"/rados* +} + +libradosstriper() { + pkgdesc="RADOS striping library" + depends= + _default_replace_majorversion + + amove usr/lib/libradosstriper.so.* +} + +librbd() { + pkgdesc="RADOS block device client library" + depends= + _default_replace_majorversion + + amove usr/lib/librbd.so.* +} + +_py3_rbd() { + pkgdesc="Python libraries for the RADOS block device" + depends="py3-rados$_majorver=$pkgver-r$pkgrel" + _default_replace_majorversion + + amove "$(_py3_sitelib)"/rbd* +} + +libcephsqlite() { + pkgdesc="SQLite Virtual File System (VFS) on top of RADOS" + depends= + _default_replace_majorversion + + amove usr/lib/libcephsqlite.so* +} + +libcephfs() { + pkgdesc="Ceph distributed file system client library" + depends= + _default_replace_majorversion + + amove usr/lib/libcephfs.so.* +} + +mirror() { + pkgdesc="daemon for mirroring CephFS directory snapshots between Ceph clusters" + depends= + _default_replace_majorversion + + amove /usr/bin/cephfs-mirror +} + +shell() { + pkgdesc="interactive shell for the Ceph distributed file system" + depends="py3-rados$_majorver=$pkgver-r$pkgrel" + _default_replace_majorversion + + amove "$(_py3_sitelib)"/cephfs_shell* + amove /usr/bin/cephfs-shell +} + +top() { + pkgdesc="top like utility to display various filesystem metrics in realtime" + depends="py3-rados$_majorver=$pkgver-r$pkgrel" + _default_replace_majorversion + + amove "$(_py3_sitelib)"/cephfs_top* + amove /usr/bin/cephfs-top +} + +_py3_cephfs() { + pkgdesc="Python libraries for Ceph distributed file system" + depends="py3-rados$_majorver=$pkgver-r$pkgrel" + _default_replace_majorversion + + amove "$(_py3_sitelib)"/cephfs* +} + +_py3_ceph_common() { + pkgdesc="Python dependencies for $pkgname distributed file system" + depends="py3-setuptools py3-yaml" + _default_replace_majorversion + + amove "$(_py3_sitelib)"/ceph-*.egg-info "$(_py3_sitelib)"/ceph +} + +utils() { + pkgdesc="Ceph utils and recovery tools" + depends="$pkgname-common=$pkgver-r$pkgrel" + _default_replace_majorversion + + amove usr/bin/ceph-diff-sorted \ + usr/bin/ceph-post-file \ + usr/bin/ceph-syn \ + usr/bin/cephfs-data-scan \ + usr/bin/ceph-dencoder \ + usr/lib/ceph/denc \ + usr/bin/cephfs-journal-tool \ + usr/bin/cephfs-table-tool \ + usr/bin/rbd-replay* \ + usr/bin/crushdiff +} + +bash_completion() { + pkgdesc="Bash completions for Ceph" + depends= + _default_replace_majorversion + + install_if="ceph=$pkgver-r$pkgrel bash-completion" + amove etc/bash_completion.d/* +} + +mgr_dashboard() { + pkgdesc="Dashboard module for ceph-mgr" + depends=" + $pkgname-common=$pkgver-r$pkgrel + $pkgname-mgr=$pkgver-r$pkgrel + $_dashboard_deps + " + _default_replace_majorversion + + amove usr/share/ceph/mgr/dashboard +} + +mgr_diskpredicton_local() { + pkgdesc="diskprediction-local module for ceph-mgr" + depends="$pkgname-mgr=$pkgver-r$pkgrel + py3-numpy + py3-scikit-learn + py3-scipy + " + _default_replace_majorversion + + amove usr/share/ceph/mgr/diskprediction_local +} + +mgr_modules_core() { + pkgdesc="ceph manager modules which are always enabled" + depends=" + $_mgr_modules_deps + " + _default_replace_majorversion + + local _mod="alerts balancer crash devicehealth influx insights iostat localpool mirroring nfs orchestrator \ + osd_perf_query osd_support pg_autoscaler progress prometheus rbd_support restful selftest snap_schedule \ + stats status telegraf telemetry test_orchestrator volumes zabbix" + for _m in ${_mod}; do + amove usr/share/ceph/mgr/"$_m" + done +} + +mgr_rook() { + pkgdesc="rook module for ceph-mgr" + depends="$pkgname-mgr=$pkgver-r$pkgrel + py3-jsonpatch + py3-kubernetes" + _default_replace_majorversion + + amove usr/share/ceph/mgr/rook +} + +mgr_k8events() { + pkgdesc="kubernetes events module for ceph-mgr" + depends="$pkgname-mgr=$pkgver-r$pkgrel + py3-kubernetes + py3-yaml" + _default_replace_majorversion + + amove usr/share/ceph/mgr/k8sevents +} + +mgr() { + pkgdesc="Ceph Manager Daemon" + depends="$pkgname-base=$pkgver-r$pkgrel + $pkgname-mgr-modules-core=$pkgver-r$pkgrel" + _default_replace_majorversion + + amove usr/bin/ceph-mgr usr/share/ceph/mgr + + install -m 750 -o $_ceph_uid -g $_ceph_gid -d \ + "$subpkgdir"/var/lib/ceph/mgr +} + +cephadm() { + pkgdesc="cephadm tool $pkgver" + depends="lvm2" + _default_replace_majorversion + + amove usr/sbin/cephadm +} + +_default_replace_majorversion() { + if [ "$_default_ceph" = "yes" ]; then + local stripped="${subpkgname/"$_majorver"/}" + # we want to replace both the generic name (ceph-) and the prior major (ceph1X-) + replaces="$stripped ${subpkgname/"$_majorver"/"$(( _majorver - 1 ))"}" + provides="$stripped=$pkgver-r$pkgrel" + fi +} + +sha512sums=" +1c50a1860a20917a563244ff50ff1a503f369921a7608b9ddf84107fb71e8f5c580cef183f45b35eb4f889eda36608dad2a26e29b0950dfaf8205b60a0fb4c18 ceph-19.1.1.tar.gz +110bdbcb40216c7ed155a8d23020784741b4992d895f4f04a146d275506e4e68053854d3b063b41e9c9b3e3e4f95b6b90602f92c185c853c0d8f47ad0c6b7121 ceph.confd +ce5f162501f6b67fe254546dddf880d1a5b1d1a0fa69e0b1918de17e8da45c5c6124512b8cbd98b76f29d931403de0d11c5ffd330ed8ee1f4dc75bb04baecae3 ceph.initd +9d41023c3265b78186457810ce62562455358d48775da2a382e13212b1e9f50bc909a36806d728a2dd2028c1529e1aa802b92699fe1fc5cb2df07c7086a3d4a8 10-isal_crypto.patch +1edb30da73fa99d8f20889bd5a0f1405019c7268190bc6c2b10dc3835f5301bf15692f6bbf11174b9c780c07678ea848e81b3b727d6966bbb76107c2b8000601 10-isal.patch +94687578411bf0de1b17555ed81c188c88ea63ac4a25993bd8fde9cf68afbbfbdec7b2d7c54fdcfbd4aed4eb78754e8061c308955596cbe037ff15b575874cc6 10-musl-fixes.patch +54ff5e84b3b6fea2e259b74d4cba9c0bedda89ad6b11ec8be24507bca1c6175912b71b9006ea616af8d7527ae7339c24d74c68b4379ebc110b1315d0e3d47f85 10-xxhash.patch +211e6f5f8fc962878196ec917984781eb4a8a9495bcc8d1729b34ac66abd2d4a0b7388ae2caee9d5deb664d54860d120a37215924625e82eac9bfca16179667a 11-dump_time_header_impl.patch +149cdeccedcd9cf951769814a93b2eea654fd98361853ae040c18862e133c4419d3cf0de2d77dc5328e9c437122424159c6384c74e55e297309f58ae9933e36f 11-lfs.patch +253a7bf9fa6a68547f2c9269570be86aa659ef75ab0ed4c9d1a53be70de1ca6079508f19fe5ddb02ed9edda349e121037f8ed4d6b5b0e640edaab863ce6b280d 11-parse_rfc1123_alt.patch +b947a8f13e08b1cfaad82906ac04fa875c651cff660e64c43c7ba52eedb2a79fb2dc276f8e3ac9ee7d1264414bcee78640ec0cfc31600394313ddb0c6baf76c8 21-yarn.patch +abb3cab9c01cc3d6d42a9858678059a8c9c43bda2649bf97b489fdc205eb10ae27f9fb7302062e0fb41f5cffddbfc2ae529130569034f373732a0a5d33aba86e 35-fix_ErasureCodeShec.patch +71ffe6f3263b3546bb3d3593981a288ee8136d44f8c1e734ecfae65b71ea3f7c91e6040c337f237fa41269328378c955e93ed13b9d35e0ad8efd785b75d0f595 47-bcrypt.patch +afef1cc7e43f500d95d2ffd1687cfcb756e9d8dec729186a25d513d4401b38f00edac922562a161575b1da1a65ded3e99d01cf34f9bc329f6d08cf2b896acd0c gcc13.patch +7dbb53629339d702e604314102ae3908ba8adfb0f850858e88727ab13d1e8081ea426048f1c9293fadc0551a4c38954bcaf0a44e37122db9b21355aa4033215b gcc14.patch +8290fdfe74573ad5558066425f59185230f040e01c6a5437116b27715914dc56fda86a1b73fbed7abf727a574f1d50fe643c62958d9ce7162e769b6eaf880d80 boost-url.patch +c2e047da6f721bf64053571bbad60c5948a2bfd7c28f01b4816a274c2f0b8a60812344030d9b2cfd224edaf54fcfa94858d7ba5d3c0d3e2519585f3e61d34cda ppc64le.patch +" diff --git a/testing/ceph19/boost-url.patch b/testing/ceph19/boost-url.patch new file mode 100644 index 00000000000..6846b4a39ca --- /dev/null +++ b/testing/ceph19/boost-url.patch @@ -0,0 +1,58 @@ +diff -Nurp a/CMakeLists.txt b/CMakeLists.txt +--- a/CMakeLists.txt 2024-07-28 07:11:18.290388744 +0000 ++++ b/CMakeLists.txt 2024-07-28 07:13:12.491899849 +0000 +@@ -666,7 +666,7 @@ option(WITH_SYSTEM_BOOST "require and bu + # Boost::thread depends on Boost::atomic, so list it explicitly. + set(BOOST_COMPONENTS + atomic chrono thread system regex random program_options date_time +- iostreams context coroutine) ++ iostreams context coroutine url) + set(BOOST_HEADER_COMPONENTS container) + + if(WITH_MGR) +diff -Nurp a/src/mds/BoostUrlImpl.cc b/src/mds/BoostUrlImpl.cc +--- a/src/mds/BoostUrlImpl.cc 2024-07-28 07:12:56.769692199 +0000 ++++ b/src/mds/BoostUrlImpl.cc 1970-01-01 00:00:00.000000000 +0000 +@@ -1,8 +0,0 @@ +-/* +- * https://www.boost.org/doc/libs/1_82_0/libs/url/doc/html/url/overview.html#url.overview.requirements +- * +- * To use the library as header-only; that is, to eliminate the requirement +- * to link a program to a static or dynamic Boost.URL library, +- * simply place the following line in exactly one source file in your project. +- */ +-#include +diff -Nurp a/src/mds/CMakeLists.txt b/src/mds/CMakeLists.txt +--- a/src/mds/CMakeLists.txt 2024-07-28 07:11:18.298388851 +0000 ++++ b/src/mds/CMakeLists.txt 2024-07-28 07:14:59.747316408 +0000 +@@ -45,12 +45,12 @@ set(mds_srcs + QuiesceDbManager.cc + QuiesceAgent.cc + MDSRankQuiesce.cc +- BoostUrlImpl.cc + ${CMAKE_SOURCE_DIR}/src/common/TrackedOp.cc + ${CMAKE_SOURCE_DIR}/src/common/MemoryModel.cc + ${CMAKE_SOURCE_DIR}/src/osdc/Journaler.cc + ${CMAKE_SOURCE_DIR}/src/mgr/MDSPerfMetricTypes.cc) + add_library(mds STATIC ${mds_srcs}) + target_link_libraries(mds PRIVATE +- heap_profiler cpu_profiler osdc ${LUA_LIBRARIES}) ++ heap_profiler cpu_profiler osdc ${LUA_LIBRARIES} ++ Boost::url) + target_include_directories(mds PRIVATE "${LUA_INCLUDE_DIR}") +diff -Nurp a/src/test/mds/CMakeLists.txt b/src/test/mds/CMakeLists.txt +--- a/src/test/mds/CMakeLists.txt 2024-07-28 07:11:18.303388917 +0000 ++++ b/src/test/mds/CMakeLists.txt 2024-07-28 07:13:12.492899862 +0000 +@@ -18,11 +18,10 @@ target_link_libraries(unittest_mds_sessi + add_executable(unittest_mds_quiesce_db + TestQuiesceDb.cc + ../../../src/mds/QuiesceDbManager.cc +- ../../../src/mds/BoostUrlImpl.cc + $ + ) + add_ceph_unittest(unittest_mds_quiesce_db) +-target_link_libraries(unittest_mds_quiesce_db ceph-common global) ++target_link_libraries(unittest_mds_quiesce_db ceph-common global Boost::url) + + # unittest_mds_quiesce_agent + add_executable(unittest_mds_quiesce_agent diff --git a/testing/ceph19/ceph.confd b/testing/ceph19/ceph.confd new file mode 100644 index 00000000000..32737b10ee8 --- /dev/null +++ b/testing/ceph19/ceph.confd @@ -0,0 +1,17 @@ +# Original source: https://gitweb.gentoo.org/repo/gentoo.git/tree/sys-cluster/ceph/files/ceph.confd-r5 + +# Example + +# default ceph conf file +#ceph_conf="/etc/ceph/ceph.conf" + +# Set RADOSGW_WANT_NAME_PARAM=y in order to make the init script add +# a --name=client.${RC_SVCNAME} parameter to command_args for radosgw.* +# service instances. This will make the service use a key by the name +# of client.${RC_SVCNAME} instead of the default client.admin key. +# A setting like this in the ceph config file can be used to customize +# the rgw_data and keyring paths used by radosgw instances: +# [client] +# rgw_data = /var/lib/ceph/radosgw/$cluster-$id +# keyring = /var/lib/ceph/radosgw/$cluster-$id/keyring +RADOSGW_WANT_NAME_PARAM=n diff --git a/testing/ceph19/ceph.initd b/testing/ceph19/ceph.initd new file mode 100644 index 00000000000..c522efa694a --- /dev/null +++ b/testing/ceph19/ceph.initd @@ -0,0 +1,118 @@ +#!/sbin/openrc-run + +# Original source: https://gitweb.gentoo.org/repo/gentoo.git/tree/sys-cluster/ceph/files/ceph.initd-r12 + +# make sure /etc/conf.d/ceph gets loaded for ceph-mon etc +_CONFD_FILE="${RC_SERVICE%/*}/../conf.d/${RC_SVCNAME%-*}" +if [ -r "${_CONFD_FILE}" ]; then + . "${_CONFD_FILE}" || exit 1 +fi + +: "${ceph_conf:=/etc/ceph/ceph.conf}" +daemon_type="${RC_SVCNAME#ceph-}" +daemon_type="${daemon_type%%.*}" +daemon_id="${RC_SVCNAME#ceph-*.}" +daemon_id="${daemon_id:-0}" +: "${rundir:=/run/ceph}" +: "${user:=ceph}" +: "${group:=ceph}" +: "${rc_ulimit:=-n 1048576 -u 1048576}" + +pidfile="${rundir}/supervisor-${daemon_type}.${daemon_id}.pid" +daemon_pidfile="${rundir}/${daemon_type}.${daemon_id}.pid" + +command="/usr/bin/${RC_SVCNAME%%.*}" +command_args="-i ${daemon_id} --pid-file ${daemon_pidfile} -c ${ceph_conf}" +extra_commands="${extra_commands} reload" +command_args_foreground="--foreground" + +retry="${CEPH_TERMTIMEOUT:-TERM/120/KILL/5}" +start_stop_daemon_args="--user ${user} --group ${group}" +supervise_daemon_args="--user ${user} --group ${group}" + +: "${supervisor:=supervise-daemon}" +: "${stdout:=/var/log/ceph/ceph}" +: "${stderr:=/var/log/ceph/ceph}" +: "${respawn_delay:=10}" +: "${respawn_max:=5}" +: "${respawn_period:=1800}" + +: "${osd_respawn_delay:=15}" +: "{osd_respawn_max:=10}" + +: "{radosgw_respawn_max:=5}" +: "${radosgw_respawn_period:=30}" + +depend() { + use dns logger + after net ntpd ntp-client chronyd + before netmount +} + +is_type_valid() { + case ${daemon_type} in + mon|mds|osd|mgr|radosgw) return 0;; + *) return 1;; + esac +} + +start_pre() { + local log_dir + export CEPH_CONF="${ceph_conf}" + + checkpath -d -q -o "${user}:${group}" "${rundir}" + + if ! is_type_valid ;then + eerror "Please give valid Ceph Server Type: mds, mon, osd" + return 1 + + elif pgrep -f "[c]eph-${daemon_type} -i ${daemon_id} "; then + eerror "${daemon_type}.${daemon_id} is still running, refusing to start" + return 1 + fi + + if [ -n "${bluestore_osd_fsid}" ]; then + einfo "Mounting Bluestore" + ceph-volume lvm activate "${daemon_id}" "${bluestore_osd_fsid}" --no-systemd + fi + + if [ "${daemon_type}" = radosgw ] && [ "${RADOSGW_WANT_NAME_PARAM}" = y ]; then + command_args="${command_args} --name client.${daemon_id}" + fi + + local arg_name arg_val repl_arg_name + for arg_name in stdout stderr respawn_delay respawn_max respawn_period; do + eval arg_val="\${${daemon_type}_${arg_name}}" + + if [ -z "${arg_val}" ]; then + eval arg_val="\${${arg_name}}" + else + eval "${arg_name}=\"${arg_val}\"" + fi + + if [ "${arg_name}" = "stderr" ] || [ "${arg_name}" = "stdout" ]; then + local log_file log_postfix + log_postfix=".${daemon_id}-${arg_name}.log" + log_file="${arg_val}" + + if [ "${log_file}" != /dev/null ]; then + log_file="${log_file}${log_postfix}" + + log_dir="$(dirname "${log_file}")" + checkpath -m 0755 -o "${user}:${group}" -d "${log_dir}" + fi + + repl_arg_name="$(printf -- "%s\n" "${arg_name}" | tr _ -)" + supervise_daemon_args="${supervise_daemon_args} --${repl_arg_name}=${log_file}" + fi + done +} + +reload() { + ebegin "Reloading Ceph ${daemon_type}.${daemon_id}" + start-stop-daemon --signal 1 "${start_stop_daemon_args}" + eend ${?} +} + +# vim:ft=gentoo-init-d:ts=4:sts=4:sw=4:noet: + diff --git a/testing/ceph19/ceph19-user.pre-install b/testing/ceph19/ceph19-user.pre-install new file mode 100644 index 00000000000..bae4f09dc73 --- /dev/null +++ b/testing/ceph19/ceph19-user.pre-install @@ -0,0 +1,5 @@ +#!/bin/sh + +addgroup ceph -g 167 -S 2>/dev/null +adduser ceph -u 167 -S -G ceph -s /sbin/nologin -h /var/lib/ceph -g "Ceph Daemons" 2> /dev/null +exit 0 diff --git a/testing/ceph19/gcc13.patch b/testing/ceph19/gcc13.patch new file mode 100644 index 00000000000..a8fbb949b07 --- /dev/null +++ b/testing/ceph19/gcc13.patch @@ -0,0 +1,31 @@ +--- a/src/include/buffer_fwd.h ++++ b/src/include/buffer_fwd.h +@@ -1,6 +1,8 @@ + #ifndef BUFFER_FWD_H + #define BUFFER_FWD_H + ++#include ++ + namespace ceph { + namespace buffer { + inline namespace v15_2_0 { +--- a/src/client/Trace.h ++++ b/src/client/Trace.h +@@ -18,6 +18,7 @@ + + #include + ++#include + #include + #include + #include +--- a/src/common/pretty_binary.cc ++++ b/src/common/pretty_binary.cc +@@ -4,6 +4,7 @@ + #include "pretty_binary.h" + #include + #include ++#include + + std::string pretty_binary_string_reverse(const std::string& pretty) + { diff --git a/testing/ceph19/gcc14.patch b/testing/ceph19/gcc14.patch new file mode 100644 index 00000000000..129f50e2857 --- /dev/null +++ b/testing/ceph19/gcc14.patch @@ -0,0 +1,141 @@ +From 0eace4ea9ea42412d4d6a16d24a8660642e41173 Mon Sep 17 00:00:00 2001 +From: Radoslaw Zarzynski +Date: Wed, 24 Jan 2024 17:22:44 +0000 +Subject: [PATCH] common/dout: fix FTBFS on GCC 14 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The following problem has been reported by Kaleb Keithley: + +``` +/builddir/build/BUILD/ceph-18.2.1/src/osd/osd_types.h: In lambda function: +/builddir/build/BUILD/ceph-18.2.1/src/common/dout.h:184:73: error: call to non-‘constexpr’ function ‘virtual unsigned int DoutPrefixProvider::get_subsys() const’ + 184 | dout_impl(pdpp->get_cct(), ceph::dout::need_dynamic(pdpp->get_subsys()), v) \ + | ~~~~~~~~~~~~~~~~^~ +/builddir/build/BUILD/ceph-18.2.1/src/common/dout.h:155:58: note: in definition of macro ‘dout_impl’ + 155 | return (cctX->_conf->subsys.template should_gather()); \ + | ^~~ +/builddir/build/BUILD/ceph-18.2.1/src/osd/osd_types.h:3617:3: note: in expansion of macro ‘ldpp_dout’ + 3617 | ldpp_dout(dpp, 10) << "build_prior all_probe " << all_probe << dendl; + | ^~~~~~~~~ +``` + +For details of the problem and the idea behind the fix, +please refer to the comment this commit brings to `dout.h`. + +The minimized replicator that the facilitated Goldbot-based +investigation: + +```cpp +namespace ceph::dout { + +template +struct dynamic_marker_t { + T value; + // constexpr ctor isn't needed as it's an aggregate type + constexpr operator T() const { return value; } +}; + +template +constexpr dynamic_marker_t need_dynamic(T&& t) { + return dynamic_marker_t{ std::forward(t) }; +} + +template +struct is_dynamic : public std::false_type {}; + +template +struct is_dynamic> : public std::true_type {}; + +} // ceph::dout + +struct subsys_t { + template + bool should_gather() const { + return true; + } + bool should_gather(const unsigned sub, int level) const { + return false; + } +}; + +static subsys_t subsys; + + do { \ + const bool should_gather = [&](const auto cctX) { \ + if constexpr (ceph::dout::is_dynamic::value || \ + ceph::dout::is_dynamic::value) { \ + std::cout << "the dynamic path" << std::endl; \ + return subsys.should_gather(sub, v); \ + } else { \ + /* The parentheses are **essential** because commas in angle \ + * brackets are NOT ignored on macro expansion! A language's \ + * limitation, sorry. */ \ + std::cout << "the static path" << std::endl; \ + /*return subsys.should_gather(sub, v);*/ \ + return (subsys.template should_gather()); \ + } \ + }(cct); \ + } while (0) + + if (decltype(auto) pdpp = (dpp); pdpp) /* workaround -Wnonnull-compare for 'this' */ \ + dout_impl(42, sub, v) + + if (decltype(auto) pdpp = (dpp); pdpp) /* workaround -Wnonnull-compare for 'this' */ \ + dout_impl(42, ceph::dout::need_dynamic(42), v) + +int main() { + std::random_device dev; + std::mt19937 rng(dev()); + std::uniform_int_distribution dist6(1,6); // distribution in range [1, 6] + + int sub = dist6(rng); + ldpp_dout("mocked out", sub); + //ldpp_subdout("mocked out", 4, 3); +} +``` + +Fixes: https://tracker.ceph.com/issues/64050 +Signed-off-by: Radoslaw Zarzynski +--- + src/common/dout.h | 20 +++++++++++++++----- + 1 file changed, 15 insertions(+), 5 deletions(-) + +diff --git a/src/common/dout.h b/src/common/dout.h +index 4cd60efff8fef..6516060c5438e 100644 +--- a/src/common/dout.h ++++ b/src/common/dout.h +@@ -144,17 +144,27 @@ struct is_dynamic> : public std::true_type {}; + #else + #define dout_impl(cct, sub, v) \ + do { \ +- const bool should_gather = [&](const auto cctX) { \ +- if constexpr (ceph::dout::is_dynamic::value || \ +- ceph::dout::is_dynamic::value) { \ ++ const bool should_gather = [&](const auto cctX, auto sub_, auto v_) { \ ++ /* The check is performed on `sub_` and `v_` to leverage the C++'s \ ++ * guarantee on _discarding_ one of blocks of `if constexpr`, which \ ++ * includes also the checks for ill-formed code (`should_gather<>` \ ++ * must not be feed with non-const expresions), BUT ONLY within \ ++ * a template (thus the generic lambda) and under the restriction \ ++ * it's dependant on a parameter of this template). \ ++ * GCC prior to v14 was not enforcing these restrictions. */ \ ++ if constexpr (ceph::dout::is_dynamic::value || \ ++ ceph::dout::is_dynamic::value) { \ + return cctX->_conf->subsys.should_gather(sub, v); \ + } else { \ ++ constexpr auto sub_helper = static_cast(sub); \ ++ constexpr auto v_helper = static_cast(v); \ + /* The parentheses are **essential** because commas in angle \ + * brackets are NOT ignored on macro expansion! A language's \ + * limitation, sorry. */ \ +- return (cctX->_conf->subsys.template should_gather()); \ ++ return (cctX->_conf->subsys.template should_gather()); \ + } \ +- }(cct); \ ++ }(cct, sub, v); \ + \ + if (should_gather) { \ + ceph::logging::MutableEntry _dout_e(v, sub); \ diff --git a/testing/ceph19/ppc64le.patch b/testing/ceph19/ppc64le.patch new file mode 100644 index 00000000000..adfe5f7161d --- /dev/null +++ b/testing/ceph19/ppc64le.patch @@ -0,0 +1,85 @@ +From 188612538ea06890d27321a5550c93a817ea9bc2 Mon Sep 17 00:00:00 2001 +From: Guna K Kambalimath +Date: Tue, 20 Aug 2024 15:36:52 +0530 +Subject: [PATCH] Fixes build failure on IBM Power + +--- + src/common/CMakeLists.txt | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt +index c3fd51d26468f..8b9f3339e3885 100644 +--- a/src/common/CMakeLists.txt ++++ b/src/common/CMakeLists.txt +@@ -225,6 +225,7 @@ elseif(HAVE_POWER8) + list(APPEND crc32_srcs + crc32c_ppc_asm.S + crc32c_ppc_fast_zero_asm.S) ++ set_source_files_properties(crc32c_ppc_asm.S PROPERTIES COMPILE_FLAGS -D__ASSEMBLY__) + endif(HAVE_PPC64LE) + elseif(HAVE_ARMV8_CRC) + list(APPEND crc32_srcs +From 83782c9ba033ce9008df287281f1c66dbf8ee28e Mon Sep 17 00:00:00 2001 +From: Guna K Kambalimath +Date: Tue, 20 Aug 2024 17:27:44 +0530 +Subject: [PATCH] Remove dynamic linking for power + +--- + src/arch/CMakeLists.txt | 6 +++++- + src/common/CMakeLists.txt | 6 +++++- + 2 files changed, 10 insertions(+), 2 deletions(-) + +diff --git a/src/arch/CMakeLists.txt b/src/arch/CMakeLists.txt +index e95d9bbb81fa8..d0e635dcd65e6 100644 +--- a/src/arch/CMakeLists.txt ++++ b/src/arch/CMakeLists.txt +@@ -11,4 +11,8 @@ elseif(HAVE_S390X) + list(APPEND arch_srcs s390x.c) + endif() + +-add_library(arch OBJECT ${arch_srcs}) ++if(HAVE_POWER8) ++ add_library(arch STATIC ${arch_srcs}) ++else() ++ add_library(arch OBJECT ${arch_srcs}) ++endif() +\ No newline at end of file +diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt +index 8b9f3339e3885..6cdbb169f2105 100644 +--- a/src/common/CMakeLists.txt ++++ b/src/common/CMakeLists.txt +@@ -237,7 +237,11 @@ elseif(HAVE_S390X) + ) + endif(HAVE_INTEL) + +-add_library(crc32 OBJECT ${crc32_srcs}) ++if(HAVE_POWER8) ++ add_library(crc32 STATIC ${crc32_srcs}) ++else() ++ add_library(crc32 OBJECT ${crc32_srcs}) ++endif() + + if(HAVE_ARMV8_CRC) + set_target_properties(crc32 PROPERTIES +From 0efec175a0abc764a4aa883f27d2c13488f668c6 Mon Sep 17 00:00:00 2001 +From: Guna K Kambalimath +Date: Tue, 20 Aug 2024 17:38:54 +0530 +Subject: [PATCH] Removing set properties + +--- + src/common/CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt +index 6cdbb169f2105..b25b4bff570a3 100644 +--- a/src/common/CMakeLists.txt ++++ b/src/common/CMakeLists.txt +@@ -225,7 +225,7 @@ elseif(HAVE_POWER8) + list(APPEND crc32_srcs + crc32c_ppc_asm.S + crc32c_ppc_fast_zero_asm.S) +- set_source_files_properties(crc32c_ppc_asm.S PROPERTIES COMPILE_FLAGS -D__ASSEMBLY__) ++ #set_source_files_properties(crc32c_ppc_asm.S PROPERTIES COMPILE_FLAGS -D__ASSEMBLY__) + endif(HAVE_PPC64LE) + elseif(HAVE_ARMV8_CRC) + list(APPEND crc32_srcs