Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 040a2443aa | |||
| ce7293d6ac | |||
| 99e2862950 | |||
| 7bee4683fe | |||
| 336d95ffe1 | |||
| 9e40e8463a | |||
| 174d85b528 | |||
| ef7983bda9 | |||
| c77f93f3c6 | |||
| 9617094f5b |
+27
-28
@@ -1,27 +1,6 @@
|
||||
--- ceph-20.0.0-1954-g77a7c83d/src/boost/libs/context/src/asm/jump_x86_64_sysv_elf_gas.S.orig 2025-05-19 18:28:37.137194693 -0400
|
||||
+++ ceph-20.0.0-1954-g77a7c83d/src/boost/libs/context/src/asm/jump_x86_64_sysv_elf_gas.S 2025-05-19 18:30:54.292857720 -0400
|
||||
@@ -144,4 +144,18 @@
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
+
|
||||
+.section .note.gnu.property
|
||||
+.align=8
|
||||
+
|
||||
+ .byte 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00
|
||||
+ .byte 0x05, 0x00, 0x00, 0x00, 0x47, 0x4E, 0x55, 0x00
|
||||
+ .byte 0x00, 0x00, 0x00, 0xC0, 0x04, 0x00, 0x00, 0x00
|
||||
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
+ .byte 0x01, 0x00, 0x00, 0xC0, 0x04, 0x00, 0x00, 0x00
|
||||
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
+ .byte 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00
|
||||
+ .byte 0x05, 0x00, 0x00, 0x00, 0x47, 0x4E, 0x55, 0x00
|
||||
+ .byte 0x02, 0x00, 0x00, 0xC0, 0x04, 0x00, 0x00, 0x00
|
||||
+ .byte 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
# endif
|
||||
--- ceph-20.0.0-1954-g77a7c83d/src/boost/libs/context/src/asm/make_x86_64_sysv_elf_gas.S.orig 2025-05-19 18:28:22.611442193 -0400
|
||||
+++ ceph-20.0.0-1954-g77a7c83d/src/boost/libs/context/src/asm/make_x86_64_sysv_elf_gas.S 2025-05-19 18:31:01.037742795 -0400
|
||||
@@ -159,4 +159,18 @@
|
||||
--- ceph-17.2.6/src/boost/libs/context/src/asm/make_x86_64_sysv_elf_gas.S.orig 2023-04-30 14:25:35.009605033 -0400
|
||||
+++ ceph-17.2.6/src/boost/libs/context/src/asm/make_x86_64_sysv_elf_gas.S 2023-04-30 14:28:32.239465067 -0400
|
||||
@@ -80,3 +80,18 @@
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
@@ -39,10 +18,30 @@
|
||||
+ .byte 0x05, 0x00, 0x00, 0x00, 0x47, 0x4E, 0x55, 0x00
|
||||
+ .byte 0x02, 0x00, 0x00, 0xC0, 0x04, 0x00, 0x00, 0x00
|
||||
+ .byte 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
# endif
|
||||
--- ceph-20.0.0-1954-g77a7c83d/src/boost/libs/context/src/asm/ontop_x86_64_sysv_elf_gas.S.orig 2025-05-19 18:29:35.836194529 -0400
|
||||
+++ ceph-20.0.0-1954-g77a7c83d/src/boost/libs/context/src/asm/ontop_x86_64_sysv_elf_gas.S 2025-05-19 18:31:15.172501956 -0400
|
||||
@@ -137,3 +137,17 @@
|
||||
+
|
||||
--- ceph-17.2.6/src/boost/libs/context/src/asm/jump_x86_64_sysv_elf_gas.S.orig 2023-04-30 14:25:35.008605050 -0400
|
||||
+++ ceph-17.2.6/src/boost/libs/context/src/asm/jump_x86_64_sysv_elf_gas.S 2023-04-30 14:27:50.145210847 -0400
|
||||
@@ -89,3 +89,17 @@
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
+
|
||||
+.section .note.gnu.property
|
||||
+.align=8
|
||||
+
|
||||
+ .byte 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00
|
||||
+ .byte 0x05, 0x00, 0x00, 0x00, 0x47, 0x4E, 0x55, 0x00
|
||||
+ .byte 0x00, 0x00, 0x00, 0xC0, 0x04, 0x00, 0x00, 0x00
|
||||
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
+ .byte 0x01, 0x00, 0x00, 0xC0, 0x04, 0x00, 0x00, 0x00
|
||||
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
+ .byte 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00
|
||||
+ .byte 0x05, 0x00, 0x00, 0x00, 0x47, 0x4E, 0x55, 0x00
|
||||
+ .byte 0x02, 0x00, 0x00, 0xC0, 0x04, 0x00, 0x00, 0x00
|
||||
+ .byte 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
--- ceph-17.2.6/src/boost/libs/context/src/asm/ontop_x86_64_sysv_elf_gas.S.orig 2023-04-30 14:25:35.009605033 -0400
|
||||
+++ ceph-17.2.6/src/boost/libs/context/src/asm/ontop_x86_64_sysv_elf_gas.S 2023-04-30 14:29:30.402434597 -0400
|
||||
@@ -92,3 +92,17 @@
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
--- ceph/src/CMakeLists.txt.orig 2023-11-01 11:53:53.618167190 -0400
|
||||
+++ ceph/src/CMakeLists.txt 2023-11-01 13:52:51.292643490 -0400
|
||||
@@ -625,6 +625,7 @@
|
||||
add_subdirectory(perfglue)
|
||||
|
||||
add_library(rados_snap_set_diff_obj OBJECT librados/snap_set_diff.cc)
|
||||
+add_dependencies(rados_snap_set_diff_obj legacy-option-headers)
|
||||
|
||||
option(WITH_LIBRADOSSTRIPER "build with libradosstriper support" ON)
|
||||
|
||||
@@ -881,6 +882,7 @@
|
||||
add_library(krbd STATIC krbd.cc
|
||||
$<TARGET_OBJECTS:parse_secret_objs>)
|
||||
target_link_libraries(krbd keyutils::keyutils)
|
||||
+ add_dependencies(krbd legacy-option-headers)
|
||||
endif()
|
||||
add_subdirectory(librbd)
|
||||
if(WITH_FUSE)
|
||||
@@ -0,0 +1,41 @@
|
||||
From f5d3e9146d9ceb12858bc94d60090bd851b1c088 Mon Sep 17 00:00:00 2001
|
||||
From: Adam Emerson <aemerson@redhat.com>
|
||||
Date: Wed, 20 Dec 2023 13:51:21 -0500
|
||||
Subject: [PATCH] test/neorados: Use two fewer GTest internals
|
||||
|
||||
To get coroutine tests working, I used some internals. Two of these
|
||||
are no longer available in newer versions. Since they can be
|
||||
implemented with regular old C++ features, use those.
|
||||
|
||||
This fixes an FTBFS on Fedora Rawhide introduced in
|
||||
`35231f7251ed70d8d817ee7e727d9763669d101f`.
|
||||
|
||||
Signed-off-by: Adam Emerson <aemerson@redhat.com>
|
||||
---
|
||||
src/test/neorados/common_tests.h | 12 ++++++++----
|
||||
1 file changed, 8 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/test/neorados/common_tests.h b/src/test/neorados/common_tests.h
|
||||
index 9610f08f643f3..396432e417e84 100644
|
||||
--- a/src/test/neorados/common_tests.h
|
||||
+++ b/src/test/neorados/common_tests.h
|
||||
@@ -391,10 +391,14 @@ class NeoRadosECTest : public NeoRadosTestBase {
|
||||
public: \
|
||||
GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() = default; \
|
||||
~GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() override = default; \
|
||||
- GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \
|
||||
- test_name)); \
|
||||
- GTEST_DISALLOW_MOVE_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \
|
||||
- test_name)); \
|
||||
+ GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)( \
|
||||
+ const GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)&) = delete; \
|
||||
+ GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)& operator =( \
|
||||
+ const GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)&) = delete; \
|
||||
+ GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)( \
|
||||
+ GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)&&) = delete; \
|
||||
+ GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)& operator =( \
|
||||
+ GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)&&) = delete; \
|
||||
\
|
||||
private: \
|
||||
boost::asio::awaitable<void> CoTestBody() override; \
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
--- ceph-18.2.3/src/boost/boost/python/call_method.hpp.orig 2024-06-07 11:14:58.579734749 -0400
|
||||
+++ ceph-18.2.3/src/boost/boost/python/call_method.hpp 2024-06-07 11:19:06.754520504 -0400
|
||||
@@ -59,7 +59,7 @@
|
||||
)
|
||||
{
|
||||
PyObject* const result =
|
||||
- PyEval_CallMethod(
|
||||
+ PyObject_CallMethod(
|
||||
self
|
||||
, const_cast<char*>(name)
|
||||
, const_cast<char*>("(" BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_FIXED, "O") ")")
|
||||
@@ -0,0 +1,21 @@
|
||||
--- ceph-19.1.0/src/cpp_redis/CMakeLists.txt.orig 2024-07-11 15:16:22.487082035 -0400
|
||||
+++ ceph-19.1.0/src/cpp_redis/CMakeLists.txt 2024-07-11 15:17:57.226534456 -0400
|
||||
@@ -174,6 +174,7 @@
|
||||
set_target_properties(${PROJECT} PROPERTIES COMPILE_DEFINITIONS "__CPP_REDIS_USE_CUSTOM_TCP_CLIENT=${USE_CUSTOM_TCP_CLIENT}")
|
||||
endif(USE_CUSTOM_TCP_CLIENT)
|
||||
|
||||
+install(TARGETS ${PROJECT} DESTINATION ${CMAKE_INSTALL_LIBDIR}/ceph)
|
||||
|
||||
###
|
||||
# examples
|
||||
--- ceph-19.1.0/src/cpp_redis/tacopie/CMakeLists.txt.orig 2024-01-30 21:47:59.000000000 -0500
|
||||
+++ ceph-19.1.0/src/cpp_redis/tacopie/CMakeLists.txt 2024-07-12 07:37:23.584654640 -0400
|
||||
@@ -162,6 +162,8 @@
|
||||
ENDIF(SELECT_TIMEOUT)
|
||||
|
||||
|
||||
+install(TARGETS ${PROJECT} DESTINATION ${CMAKE_INSTALL_LIBDIR}/ceph)
|
||||
+
|
||||
###
|
||||
# examples
|
||||
###
|
||||
@@ -0,0 +1,28 @@
|
||||
--- ceph-19.1.0/src/common/crc32c_ppc_fast_zero_asm.S.orig 2024-07-26 07:18:50.733484175 -0400
|
||||
+++ ceph-19.1.0/src/common/crc32c_ppc_fast_zero_asm.S 2024-07-26 07:17:48.449531183 -0400
|
||||
@@ -45,8 +45,10 @@
|
||||
|
||||
/* unsigned int barrett_reduction(unsigned long val) */
|
||||
FUNC_START(barrett_reduction)
|
||||
- lis r4,.constants@ha
|
||||
- la r4,.constants@l(r4)
|
||||
+/* lis r4,.constants@ha */
|
||||
+/* la r4,.constants@l(r4) */
|
||||
+ addis r4,r4,.constants@toc@ha
|
||||
+ addi r4,r4,.constants@toc@l
|
||||
|
||||
li r5,16
|
||||
vxor v1,v1,v1 /* zero v1 */
|
||||
@@ -83,8 +85,10 @@
|
||||
|
||||
/* unsigned int barrett_reduction_reflected(unsigned long val) */
|
||||
FUNC_START(barrett_reduction_reflected)
|
||||
- lis r4,.bit_reflected_constants@ha
|
||||
- la r4,.bit_reflected_constants@l(r4)
|
||||
+/* lis r4,.bit_reflected_constants@ha */
|
||||
+/* la r4,.bit_reflected_constants@l(r4) */
|
||||
+ addis r4,r4,.bit_reflected_constants@toc@ha
|
||||
+ addi r4,r4,.bit_reflected_constants@toc@l
|
||||
|
||||
li r5,16
|
||||
vxor v1,v1,v1 /* zero v1 */
|
||||
@@ -1,3 +1,44 @@
|
||||
diff --git a/src/common/openssl_opts_handler.cc b/src/common/openssl_opts_handler.cc
|
||||
index 81d0c4786..d9866f197 100644
|
||||
--- a/src/common/openssl_opts_handler.cc
|
||||
+++ b/src/common/openssl_opts_handler.cc
|
||||
@@ -16,7 +16,10 @@
|
||||
|
||||
#include <openssl/bio.h>
|
||||
#include <openssl/conf.h>
|
||||
+#include <openssl/err.h>
|
||||
+#ifndef OPENSSL_NO_ENGINE
|
||||
#include <openssl/engine.h>
|
||||
+#endif
|
||||
#include <mutex>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
@@ -116,11 +119,13 @@ void load_module(const string &engine_conf)
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
||||
|
||||
+#ifndef OPENSSL_NO_ENGINE
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||
ENGINE_load_builtin_engines();
|
||||
#pragma clang diagnostic pop
|
||||
#pragma GCC diagnostic pop
|
||||
+#endif
|
||||
|
||||
if (CONF_modules_load(
|
||||
conf, nullptr,
|
||||
diff --git a/src/crypto/openssl/openssl_crypto_accel.cc b/src/crypto/openssl/openssl_crypto_accel.cc
|
||||
index f99844a38..4944205dd 100644
|
||||
--- a/src/crypto/openssl/openssl_crypto_accel.cc
|
||||
+++ b/src/crypto/openssl/openssl_crypto_accel.cc
|
||||
@@ -14,7 +14,6 @@
|
||||
|
||||
#include "crypto/openssl/openssl_crypto_accel.h"
|
||||
#include <openssl/evp.h>
|
||||
-#include <openssl/engine.h>
|
||||
#include "common/debug.h"
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
diff --git a/src/jaegertracing/opentelemetry-cpp/third_party/prometheus-cpp/3rdparty/civetweb/src/civetweb.c b/src/jaegertracing/opentelemetry-cpp/third_party/prometheus-cpp/3rdparty/civetweb/src/civetweb.c
|
||||
index fea9e6f98..c7eddb20b 100644
|
||||
--- a/src/jaegertracing/opentelemetry-cpp/third_party/prometheus-cpp/3rdparty/civetweb/src/civetweb.c
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
--- ceph-19.2.0/src/mds/CMakeLists.txt.orig 2024-12-20 17:15:47.632569537 -0500
|
||||
+++ ceph-19.2.0/src/mds/CMakeLists.txt 2024-12-20 17:16:48.945481957 -0500
|
||||
@@ -45,12 +45,11 @@
|
||||
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})
|
||||
+ boost_url heap_profiler cpu_profiler osdc ${LUA_LIBRARIES})
|
||||
target_include_directories(mds PRIVATE "${LUA_INCLUDE_DIR}")
|
||||
@@ -0,0 +1,257 @@
|
||||
--- ceph-19.2.0/src/rgw/driver/posix/zpp_bits.h.orig 2024-09-18 12:27:51.000000000 -0400
|
||||
+++ ceph-19.2.0/src/rgw/driver/posix/zpp_bits.h 2025-01-16 14:58:48.471438398 -0500
|
||||
@@ -2687,8 +2687,12 @@
|
||||
{
|
||||
using type = std::remove_cvref_t<decltype(container)>;
|
||||
using value_type = typename type::value_type;
|
||||
- constexpr auto is_const = std::is_const_v<
|
||||
- std::remove_reference_t<decltype(container[0])>>;
|
||||
+ constexpr auto is_const =
|
||||
+ std::is_const_v<std::remove_reference_t<value_type>> ||
|
||||
+ requires {
|
||||
+ requires std::is_const_v<
|
||||
+ std::remove_reference_t<decltype(container[0])>>;
|
||||
+ };
|
||||
|
||||
if constexpr (!std::is_void_v<SizeType> &&
|
||||
(requires(type container) { container.resize(1); } ||
|
||||
@@ -2827,9 +2831,7 @@
|
||||
if constexpr (requires { typename type::mapped_type; }) {
|
||||
using value_type = std::pair<typename type::key_type,
|
||||
typename type::mapped_type>;
|
||||
- std::aligned_storage_t<sizeof(value_type),
|
||||
- alignof(value_type)>
|
||||
- storage;
|
||||
+ alignas(value_type) std::byte storage[sizeof(value_type)];
|
||||
|
||||
auto object = access::placement_new<value_type>(
|
||||
std::addressof(storage));
|
||||
@@ -2843,9 +2845,7 @@
|
||||
} else {
|
||||
using value_type = typename type::value_type;
|
||||
|
||||
- std::aligned_storage_t<sizeof(value_type),
|
||||
- alignof(value_type)>
|
||||
- storage;
|
||||
+ alignas(value_type) std::byte storage[sizeof(value_type)];
|
||||
|
||||
auto object = access::placement_new<value_type>(
|
||||
std::addressof(storage));
|
||||
@@ -2903,8 +2903,7 @@
|
||||
return result;
|
||||
}
|
||||
} else {
|
||||
- std::aligned_storage_t<sizeof(value_type), alignof(value_type)>
|
||||
- storage;
|
||||
+ alignas(value_type) std::byte storage[sizeof(value_type)];
|
||||
|
||||
auto object =
|
||||
access::placement_new<value_type>(std::addressof(storage));
|
||||
@@ -2947,9 +2946,7 @@
|
||||
}
|
||||
return serialize_one(*std::get_if<element_type>(&variant));
|
||||
} else {
|
||||
- std::aligned_storage_t<sizeof(element_type),
|
||||
- alignof(element_type)>
|
||||
- storage;
|
||||
+ alignas(element_type) std::byte storage[sizeof(element_type)];
|
||||
|
||||
auto object = access::placement_new<element_type>(
|
||||
std::addressof(storage));
|
||||
@@ -2996,8 +2993,7 @@
|
||||
return self.serialize_one(
|
||||
*std::get_if<Types>(&variant));
|
||||
} else {
|
||||
- std::aligned_storage_t<sizeof(Types), alignof(Types)>
|
||||
- storage;
|
||||
+ alignas(Types) std::byte storage[sizeof(Types)];
|
||||
|
||||
auto object = access::placement_new<Types>(
|
||||
std::addressof(storage));
|
||||
@@ -3008,6 +3004,7 @@
|
||||
return result;
|
||||
}
|
||||
variant = std::move(*object);
|
||||
+ return errc{};
|
||||
}
|
||||
}...};
|
||||
|
||||
@@ -3307,7 +3304,7 @@
|
||||
ZPP_BITS_INLINE constexpr static auto serialize(auto & serializer,
|
||||
auto & self)
|
||||
{
|
||||
- return serializer.template serialize_one(self.variant, self.id);
|
||||
+ return serializer.serialize_one(self.variant, self.id);
|
||||
}
|
||||
|
||||
Variant & variant;
|
||||
@@ -3448,13 +3445,14 @@
|
||||
}
|
||||
|
||||
constexpr explicit value_or_errc(error_type error) :
|
||||
- m_error(std::forward<decltype(error)>(error))
|
||||
+ m_error(std::forward<decltype(error)>(error)),
|
||||
+ m_failure(true)
|
||||
{
|
||||
}
|
||||
|
||||
constexpr value_or_errc(value_or_errc && other) noexcept
|
||||
{
|
||||
- if (other.is_value()) {
|
||||
+ if (other.success()) {
|
||||
if constexpr (!std::is_void_v<Type>) {
|
||||
if constexpr (!std::is_reference_v<Type>) {
|
||||
::new (std::addressof(m_return_value))
|
||||
@@ -3752,16 +3750,16 @@
|
||||
requires(decltype(in.remaining_data()) & data) {
|
||||
(context.*Function)(data);
|
||||
}) {
|
||||
- struct _
|
||||
+ struct guard
|
||||
{
|
||||
decltype(in) archive;
|
||||
decltype(in.remaining_data()) data;
|
||||
- constexpr ~_()
|
||||
+ constexpr ~guard()
|
||||
{
|
||||
archive.position() += data.size();
|
||||
}
|
||||
- } _{in, in.remaining_data()};
|
||||
- return (context.*Function)(_.data);
|
||||
+ } guard{in, in.remaining_data()};
|
||||
+ return (context.*Function)(guard.data);
|
||||
} else {
|
||||
return (context.*Function)();
|
||||
}
|
||||
@@ -3776,16 +3774,16 @@
|
||||
requires(decltype(in.remaining_data()) & data) {
|
||||
Function(data);
|
||||
}) {
|
||||
- struct _
|
||||
+ struct guard
|
||||
{
|
||||
decltype(in) archive;
|
||||
decltype(in.remaining_data()) data;
|
||||
- constexpr ~_()
|
||||
+ constexpr ~guard()
|
||||
{
|
||||
archive.position() += data.size();
|
||||
}
|
||||
- } _{in, in.remaining_data()};
|
||||
- return Function(_.data);
|
||||
+ } guard{in, in.remaining_data()};
|
||||
+ return Function(guard.data);
|
||||
} else {
|
||||
return Function();
|
||||
}
|
||||
@@ -5029,9 +5027,7 @@
|
||||
serialize use();
|
||||
};
|
||||
|
||||
- std::aligned_storage_t<sizeof(value_type),
|
||||
- alignof(value_type)>
|
||||
- storage;
|
||||
+ alignas(value_type) std::byte storage[sizeof(value_type)];
|
||||
|
||||
auto object =
|
||||
access::placement_new<value_type>(std::addressof(storage));
|
||||
@@ -5111,9 +5107,7 @@
|
||||
return errc{};
|
||||
}
|
||||
} else {
|
||||
- std::aligned_storage_t<sizeof(value_type),
|
||||
- alignof(value_type)>
|
||||
- storage;
|
||||
+ alignas(value_type) std::byte storage[sizeof(value_type)];
|
||||
|
||||
auto object = access::placement_new<value_type>(
|
||||
std::addressof(storage));
|
||||
@@ -5382,47 +5376,47 @@
|
||||
};
|
||||
auto align = [](auto v, auto a) { return (v + (a - 1)) / a * a; };
|
||||
|
||||
- auto h0 = big_endian{0x6a09e667u};
|
||||
- auto h1 = big_endian{0xbb67ae85u};
|
||||
- auto h2 = big_endian{0x3c6ef372u};
|
||||
- auto h3 = big_endian{0xa54ff53au};
|
||||
- auto h4 = big_endian{0x510e527fu};
|
||||
- auto h5 = big_endian{0x9b05688cu};
|
||||
- auto h6 = big_endian{0x1f83d9abu};
|
||||
- auto h7 = big_endian{0x5be0cd19u};
|
||||
-
|
||||
- std::array k{big_endian{0x428a2f98u}, big_endian{0x71374491u},
|
||||
- big_endian{0xb5c0fbcfu}, big_endian{0xe9b5dba5u},
|
||||
- big_endian{0x3956c25bu}, big_endian{0x59f111f1u},
|
||||
- big_endian{0x923f82a4u}, big_endian{0xab1c5ed5u},
|
||||
- big_endian{0xd807aa98u}, big_endian{0x12835b01u},
|
||||
- big_endian{0x243185beu}, big_endian{0x550c7dc3u},
|
||||
- big_endian{0x72be5d74u}, big_endian{0x80deb1feu},
|
||||
- big_endian{0x9bdc06a7u}, big_endian{0xc19bf174u},
|
||||
- big_endian{0xe49b69c1u}, big_endian{0xefbe4786u},
|
||||
- big_endian{0x0fc19dc6u}, big_endian{0x240ca1ccu},
|
||||
- big_endian{0x2de92c6fu}, big_endian{0x4a7484aau},
|
||||
- big_endian{0x5cb0a9dcu}, big_endian{0x76f988dau},
|
||||
- big_endian{0x983e5152u}, big_endian{0xa831c66du},
|
||||
- big_endian{0xb00327c8u}, big_endian{0xbf597fc7u},
|
||||
- big_endian{0xc6e00bf3u}, big_endian{0xd5a79147u},
|
||||
- big_endian{0x06ca6351u}, big_endian{0x14292967u},
|
||||
- big_endian{0x27b70a85u}, big_endian{0x2e1b2138u},
|
||||
- big_endian{0x4d2c6dfcu}, big_endian{0x53380d13u},
|
||||
- big_endian{0x650a7354u}, big_endian{0x766a0abbu},
|
||||
- big_endian{0x81c2c92eu}, big_endian{0x92722c85u},
|
||||
- big_endian{0xa2bfe8a1u}, big_endian{0xa81a664bu},
|
||||
- big_endian{0xc24b8b70u}, big_endian{0xc76c51a3u},
|
||||
- big_endian{0xd192e819u}, big_endian{0xd6990624u},
|
||||
- big_endian{0xf40e3585u}, big_endian{0x106aa070u},
|
||||
- big_endian{0x19a4c116u}, big_endian{0x1e376c08u},
|
||||
- big_endian{0x2748774cu}, big_endian{0x34b0bcb5u},
|
||||
- big_endian{0x391c0cb3u}, big_endian{0x4ed8aa4au},
|
||||
- big_endian{0x5b9cca4fu}, big_endian{0x682e6ff3u},
|
||||
- big_endian{0x748f82eeu}, big_endian{0x78a5636fu},
|
||||
- big_endian{0x84c87814u}, big_endian{0x8cc70208u},
|
||||
- big_endian{0x90befffau}, big_endian{0xa4506cebu},
|
||||
- big_endian{0xbef9a3f7u}, big_endian{0xc67178f2u}};
|
||||
+ auto h0 = big_endian{std::uint32_t{0x6a09e667u}};
|
||||
+ auto h1 = big_endian{std::uint32_t{0xbb67ae85u}};
|
||||
+ auto h2 = big_endian{std::uint32_t{0x3c6ef372u}};
|
||||
+ auto h3 = big_endian{std::uint32_t{0xa54ff53au}};
|
||||
+ auto h4 = big_endian{std::uint32_t{0x510e527fu}};
|
||||
+ auto h5 = big_endian{std::uint32_t{0x9b05688cu}};
|
||||
+ auto h6 = big_endian{std::uint32_t{0x1f83d9abu}};
|
||||
+ auto h7 = big_endian{std::uint32_t{0x5be0cd19u}};
|
||||
+
|
||||
+ std::array k{big_endian{std::uint32_t{0x428a2f98u}}, big_endian{std::uint32_t{0x71374491u}},
|
||||
+ big_endian{std::uint32_t{0xb5c0fbcfu}}, big_endian{std::uint32_t{0xe9b5dba5u}},
|
||||
+ big_endian{std::uint32_t{0x3956c25bu}}, big_endian{std::uint32_t{0x59f111f1u}},
|
||||
+ big_endian{std::uint32_t{0x923f82a4u}}, big_endian{std::uint32_t{0xab1c5ed5u}},
|
||||
+ big_endian{std::uint32_t{0xd807aa98u}}, big_endian{std::uint32_t{0x12835b01u}},
|
||||
+ big_endian{std::uint32_t{0x243185beu}}, big_endian{std::uint32_t{0x550c7dc3u}},
|
||||
+ big_endian{std::uint32_t{0x72be5d74u}}, big_endian{std::uint32_t{0x80deb1feu}},
|
||||
+ big_endian{std::uint32_t{0x9bdc06a7u}}, big_endian{std::uint32_t{0xc19bf174u}},
|
||||
+ big_endian{std::uint32_t{0xe49b69c1u}}, big_endian{std::uint32_t{0xefbe4786u}},
|
||||
+ big_endian{std::uint32_t{0x0fc19dc6u}}, big_endian{std::uint32_t{0x240ca1ccu}},
|
||||
+ big_endian{std::uint32_t{0x2de92c6fu}}, big_endian{std::uint32_t{0x4a7484aau}},
|
||||
+ big_endian{std::uint32_t{0x5cb0a9dcu}}, big_endian{std::uint32_t{0x76f988dau}},
|
||||
+ big_endian{std::uint32_t{0x983e5152u}}, big_endian{std::uint32_t{0xa831c66du}},
|
||||
+ big_endian{std::uint32_t{0xb00327c8u}}, big_endian{std::uint32_t{0xbf597fc7u}},
|
||||
+ big_endian{std::uint32_t{0xc6e00bf3u}}, big_endian{std::uint32_t{0xd5a79147u}},
|
||||
+ big_endian{std::uint32_t{0x06ca6351u}}, big_endian{std::uint32_t{0x14292967u}},
|
||||
+ big_endian{std::uint32_t{0x27b70a85u}}, big_endian{std::uint32_t{0x2e1b2138u}},
|
||||
+ big_endian{std::uint32_t{0x4d2c6dfcu}}, big_endian{std::uint32_t{0x53380d13u}},
|
||||
+ big_endian{std::uint32_t{0x650a7354u}}, big_endian{std::uint32_t{0x766a0abbu}},
|
||||
+ big_endian{std::uint32_t{0x81c2c92eu}}, big_endian{std::uint32_t{0x92722c85u}},
|
||||
+ big_endian{std::uint32_t{0xa2bfe8a1u}}, big_endian{std::uint32_t{0xa81a664bu}},
|
||||
+ big_endian{std::uint32_t{0xc24b8b70u}}, big_endian{std::uint32_t{0xc76c51a3u}},
|
||||
+ big_endian{std::uint32_t{0xd192e819u}}, big_endian{std::uint32_t{0xd6990624u}},
|
||||
+ big_endian{std::uint32_t{0xf40e3585u}}, big_endian{std::uint32_t{0x106aa070u}},
|
||||
+ big_endian{std::uint32_t{0x19a4c116u}}, big_endian{std::uint32_t{0x1e376c08u}},
|
||||
+ big_endian{std::uint32_t{0x2748774cu}}, big_endian{std::uint32_t{0x34b0bcb5u}},
|
||||
+ big_endian{std::uint32_t{0x391c0cb3u}}, big_endian{std::uint32_t{0x4ed8aa4au}},
|
||||
+ big_endian{std::uint32_t{0x5b9cca4fu}}, big_endian{std::uint32_t{0x682e6ff3u}},
|
||||
+ big_endian{std::uint32_t{0x748f82eeu}}, big_endian{std::uint32_t{0x78a5636fu}},
|
||||
+ big_endian{std::uint32_t{0x84c87814u}}, big_endian{std::uint32_t{0x8cc70208u}},
|
||||
+ big_endian{std::uint32_t{0x90befffau}}, big_endian{std::uint32_t{0xa4506cebu}},
|
||||
+ big_endian{std::uint32_t{0xbef9a3f7u}}, big_endian{std::uint32_t{0xc67178f2u}}};
|
||||
|
||||
constexpr auto original_message = to_bytes<Object>();
|
||||
constexpr auto chunk_size = 512 / CHAR_BIT;
|
||||
@@ -1,35 +1,29 @@
|
||||
--- ceph-20.1.0/src/googletest/googletest/CMakeLists.txt.orig 2025-02-07 11:04:56.000000000 -0500
|
||||
+++ ceph-20.1.0/src/googletest/googletest/CMakeLists.txt 2025-09-16 08:11:59.341951770 -0400
|
||||
@@ -53,6 +53,8 @@
|
||||
--- ceph-19.2.0/src/googletest/googletest/CMakeLists.txt.orig 2025-01-23 07:43:33.314970694 -0500
|
||||
+++ ceph-19.2.0/src/googletest/googletest/CMakeLists.txt 2025-01-23 07:44:13.529250429 -0500
|
||||
@@ -63,6 +63,8 @@
|
||||
set_up_hermetic_build()
|
||||
endif()
|
||||
|
||||
+option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)." OFF)
|
||||
+
|
||||
# These commands only run if this is the main project.
|
||||
# These commands only run if this is the main project
|
||||
if(CMAKE_PROJECT_NAME STREQUAL "gtest" OR CMAKE_PROJECT_NAME STREQUAL "googletest-distribution")
|
||||
|
||||
@@ -121,7 +123,7 @@
|
||||
@@ -126,9 +128,9 @@
|
||||
# are used for other targets, to ensure that gtest can be compiled by a user
|
||||
# aggressive about warnings.
|
||||
cxx_library(gtest "${cxx_strict}" src/gtest-all.cc)
|
||||
-set_target_properties(gtest PROPERTIES VERSION ${GOOGLETEST_VERSION})
|
||||
+#set_target_properties(gtest PROPERTIES VERSION ${GOOGLETEST_VERSION})
|
||||
if(GTEST_HAS_ABSL)
|
||||
target_compile_definitions(gtest PUBLIC GTEST_HAS_ABSL=1)
|
||||
target_link_libraries(gtest PUBLIC
|
||||
@@ -139,7 +141,7 @@
|
||||
)
|
||||
endif()
|
||||
cxx_library(gtest_main "${cxx_strict}" src/gtest_main.cc)
|
||||
-set_target_properties(gtest_main PROPERTIES VERSION ${GOOGLETEST_VERSION})
|
||||
+#set_target_properties(gtest_main PROPERTIES VERSION ${GOOGLETEST_VERSION})
|
||||
string(REPLACE ";" "$<SEMICOLON>" dirs "${gtest_build_include_dirs}")
|
||||
target_include_directories(gtest SYSTEM INTERFACE
|
||||
"$<BUILD_INTERFACE:${dirs}>"
|
||||
--- ceph-20.1.0/src/googletest/googlemock/CMakeLists.txt.orig 2025-02-07 11:04:56.000000000 -0500
|
||||
+++ ceph-20.1.0/src/googletest/googlemock/CMakeLists.txt 2025-09-16 08:12:18.121641875 -0400
|
||||
@@ -49,6 +49,7 @@
|
||||
# If the CMake version supports it, attach header directory information
|
||||
# to the targets for when we are part of a parent build (ie being pulled
|
||||
# in via add_subdirectory() rather than being a standalone build).
|
||||
--- ceph-19.2.0/src/googletest/googlemock/CMakeLists.txt.orig 2025-01-23 07:40:52.399853240 -0500
|
||||
+++ ceph-19.2.0/src/googletest/googlemock/CMakeLists.txt 2025-01-23 07:43:18.466236642 -0500
|
||||
@@ -54,6 +54,7 @@
|
||||
# if they are the same (the default).
|
||||
add_subdirectory("${gtest_dir}" "${gmock_BINARY_DIR}/${gtest_dir}")
|
||||
|
||||
@@ -37,27 +31,12 @@
|
||||
|
||||
# These commands only run if this is the main project
|
||||
if(CMAKE_PROJECT_NAME STREQUAL "gmock" OR CMAKE_PROJECT_NAME STREQUAL "googletest-distribution")
|
||||
@@ -96,10 +97,10 @@
|
||||
@@ -100,7 +101,7 @@
|
||||
else()
|
||||
cxx_library(gmock "${cxx_strict}" src/gmock-all.cc)
|
||||
target_link_libraries(gmock PUBLIC gtest)
|
||||
- set_target_properties(gmock PROPERTIES VERSION ${GOOGLETEST_VERSION})
|
||||
+ # set_target_properties(gmock PROPERTIES VERSION ${GOOGLETEST_VERSION})
|
||||
+ # set_target_properties(gmock PROPERTIES VERSION ${GOOGLETEST_VERSION})
|
||||
cxx_library(gmock_main "${cxx_strict}" src/gmock_main.cc)
|
||||
target_link_libraries(gmock_main PUBLIC gmock)
|
||||
- set_target_properties(gmock_main PROPERTIES VERSION ${GOOGLETEST_VERSION})
|
||||
+ # set_target_properties(gmock_main PROPERTIES VERSION ${GOOGLETEST_VERSION})
|
||||
endif()
|
||||
|
||||
string(REPLACE ";" "$<SEMICOLON>" dirs "${gmock_build_include_dirs}")
|
||||
--- ceph-20.1.0/src/googletest/googletest/cmake/internal_utils.cmake.orig 2025-09-22 10:12:18.037349494 -0400
|
||||
+++ ceph-20.1.0/src/googletest/googletest/cmake/internal_utils.cmake 2025-09-22 10:13:13.729590249 -0400
|
||||
@@ -207,7 +207,7 @@
|
||||
endfunction()
|
||||
|
||||
function(cxx_library name cxx_flags)
|
||||
- cxx_library_with_type(${name} "" "${cxx_flags}" ${ARGN})
|
||||
+ cxx_library_with_type(${name} STATIC "${cxx_flags}" ${ARGN})
|
||||
endfunction()
|
||||
|
||||
# cxx_executable_with_flags(name cxx_flags libs srcs...)
|
||||
set_target_properties(gmock_main PROPERTIES VERSION ${GOOGLETEST_VERSION})
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
--- ceph-20.1.0/src/test/neorados/common_tests.h.orig 2025-09-04 15:35:40.000000000 -0400
|
||||
+++ ceph-20.1.0/src/test/neorados/common_tests.h 2025-09-16 08:13:03.274896767 -0400
|
||||
--- ceph-19.2.0/src/test/neorados/common_tests.h.orig 2024-09-18 12:27:51.000000000 -0400
|
||||
+++ ceph-19.2.0/src/test/neorados/common_tests.h 2025-01-26 19:31:32.545762972 -0500
|
||||
@@ -47,6 +47,18 @@
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
@@ -19,3 +19,12 @@
|
||||
/// \file test/neorados/common_tests.h
|
||||
///
|
||||
/// \brief Tools for testing neorados code
|
||||
@@ -398,7 +410,7 @@
|
||||
\
|
||||
private: \
|
||||
boost::asio::awaitable<void> CoTestBody() override; \
|
||||
- static ::testing::TestInfo *const test_info_ GTEST_ATTRIBUTE_UNUSED_; \
|
||||
+ static ::testing::TestInfo *const test_info_ __attribute__((unused)); \
|
||||
}; \
|
||||
\
|
||||
::testing::TestInfo *const GTEST_TEST_CLASS_NAME_(test_suite_name, \
|
||||
|
||||
@@ -1,838 +0,0 @@
|
||||
--- ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/encryption_internal_19.h.orig 2025-07-08 07:40:29.811814549 -0400
|
||||
+++ ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/encryption_internal_19.h 2025-07-08 07:40:29.811739290 -0400
|
||||
@@ -0,0 +1,114 @@
|
||||
+// Licensed to the Apache Software Foundation (ASF) under one
|
||||
+// or more contributor license agreements. See the NOTICE file
|
||||
+// distributed with this work for additional information
|
||||
+// regarding copyright ownership. The ASF licenses this file
|
||||
+// to you under the Apache License, Version 2.0 (the
|
||||
+// "License"); you may not use this file except in compliance
|
||||
+// with the License. You may obtain a copy of the License at
|
||||
+//
|
||||
+// http://www.apache.org/licenses/LICENSE-2.0
|
||||
+//
|
||||
+// Unless required by applicable law or agreed to in writing,
|
||||
+// software distributed under the License is distributed on an
|
||||
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
+// KIND, either express or implied. See the License for the
|
||||
+// specific language governing permissions and limitations
|
||||
+// under the License.
|
||||
+
|
||||
+#pragma once
|
||||
+
|
||||
+#include <memory>
|
||||
+#include <string>
|
||||
+#include <vector>
|
||||
+
|
||||
+#include "parquet/properties.h"
|
||||
+#include "parquet/types.h"
|
||||
+
|
||||
+using parquet::ParquetCipher;
|
||||
+
|
||||
+namespace parquet {
|
||||
+namespace encryption {
|
||||
+
|
||||
+constexpr int kGcmTagLength = 16;
|
||||
+constexpr int kNonceLength = 12;
|
||||
+
|
||||
+// Module types
|
||||
+constexpr int8_t kFooter = 0;
|
||||
+constexpr int8_t kColumnMetaData = 1;
|
||||
+constexpr int8_t kDataPage = 2;
|
||||
+constexpr int8_t kDictionaryPage = 3;
|
||||
+constexpr int8_t kDataPageHeader = 4;
|
||||
+constexpr int8_t kDictionaryPageHeader = 5;
|
||||
+constexpr int8_t kColumnIndex = 6;
|
||||
+constexpr int8_t kOffsetIndex = 7;
|
||||
+
|
||||
+/// Performs AES encryption operations with GCM or CTR ciphers.
|
||||
+class AesEncryptor {
|
||||
+ public:
|
||||
+ static AesEncryptor* Make(ParquetCipher::type alg_id, int key_len, bool metadata,
|
||||
+ std::vector<AesEncryptor*>* all_encryptors);
|
||||
+
|
||||
+ ~AesEncryptor();
|
||||
+
|
||||
+ /// Size difference between plaintext and ciphertext, for this cipher.
|
||||
+ int CiphertextSizeDelta();
|
||||
+
|
||||
+ /// Encrypts plaintext with the key and aad. Key length is passed only for validation.
|
||||
+ /// If different from value in constructor, exception will be thrown.
|
||||
+ int Encrypt(const uint8_t* plaintext, int plaintext_len, const uint8_t* key,
|
||||
+ int key_len, const uint8_t* aad, int aad_len, uint8_t* ciphertext);
|
||||
+
|
||||
+ /// Encrypts plaintext footer, in order to compute footer signature (tag).
|
||||
+ int SignedFooterEncrypt(const uint8_t* footer, int footer_len, const uint8_t* key,
|
||||
+ int key_len, const uint8_t* aad, int aad_len,
|
||||
+ const uint8_t* nonce, uint8_t* encrypted_footer);
|
||||
+
|
||||
+ void WipeOut();
|
||||
+
|
||||
+ private:
|
||||
+ /// Can serve one key length only. Possible values: 16, 24, 32 bytes.
|
||||
+ explicit AesEncryptor(ParquetCipher::type alg_id, int key_len, bool metadata);
|
||||
+ // PIMPL Idiom
|
||||
+ class AesEncryptorImpl;
|
||||
+ std::unique_ptr<AesEncryptorImpl> impl_;
|
||||
+};
|
||||
+
|
||||
+/// Performs AES decryption operations with GCM or CTR ciphers.
|
||||
+class AesDecryptor {
|
||||
+ public:
|
||||
+ static AesDecryptor* Make(ParquetCipher::type alg_id, int key_len, bool metadata,
|
||||
+ std::vector<AesDecryptor*>* all_decryptors);
|
||||
+
|
||||
+ ~AesDecryptor();
|
||||
+ void WipeOut();
|
||||
+
|
||||
+ /// Size difference between plaintext and ciphertext, for this cipher.
|
||||
+ int CiphertextSizeDelta();
|
||||
+
|
||||
+ /// Decrypts ciphertext with the key and aad. Key length is passed only for
|
||||
+ /// validation. If different from value in constructor, exception will be thrown.
|
||||
+ int Decrypt(const uint8_t* ciphertext, int ciphertext_len, const uint8_t* key,
|
||||
+ int key_len, const uint8_t* aad, int aad_len, uint8_t* plaintext);
|
||||
+
|
||||
+ private:
|
||||
+ /// Can serve one key length only. Possible values: 16, 24, 32 bytes.
|
||||
+ explicit AesDecryptor(ParquetCipher::type alg_id, int key_len, bool metadata);
|
||||
+ // PIMPL Idiom
|
||||
+ class AesDecryptorImpl;
|
||||
+ std::unique_ptr<AesDecryptorImpl> impl_;
|
||||
+};
|
||||
+
|
||||
+std::string CreateModuleAad(const std::string& file_aad, int8_t module_type,
|
||||
+ int16_t row_group_ordinal, int16_t column_ordinal,
|
||||
+ int16_t page_ordinal);
|
||||
+
|
||||
+std::string CreateFooterAad(const std::string& aad_prefix_bytes);
|
||||
+
|
||||
+// Update last two bytes of page (or page header) module AAD
|
||||
+void QuickUpdatePageAad(const std::string& AAD, int16_t new_page_ordinal);
|
||||
+
|
||||
+// Wraps OpenSSL RAND_bytes function
|
||||
+void RandBytes(unsigned char* buf, int num);
|
||||
+
|
||||
+} // namespace encryption
|
||||
+} // namespace parquet
|
||||
--- ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/encryption_internal_20.h.orig 2025-07-08 07:40:29.812759948 -0400
|
||||
+++ ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/encryption_internal_20.h 2025-07-08 07:40:29.812687536 -0400
|
||||
@@ -0,0 +1,141 @@
|
||||
+// Licensed to the Apache Software Foundation (ASF) under one
|
||||
+// or more contributor license agreements. See the NOTICE file
|
||||
+// distributed with this work for additional information
|
||||
+// regarding copyright ownership. The ASF licenses this file
|
||||
+// to you under the Apache License, Version 2.0 (the
|
||||
+// "License"); you may not use this file except in compliance
|
||||
+// with the License. You may obtain a copy of the License at
|
||||
+//
|
||||
+// http://www.apache.org/licenses/LICENSE-2.0
|
||||
+//
|
||||
+// Unless required by applicable law or agreed to in writing,
|
||||
+// software distributed under the License is distributed on an
|
||||
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
+// KIND, either express or implied. See the License for the
|
||||
+// specific language governing permissions and limitations
|
||||
+// under the License.
|
||||
+
|
||||
+#pragma once
|
||||
+
|
||||
+#include <memory>
|
||||
+#include <string>
|
||||
+#include <vector>
|
||||
+
|
||||
+#include "arrow/util/span.h"
|
||||
+#include "parquet/properties.h"
|
||||
+#include "parquet/types.h"
|
||||
+
|
||||
+using parquet::ParquetCipher;
|
||||
+
|
||||
+namespace parquet::encryption {
|
||||
+
|
||||
+constexpr int32_t kGcmTagLength = 16;
|
||||
+constexpr int32_t kNonceLength = 12;
|
||||
+
|
||||
+// Module types
|
||||
+constexpr int8_t kFooter = 0;
|
||||
+constexpr int8_t kColumnMetaData = 1;
|
||||
+constexpr int8_t kDataPage = 2;
|
||||
+constexpr int8_t kDictionaryPage = 3;
|
||||
+constexpr int8_t kDataPageHeader = 4;
|
||||
+constexpr int8_t kDictionaryPageHeader = 5;
|
||||
+constexpr int8_t kColumnIndex = 6;
|
||||
+constexpr int8_t kOffsetIndex = 7;
|
||||
+constexpr int8_t kBloomFilterHeader = 8;
|
||||
+constexpr int8_t kBloomFilterBitset = 9;
|
||||
+
|
||||
+/// Performs AES encryption operations with GCM or CTR ciphers.
|
||||
+class PARQUET_EXPORT AesEncryptor {
|
||||
+ public:
|
||||
+ /// Can serve one key length only. Possible values: 16, 24, 32 bytes.
|
||||
+ /// If write_length is true, prepend ciphertext length to the ciphertext
|
||||
+ explicit AesEncryptor(ParquetCipher::type alg_id, int32_t key_len, bool metadata,
|
||||
+ bool write_length = true);
|
||||
+
|
||||
+ static std::unique_ptr<AesEncryptor> Make(ParquetCipher::type alg_id, int32_t key_len,
|
||||
+ bool metadata, bool write_length = true);
|
||||
+
|
||||
+ ~AesEncryptor();
|
||||
+
|
||||
+ /// The size of the ciphertext, for this cipher and the specified plaintext length.
|
||||
+ [[nodiscard]] int32_t CiphertextLength(int64_t plaintext_len) const;
|
||||
+
|
||||
+ /// Encrypts plaintext with the key and aad. Key length is passed only for validation.
|
||||
+ /// If different from value in constructor, exception will be thrown.
|
||||
+ int32_t Encrypt(::arrow::util::span<const uint8_t> plaintext,
|
||||
+ ::arrow::util::span<const uint8_t> key,
|
||||
+ ::arrow::util::span<const uint8_t> aad,
|
||||
+ ::arrow::util::span<uint8_t> ciphertext);
|
||||
+
|
||||
+ /// Encrypts plaintext footer, in order to compute footer signature (tag).
|
||||
+ int32_t SignedFooterEncrypt(::arrow::util::span<const uint8_t> footer,
|
||||
+ ::arrow::util::span<const uint8_t> key,
|
||||
+ ::arrow::util::span<const uint8_t> aad,
|
||||
+ ::arrow::util::span<const uint8_t> nonce,
|
||||
+ ::arrow::util::span<uint8_t> encrypted_footer);
|
||||
+
|
||||
+ private:
|
||||
+ // PIMPL Idiom
|
||||
+ class AesEncryptorImpl;
|
||||
+ std::unique_ptr<AesEncryptorImpl> impl_;
|
||||
+};
|
||||
+
|
||||
+/// Performs AES decryption operations with GCM or CTR ciphers.
|
||||
+class PARQUET_EXPORT AesDecryptor {
|
||||
+ public:
|
||||
+ /// \brief Construct an AesDecryptor
|
||||
+ ///
|
||||
+ /// \param alg_id the encryption algorithm to use
|
||||
+ /// \param key_len key length. Possible values: 16, 24, 32 bytes.
|
||||
+ /// \param metadata if true then this is a metadata decryptor
|
||||
+ /// \param contains_length if true, expect ciphertext length prepended to the ciphertext
|
||||
+ explicit AesDecryptor(ParquetCipher::type alg_id, int32_t key_len, bool metadata,
|
||||
+ bool contains_length = true);
|
||||
+
|
||||
+ static std::unique_ptr<AesDecryptor> Make(ParquetCipher::type alg_id, int32_t key_len,
|
||||
+ bool metadata);
|
||||
+
|
||||
+ ~AesDecryptor();
|
||||
+
|
||||
+ /// The size of the plaintext, for this cipher and the specified ciphertext length.
|
||||
+ [[nodiscard]] int32_t PlaintextLength(int32_t ciphertext_len) const;
|
||||
+
|
||||
+ /// The size of the ciphertext, for this cipher and the specified plaintext length.
|
||||
+ [[nodiscard]] int32_t CiphertextLength(int32_t plaintext_len) const;
|
||||
+
|
||||
+ /// Decrypts ciphertext with the key and aad. Key length is passed only for
|
||||
+ /// validation. If different from value in constructor, exception will be thrown.
|
||||
+ /// The caller is responsible for ensuring that the plaintext buffer is at least as
|
||||
+ /// large as PlaintextLength(ciphertext_len).
|
||||
+ int32_t Decrypt(::arrow::util::span<const uint8_t> ciphertext,
|
||||
+ ::arrow::util::span<const uint8_t> key,
|
||||
+ ::arrow::util::span<const uint8_t> aad,
|
||||
+ ::arrow::util::span<uint8_t> plaintext);
|
||||
+
|
||||
+ private:
|
||||
+ // PIMPL Idiom
|
||||
+ class AesDecryptorImpl;
|
||||
+ std::unique_ptr<AesDecryptorImpl> impl_;
|
||||
+};
|
||||
+
|
||||
+std::string CreateModuleAad(const std::string& file_aad, int8_t module_type,
|
||||
+ int16_t row_group_ordinal, int16_t column_ordinal,
|
||||
+ int32_t page_ordinal);
|
||||
+
|
||||
+std::string CreateFooterAad(const std::string& aad_prefix_bytes);
|
||||
+
|
||||
+// Update last two bytes of page (or page header) module AAD
|
||||
+void QuickUpdatePageAad(int32_t new_page_ordinal, std::string* AAD);
|
||||
+
|
||||
+// Wraps OpenSSL RAND_bytes function
|
||||
+void RandBytes(unsigned char* buf, size_t num);
|
||||
+
|
||||
+// Ensure OpenSSL is initialized.
|
||||
+//
|
||||
+// This is only necessary in specific situations since OpenSSL otherwise
|
||||
+// initializes itself automatically. For example, under Valgrind, a memory
|
||||
+// leak will be reported if OpenSSL is initialized for the first time from
|
||||
+// a worker thread; calling this function from the main thread prevents this.
|
||||
+void EnsureBackendInitialized();
|
||||
+
|
||||
+} // namespace parquet::encryption
|
||||
--- ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/encryption_internal.h.orig 2024-10-06 07:18:41.000000000 -0400
|
||||
+++ ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/encryption_internal.h 2025-07-08 07:40:29.809908891 -0400
|
||||
@@ -17,98 +17,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
-#include <memory>
|
||||
-#include <string>
|
||||
-#include <vector>
|
||||
-
|
||||
-#include "parquet/properties.h"
|
||||
-#include "parquet/types.h"
|
||||
-
|
||||
-using parquet::ParquetCipher;
|
||||
-
|
||||
-namespace parquet {
|
||||
-namespace encryption {
|
||||
-
|
||||
-constexpr int kGcmTagLength = 16;
|
||||
-constexpr int kNonceLength = 12;
|
||||
-
|
||||
-// Module types
|
||||
-constexpr int8_t kFooter = 0;
|
||||
-constexpr int8_t kColumnMetaData = 1;
|
||||
-constexpr int8_t kDataPage = 2;
|
||||
-constexpr int8_t kDictionaryPage = 3;
|
||||
-constexpr int8_t kDataPageHeader = 4;
|
||||
-constexpr int8_t kDictionaryPageHeader = 5;
|
||||
-constexpr int8_t kColumnIndex = 6;
|
||||
-constexpr int8_t kOffsetIndex = 7;
|
||||
-
|
||||
-/// Performs AES encryption operations with GCM or CTR ciphers.
|
||||
-class AesEncryptor {
|
||||
- public:
|
||||
- static AesEncryptor* Make(ParquetCipher::type alg_id, int key_len, bool metadata,
|
||||
- std::vector<AesEncryptor*>* all_encryptors);
|
||||
-
|
||||
- ~AesEncryptor();
|
||||
-
|
||||
- /// Size difference between plaintext and ciphertext, for this cipher.
|
||||
- int CiphertextSizeDelta();
|
||||
-
|
||||
- /// Encrypts plaintext with the key and aad. Key length is passed only for validation.
|
||||
- /// If different from value in constructor, exception will be thrown.
|
||||
- int Encrypt(const uint8_t* plaintext, int plaintext_len, const uint8_t* key,
|
||||
- int key_len, const uint8_t* aad, int aad_len, uint8_t* ciphertext);
|
||||
-
|
||||
- /// Encrypts plaintext footer, in order to compute footer signature (tag).
|
||||
- int SignedFooterEncrypt(const uint8_t* footer, int footer_len, const uint8_t* key,
|
||||
- int key_len, const uint8_t* aad, int aad_len,
|
||||
- const uint8_t* nonce, uint8_t* encrypted_footer);
|
||||
-
|
||||
- void WipeOut();
|
||||
-
|
||||
- private:
|
||||
- /// Can serve one key length only. Possible values: 16, 24, 32 bytes.
|
||||
- explicit AesEncryptor(ParquetCipher::type alg_id, int key_len, bool metadata);
|
||||
- // PIMPL Idiom
|
||||
- class AesEncryptorImpl;
|
||||
- std::unique_ptr<AesEncryptorImpl> impl_;
|
||||
-};
|
||||
-
|
||||
-/// Performs AES decryption operations with GCM or CTR ciphers.
|
||||
-class AesDecryptor {
|
||||
- public:
|
||||
- static AesDecryptor* Make(ParquetCipher::type alg_id, int key_len, bool metadata,
|
||||
- std::vector<AesDecryptor*>* all_decryptors);
|
||||
-
|
||||
- ~AesDecryptor();
|
||||
- void WipeOut();
|
||||
-
|
||||
- /// Size difference between plaintext and ciphertext, for this cipher.
|
||||
- int CiphertextSizeDelta();
|
||||
-
|
||||
- /// Decrypts ciphertext with the key and aad. Key length is passed only for
|
||||
- /// validation. If different from value in constructor, exception will be thrown.
|
||||
- int Decrypt(const uint8_t* ciphertext, int ciphertext_len, const uint8_t* key,
|
||||
- int key_len, const uint8_t* aad, int aad_len, uint8_t* plaintext);
|
||||
-
|
||||
- private:
|
||||
- /// Can serve one key length only. Possible values: 16, 24, 32 bytes.
|
||||
- explicit AesDecryptor(ParquetCipher::type alg_id, int key_len, bool metadata);
|
||||
- // PIMPL Idiom
|
||||
- class AesDecryptorImpl;
|
||||
- std::unique_ptr<AesDecryptorImpl> impl_;
|
||||
-};
|
||||
-
|
||||
-std::string CreateModuleAad(const std::string& file_aad, int8_t module_type,
|
||||
- int16_t row_group_ordinal, int16_t column_ordinal,
|
||||
- int16_t page_ordinal);
|
||||
-
|
||||
-std::string CreateFooterAad(const std::string& aad_prefix_bytes);
|
||||
-
|
||||
-// Update last two bytes of page (or page header) module AAD
|
||||
-void QuickUpdatePageAad(const std::string& AAD, int16_t new_page_ordinal);
|
||||
-
|
||||
-// Wraps OpenSSL RAND_bytes function
|
||||
-void RandBytes(unsigned char* buf, int num);
|
||||
-
|
||||
-} // namespace encryption
|
||||
-} // namespace parquet
|
||||
+#if ARROW_VERSION_MAJOR < 20
|
||||
+#include "encryption_internal_19.h"
|
||||
+#else
|
||||
+#include "encryption_internal_20.h"
|
||||
+#endif
|
||||
--- ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/internal_file_decryptor_19.h.orig 2025-07-08 07:40:29.814292389 -0400
|
||||
+++ ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/internal_file_decryptor_19.h 2025-07-08 07:40:29.813727465 -0400
|
||||
@@ -0,0 +1,121 @@
|
||||
+// Licensed to the Apache Software Foundation (ASF) under one
|
||||
+// or more contributor license agreements. See the NOTICE file
|
||||
+// distributed with this work for additional information
|
||||
+// regarding copyright ownership. The ASF licenses this file
|
||||
+// to you under the Apache License, Version 2.0 (the
|
||||
+// "License"); you may not use this file except in compliance
|
||||
+// with the License. You may obtain a copy of the License at
|
||||
+//
|
||||
+// http://www.apache.org/licenses/LICENSE-2.0
|
||||
+//
|
||||
+// Unless required by applicable law or agreed to in writing,
|
||||
+// software distributed under the License is distributed on an
|
||||
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
+// KIND, either express or implied. See the License for the
|
||||
+// specific language governing permissions and limitations
|
||||
+// under the License.
|
||||
+
|
||||
+#pragma once
|
||||
+
|
||||
+#include <map>
|
||||
+#include <memory>
|
||||
+#include <string>
|
||||
+#include <vector>
|
||||
+
|
||||
+#include "parquet/schema.h"
|
||||
+
|
||||
+namespace parquet {
|
||||
+
|
||||
+namespace encryption {
|
||||
+class AesDecryptor;
|
||||
+class AesEncryptor;
|
||||
+} // namespace encryption
|
||||
+
|
||||
+class FileDecryptionProperties;
|
||||
+
|
||||
+class PARQUET_EXPORT Decryptor {
|
||||
+ public:
|
||||
+ Decryptor(encryption::AesDecryptor* decryptor, const std::string& key,
|
||||
+ const std::string& file_aad, const std::string& aad,
|
||||
+ ::arrow::MemoryPool* pool);
|
||||
+
|
||||
+ const std::string& file_aad() const { return file_aad_; }
|
||||
+ void UpdateAad(const std::string& aad) { aad_ = aad; }
|
||||
+ ::arrow::MemoryPool* pool() { return pool_; }
|
||||
+
|
||||
+ int CiphertextSizeDelta();
|
||||
+ int Decrypt(const uint8_t* ciphertext, int ciphertext_len, uint8_t* plaintext);
|
||||
+
|
||||
+ private:
|
||||
+ encryption::AesDecryptor* aes_decryptor_;
|
||||
+ std::string key_;
|
||||
+ std::string file_aad_;
|
||||
+ std::string aad_;
|
||||
+ ::arrow::MemoryPool* pool_;
|
||||
+};
|
||||
+
|
||||
+class InternalFileDecryptor {
|
||||
+ public:
|
||||
+ explicit InternalFileDecryptor(FileDecryptionProperties* properties,
|
||||
+ const std::string& file_aad,
|
||||
+ ParquetCipher::type algorithm,
|
||||
+ const std::string& footer_key_metadata,
|
||||
+ ::arrow::MemoryPool* pool);
|
||||
+
|
||||
+ std::string& file_aad() { return file_aad_; }
|
||||
+
|
||||
+ std::string GetFooterKey();
|
||||
+
|
||||
+ ParquetCipher::type algorithm() { return algorithm_; }
|
||||
+
|
||||
+ std::string& footer_key_metadata() { return footer_key_metadata_; }
|
||||
+
|
||||
+ FileDecryptionProperties* properties() { return properties_; }
|
||||
+
|
||||
+ void WipeOutDecryptionKeys();
|
||||
+
|
||||
+ ::arrow::MemoryPool* pool() { return pool_; }
|
||||
+
|
||||
+ std::shared_ptr<Decryptor> GetFooterDecryptor();
|
||||
+ std::shared_ptr<Decryptor> GetFooterDecryptorForColumnMeta(const std::string& aad = "");
|
||||
+ std::shared_ptr<Decryptor> GetFooterDecryptorForColumnData(const std::string& aad = "");
|
||||
+ std::shared_ptr<Decryptor> GetColumnMetaDecryptor(
|
||||
+ const std::string& column_path, const std::string& column_key_metadata,
|
||||
+ const std::string& aad = "");
|
||||
+ std::shared_ptr<Decryptor> GetColumnDataDecryptor(
|
||||
+ const std::string& column_path, const std::string& column_key_metadata,
|
||||
+ const std::string& aad = "");
|
||||
+
|
||||
+ private:
|
||||
+ FileDecryptionProperties* properties_;
|
||||
+ // Concatenation of aad_prefix (if exists) and aad_file_unique
|
||||
+ std::string file_aad_;
|
||||
+ std::map<std::string, std::shared_ptr<Decryptor>> column_data_map_;
|
||||
+ std::map<std::string, std::shared_ptr<Decryptor>> column_metadata_map_;
|
||||
+
|
||||
+ std::shared_ptr<Decryptor> footer_metadata_decryptor_;
|
||||
+ std::shared_ptr<Decryptor> footer_data_decryptor_;
|
||||
+ ParquetCipher::type algorithm_;
|
||||
+ std::string footer_key_metadata_;
|
||||
+ std::vector<encryption::AesDecryptor*> all_decryptors_;
|
||||
+
|
||||
+ /// Key must be 16, 24 or 32 bytes in length. Thus there could be up to three
|
||||
+ // types of meta_decryptors and data_decryptors.
|
||||
+ std::unique_ptr<encryption::AesDecryptor> meta_decryptor_[3];
|
||||
+ std::unique_ptr<encryption::AesDecryptor> data_decryptor_[3];
|
||||
+
|
||||
+ ::arrow::MemoryPool* pool_;
|
||||
+
|
||||
+ std::shared_ptr<Decryptor> GetFooterDecryptor(const std::string& aad, bool metadata);
|
||||
+ std::shared_ptr<Decryptor> GetColumnDecryptor(const std::string& column_path,
|
||||
+ const std::string& column_key_metadata,
|
||||
+ const std::string& aad,
|
||||
+ bool metadata = false);
|
||||
+
|
||||
+ encryption::AesDecryptor* GetMetaAesDecryptor(size_t key_size);
|
||||
+ encryption::AesDecryptor* GetDataAesDecryptor(size_t key_size);
|
||||
+
|
||||
+ int MapKeyLenToDecryptorArrayIndex(int key_len);
|
||||
+};
|
||||
+
|
||||
+} // namespace parquet
|
||||
--- ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/internal_file_decryptor_20.h.orig 2025-07-08 07:40:29.815411998 -0400
|
||||
+++ ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/internal_file_decryptor_20.h 2025-07-08 07:40:29.815245155 -0400
|
||||
@@ -0,0 +1,148 @@
|
||||
+// Licensed to the Apache Software Foundation (ASF) under one
|
||||
+// or more contributor license agreements. See the NOTICE file
|
||||
+// distributed with this work for additional information
|
||||
+// regarding copyright ownership. The ASF licenses this file
|
||||
+// to you under the Apache License, Version 2.0 (the
|
||||
+// "License"); you may not use this file except in compliance
|
||||
+// with the License. You may obtain a copy of the License at
|
||||
+//
|
||||
+// http://www.apache.org/licenses/LICENSE-2.0
|
||||
+//
|
||||
+// Unless required by applicable law or agreed to in writing,
|
||||
+// software distributed under the License is distributed on an
|
||||
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
+// KIND, either express or implied. See the License for the
|
||||
+// specific language governing permissions and limitations
|
||||
+// under the License.
|
||||
+
|
||||
+#pragma once
|
||||
+
|
||||
+#include <memory>
|
||||
+#include <mutex>
|
||||
+#include <string>
|
||||
+#include <vector>
|
||||
+
|
||||
+#include "parquet/schema.h"
|
||||
+
|
||||
+namespace parquet {
|
||||
+
|
||||
+namespace encryption {
|
||||
+class AesDecryptor;
|
||||
+class AesEncryptor;
|
||||
+} // namespace encryption
|
||||
+
|
||||
+class ColumnCryptoMetaData;
|
||||
+class FileDecryptionProperties;
|
||||
+
|
||||
+// An object handling decryption using well-known encryption parameters
|
||||
+//
|
||||
+// CAUTION: Decryptor objects are not thread-safe.
|
||||
+class PARQUET_EXPORT Decryptor {
|
||||
+ public:
|
||||
+ Decryptor(std::unique_ptr<encryption::AesDecryptor> decryptor, const std::string& key,
|
||||
+ const std::string& file_aad, const std::string& aad,
|
||||
+ ::arrow::MemoryPool* pool);
|
||||
+ ~Decryptor();
|
||||
+
|
||||
+ const std::string& file_aad() const { return file_aad_; }
|
||||
+ void UpdateAad(const std::string& aad) { aad_ = aad; }
|
||||
+ ::arrow::MemoryPool* pool() { return pool_; }
|
||||
+
|
||||
+ [[nodiscard]] int32_t PlaintextLength(int32_t ciphertext_len) const;
|
||||
+ [[nodiscard]] int32_t CiphertextLength(int32_t plaintext_len) const;
|
||||
+ int32_t Decrypt(::arrow::util::span<const uint8_t> ciphertext,
|
||||
+ ::arrow::util::span<uint8_t> plaintext);
|
||||
+
|
||||
+ private:
|
||||
+ std::unique_ptr<encryption::AesDecryptor> aes_decryptor_;
|
||||
+ std::string key_;
|
||||
+ std::string file_aad_;
|
||||
+ std::string aad_;
|
||||
+ ::arrow::MemoryPool* pool_;
|
||||
+};
|
||||
+
|
||||
+class InternalFileDecryptor {
|
||||
+ public:
|
||||
+ explicit InternalFileDecryptor(std::shared_ptr<FileDecryptionProperties> properties,
|
||||
+ const std::string& file_aad,
|
||||
+ ParquetCipher::type algorithm,
|
||||
+ const std::string& footer_key_metadata,
|
||||
+ ::arrow::MemoryPool* pool);
|
||||
+
|
||||
+ const std::string& file_aad() const { return file_aad_; }
|
||||
+
|
||||
+ std::string GetFooterKey();
|
||||
+
|
||||
+ ParquetCipher::type algorithm() const { return algorithm_; }
|
||||
+
|
||||
+ const std::string& footer_key_metadata() const { return footer_key_metadata_; }
|
||||
+
|
||||
+ const std::shared_ptr<FileDecryptionProperties>& properties() const {
|
||||
+ return properties_;
|
||||
+ }
|
||||
+
|
||||
+ ::arrow::MemoryPool* pool() const { return pool_; }
|
||||
+
|
||||
+ // Get a Decryptor instance for the Parquet footer
|
||||
+ std::unique_ptr<Decryptor> GetFooterDecryptor();
|
||||
+
|
||||
+ // Get a Decryptor instance for column chunk metadata.
|
||||
+ std::unique_ptr<Decryptor> GetColumnMetaDecryptor(
|
||||
+ const std::string& column_path, const std::string& column_key_metadata,
|
||||
+ const std::string& aad = "") {
|
||||
+ return GetColumnDecryptor(column_path, column_key_metadata, aad, /*metadata=*/true);
|
||||
+ }
|
||||
+
|
||||
+ // Get a Decryptor instance for column chunk data.
|
||||
+ std::unique_ptr<Decryptor> GetColumnDataDecryptor(
|
||||
+ const std::string& column_path, const std::string& column_key_metadata,
|
||||
+ const std::string& aad = "") {
|
||||
+ return GetColumnDecryptor(column_path, column_key_metadata, aad, /*metadata=*/false);
|
||||
+ }
|
||||
+
|
||||
+ // Get a Decryptor factory for column chunk metadata.
|
||||
+ //
|
||||
+ // This is typically useful if multi-threaded decryption is expected.
|
||||
+ // This is a static function as it accepts a null `InternalFileDecryptor*`
|
||||
+ // argument if the column is not encrypted.
|
||||
+ static std::function<std::unique_ptr<Decryptor>()> GetColumnMetaDecryptorFactory(
|
||||
+ InternalFileDecryptor*, const ColumnCryptoMetaData* crypto_metadata,
|
||||
+ const std::string& aad = "");
|
||||
+ // Get a Decryptor factory for column chunk data.
|
||||
+ //
|
||||
+ // This is typically useful if multi-threaded decryption is expected.
|
||||
+ // This is a static function as it accepts a null `InternalFileDecryptor*`
|
||||
+ // argument if the column is not encrypted.
|
||||
+ static std::function<std::unique_ptr<Decryptor>()> GetColumnDataDecryptorFactory(
|
||||
+ InternalFileDecryptor*, const ColumnCryptoMetaData* crypto_metadata,
|
||||
+ const std::string& aad = "");
|
||||
+
|
||||
+ private:
|
||||
+ std::shared_ptr<FileDecryptionProperties> properties_;
|
||||
+ // Concatenation of aad_prefix (if exists) and aad_file_unique
|
||||
+ std::string file_aad_;
|
||||
+ ParquetCipher::type algorithm_;
|
||||
+ std::string footer_key_metadata_;
|
||||
+ ::arrow::MemoryPool* pool_;
|
||||
+
|
||||
+ // Protects footer_key_ updates
|
||||
+ std::mutex mutex_;
|
||||
+ std::string footer_key_;
|
||||
+
|
||||
+ std::string GetColumnKey(const std::string& column_path,
|
||||
+ const std::string& column_key_metadata);
|
||||
+
|
||||
+ std::unique_ptr<Decryptor> GetFooterDecryptor(const std::string& aad, bool metadata);
|
||||
+
|
||||
+ std::unique_ptr<Decryptor> GetColumnDecryptor(const std::string& column_path,
|
||||
+ const std::string& column_key_metadata,
|
||||
+ const std::string& aad, bool metadata);
|
||||
+
|
||||
+ std::function<std::unique_ptr<Decryptor>()> GetColumnDecryptorFactory(
|
||||
+ const ColumnCryptoMetaData* crypto_metadata, const std::string& aad, bool metadata);
|
||||
+};
|
||||
+
|
||||
+void UpdateDecryptor(Decryptor* decryptor, int16_t row_group_ordinal,
|
||||
+ int16_t column_ordinal, int8_t module_type);
|
||||
+
|
||||
+} // namespace parquet
|
||||
--- ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/internal_file_decryptor.h.orig 2024-10-06 07:18:41.000000000 -0400
|
||||
+++ ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/internal_file_decryptor.h 2025-07-08 07:40:29.813623143 -0400
|
||||
@@ -17,105 +17,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
-#include <map>
|
||||
-#include <memory>
|
||||
-#include <string>
|
||||
-#include <vector>
|
||||
-
|
||||
-#include "parquet/schema.h"
|
||||
-
|
||||
-namespace parquet {
|
||||
-
|
||||
-namespace encryption {
|
||||
-class AesDecryptor;
|
||||
-class AesEncryptor;
|
||||
-} // namespace encryption
|
||||
-
|
||||
-class FileDecryptionProperties;
|
||||
-
|
||||
-class PARQUET_EXPORT Decryptor {
|
||||
- public:
|
||||
- Decryptor(encryption::AesDecryptor* decryptor, const std::string& key,
|
||||
- const std::string& file_aad, const std::string& aad,
|
||||
- ::arrow::MemoryPool* pool);
|
||||
-
|
||||
- const std::string& file_aad() const { return file_aad_; }
|
||||
- void UpdateAad(const std::string& aad) { aad_ = aad; }
|
||||
- ::arrow::MemoryPool* pool() { return pool_; }
|
||||
-
|
||||
- int CiphertextSizeDelta();
|
||||
- int Decrypt(const uint8_t* ciphertext, int ciphertext_len, uint8_t* plaintext);
|
||||
-
|
||||
- private:
|
||||
- encryption::AesDecryptor* aes_decryptor_;
|
||||
- std::string key_;
|
||||
- std::string file_aad_;
|
||||
- std::string aad_;
|
||||
- ::arrow::MemoryPool* pool_;
|
||||
-};
|
||||
-
|
||||
-class InternalFileDecryptor {
|
||||
- public:
|
||||
- explicit InternalFileDecryptor(FileDecryptionProperties* properties,
|
||||
- const std::string& file_aad,
|
||||
- ParquetCipher::type algorithm,
|
||||
- const std::string& footer_key_metadata,
|
||||
- ::arrow::MemoryPool* pool);
|
||||
-
|
||||
- std::string& file_aad() { return file_aad_; }
|
||||
-
|
||||
- std::string GetFooterKey();
|
||||
-
|
||||
- ParquetCipher::type algorithm() { return algorithm_; }
|
||||
-
|
||||
- std::string& footer_key_metadata() { return footer_key_metadata_; }
|
||||
-
|
||||
- FileDecryptionProperties* properties() { return properties_; }
|
||||
-
|
||||
- void WipeOutDecryptionKeys();
|
||||
-
|
||||
- ::arrow::MemoryPool* pool() { return pool_; }
|
||||
-
|
||||
- std::shared_ptr<Decryptor> GetFooterDecryptor();
|
||||
- std::shared_ptr<Decryptor> GetFooterDecryptorForColumnMeta(const std::string& aad = "");
|
||||
- std::shared_ptr<Decryptor> GetFooterDecryptorForColumnData(const std::string& aad = "");
|
||||
- std::shared_ptr<Decryptor> GetColumnMetaDecryptor(
|
||||
- const std::string& column_path, const std::string& column_key_metadata,
|
||||
- const std::string& aad = "");
|
||||
- std::shared_ptr<Decryptor> GetColumnDataDecryptor(
|
||||
- const std::string& column_path, const std::string& column_key_metadata,
|
||||
- const std::string& aad = "");
|
||||
-
|
||||
- private:
|
||||
- FileDecryptionProperties* properties_;
|
||||
- // Concatenation of aad_prefix (if exists) and aad_file_unique
|
||||
- std::string file_aad_;
|
||||
- std::map<std::string, std::shared_ptr<Decryptor>> column_data_map_;
|
||||
- std::map<std::string, std::shared_ptr<Decryptor>> column_metadata_map_;
|
||||
-
|
||||
- std::shared_ptr<Decryptor> footer_metadata_decryptor_;
|
||||
- std::shared_ptr<Decryptor> footer_data_decryptor_;
|
||||
- ParquetCipher::type algorithm_;
|
||||
- std::string footer_key_metadata_;
|
||||
- std::vector<encryption::AesDecryptor*> all_decryptors_;
|
||||
-
|
||||
- /// Key must be 16, 24 or 32 bytes in length. Thus there could be up to three
|
||||
- // types of meta_decryptors and data_decryptors.
|
||||
- std::unique_ptr<encryption::AesDecryptor> meta_decryptor_[3];
|
||||
- std::unique_ptr<encryption::AesDecryptor> data_decryptor_[3];
|
||||
-
|
||||
- ::arrow::MemoryPool* pool_;
|
||||
-
|
||||
- std::shared_ptr<Decryptor> GetFooterDecryptor(const std::string& aad, bool metadata);
|
||||
- std::shared_ptr<Decryptor> GetColumnDecryptor(const std::string& column_path,
|
||||
- const std::string& column_key_metadata,
|
||||
- const std::string& aad,
|
||||
- bool metadata = false);
|
||||
-
|
||||
- encryption::AesDecryptor* GetMetaAesDecryptor(size_t key_size);
|
||||
- encryption::AesDecryptor* GetDataAesDecryptor(size_t key_size);
|
||||
-
|
||||
- int MapKeyLenToDecryptorArrayIndex(int key_len);
|
||||
-};
|
||||
-
|
||||
-} // namespace parquet
|
||||
+#if ARROW_VERSION_MAJOR < 20
|
||||
+#include "internal_file_decryptor_19.h"
|
||||
+#else
|
||||
+#include "internal_file_decryptor_20.h"
|
||||
+#endif
|
||||
--- ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/s3select_parquet_intrf.h.orig 2024-10-06 07:18:41.000000000 -0400
|
||||
+++ ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/s3select_parquet_intrf.h 2025-07-08 07:40:29.816727417 -0400
|
||||
@@ -1002,6 +1002,7 @@
|
||||
throw ParquetException("Encrypted files cannot contain more than 32767 row groups");
|
||||
}
|
||||
|
||||
+#if ARROW_VERSION_MAJOR < 20
|
||||
// The column is encrypted
|
||||
std::shared_ptr<::parquet::Decryptor> meta_decryptor;
|
||||
std::shared_ptr<Decryptor> data_decryptor;
|
||||
@@ -1035,6 +1036,25 @@
|
||||
false,
|
||||
#endif
|
||||
properties_.memory_pool(), &ctx);
|
||||
+#else
|
||||
+ // Arrow 20+ version uses factory functions instead of shared_ptr for decryptors
|
||||
+ std::function<std::unique_ptr<Decryptor>()> meta_decryptor_factory =
|
||||
+ InternalFileDecryptor::GetColumnMetaDecryptorFactory(file_decryptor_.get(), crypto_metadata.get());
|
||||
+ std::function<std::unique_ptr<Decryptor>()> data_decryptor_factory =
|
||||
+ InternalFileDecryptor::GetColumnDataDecryptorFactory(file_decryptor_.get(), crypto_metadata.get());
|
||||
+
|
||||
+ const CryptoContext ctx {
|
||||
+ col->has_dictionary_page(),
|
||||
+ row_group_ordinal_,
|
||||
+ static_cast<int16_t>(i),
|
||||
+ meta_decryptor_factory,
|
||||
+ data_decryptor_factory,
|
||||
+ };
|
||||
+
|
||||
+ return PageReader::Open(stream, col->num_values(), col->compression(),
|
||||
+ false,
|
||||
+ properties_.memory_pool(), &ctx);
|
||||
+#endif
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -1071,7 +1091,9 @@
|
||||
}
|
||||
|
||||
void Close() override {
|
||||
+#if ARROW_VERSION_MAJOR < 20
|
||||
if (file_decryptor_) file_decryptor_->WipeOutDecryptionKeys();
|
||||
+#endif
|
||||
}
|
||||
|
||||
std::shared_ptr<RowGroupReader> GetRowGroup(int i) override {
|
||||
@@ -1249,9 +1271,17 @@
|
||||
// Handle AAD prefix
|
||||
EncryptionAlgorithm algo = file_crypto_metadata->encryption_algorithm();
|
||||
std::string file_aad = HandleAadPrefix(file_decryption_properties, algo);
|
||||
+#if ARROW_VERSION_MAJOR < 20
|
||||
file_decryptor_ = std::make_shared<::parquet::InternalFileDecryptor>(
|
||||
file_decryption_properties, file_aad, algo.algorithm,
|
||||
file_crypto_metadata->key_metadata(), properties_.memory_pool());
|
||||
+#else
|
||||
+ // Arrow 20+ takes a shared_ptr to FileDecryptionProperties
|
||||
+ file_decryptor_ = std::make_shared<::parquet::InternalFileDecryptor>(
|
||||
+ std::shared_ptr<FileDecryptionProperties>(file_decryption_properties),
|
||||
+ file_aad, algo.algorithm,
|
||||
+ file_crypto_metadata->key_metadata(), properties_.memory_pool());
|
||||
+#endif
|
||||
|
||||
int64_t metadata_offset = source_size_ - kFooterSize - footer_len + crypto_metadata_len;
|
||||
uint32_t metadata_len = footer_len - crypto_metadata_len;
|
||||
@@ -1282,9 +1312,18 @@
|
||||
EncryptionAlgorithm algo = file_metadata_->encryption_algorithm();
|
||||
// Handle AAD prefix
|
||||
std::string file_aad = HandleAadPrefix(file_decryption_properties, algo);
|
||||
+#if ARROW_VERSION_MAJOR < 20
|
||||
file_decryptor_ = std::make_shared<::parquet::InternalFileDecryptor>(
|
||||
file_decryption_properties, file_aad, algo.algorithm,
|
||||
file_metadata_->footer_signing_key_metadata(), properties_.memory_pool());
|
||||
+#else
|
||||
+ // Arrow 20+ takes a shared_ptr to FileDecryptionProperties
|
||||
+ file_decryptor_ = std::make_shared<::parquet::InternalFileDecryptor>(
|
||||
+ std::shared_ptr<FileDecryptionProperties>(file_decryption_properties),
|
||||
+ file_aad, algo.algorithm,
|
||||
+ file_metadata_->footer_signing_key_metadata(), properties_.memory_pool());
|
||||
+ // In Arrow 20+, no need to set file_decryptor in metadata
|
||||
+#endif
|
||||
// set the InternalFileDecryptor in the metadata as well, as it's used
|
||||
// for signature verification and for ColumnChunkMetaData creation.
|
||||
#if GAL_set_file_decryptor_declare_private
|
||||
@@ -0,0 +1,37 @@
|
||||
From 8c78a22d2cf69892570f635735d9735169b64a75 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Sabaini <peter.sabaini@canonical.com>
|
||||
Date: Wed, 11 Sep 2024 16:56:50 +0200
|
||||
Subject: [PATCH] ceph-volume: fix importlib.metadata compat
|
||||
|
||||
The importlib.metadata library removed older shims in releases >5.0.0
|
||||
where EntryPoints objects use .select() instead of dict-like access.
|
||||
|
||||
Fixes: https://tracker.ceph.com/issues/68032
|
||||
|
||||
Signed-off-by: Peter Sabaini <peter.sabaini@canonical.com>
|
||||
---
|
||||
src/ceph-volume/ceph_volume/main.py | 10 +++++++++-
|
||||
1 file changed, 9 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/ceph-volume/ceph_volume/main.py b/src/ceph-volume/ceph_volume/main.py
|
||||
index f8eca65ec497c..4f27f429e89e2 100644
|
||||
--- a/src/ceph-volume/ceph_volume/main.py
|
||||
+++ b/src/ceph-volume/ceph_volume/main.py
|
||||
@@ -11,8 +11,16 @@
|
||||
from importlib.metadata import entry_points
|
||||
|
||||
def get_entry_points(group: str): # type: ignore
|
||||
- return entry_points().get(group, []) # type: ignore
|
||||
+ eps = entry_points()
|
||||
+ if hasattr(eps, 'select'):
|
||||
+ # New importlib.metadata uses .select()
|
||||
+ return eps.select(group=group)
|
||||
+ else:
|
||||
+ # Fallback to older EntryPoints that returns dicts
|
||||
+ return eps.get(group, []) # type: ignore
|
||||
+
|
||||
except ImportError:
|
||||
+ # Fallback to `pkg_resources` for older versions
|
||||
from pkg_resources import iter_entry_points as entry_points # type: ignore
|
||||
|
||||
def get_entry_points(group: str): # type: ignore
|
||||
@@ -1,10 +0,0 @@
|
||||
--- ceph-20.0.0-2099-gc62cbb7d/src/json_spirit/json_spirit_reader_template.h.orig 2025-06-09 11:56:21.534808695 -0400
|
||||
+++ ceph-20.0.0-2099-gc62cbb7d/src/json_spirit/json_spirit_reader_template.h 2025-06-09 12:01:56.358334353 -0400
|
||||
@@ -136,6 +136,7 @@
|
||||
{
|
||||
typedef typename String_type::const_iterator Iter_type;
|
||||
|
||||
+ if( end - begin < 1 ) return String_type();
|
||||
if( end - begin < 2 ) return String_type( begin, end );
|
||||
|
||||
String_type result;
|
||||
@@ -0,0 +1,53 @@
|
||||
From 5924df771f850c249396a37a62f97ac242bf2f96 Mon Sep 17 00:00:00 2001
|
||||
From: Hector Martin <marcan@marcan.st>
|
||||
Date: Wed, 20 Aug 2025 13:34:08 +0900
|
||||
Subject: [PATCH 1/2] mgr/dashboard: Make saml2 robust against module load
|
||||
errors
|
||||
|
||||
Loading saml2 can fail due to issues with the xmlsec package (possibly
|
||||
subinterpreter related):
|
||||
|
||||
File "/usr/share/ceph/mgr/dashboard/controllers/saml2.py", line 6, in <module>
|
||||
from onelogin.saml2.auth import OneLogin_Saml2_Auth
|
||||
File "/lib/python3.13/site-packages/onelogin/saml2/auth.py", line 12, in <module>
|
||||
import xmlsec
|
||||
xmlsec.Error: (100, 'lxml & xmlsec libxml2 library version mismatch')
|
||||
|
||||
Instead of taking down the entire dashboard module, treat this exception
|
||||
like a missing saml2 package.
|
||||
|
||||
Signed-off-by: Hector Martin <marcan@marcan.st>
|
||||
---
|
||||
src/pybind/mgr/dashboard/controllers/saml2.py | 2 +-
|
||||
src/pybind/mgr/dashboard/services/sso.py | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/pybind/mgr/dashboard/controllers/saml2.py b/src/pybind/mgr/dashboard/controllers/saml2.py
|
||||
index c11b18a27bc7..e859f558cdc4 100644
|
||||
--- a/src/pybind/mgr/dashboard/controllers/saml2.py
|
||||
+++ b/src/pybind/mgr/dashboard/controllers/saml2.py
|
||||
@@ -8,7 +8,7 @@ try:
|
||||
from onelogin.saml2.settings import OneLogin_Saml2_Settings
|
||||
|
||||
python_saml_imported = True
|
||||
-except ImportError:
|
||||
+except Exception:
|
||||
python_saml_imported = False
|
||||
|
||||
from .. import mgr
|
||||
diff --git a/src/pybind/mgr/dashboard/services/sso.py b/src/pybind/mgr/dashboard/services/sso.py
|
||||
index 2290e6ea3e15..38910ca4aa34 100644
|
||||
--- a/src/pybind/mgr/dashboard/services/sso.py
|
||||
+++ b/src/pybind/mgr/dashboard/services/sso.py
|
||||
@@ -20,7 +20,7 @@ try:
|
||||
from onelogin.saml2.settings import OneLogin_Saml2_Settings as Saml2Settings
|
||||
|
||||
python_saml_imported = True
|
||||
-except ImportError:
|
||||
+except Exception:
|
||||
python_saml_imported = False
|
||||
|
||||
|
||||
--
|
||||
2.50.1
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
--- ceph-20.2.0/src/CMakeLists.txt.orig 2026-01-20 14:31:56.764231793 -0500
|
||||
+++ ceph-20.2.0/src/CMakeLists.txt 2026-01-20 14:35:21.258787691 -0500
|
||||
@@ -1051,8 +1051,8 @@
|
||||
if(WITH_RADOSGW)
|
||||
if(WITH_RADOSGW_SELECT_PARQUET OR WITH_RADOSGW_ARROW_FLIGHT)
|
||||
if(WITH_SYSTEM_ARROW)
|
||||
- find_package(Arrow 4 REQUIRED QUIET)
|
||||
- find_package(Parquet 4 REQUIRED QUIET)
|
||||
+ find_package(Arrow REQUIRED QUIET)
|
||||
+ find_package(Parquet REQUIRED QUIET)
|
||||
else()
|
||||
# find arrow's dependencies
|
||||
if (WITH_SYSTEM_UTF8PROC)
|
||||
@@ -1,22 +0,0 @@
|
||||
--- ceph-20.0.0-2787-g838ba95e/src/jaegertracing/opentelemetry-cpp/api/include/opentelemetry/nostd/internal/absl/base/options.h.orig 2025-07-31 10:18:56.636528168 -0400
|
||||
+++ ceph-20.0.0-2787-g838ba95e/src/jaegertracing/opentelemetry-cpp/api/include/opentelemetry/nostd/internal/absl/base/options.h 2025-07-31 10:19:12.923329646 -0400
|
||||
@@ -70,7 +70,7 @@
|
||||
// Include a standard library header to allow configuration based on the
|
||||
// standard library in use.
|
||||
#ifdef __cplusplus
|
||||
-#include <ciso646>
|
||||
+#include <iso646.h>
|
||||
#endif
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
--- ceph-20.2.0/src/boost/boost/redis/adapter/detail/adapters.hpp.orig 2026-02-06 09:54:39.748078321 -0500
|
||||
+++ ceph-20.2.0/src/boost/boost/redis/adapter/detail/adapters.hpp 2026-02-06 09:55:02.427664048 -0500
|
||||
@@ -29,7 +29,7 @@
|
||||
#include <charconv>
|
||||
|
||||
// See https://stackoverflow.com/a/31658120/1077832
|
||||
-#include<ciso646>
|
||||
+#include<iso646.h>
|
||||
#ifdef _LIBCPP_VERSION
|
||||
#else
|
||||
#include <cstdlib>
|
||||
@@ -0,0 +1,44 @@
|
||||
From 76af91b516bb31ae0a79f55f315bef2c2105a06e Mon Sep 17 00:00:00 2001
|
||||
From: Nizamudeen A <nia@redhat.com>
|
||||
Date: Thu, 26 Jun 2025 12:55:22 +0530
|
||||
Subject: [PATCH 2/2] mgr/dashboard: catch protobuf error due to mismatch in
|
||||
version
|
||||
|
||||
Signed-off-by: Nizamudeen A <nia@redhat.com>
|
||||
(cherry picked from commit acb0f19c4a50b2ea68f328a61a14a2da06be298b)
|
||||
|
||||
Conflicts:
|
||||
src/pybind/mgr/dashboard/services/nvmeof_client.py
|
||||
- only kept relavant portion applicable for squid
|
||||
---
|
||||
src/pybind/mgr/dashboard/services/nvmeof_client.py | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/src/pybind/mgr/dashboard/services/nvmeof_client.py b/src/pybind/mgr/dashboard/services/nvmeof_client.py
|
||||
index e0ea6d1e48b3..be2b5edbaa52 100644
|
||||
--- a/src/pybind/mgr/dashboard/services/nvmeof_client.py
|
||||
+++ b/src/pybind/mgr/dashboard/services/nvmeof_client.py
|
||||
@@ -1,3 +1,5 @@
|
||||
+# pylint: disable=unexpected-keyword-arg
|
||||
+
|
||||
import functools
|
||||
import logging
|
||||
from collections.abc import Iterable
|
||||
@@ -9,6 +11,14 @@ from .nvmeof_conf import NvmeofGatewaysConfig
|
||||
logger = logging.getLogger("nvmeof_client")
|
||||
|
||||
try:
|
||||
+ # if the protobuf version is newer than what we generated with
|
||||
+ # proto file import will fail (because of differences between what's
|
||||
+ # available in centos and ubuntu).
|
||||
+ # this "hack" should be removed once we update both the
|
||||
+ # distros; centos and ubuntu.
|
||||
+ import os
|
||||
+ os.environ["PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION"] = "python"
|
||||
+
|
||||
import grpc # type: ignore
|
||||
import grpc._channel # type: ignore
|
||||
from google.protobuf.message import Message # type: ignore
|
||||
--
|
||||
2.50.1
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
--- ceph-20.2.0/src/crimson/common/smp_helpers.h.orig 2025-12-04 10:38:34.906915674 -0500
|
||||
+++ ceph-20.2.0/src/crimson/common/smp_helpers.h 2025-12-04 10:38:45.200845804 -0500
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <optional>
|
||||
#include <type_traits>
|
||||
#include <vector>
|
||||
+#include <coroutine>
|
||||
|
||||
#include <seastar/core/shared_future.hh>
|
||||
#include <seastar/core/smp.hh>
|
||||
@@ -1,70 +0,0 @@
|
||||
--- ceph-20.2.0/src/common/Formatter.h.orig 2026-01-06 17:47:18.437014517 -0500
|
||||
+++ ceph-20.2.0/src/common/Formatter.h 2026-01-06 17:47:53.015404074 -0500
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include <stdarg.h>
|
||||
+#include <cstdint>
|
||||
#include <sstream>
|
||||
#include <map>
|
||||
#include <vector>
|
||||
--- ceph-20.2.0/src/mds/Locker.cc.orig 2026-01-07 10:34:12.731210930 -0500
|
||||
+++ ceph-20.2.0/src/mds/Locker.cc 2026-01-07 10:34:35.627823155 -0500
|
||||
@@ -4489,7 +4489,7 @@
|
||||
dout(7) << "handle_client_lease client." << client << " renew on " << *dn
|
||||
<< (!dn->lock.can_lease(client)?", revoking lease":"") << dendl;
|
||||
if (dn->lock.can_lease(client)) {
|
||||
- auto reply = make_message<MClientLease>(*m);
|
||||
+ auto reply = ceph::make_message<MClientLease>(*m);
|
||||
int pool = 1; // fixme.. do something smart!
|
||||
reply->h.duration_ms = (int)(1000 * mdcache->client_lease_durations[pool]);
|
||||
reply->h.seq = ++l->seq;
|
||||
--- ceph-20.2.0/src/mds/Server.cc.orig 2026-01-07 11:27:13.532097596 -0500
|
||||
+++ ceph-20.2.0/src/mds/Server.cc 2026-01-07 11:28:42.411581266 -0500
|
||||
@@ -150,7 +150,7 @@
|
||||
}
|
||||
}
|
||||
batch_reqs.clear();
|
||||
- server->reply_client_request(mdr, make_message<MClientReply>(*mdr->client_request, r));
|
||||
+ server->reply_client_request(mdr, ceph::make_message<MClientReply>(*mdr->client_request, r));
|
||||
}
|
||||
void print(std::ostream& o) const override {
|
||||
o << "[batch front=" << *mdr << "]";
|
||||
@@ -2142,7 +2142,7 @@
|
||||
dout(20) << __func__ << ": batch head " << *mdr << dendl;
|
||||
mdr->release_batch_op()->respond(r);
|
||||
} else {
|
||||
- reply_client_request(mdr, make_message<MClientReply>(*mdr->client_request, r));
|
||||
+ reply_client_request(mdr, ceph::make_message<MClientReply>(*mdr->client_request, r));
|
||||
}
|
||||
} else if (mdr->internal_op > -1) {
|
||||
dout(10) << __func__ << ": completing with result " << cpp_strerror(r) << " on internal " << *mdr << dendl;
|
||||
@@ -2290,7 +2290,7 @@
|
||||
}
|
||||
|
||||
|
||||
- auto reply = make_message<MClientReply>(*req, 0);
|
||||
+ auto reply = ceph::make_message<MClientReply>(*req, 0);
|
||||
reply->set_unsafe();
|
||||
|
||||
// mark xlocks "done", indicating that we are exposing uncommitted changes.
|
||||
@@ -2632,7 +2632,7 @@
|
||||
req->get_op() != CEPH_MDS_OP_OPEN &&
|
||||
req->get_op() != CEPH_MDS_OP_CREATE)) {
|
||||
dout(5) << "already completed " << req->get_reqid() << dendl;
|
||||
- auto reply = make_message<MClientReply>(*req, 0);
|
||||
+ auto reply = ceph::make_message<MClientReply>(*req, 0);
|
||||
if (created != inodeno_t()) {
|
||||
bufferlist extra;
|
||||
set_reply_extra_bl(req, created, extra);
|
||||
--- ceph-20.2.0/src/mds/MDCache.cc.orig 2026-01-07 11:28:48.882470871 -0500
|
||||
+++ ceph-20.2.0/src/mds/MDCache.cc 2026-01-07 11:29:12.405069562 -0500
|
||||
@@ -10535,7 +10535,7 @@
|
||||
|
||||
|
||||
CInode *cur = 0;
|
||||
- auto reply = make_message<MDiscoverReply>(*dis);
|
||||
+ auto reply = ceph::make_message<MDiscoverReply>(*dis);
|
||||
|
||||
snapid_t snapid = dis->get_snapid();
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
--- ceph-20.2.0/src/rgw/driver/dbstore/CMakeLists.txt.orig 2026-01-27 19:53:53.780108462 -0500
|
||||
+++ ceph-20.2.0/src/rgw/driver/dbstore/CMakeLists.txt 2026-01-28 07:30:04.861741687 -0500
|
||||
@@ -34,7 +34,7 @@
|
||||
list(APPEND link_targets jaeger_base)
|
||||
endif()
|
||||
list(APPEND link_targets rgw_common)
|
||||
-target_link_libraries(dbstore_lib PUBLIC ${link_targets})
|
||||
+target_link_libraries(dbstore_lib PUBLIC ${link_targets} PRIVATE rgw_a)
|
||||
|
||||
set (CMAKE_LINK_LIBRARIES ${CMAKE_LINK_LIBRARIES} dbstore_lib)
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
--- ceph-20.2.0/src/jaegertracing/opentelemetry-cpp/CMakeLists.txt.orig 2026-02-17 08:17:06.372917033 -0500
|
||||
+++ ceph-20.2.0/src/jaegertracing/opentelemetry-cpp/CMakeLists.txt 2026-02-17 08:17:44.026323618 -0500
|
||||
@@ -1,4 +1,4 @@
|
||||
-cmake_minimum_required(VERSION 3.1)
|
||||
+cmake_minimum_required(VERSION 3.5)
|
||||
|
||||
# See https://cmake.org/cmake/help/v3.3/policy/CMP0057.html required by certain
|
||||
# versions of gtest
|
||||
@@ -1,14 +0,0 @@
|
||||
--- ceph-20.2.0/src/rgw/rgw_lua_utils.cc.orig 2026-02-17 11:46:05.677894827 -0500
|
||||
+++ ceph-20.2.0/src/rgw/rgw_lua_utils.cc 2026-02-17 11:50:06.106569226 -0500
|
||||
@@ -115,7 +115,11 @@
|
||||
|
||||
// create new lua state together with reference to the guard
|
||||
lua_State* newstate(lua_state_guard* guard) {
|
||||
+#if (LUA_VERSION_NUM < 505)
|
||||
lua_State* L = lua_newstate(allocator, guard);
|
||||
+#else
|
||||
+ lua_State* L = lua_newstate(allocator, guard, 314159);
|
||||
+#endif
|
||||
if (L) {
|
||||
lua_atpanic(L, [](lua_State* L) -> int {
|
||||
const char* msg = lua_tostring(L, -1);
|
||||
@@ -0,0 +1,152 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: "Max R. Carrara" <m.carrara@proxmox.com>
|
||||
Date: Wed, 16 Jul 2025 13:14:39 +0200
|
||||
Subject: [PATCH 58/59] pybind/mgr/restful: provide workaround for PyO3
|
||||
ImportError
|
||||
|
||||
Move the self-signed cert generation into a separate module
|
||||
inside python-common/ceph and run the module in a separate Python
|
||||
process.
|
||||
|
||||
This provides a workaround for the ImportError thrown by PyO3 when
|
||||
the `restful` module is loaded in the context of multiple Python
|
||||
sub-interpreters being present. In particular, the ImportError is
|
||||
thrown by the `crypto` module of the `OpenSSL` package.
|
||||
|
||||
Inspired by an upstream PR [0].
|
||||
|
||||
[0]: https://github.com/ceph/ceph/pull/62951
|
||||
|
||||
Signed-off-by: Max R. Carrara <m.carrara@proxmox.com>
|
||||
---
|
||||
src/pybind/mgr/restful/module.py | 24 +++------
|
||||
src/python-common/ceph/_crypto_wrap.py | 69 ++++++++++++++++++++++++++
|
||||
2 files changed, 76 insertions(+), 17 deletions(-)
|
||||
create mode 100644 src/python-common/ceph/_crypto_wrap.py
|
||||
|
||||
diff --git a/src/pybind/mgr/restful/module.py b/src/pybind/mgr/restful/module.py
|
||||
index 0f8c78e0bd8..7f93c41f1e6 100644
|
||||
--- a/src/pybind/mgr/restful/module.py
|
||||
+++ b/src/pybind/mgr/restful/module.py
|
||||
@@ -7,6 +7,7 @@ import json
|
||||
import time
|
||||
import errno
|
||||
import inspect
|
||||
+import subprocess
|
||||
import tempfile
|
||||
import threading
|
||||
import traceback
|
||||
@@ -19,7 +20,6 @@ from . import context
|
||||
|
||||
from uuid import uuid4
|
||||
from pecan import jsonify, make_app
|
||||
-from OpenSSL import crypto
|
||||
from pecan.rest import RestController
|
||||
from werkzeug.serving import make_server, make_ssl_devcert
|
||||
|
||||
@@ -401,24 +401,14 @@ class Module(MgrModule):
|
||||
|
||||
|
||||
def create_self_signed_cert(self):
|
||||
- # create a key pair
|
||||
- pkey = crypto.PKey()
|
||||
- pkey.generate_key(crypto.TYPE_RSA, 2048)
|
||||
-
|
||||
- # create a self-signed cert
|
||||
- cert = crypto.X509()
|
||||
- cert.get_subject().O = "IT"
|
||||
- cert.get_subject().CN = "ceph-restful"
|
||||
- cert.set_serial_number(int(uuid4()))
|
||||
- cert.gmtime_adj_notBefore(0)
|
||||
- cert.gmtime_adj_notAfter(10*365*24*60*60)
|
||||
- cert.set_issuer(cert.get_subject())
|
||||
- cert.set_pubkey(pkey)
|
||||
- cert.sign(pkey, 'sha512')
|
||||
+ cmd = ["python3", "-m", "ceph._crypto_wrap", "create_self_signed_cert"]
|
||||
+
|
||||
+ response = subprocess.run(cmd, capture_output=True, check=True)
|
||||
+ response_obj = json.loads(response.stdout)
|
||||
|
||||
return (
|
||||
- crypto.dump_certificate(crypto.FILETYPE_PEM, cert),
|
||||
- crypto.dump_privatekey(crypto.FILETYPE_PEM, pkey)
|
||||
+ response_obj["cert"].encode("utf-8"),
|
||||
+ response_obj["key"].encode("utf-8"),
|
||||
)
|
||||
|
||||
|
||||
diff --git a/src/python-common/ceph/_crypto_wrap.py b/src/python-common/ceph/_crypto_wrap.py
|
||||
new file mode 100644
|
||||
index 00000000000..16a19a5345e
|
||||
--- /dev/null
|
||||
+++ b/src/python-common/ceph/_crypto_wrap.py
|
||||
@@ -0,0 +1,69 @@
|
||||
+"""CLI wrapper for cryptographic functions of the :mod:`restful` module.
|
||||
+
|
||||
+To be called via :func:`subprocess.run()` as a workaround for
|
||||
+:class:`ImportError`s related to PyO3's current lack of sub-interpreter
|
||||
+support.
|
||||
+
|
||||
+Note:
|
||||
+ Since this module is installed as part of the ``ceph`` package,
|
||||
+ it should be called like so::
|
||||
+
|
||||
+ python3 -m ceph._crypto_wrap create_self_signed_cert
|
||||
+"""
|
||||
+
|
||||
+import argparse
|
||||
+import sys
|
||||
+import json
|
||||
+
|
||||
+from argparse import Namespace
|
||||
+from typing import Any
|
||||
+from uuid import uuid4
|
||||
+
|
||||
+from OpenSSL import crypto
|
||||
+
|
||||
+
|
||||
+def _respond(data: dict[str, Any]) -> None:
|
||||
+ json.dump(data, sys.stdout)
|
||||
+ sys.stdout.flush()
|
||||
+
|
||||
+
|
||||
+def create_self_signed_cert(args: Namespace) -> None:
|
||||
+ cert_key_pair = _create_self_signed_cert()
|
||||
+ _respond(cert_key_pair)
|
||||
+
|
||||
+
|
||||
+def _create_self_signed_cert() -> dict[str, str]:
|
||||
+ # create a key pair
|
||||
+ pubkey = crypto.PKey()
|
||||
+ pubkey.generate_key(crypto.TYPE_RSA, 2048)
|
||||
+
|
||||
+ # create a self-signed cert
|
||||
+ cert = crypto.X509()
|
||||
+ cert.get_subject().O = "IT"
|
||||
+ cert.get_subject().CN = "ceph-restful"
|
||||
+ cert.set_serial_number(int(uuid4()))
|
||||
+ cert.gmtime_adj_notBefore(0)
|
||||
+ cert.gmtime_adj_notAfter(10 * 365 * 24 * 60 * 60)
|
||||
+ cert.set_issuer(cert.get_subject())
|
||||
+ cert.set_pubkey(pubkey)
|
||||
+ cert.sign(pubkey, "sha512")
|
||||
+
|
||||
+ return {
|
||||
+ "cert": crypto.dump_certificate(crypto.FILETYPE_PEM, cert).decode(),
|
||||
+ "key": crypto.dump_privatekey(crypto.FILETYPE_PEM, pubkey).decode(),
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+def main() -> None:
|
||||
+ parser = argparse.ArgumentParser(prog="_crypto_wrap.py")
|
||||
+ subparsers = parser.add_subparsers(required=True)
|
||||
+
|
||||
+ parser_cssc = subparsers.add_parser("create_self_signed_cert")
|
||||
+ parser_cssc.set_defaults(func=create_self_signed_cert)
|
||||
+
|
||||
+ args = parser.parse_args()
|
||||
+ args.func(args)
|
||||
+
|
||||
+
|
||||
+if __name__ == "__main__":
|
||||
+ main()
|
||||
@@ -0,0 +1,56 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: "Max R. Carrara" <m.carrara@proxmox.com>
|
||||
Date: Wed, 16 Jul 2025 16:31:43 +0200
|
||||
Subject: [PATCH 59/59] mgr: fix module import by making NOTIFY_TYPES in py
|
||||
modules optional
|
||||
|
||||
If NOTIFY_TYPES isn't an attribute of the passed class, the Python
|
||||
(sub-)interpreter raises an AttributeError that must be handled or cleared
|
||||
explicitly via the Python C-API. Unfortunately, this isn't done here,
|
||||
which means that the exception sticks around until handled.
|
||||
|
||||
This caused a call to PyModule::load_subclass_of() to fail and
|
||||
incorrectly report the AttributeError as cause.
|
||||
|
||||
Checking whether the class has NOTIFY_TYPES as attribute in the first
|
||||
place fixes this.
|
||||
|
||||
Note that there's an upstream PR [0] that wasn't backported that aimed
|
||||
to fix this, but does so incorrectly, as the exception is still not
|
||||
cleared there. The warnings regarding NOTIFY_TYPES missing also occurs
|
||||
on Reef but doesn't cause any module imports to fail there. As the
|
||||
affected Ceph code has stayed mostly the same between bookworm and
|
||||
trixie releases, this suggests that some behavior between Python 3.11
|
||||
and 3.13 likely changed.
|
||||
|
||||
Either way, avoiding the AttributeError altogether fixes this.
|
||||
|
||||
[0]: https://github.com/ceph/ceph/pull/57106
|
||||
|
||||
Signed-off-by: Max R. Carrara <m.carrara@proxmox.com>
|
||||
---
|
||||
src/mgr/PyModule.cc | 10 ++++++----
|
||||
1 file changed, 6 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/mgr/PyModule.cc b/src/mgr/PyModule.cc
|
||||
index 084cf3ffc1e..e6fd269dca5 100644
|
||||
--- a/src/mgr/PyModule.cc
|
||||
+++ b/src/mgr/PyModule.cc
|
||||
@@ -513,11 +513,13 @@ int PyModule::register_options(PyObject *cls)
|
||||
|
||||
int PyModule::load_notify_types()
|
||||
{
|
||||
- PyObject *ls = PyObject_GetAttrString(pClass, "NOTIFY_TYPES");
|
||||
- if (ls == nullptr) {
|
||||
- derr << "Module " << get_name() << " has missing NOTIFY_TYPES member" << dendl;
|
||||
- return -EINVAL;
|
||||
+ if (!PyObject_HasAttrString(pClass, "NOTIFY_TYPES")) {
|
||||
+ dout(10) << "Module " << get_name() << " has no NOTIFY_TYPES member" << dendl;
|
||||
+ return 0;
|
||||
}
|
||||
+
|
||||
+ PyObject *ls = PyObject_GetAttrString(pClass, "NOTIFY_TYPES");
|
||||
+
|
||||
if (!PyObject_TypeCheck(ls, &PyList_Type)) {
|
||||
// Relatively easy mistake for human to make, e.g. defining COMMANDS
|
||||
// as a {} instead of a []
|
||||
@@ -20,7 +20,7 @@
|
||||
# please read this for explanation of bcond syntax:
|
||||
# https://rpm-software-management.github.io/rpm/manual/conditionalbuilds.html
|
||||
#################################################################################
|
||||
%bcond_with system_boost
|
||||
%bcond_without system_boost
|
||||
%bcond_with make_check
|
||||
%bcond_with cmake_verbose_logging
|
||||
%bcond_without ceph_test_package
|
||||
@@ -36,11 +36,15 @@
|
||||
%bcond_with rbd_rwl_cache
|
||||
%endif
|
||||
%if 0%{?fedora} || 0%{?rhel}
|
||||
%if 0%{?rhel} < 9
|
||||
%bcond_with system_pmdk
|
||||
%else
|
||||
%ifarch s390x %{arm64} riscv64
|
||||
%bcond_with system_pmdk
|
||||
%else
|
||||
%bcond_without system_pmdk
|
||||
%endif
|
||||
%endif
|
||||
%bcond_without selinux
|
||||
%bcond_without amqp_endpoint
|
||||
%bcond_without kafka_endpoint
|
||||
@@ -88,20 +92,20 @@
|
||||
%bcond_with lua_packages
|
||||
%endif
|
||||
%endif
|
||||
%bcond_with crimson
|
||||
%bcond_with seastar
|
||||
%if 0%{?suse_version}
|
||||
%bcond_with jaeger
|
||||
%else
|
||||
%bcond_without jaeger
|
||||
%endif
|
||||
%if 0%{?fedora} || 0%{?suse_version} >= 1500 || 0%{?rhel}
|
||||
%if 0%{?fedora} || 0%{?suse_version} >= 1500 || 0%{?rhel} >= 10
|
||||
# distros that ship cmd2 and/or colorama
|
||||
%bcond_without cephfs_shell
|
||||
%else
|
||||
# distros that do _not_ ship cmd2/colorama
|
||||
%bcond_with cephfs_shell
|
||||
%endif
|
||||
%if 0%{?fedora} || 0%{?rhel}
|
||||
%if 0%{?fedora} || 0%{?rhel} >= 9
|
||||
%bcond_without system_arrow
|
||||
%bcond_without system_utf8proc
|
||||
%else
|
||||
@@ -112,17 +116,15 @@
|
||||
%endif
|
||||
# qat only supported for intel devices
|
||||
%ifarch x86_64
|
||||
%if 0%{?fedora} || 0%{?rhel}
|
||||
%if 0%{?fedora} || 0%{?rhel} >= 9
|
||||
%bcond_without system_qat
|
||||
%else
|
||||
# not fedora/rhel
|
||||
%bcond_with system_qat
|
||||
%endif
|
||||
%else
|
||||
# not x86_64
|
||||
%bcond_with system_qat
|
||||
%endif
|
||||
%if 0%{?fedora} || 0%{?suse_version} || 0%{?rhel}
|
||||
%if 0%{?fedora} || 0%{?suse_version} || 0%{?rhel} >= 8
|
||||
%global weak_deps 1
|
||||
%endif
|
||||
%if %{with selinux}
|
||||
@@ -136,19 +138,13 @@
|
||||
%endif
|
||||
%bcond_with cephadm_bundling
|
||||
%bcond_without cephadm_pip_deps
|
||||
%bcond_without dwz
|
||||
%if %{with dwz}
|
||||
%else
|
||||
# disable dwz for 50% speedup at the cost of ~33% space
|
||||
%global _find_debuginfo_dwz_opts %{nil}
|
||||
%endif
|
||||
%bcond_with sccache
|
||||
|
||||
%{!?_udevrulesdir: %global _udevrulesdir /lib/udev/rules.d}
|
||||
%{!?tmpfiles_create: %global tmpfiles_create systemd-tmpfiles --create}
|
||||
%{!?python3_pkgversion: %global python3_pkgversion 3}
|
||||
%{!?python3_version_nodots: %global python3_version_nodots 3}
|
||||
%{!?python3_version: %global python3_version 3}
|
||||
%{!?gts_prefix: %global gts_prefix gcc-toolset-11}
|
||||
%define _lto_cflags %{nil}
|
||||
|
||||
%if ! 0%{?suse_version}
|
||||
@@ -157,16 +153,23 @@
|
||||
%global _binary_payload w7T%{_smp_build_ncpus}.xzdio
|
||||
%endif
|
||||
|
||||
%define smp_limit_mem_per_job() %( \
|
||||
kb_per_job=%1 \
|
||||
kb_total=$(head -3 /proc/meminfo | sed -n 's/MemAvailable:\\s*\\(.*\\) kB.*/\\1/p') \
|
||||
jobs=$(( $kb_total / $kb_per_job )) \
|
||||
[ $jobs -lt 1 ] && jobs=1 \
|
||||
echo $jobs )
|
||||
|
||||
%if 0%{?_smp_ncpus_max} == 0
|
||||
%if 0%{?__isa_bits} == 32
|
||||
# 32-bit builds can use 3G memory max, which is not enough even for -j2
|
||||
%global _smp_ncpus_max 1
|
||||
%else
|
||||
# 3.0 GiB mem per job
|
||||
# SUSE distros still use limit_build in the place of _smp_tasksize_proc, please
|
||||
# SUSE distros use limit_build in the place of smp_limit_mem_per_job, please
|
||||
# be sure to update it (in the build section, below) as well when changing this
|
||||
# number.
|
||||
%global _smp_tasksize_proc 3000
|
||||
%global _smp_ncpus_max %{smp_limit_mem_per_job 3000000}
|
||||
%endif
|
||||
%endif
|
||||
|
||||
@@ -174,12 +177,14 @@
|
||||
# do not provide gcc-annobin.so anymore, despite that they provide annobin.so. but
|
||||
# redhat-rpm-config still passes -fplugin=gcc-annobin to the compiler.
|
||||
%undefine _annotated_build
|
||||
%if 0%{?rhel} == 8 && 0%{?enable_devtoolset11:1}
|
||||
%endif
|
||||
|
||||
#################################################################################
|
||||
# main package definition
|
||||
#################################################################################
|
||||
Name: ceph
|
||||
Version: 20.2.0
|
||||
Version: 19.2.3
|
||||
Release: 9%{?dist}
|
||||
%if 0%{?fedora} || 0%{?rhel}
|
||||
Epoch: 2
|
||||
@@ -190,39 +195,46 @@ Epoch: 2
|
||||
%global _epoch_prefix %{?epoch:%{epoch}:}
|
||||
|
||||
Summary: User space components of the Ceph file system
|
||||
License: LGPL-2.1-or-later AND LGPL-3.0-only AND CC-BY-SA-3.0 AND GPL-2.0-only AND BSL-1.0 AND BSD-2-Clause AND BSD-3-Clause AND MIT
|
||||
License: LGPL-2.1-or-later AND LGPL-3.0-only AND CC-BY-SA-3.0 AND GPL-2.0-only AND BSL-1.0 AND BSD-2-Clause AND BSD-3-Clause AND MIT
|
||||
%if 0%{?suse_version}
|
||||
Group: System/Filesystems
|
||||
%endif
|
||||
URL: http://ceph.com/
|
||||
Source: https://download.ceph.com/tarballs/ceph-%{version}.tar.gz
|
||||
#Source0: https://1.chacra.ceph.com/r/ceph/tentacle/
|
||||
Source0: https://download.ceph.com/tarballs/ceph-%{version}.tar.gz
|
||||
Patch: 0001-src-common-crc32c_intel_fast.patch
|
||||
Patch: 0003-src-common-bitstr.h.patch
|
||||
Patch: 0010-CET-Add-CET-marker-to-crc32c_intel_fast_zero_asm.s.patch
|
||||
Patch: 0011-isa-l-CET-Add-CET-marker-to-x86-64-crc32-assembly-co.patch
|
||||
Patch: 0012-spdk-isa-l-CET-Add-CET-marker-to-x86-64-crc32-assemb.patch
|
||||
Patch: 0016-src-tracing.patch
|
||||
Patch: 0016-src-tracing-patch
|
||||
Patch: 0018-src-rgw-store-dbstore-CMakeLists.txt.patch
|
||||
Patch: 0024-gcc-13.patch
|
||||
Patch: 0029-src-rgw-rgw_amqp.cc.patch
|
||||
Patch: 0032-cmake-modules-BuildBoost.cmake.patch
|
||||
Patch: 0033-boost-asm.patch
|
||||
Patch: 0034-src-pybind-rbd-rbd.pyx.patch
|
||||
Patch: 0035-src-CMakeLists.txt.patch
|
||||
Patch: 0040-gcc-14.patch
|
||||
Patch: 0041-src-mgr-PyModule.cc.patch
|
||||
Patch: 0043_src_common_crc32c_ppc_asm.S.patch
|
||||
Patch: 0044_src_cpp_redis_CMakeLists.txt.patch
|
||||
Patch: 0045_src-commom-crc32c_ppc_fast_zero_asm.S.patch
|
||||
Patch: 0047-openssl-no-engine.patch
|
||||
Patch: 0048-src-mds-CMakeLists.txt.patch
|
||||
Patch: 0049-src-rocksdb-db-blob-blob_file_meta.h.patch
|
||||
Patch: 0050-src-rgw-driver-posix-zpp_bits.h.patch
|
||||
Patch: 0051-src-googletest-nosharedlibs.patch
|
||||
Patch: 0052-src-tracing.patch
|
||||
Patch: 0053-src-test-neorados-common_tests.h.patch
|
||||
Patch: 0056-libarrow-20.0.0.patch
|
||||
Patch: 0057-src-json_spirit-json_spirit_reader_template.h.patch
|
||||
Patch: 0058-src-CMakeLists.txt.patch
|
||||
Patch: 0059-iso646.patch
|
||||
Patch: 0061-gcc-16.patch
|
||||
Patch: 0062-src-rgw-driver-dbstore-CMakeLists.txt.patch
|
||||
Patch: 0063-src-jaegertracing-opentelemetry-cpp-CMakeLists.txt.patch
|
||||
Patch: 0064-src-rgw-rgw_lua_utils.cc.patch
|
||||
Patch: 0057-src-ceph-volume-ceph-volume-main.py.patch
|
||||
Patch: 0058-mgr-dashboard-Make-saml2-robust-against-module-load-.patch
|
||||
# Fixed in upcoming 19.2.4
|
||||
Patch: 0059-mgr-dashboard-catch-protobuf-error-due-to-mismatch-i.patch
|
||||
|
||||
# Squid fixes from https://git.proxmox.com/?p=ceph.git;a=tree;f=patches
|
||||
# Should be fixed upstream in Ceph 20.
|
||||
Patch: 0158-pybind-mgr-restful-provide-workaround-for-PyO3-Impor.patch
|
||||
Patch: 0159-mgr-fix-module-import-by-making-NOTIFY_TYPES-in-py-m.patch
|
||||
|
||||
# ceph 14.0.1 does not support 32-bit architectures, bugs #1727788, #1727787
|
||||
ExcludeArch: i686 armv7hl
|
||||
@@ -255,20 +267,41 @@ BuildRequires: selinux-policy-devel
|
||||
BuildRequires: gperf
|
||||
BuildRequires: cmake > 3.5
|
||||
BuildRequires: fuse3-devel
|
||||
BuildRequires: grpc-devel
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: libzstd-devel
|
||||
%if 0%{?fedora} || 0%{?rhel}
|
||||
BuildRequires: libatomic
|
||||
%if 0%{?fedora} || 0%{?suse_version} > 1500 || 0%{?rhel} >= 9
|
||||
BuildRequires: gcc-c++ >= 11
|
||||
%endif
|
||||
%if 0%{?suse_version} == 1500
|
||||
BuildRequires: gcc11-c++
|
||||
%endif
|
||||
%if 0%{?rhel} == 8
|
||||
BuildRequires: %{gts_prefix}-gcc-c++
|
||||
BuildRequires: %{gts_prefix}-build
|
||||
BuildRequires: %{gts_prefix}-libatomic-devel
|
||||
%endif
|
||||
%if 0%{?fedora} || 0%{?rhel} >= 9
|
||||
BuildRequires: libatomic
|
||||
BuildRequires: gcc-c++
|
||||
%endif
|
||||
%if 0%{?rhel}
|
||||
%bcond_with ld_mold
|
||||
%else
|
||||
%ifarch x86_64 aarch64
|
||||
%bcond_without ld_mold
|
||||
%else
|
||||
%bcond_with ld_mold
|
||||
%endif
|
||||
%endif
|
||||
%if 0%{with ld_mold}
|
||||
BuildRequires: mold
|
||||
%endif
|
||||
%if 0%{with tcmalloc}
|
||||
# libprofiler did not build on ppc64le until 2.7.90
|
||||
%if 0%{?fedora} || 0%{?rhel}
|
||||
%if 0%{?fedora} || 0%{?rhel} >= 8
|
||||
BuildRequires: gperftools-devel >= 2.7.90
|
||||
BuildRequires: libunwind-devel
|
||||
%endif
|
||||
%if 0%{?rhel} && 0%{?rhel} < 8
|
||||
BuildRequires: gperftools-devel >= 2.6.1
|
||||
%endif
|
||||
%if 0%{?suse_version}
|
||||
BuildRequires: gperftools-devel >= 2.4
|
||||
@@ -292,8 +325,9 @@ BuildRequires: libnl3-devel
|
||||
BuildRequires: liboath-devel
|
||||
BuildRequires: libtool
|
||||
BuildRequires: libxml2-devel
|
||||
BuildRequires: libzstd-devel
|
||||
BuildRequires: ninja-build
|
||||
BuildRequires: ncurses-devel
|
||||
BuildRequires: make
|
||||
BuildRequires: libicu-devel
|
||||
BuildRequires: patch
|
||||
BuildRequires: perl
|
||||
@@ -303,6 +337,7 @@ BuildRequires: python%{python3_pkgversion}
|
||||
BuildRequires: python%{python3_pkgversion}-devel
|
||||
BuildRequires: python%{python3_pkgversion}-setuptools
|
||||
BuildRequires: python%{python3_pkgversion}-Cython
|
||||
BuildRequires: python%{python3_pkgversion}-markupsafe
|
||||
BuildRequires: snappy-devel
|
||||
BuildRequires: sqlite-devel
|
||||
BuildRequires: sudo
|
||||
@@ -316,7 +351,7 @@ BuildRequires: xmlstarlet
|
||||
BuildRequires: nasm
|
||||
BuildRequires: lua-devel
|
||||
BuildRequires: lmdb-devel
|
||||
%if 0%{with crimson} || 0%{with jaeger}
|
||||
%if 0%{with seastar} || 0%{with jaeger}
|
||||
BuildRequires: yaml-cpp-devel >= 0.6
|
||||
%endif
|
||||
%if 0%{with amqp_endpoint}
|
||||
@@ -326,7 +361,7 @@ BuildRequires: librabbitmq-devel
|
||||
BuildRequires: librdkafka-devel
|
||||
%endif
|
||||
%if 0%{with lua_packages}
|
||||
Requires: lua-devel
|
||||
BuildRequires: lua-devel
|
||||
Requires: %{luarocks_package_name}
|
||||
%endif
|
||||
%if 0%{with make_check}
|
||||
@@ -334,6 +369,7 @@ BuildRequires: hostname
|
||||
BuildRequires: jq
|
||||
BuildRequires: libuuid-devel
|
||||
BuildRequires: python%{python3_pkgversion}-bcrypt
|
||||
BuildRequires: python%{python3_pkgversion}-pecan
|
||||
BuildRequires: python%{python3_pkgversion}-requests
|
||||
BuildRequires: python%{python3_pkgversion}-dateutil
|
||||
BuildRequires: python%{python3_pkgversion}-coverage
|
||||
@@ -382,7 +418,7 @@ BuildRequires: utf8proc-devel
|
||||
BuildRequires: qatlib-devel
|
||||
BuildRequires: qatzip-devel
|
||||
%endif
|
||||
%if 0%{with crimson}
|
||||
%if 0%{with seastar}
|
||||
BuildRequires: c-ares-devel
|
||||
BuildRequires: gnutls-devel
|
||||
BuildRequires: hwloc-devel
|
||||
@@ -394,6 +430,12 @@ BuildRequires: libubsan
|
||||
BuildRequires: libasan
|
||||
BuildRequires: protobuf-devel
|
||||
BuildRequires: protobuf-compiler
|
||||
%if 0%{?rhel} == 8
|
||||
BuildRequires: %{gts_prefix}-annobin
|
||||
BuildRequires: %{gts_prefix}-annobin-plugin-gcc
|
||||
BuildRequires: %{gts_prefix}-libubsan-devel
|
||||
BuildRequires: %{gts_prefix}-libasan-devel
|
||||
%endif
|
||||
%endif
|
||||
#################################################################################
|
||||
# distro-conditional dependencies
|
||||
@@ -427,6 +469,7 @@ BuildRequires: jsonnet
|
||||
%if 0%{?fedora} || 0%{?rhel}
|
||||
Requires: systemd
|
||||
%if 0%{with system_boost}
|
||||
BuildRequires: boost-devel
|
||||
BuildRequires: boost-random
|
||||
BuildRequires: boost-url
|
||||
%endif
|
||||
@@ -435,9 +478,7 @@ BuildRequires: keyutils-libs-devel
|
||||
BuildRequires: libatomic
|
||||
BuildRequires: libibverbs-devel
|
||||
BuildRequires: librdmacm-devel
|
||||
BuildRequires: ninja-build
|
||||
BuildRequires: openldap-devel
|
||||
BuildRequires: numactl-devel
|
||||
#BuildRequires: krb5-devel
|
||||
BuildRequires: openssl-devel
|
||||
BuildRequires: CUnit-devel
|
||||
@@ -463,6 +504,7 @@ BuildRequires: xmlsec1-openssl-devel
|
||||
BuildRequires: python%{python3_pkgversion}-cherrypy
|
||||
BuildRequires: python%{python3_pkgversion}-routes
|
||||
BuildRequires: python%{python3_pkgversion}-scipy
|
||||
BuildRequires: python%{python3_pkgversion}-werkzeug
|
||||
BuildRequires: python%{python3_pkgversion}-pyOpenSSL
|
||||
%endif
|
||||
BuildRequires: jsonnet
|
||||
@@ -473,6 +515,7 @@ BuildRequires: libxmlsec1-nss1
|
||||
BuildRequires: libxmlsec1-openssl1
|
||||
BuildRequires: python%{python3_pkgversion}-CherryPy
|
||||
BuildRequires: python%{python3_pkgversion}-Routes
|
||||
BuildRequires: python%{python3_pkgversion}-Werkzeug
|
||||
BuildRequires: python%{python3_pkgversion}-numpy-devel
|
||||
BuildRequires: xmlsec1-devel
|
||||
BuildRequires: xmlsec1-openssl-devel
|
||||
@@ -492,23 +535,23 @@ BuildRequires: babeltrace-devel
|
||||
%if 0%{?suse_version}
|
||||
BuildRequires: libexpat-devel
|
||||
%endif
|
||||
%if 0%{?fedora} || 0%{?rhel}
|
||||
%if 0%{?rhel} || 0%{?fedora}
|
||||
BuildRequires: expat-devel
|
||||
%endif
|
||||
#hardened-cc1
|
||||
%if 0%{?fedora} || 0%{?rhel}
|
||||
BuildRequires: redhat-rpm-config
|
||||
%endif
|
||||
%if 0%{with crimson}
|
||||
%if 0%{with seastar}
|
||||
%if 0%{?fedora} || 0%{?rhel}
|
||||
BuildRequires: cryptopp-devel
|
||||
BuildRequires: numactl-devel
|
||||
%endif
|
||||
%if 0%{?suse_version}
|
||||
BuildRequires: libcryptopp-devel
|
||||
BuildRequires: libnuma-devel
|
||||
%endif
|
||||
%endif
|
||||
BuildRequires: python-rpm-macros
|
||||
|
||||
%description
|
||||
Ceph is a massively scalable, open-source, distributed storage system that runs
|
||||
@@ -636,17 +679,6 @@ system. One or more instances of ceph-mon form a Paxos part-time
|
||||
parliament cluster that provides extremely reliable and durable storage
|
||||
of cluster membership, configuration, and state.
|
||||
|
||||
%package mon-client-nvmeof
|
||||
Summary: Ceph NVMeoF Gateway Monitor Client
|
||||
%if 0%{?suse_version}
|
||||
Group: System/Filesystems
|
||||
%endif
|
||||
Provides: ceph-test:/usr/bin/ceph-nvmeof-monitor-client
|
||||
Requires: librados2 = %{_epoch_prefix}%{version}-%{release}
|
||||
%description mon-client-nvmeof
|
||||
Ceph NVMeoF Gateway Monitor Client distributes Paxos ANA info
|
||||
to NVMeoF Gateway and provides beacons to the monitor daemon
|
||||
|
||||
%package mgr
|
||||
Summary: Ceph Manager Daemon
|
||||
%if 0%{?suse_version}
|
||||
@@ -677,18 +709,19 @@ Group: System/Filesystems
|
||||
Requires: ceph-mgr = %{_epoch_prefix}%{version}-%{release}
|
||||
Requires: ceph-grafana-dashboards = %{_epoch_prefix}%{version}-%{release}
|
||||
Requires: ceph-prometheus-alerts = %{_epoch_prefix}%{version}-%{release}
|
||||
%if 0%{?fedora} || 0%{?rhel}
|
||||
Requires: python%{python3_pkgversion}-setuptools
|
||||
%if 0%{?fedora} || 0%{?rhel} >= 9
|
||||
Requires: python%{python3_pkgversion}-grpcio
|
||||
Requires: python%{python3_pkgversion}-grpcio-tools
|
||||
Requires: python%{python3_pkgversion}-jmespath
|
||||
Requires: python%{python3_pkgversion}-xmltodict
|
||||
%endif
|
||||
%if 0%{?fedora} || 0%{?rhel}
|
||||
Requires: python%{python3_pkgversion}-cherrypy
|
||||
Requires: python%{python3_pkgversion}-routes
|
||||
Requires: python%{python3_pkgversion}-werkzeug
|
||||
%if 0%{?weak_deps}
|
||||
Recommends: python%{python3_pkgversion}-saml
|
||||
%if 0%{?fedora}
|
||||
%if 0%{?fedora} || 0%{?rhel} <= 8
|
||||
Recommends: python%{python3_pkgversion}-grpcio
|
||||
Recommends: python%{python3_pkgversion}-grpcio-tools
|
||||
%endif
|
||||
@@ -697,6 +730,7 @@ Recommends: python%{python3_pkgversion}-grpcio-tools
|
||||
%if 0%{?suse_version}
|
||||
Requires: python%{python3_pkgversion}-CherryPy
|
||||
Requires: python%{python3_pkgversion}-Routes
|
||||
Requires: python%{python3_pkgversion}-Werkzeug
|
||||
Recommends: python%{python3_pkgversion}-python3-saml
|
||||
%endif
|
||||
%description mgr-dashboard
|
||||
@@ -729,17 +763,20 @@ Group: System/Filesystems
|
||||
%endif
|
||||
Requires: python%{python3_pkgversion}-bcrypt
|
||||
Requires: python%{python3_pkgversion}-packaging
|
||||
Requires: python%{python3_pkgversion}-pecan
|
||||
Requires: python%{python3_pkgversion}-pyOpenSSL
|
||||
Requires: python%{python3_pkgversion}-requests
|
||||
Requires: python%{python3_pkgversion}-dateutil
|
||||
Requires: python%{python3_pkgversion}-setuptools
|
||||
%if 0%{?fedora} || 0%{?rhel}
|
||||
%if 0%{?fedora} || 0%{?rhel} >= 8
|
||||
Requires: python%{python3_pkgversion}-cherrypy
|
||||
Requires: python%{python3_pkgversion}-pyyaml
|
||||
Requires: python%{python3_pkgversion}-werkzeug
|
||||
%endif
|
||||
%if 0%{?suse_version}
|
||||
Requires: python%{python3_pkgversion}-CherryPy
|
||||
Requires: python%{python3_pkgversion}-PyYAML
|
||||
Requires: python%{python3_pkgversion}-Werkzeug
|
||||
%endif
|
||||
%if 0%{?weak_deps}
|
||||
Recommends: ceph-mgr-rook = %{_epoch_prefix}%{version}-%{release}
|
||||
@@ -920,10 +957,11 @@ Summary: Ceph Object Storage Daemon
|
||||
%if 0%{?suse_version}
|
||||
Group: System/Filesystems
|
||||
%endif
|
||||
Provides: ceph-test:/usr/bin/ceph-osdomap-tool
|
||||
Requires: ceph-base = %{_epoch_prefix}%{version}-%{release}
|
||||
Requires: sudo
|
||||
Requires: libstoragemgmt
|
||||
%if 0%{with crimson}
|
||||
%if 0%{with seastar}
|
||||
Requires: protobuf
|
||||
%endif
|
||||
%if 0%{?weak_deps}
|
||||
@@ -934,7 +972,7 @@ ceph-osd is the object storage daemon for the Ceph distributed file
|
||||
system. It is responsible for storing objects on a local file system
|
||||
and providing access to them over the network.
|
||||
|
||||
%if 0%{with crimson}
|
||||
%if 0%{with seastar}
|
||||
%package crimson-osd
|
||||
Summary: Ceph Object Storage Daemon (crimson)
|
||||
%if 0%{?suse_version}
|
||||
@@ -1168,40 +1206,18 @@ Obsoletes: libcephfs1 < %{_epoch_prefix}%{version}-%{release}
|
||||
Obsoletes: ceph-libs < %{_epoch_prefix}%{version}-%{release}
|
||||
Obsoletes: ceph-libcephfs < %{_epoch_prefix}%{version}-%{release}
|
||||
%endif
|
||||
Recommends: libcephfs-proxy2 = %{_epoch_prefix}%{version}-%{release}
|
||||
%description -n libcephfs2
|
||||
Ceph is a distributed network file system designed to provide excellent
|
||||
performance, reliability, and scalability. This is a shared library
|
||||
allowing applications to access a Ceph distributed file system via a
|
||||
POSIX-like interface.
|
||||
|
||||
%package -n libcephfs-proxy2
|
||||
Summary: Proxy for libcephfs
|
||||
%if 0%{?suse_version}
|
||||
Group: System/Libraries
|
||||
%endif
|
||||
Recommends: libcephfs-daemon = %{_epoch_prefix}%{version}-%{release}
|
||||
%description -n libcephfs-proxy2
|
||||
This package contains the libcephfs_proxy.so library that allow applications
|
||||
to share cephfs mounts to reduce resource consumption.
|
||||
|
||||
%package -n libcephfs-daemon
|
||||
Summary: Deamon for the libcephfs proxy
|
||||
%if 0%{?suse_version}
|
||||
Group: System/Filesystems
|
||||
%endif
|
||||
Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release}
|
||||
%description -n libcephfs-daemon
|
||||
This package contains the libcephfsd daemon that allows applications to share
|
||||
cephfs mounts to reduce resource consumption.
|
||||
|
||||
%package -n libcephfs-devel
|
||||
Summary: Ceph distributed file system headers
|
||||
%if 0%{?suse_version}
|
||||
Group: Development/Libraries/C and C++
|
||||
%endif
|
||||
Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release}
|
||||
Requires: libcephfs-proxy2 = %{_epoch_prefix}%{version}-%{release}
|
||||
Requires: librados-devel = %{_epoch_prefix}%{version}-%{release}
|
||||
Obsoletes: ceph-devel < %{_epoch_prefix}%{version}-%{release}
|
||||
Provides: libcephfs2-devel = %{_epoch_prefix}%{version}-%{release}
|
||||
@@ -1239,7 +1255,7 @@ descriptions, and submitting the command to the appropriate daemon.
|
||||
|
||||
%package -n python%{python3_pkgversion}-ceph-common
|
||||
Summary: Python 3 utility libraries for Ceph
|
||||
%if 0%{?fedora} || 0%{?rhel}
|
||||
%if 0%{?fedora} || 0%{?rhel} >= 8
|
||||
Requires: python%{python3_pkgversion}-pyyaml
|
||||
%endif
|
||||
%if 0%{?suse_version}
|
||||
@@ -1422,7 +1438,7 @@ export CFLAGS="$RPM_OPT_FLAGS"
|
||||
export CXXFLAGS="$RPM_OPT_FLAGS"
|
||||
export LDFLAGS="$RPM_LD_FLAGS"
|
||||
|
||||
%if 0%{with crimson}
|
||||
%if 0%{with seastar}
|
||||
# seastar uses longjmp() to implement coroutine. and this annoys longjmp_chk()
|
||||
export CXXFLAGS=$(echo $RPM_OPT_FLAGS | sed -e 's/-Wp,-D_FORTIFY_SOURCE=2//g')
|
||||
# remove from CFLAGS too because it causes the arrow submodule to fail with:
|
||||
@@ -1469,7 +1485,6 @@ env | sort
|
||||
%if 0%{with ocf}
|
||||
-DWITH_OCF:BOOL=ON \
|
||||
%endif
|
||||
-DWITH_SYSTEM_ZSTD:BOOL=ON \
|
||||
%if 0%{?fedora} || 0%{?rhel} >= 10
|
||||
-DWITH_SYSTEM_ROCKSDB:BOOL=OFF \
|
||||
%endif
|
||||
@@ -1520,6 +1535,10 @@ env | sort
|
||||
%else
|
||||
-DBOOST_J:STRING=%{_smp_build_ncpus} \
|
||||
%endif
|
||||
%if 0%{with ceph_test_package}
|
||||
-DWITH_SYSTEM_GTEST:BOOL=ON \
|
||||
%endif
|
||||
-DWITH_SYSTEM_ZSTD:BOOL=ON \
|
||||
%if 0%{?fedora} || 0%{?rhel}
|
||||
-DWITH_FMT_HEADER_ONLY:BOOL=ON \
|
||||
%endif
|
||||
@@ -1544,17 +1563,11 @@ env | sort
|
||||
%if 0%{with ld_mold}
|
||||
-DCMAKE_LINKER=%{_bindir}/ld.mold \
|
||||
%endif
|
||||
%if 0%{with crimson}
|
||||
-DWITH_CRIMSON:BOOL=ON \
|
||||
%if 0%{with seastar}
|
||||
-DWITH_SEASTAR:BOOL=ON \
|
||||
-DWITH_JAEGER:BOOL=OFF \
|
||||
%endif
|
||||
-DWITH_GRAFANA:BOOL=ON \
|
||||
%if %{with sccache}
|
||||
-DWITH_SCCACHE=ON \
|
||||
%endif
|
||||
%ifarch aarch64
|
||||
-DWITH_UADK:BOOL=OFF \
|
||||
%endif
|
||||
%if 0%{with cephadm_bundling}
|
||||
%if 0%{with cephadm_pip_deps}
|
||||
-DCEPHADM_BUNDLED_DEPENDENCIES=pip
|
||||
@@ -1587,7 +1600,7 @@ export GCC_COLORS=
|
||||
# we have dropped sysvinit bits
|
||||
rm -f %{buildroot}/%{_sysconfdir}/init.d/ceph
|
||||
|
||||
%if 0%{with crimson}
|
||||
%if 0%{with seastar}
|
||||
# package crimson-osd with the name of ceph-osd
|
||||
install -m 0755 %{buildroot}%{_bindir}/crimson-osd %{buildroot}%{_bindir}/ceph-osd
|
||||
%endif
|
||||
@@ -1630,7 +1643,9 @@ install -m 0644 -D udev/50-rbd.rules %{buildroot}%{_udevrulesdir}/50-rbd.rules
|
||||
# sudoers.d
|
||||
install -m 0440 -D sudoers.d/ceph-smartctl %{buildroot}%{_sysconfdir}/sudoers.d/ceph-smartctl
|
||||
|
||||
%if 0%{?rhel} >= 8
|
||||
%py3_shebang_fix %{buildroot}%{_bindir}/* %{buildroot}%{_sbindir}/*
|
||||
%endif
|
||||
|
||||
#set up placeholder directories
|
||||
mkdir -p %{buildroot}%{_sysconfdir}/ceph
|
||||
@@ -1671,6 +1686,10 @@ mv %{buildroot}%{_exec_prefix}/sbin/ceph-create-keys %{buildroot}%{_bindir}/
|
||||
%fdupes %{buildroot}%{_prefix}
|
||||
%endif
|
||||
|
||||
%if 0%{?rhel} == 8 || 0%{?fedora} >= 33
|
||||
%py_byte_compile %{__python3} %{buildroot}%{python3_sitelib}
|
||||
%endif
|
||||
|
||||
#################################################################################
|
||||
# files and systemd scriptlets
|
||||
#################################################################################
|
||||
@@ -1684,7 +1703,7 @@ mv %{buildroot}%{_exec_prefix}/sbin/ceph-create-keys %{buildroot}%{_bindir}/
|
||||
%{_bindir}/ceph-kvstore-tool
|
||||
%{_bindir}/ceph-run
|
||||
%{_presetdir}/50-ceph.preset
|
||||
%{_bindir}/ceph-create-keys
|
||||
%{_sbindir}/ceph-create-keys
|
||||
%dir %{_libexecdir}/ceph
|
||||
%{_libexecdir}/ceph/ceph_common.sh
|
||||
%dir %{_libdir}/rados-classes
|
||||
@@ -1750,12 +1769,12 @@ fi
|
||||
%systemd_postun ceph.target
|
||||
|
||||
%files -n cephadm
|
||||
%{_bindir}/cephadm
|
||||
%{_sbindir}/cephadm
|
||||
%{_mandir}/man8/cephadm.8*
|
||||
%attr(0700,cephadm,cephadm) %dir %{_sharedstatedir}/cephadm
|
||||
%attr(0700,cephadm,cephadm) %dir %{_sharedstatedir}/cephadm/.ssh
|
||||
%config(noreplace) %attr(0600,cephadm,cephadm) %{_sharedstatedir}/cephadm/.ssh/authorized_keys
|
||||
%{_sysusersdir}/cephadm.conf
|
||||
%{_sysusersdir}/ceph.conf
|
||||
|
||||
%preun common
|
||||
%if 0%{?suse_version}
|
||||
@@ -1789,7 +1808,7 @@ fi
|
||||
%{_bindir}/rgw-gap-list-comparator
|
||||
%{_bindir}/rgw-orphan-list
|
||||
%{_bindir}/rgw-restore-bucket-index
|
||||
%{_bindir}/mount.ceph
|
||||
%{_sbindir}/mount.ceph
|
||||
%if 0%{?suse_version} && 0%{?suse_version} < 1550
|
||||
/sbin/mount.ceph
|
||||
%endif
|
||||
@@ -1835,7 +1854,7 @@ fi
|
||||
%{_udevrulesdir}/50-rbd.rules
|
||||
%attr(3770,ceph,ceph) %dir %{_localstatedir}/log/ceph/
|
||||
%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/
|
||||
%{_sysusersdir}/ceph.conf
|
||||
%{_sysusersdir}/cephadm.conf
|
||||
|
||||
%pre common
|
||||
CEPH_GROUP_ID=167
|
||||
@@ -2006,9 +2025,9 @@ fi
|
||||
%{_datadir}/ceph/mgr/progress
|
||||
%{_datadir}/ceph/mgr/prometheus
|
||||
%{_datadir}/ceph/mgr/rbd_support
|
||||
%{_datadir}/ceph/mgr/restful
|
||||
%{_datadir}/ceph/mgr/rgw
|
||||
%{_datadir}/ceph/mgr/selftest
|
||||
%{_datadir}/ceph/mgr/smb
|
||||
%{_datadir}/ceph/mgr/snap_schedule
|
||||
%{_datadir}/ceph/mgr/stats
|
||||
%{_datadir}/ceph/mgr/status
|
||||
@@ -2016,6 +2035,7 @@ fi
|
||||
%{_datadir}/ceph/mgr/telemetry
|
||||
%{_datadir}/ceph/mgr/test_orchestrator
|
||||
%{_datadir}/ceph/mgr/volumes
|
||||
%{_datadir}/ceph/mgr/zabbix
|
||||
|
||||
%files mgr-rook
|
||||
%{_datadir}/ceph/mgr/rook
|
||||
@@ -2099,9 +2119,6 @@ if [ $1 -ge 1 ] ; then
|
||||
fi
|
||||
fi
|
||||
|
||||
%files mon-client-nvmeof
|
||||
%{_bindir}/ceph-nvmeof-monitor-client
|
||||
|
||||
%files fuse
|
||||
%{_bindir}/ceph-fuse
|
||||
%{_mandir}/man8/ceph-fuse.8*
|
||||
@@ -2300,6 +2317,7 @@ fi
|
||||
%{_bindir}/ceph-bluestore-tool
|
||||
%{_bindir}/ceph-erasure-code-tool
|
||||
%{_bindir}/ceph-objectstore-tool
|
||||
%{_bindir}/ceph-osdomap-tool
|
||||
%{_bindir}/ceph-osd
|
||||
%{_libexecdir}/ceph/ceph-osd-prestart.sh
|
||||
%{_mandir}/man8/ceph-clsinfo.8*
|
||||
@@ -2317,12 +2335,16 @@ if [ $1 -eq 1 ] ; then
|
||||
fi
|
||||
%endif
|
||||
%if 0%{?fedora} || 0%{?rhel}
|
||||
%systemd_post ceph-osd@.service ceph-osd.target
|
||||
%systemd_post ceph-osd@.service ceph-volume@.service ceph-osd.target
|
||||
%endif
|
||||
if [ $1 -eq 1 ] ; then
|
||||
/usr/bin/systemctl start ceph-osd.target >/dev/null 2>&1 || :
|
||||
fi
|
||||
%sysctl_apply 90-ceph-osd.conf
|
||||
%if 0%{?sysctl_apply}
|
||||
%sysctl_apply 90-ceph-osd.conf
|
||||
%else
|
||||
/usr/lib/systemd/systemd-sysctl %{_sysctldir}/90-ceph-osd.conf > /dev/null 2>&1 || :
|
||||
%endif
|
||||
|
||||
%preun osd
|
||||
%if 0%{?suse_version}
|
||||
@@ -2346,7 +2368,7 @@ if [ $1 -ge 1 ] ; then
|
||||
fi
|
||||
fi
|
||||
|
||||
%if 0%{with crimson}
|
||||
%if 0%{with seastar}
|
||||
%files crimson-osd
|
||||
%{_bindir}/crimson-osd
|
||||
%endif
|
||||
@@ -2408,6 +2430,8 @@ fi
|
||||
%{_libdir}/librados.so.*
|
||||
%dir %{_libdir}/ceph
|
||||
%{_libdir}/ceph/libceph-common.so.*
|
||||
%{_libdir}/ceph/libcpp_redis.so*
|
||||
%{_libdir}/ceph/libtacopie.so*
|
||||
%if %{with lttng}
|
||||
%{_libdir}/librados_tp.so.*
|
||||
%endif
|
||||
@@ -2516,16 +2540,6 @@ fi
|
||||
|
||||
%ldconfig_scriptlets libcephfs2
|
||||
|
||||
%files -n libcephfs-proxy2
|
||||
%{_libdir}/libcephfs_proxy.so.*
|
||||
|
||||
%post -n libcephfs-proxy2 -p /sbin/ldconfig
|
||||
|
||||
%postun -n libcephfs-proxy2 -p /sbin/ldconfig
|
||||
|
||||
%files -n libcephfs-daemon
|
||||
%{_sbindir}/libcephfsd
|
||||
|
||||
%files -n libcephfs-devel
|
||||
%dir %{_includedir}/cephfs
|
||||
%{_includedir}/cephfs/libcephfs.h
|
||||
@@ -2534,8 +2548,6 @@ fi
|
||||
%dir %{_includedir}/cephfs/metrics
|
||||
%{_includedir}/cephfs/metrics/Types.h
|
||||
%{_libdir}/libcephfs.so
|
||||
%{_libdir}/libcephfs_proxy.so
|
||||
%{_libdir}/pkgconfig/cephfs.pc
|
||||
|
||||
%files -n python%{python3_pkgversion}-cephfs
|
||||
%{python3_sitearch}/cephfs.cpython*.so
|
||||
@@ -2585,8 +2597,7 @@ fi
|
||||
%{_bindir}/ceph-coverage
|
||||
%{_bindir}/ceph-debugpack
|
||||
%{_bindir}/ceph-dedup-tool
|
||||
%{_bindir}/ceph-dedup-daemon
|
||||
%if 0%{with crimson}
|
||||
%if 0%{with seastar}
|
||||
%{_bindir}/crimson-store-nbd
|
||||
%endif
|
||||
%{_mandir}/man8/ceph-debugpack.8*
|
||||
@@ -2744,96 +2755,43 @@ exit 0
|
||||
%{python3_sitelib}/ceph_node_proxy-*
|
||||
|
||||
%changelog
|
||||
* Tue Feb 17 2026 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:20.2.0-9
|
||||
- ceph-20.2.0, rebuild with libarrow-23.0.1, cmake-4-isms, lua-5.5
|
||||
* Fri Jan 2 2026 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:19.2.3-9
|
||||
- rhbz#2425930
|
||||
|
||||
* Wed Jan 28 2026 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:20.2.0-8
|
||||
- ceph-20.2.0, rebuild with libarrow-23.0.0, side tag f44-build-side-127546
|
||||
* Thu Oct 16 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:19.2.3-8
|
||||
- ceph-19.2.3, rhbz#2403112
|
||||
|
||||
* Wed Jan 28 2026 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:20.2.0-7
|
||||
- ceph-20.2.0, rhbz#2433903
|
||||
* Wed Aug 20 2025 Hector Martin <marcan@marcan.st> - 2:19.2.3-7
|
||||
- Work around mgr `restful` module PyO3 failures
|
||||
- Fix NOTIFY_TYPES exceptions during module import (rhbz#2361850)
|
||||
|
||||
* Fri Jan 16 2026 Fedora Release Engineering <releng@fedoraproject.org> - 2:20.2.0-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
|
||||
* Wed Aug 20 2025 Hector Martin <marcan@marcan.st> - 2:19.2.3-6
|
||||
- Fix F41 build
|
||||
|
||||
* Fri Jan 16 2026 Fedora Release Engineering <releng@fedoraproject.org> - 2:20.2.0-5
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
|
||||
* Wed Aug 20 2025 Hector Martin <marcan@marcan.st> - 2:19.2.3-5
|
||||
- Fix mgr dashboard module failures due to unusable dependencies
|
||||
|
||||
* Wed Dec 10 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:20.2.0-4
|
||||
- ceph-20.2.0, disable crimson, core team says it's not ready
|
||||
* Fri Aug 15 2025 Python Maint <python-maint@redhat.com> - 2:19.2.3-4
|
||||
- Rebuilt for Python 3.14.0rc2 bytecode
|
||||
|
||||
* Fri Dec 5 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:20.2.0-3
|
||||
- ceph-20.2.0, rhbz#2419150
|
||||
* Wed Aug 13 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:19.2.3-3
|
||||
- ceph-19.2.3, rhbz#2310236
|
||||
|
||||
* Thu Dec 4 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:20.2.0-2
|
||||
- ceph-20.2.0, enable crimson
|
||||
* Wed Aug 06 2025 František Zatloukal <fzatlouk@redhat.com> - 2:19.2.3-2
|
||||
- Rebuilt for icu 77.1
|
||||
|
||||
* Tue Nov 18 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:20.2.0-1
|
||||
- ceph-20.2.0 GA
|
||||
* Mon Jul 28 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:19.2.3-1
|
||||
- ceph-19.2.3 GA
|
||||
|
||||
* Tue Nov 4 2025 Tom Callaway <spot@fedoraproject.org> - 2:20.1.1-4
|
||||
- rebuild for new fuse3
|
||||
|
||||
* Fri Oct 24 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:20.1.1-2
|
||||
- ceph-20.1.1 RC, rebuild with libarrow-22.0.0, side tag f44-build-side-121464
|
||||
|
||||
* Thu Oct 16 2025 Gordon Messmer <gordon.messmer[at]gmail.com> - 2:20.1.1-3
|
||||
- Use rpm's native resource tunable to limit parallelism. BZ#2404624
|
||||
|
||||
* Tue Oct 7 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:20.1.1-1
|
||||
- ceph-20.1.1 RC
|
||||
|
||||
* Tue Sep 23 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:20.1.0-6
|
||||
- ceph-20.1.0 RC, rhbz#2396036 (gmock, gtest again)
|
||||
|
||||
* Fri Sep 19 2025 Python Maint <python-maint@redhat.com> - 2:20.1.0-5
|
||||
- Rebuilt for Python 3.14.0rc3 bytecode
|
||||
|
||||
* Tue Sep 16 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:20.1.0-4
|
||||
- ceph-20.1.0 RC, rhbz#2395703 (gmock, gtest again)
|
||||
|
||||
* Fri Sep 12 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:20.1.0-3
|
||||
- ceph-20.1.0 RC, rhbz#2394758 (gmock, gtest)
|
||||
|
||||
* Tue Sep 9 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:20.1.0-2
|
||||
- ceph-20.1.0 RC, rhbz#2394363
|
||||
|
||||
* Mon Sep 8 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:20.1.0-1
|
||||
- ceph-20.1.0 RC
|
||||
|
||||
* Mon Apr 28 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:19.2.2-5
|
||||
- ceph-19.2.2, build in side tag f43-build-side-110906
|
||||
|
||||
* Wed Apr 16 2025 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 2:19.2.2-4
|
||||
* Wed Apr 16 2025 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 2:19.2.2-2
|
||||
- Add sysusers.d config file to allow rpm to create users/groups automatically
|
||||
|
||||
* Mon Apr 14 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:19.2.2-3
|
||||
- ceph-19.2.2, rhbz#2359214 again
|
||||
|
||||
* Sat Apr 12 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:19.2.2-2
|
||||
- ceph-19.2.2, rhbz#2359214
|
||||
|
||||
* Thu Apr 10 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:19.2.2-1
|
||||
- ceph-19.2.2 GA
|
||||
|
||||
* Thu Mar 13 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:19.2.1-7
|
||||
- rebuild with libarrow-19.0.1 (and liborc-2.1.1)
|
||||
|
||||
* Fri Mar 7 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:19.2.1-6
|
||||
* Fri Mar 7 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:19.2.1-2
|
||||
- cephadm dependencies
|
||||
|
||||
* Sat Mar 1 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:19.2.1-5
|
||||
- rebuild w/ cmake-4
|
||||
|
||||
* Mon Feb 17 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:19.2.1-4
|
||||
- ceph-19.2.1, rebuild w/ libarrow 19, liborc 2.1, f43-build-side-105129
|
||||
|
||||
* Sat Feb 8 2025 Zbigniew Jedrzejewski-Szmek <zbyszek@in.waw.pl> - 2:19.2.1-3
|
||||
- Add sysusers.d config file to allow rpm to create users/groups automatically
|
||||
|
||||
* Fri Feb 7 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:19.2.1-2
|
||||
- ceph-19.2.1, rebuild w/ libarrow 19, liborc 2.1, f43-build-side-105129
|
||||
|
||||
* Thu Feb 6 2025 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:19.2.1-1
|
||||
- ceph-19.2.1 GA
|
||||
|
||||
@@ -2887,3 +2845,136 @@ exit 0
|
||||
* Tue Jul 9 2024 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:19.1.0-0.1
|
||||
- ceph-19.1.0 RC
|
||||
|
||||
* Tue Jul 9 2024 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.2.3-7
|
||||
- Rebuild with OpenSSL-3.2.2, w/ openssl-devel-engine
|
||||
|
||||
* Mon Jul 8 2024 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.2.3-6
|
||||
- Rebuild with OpenSSL-3.2.2
|
||||
|
||||
* Sat Jun 08 2024 Python Maint <python-maint@redhat.com> - 2:18.2.3-5
|
||||
- Rebuilt for Python 3.13
|
||||
|
||||
* Fri Jun 7 2024 Kaleb S. KEITHLEY <kkeithle[at]redhat.com>
|
||||
- python 3.13 fixes
|
||||
|
||||
* Sun Jun 02 2024 Orion Poplawski <orion@nwra.com> - 2:18.2.3-4
|
||||
- Rebuild with thrift 0.20
|
||||
|
||||
* Tue May 21 2024 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.2.3-3
|
||||
- ceph-18.2.3, enable system boost
|
||||
|
||||
* Tue May 21 2024 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.2.3-3
|
||||
- ceph-18.2.3, enable system boost
|
||||
|
||||
* Tue May 14 2024 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.2.3-2
|
||||
- ceph-18.2.3, rebuild with libarrow-16.1.0,
|
||||
- disable LTO w/ gcc-4.1.1
|
||||
|
||||
* Mon Apr 29 2024 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.2.3-1
|
||||
- ceph-18.2.3 GA
|
||||
|
||||
* Mon Apr 22 2024 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.2.2-4
|
||||
- rebuild with libarrow-16.0.0
|
||||
|
||||
* Tue Mar 19 2024 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.2.2-3
|
||||
- rebuild with libarrow-15.0.2
|
||||
|
||||
* Fri Mar 15 2024 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.2.2-2
|
||||
- rebuild with libarrow-15.0.1. (And liborc-2.0.0)
|
||||
|
||||
* Thu Mar 7 2024 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.2.2-1
|
||||
- ceph-18.2.2 GA
|
||||
|
||||
* Wed Mar 06 2024 David Abdurachmanov <davidlt@rivosinc.com> - 2:18.2.1-11
|
||||
- Add support for riscv64
|
||||
|
||||
* Tue Feb 27 2024 Jiri Vanek <jvanek@redhat.com> - 2:18.2.1-10
|
||||
- Rebuilt for java-21-openjdk as system jdk
|
||||
|
||||
* Wed Jan 31 2024 Pete Walter <pwalter@fedoraproject.org> - 2:18.2.1-9
|
||||
- Rebuild for ICU 74
|
||||
|
||||
* Fri Jan 26 2024 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.2.1-8
|
||||
- rebuild for libarrow-15.0.0, rhbz#2260552
|
||||
|
||||
* Wed Jan 24 2024 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.2.1-7
|
||||
- rebuild for Fedora_40_Mass_Rebuild, gcc-14, and rocksdb-8.10.0,
|
||||
libarrow-14.0.2
|
||||
|
||||
* Tue Jan 23 2024 Fedora Release Engineering <releng@fedoraproject.org> - 2:18.2.1-7
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||
|
||||
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 2:18.2.1-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||
|
||||
* Mon Jan 15 2024 Florian Weimer <fweimer@redhat.com> - 2:18.2.1-5
|
||||
- Backport upstream patches to fix C compatibility issues
|
||||
|
||||
* Sat Jan 13 2024 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.2.1-4
|
||||
- rebuild with rocksdb-8.10.0
|
||||
|
||||
* Tue Dec 19 2023 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.2.1-3
|
||||
- ceph-18.2.1, incorporate changes from *final* 18.2.1 release from
|
||||
https://download.ceph.com/rpm-18.2.1/el9/SRPMS/ceph-18.2.1-0.el9.src.rpm
|
||||
|
||||
* Wed Nov 15 2023 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.2.1-2
|
||||
- ceph-18.2.1, rebuild for f40-build-side-76708, w/ libarrow-14.0.1,
|
||||
and liborc-1.9.2
|
||||
|
||||
* Wed Nov 15 2023 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.2.1-1
|
||||
- ceph-18.2.1 GA
|
||||
|
||||
* Wed Nov 1 2023 Terje Rosten <terje.rosten@ntnu.no> - 2:18.2.0-4
|
||||
- Rebuild for gtest 1.14.0 and libarrow 14.0.0
|
||||
|
||||
* Wed Nov 1 2023 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.2.0-3
|
||||
- Rebuild for Apache Arrow (libarrow) 14.0.0
|
||||
|
||||
* Thu Oct 5 2023 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.2.0-2
|
||||
- ceph-18.2.0, rebuild in side tag (f40-build-side-74974)
|
||||
|
||||
* Fri Aug 4 2023 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.2.0-1
|
||||
- ceph-18.2.0 GA
|
||||
|
||||
* Tue Aug 1 2023 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.1.3-0.2
|
||||
- ceph-18.1.3 RC4, rebuild with libarrow-13.0.0
|
||||
|
||||
* Wed Jul 26 2023 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.1.3-0.1
|
||||
- ceph-18.1.3 RC4
|
||||
|
||||
* Fri Jul 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 2:18.1.2-0.5
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
|
||||
- revert python3-Cython -> python3dist(cython) < 3~~
|
||||
|
||||
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 2:18.1.2-0.4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
|
||||
- with python3-Cython -> python3dist(cython) < 3~~
|
||||
|
||||
* Tue Jul 11 2023 František Zatloukal <fzatlouk@redhat.com> - 2:18.1.2-0.3
|
||||
- Rebuilt for ICU 73.2
|
||||
|
||||
* Fri Jun 30 2023 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.1.2-0.2
|
||||
- Rebuilt for Python 3.12
|
||||
|
||||
* Fri Jun 30 2023 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.1.2-0.1
|
||||
- ceph-18.1.2 RC3
|
||||
|
||||
* Sun Jun 18 2023 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.1.1-0.2
|
||||
- Rebuilt for Python 3.12
|
||||
|
||||
* Sun Jun 18 2023 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.1.1-0.1
|
||||
- ceph-18.1.1 RC2
|
||||
|
||||
* Thu Jun 15 2023 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.1.0-0.4
|
||||
- Rebuilt for Python 3.12
|
||||
|
||||
* Thu Jun 15 2023 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.1.0-0.3
|
||||
- remove requires for nonexistant libjaeger, rhbz#2215320
|
||||
- sync w/ upstream ceph.spec(.in), sanity check
|
||||
|
||||
* Thu Jun 15 2023 Python Maint <python-maint@redhat.com> - 2:18.1.0-0.2
|
||||
- Rebuilt for Python 3.12
|
||||
|
||||
* Tue Jun 13 2023 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:18.1.0-0.1
|
||||
- ceph-18.1.0 RC1
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
SHA512 (ceph-20.2.0.tar.gz) = 5678586fe663ddc3d8ca4ded7a2b811025784abc5f493164d2f1e590608a72176a722d5984d83400c501deeb526e0a108c2e7e3d969dea7bf6ce0d0b42190ea5
|
||||
SHA512 (ceph-19.2.3.tar.gz) = 278101d2df7bed5363b20c2b065d7a7b26252c8164511257e213ffaa58d509015558183de10bc9281bcbe4d9f85244bcac5bba4db9823e28df6a96d0b687d00a
|
||||
|
||||
Reference in New Issue
Block a user