New release (2:14.0.1-1)

- sync with upstream
- drop 32-bit support, it is no longer supported upstream
This commit is contained in:
Boris Ranto 2018-12-04 22:24:42 +01:00
parent 4c70f88757
commit 2b3fa8bef4
6 changed files with 132 additions and 3660 deletions

View File

@ -5,8 +5,6 @@ Subject: [PATCH 1/4] f30 python3 execs
--- ---
src/ceph-create-keys | 2 +- src/ceph-create-keys | 2 +-
src/ceph-detect-init/ceph_detect_init/main.py | 2 +-
src/ceph-disk/ceph_disk/main.py | 2 +-
src/ceph-volume/bin/ceph-volume | 2 +- src/ceph-volume/bin/ceph-volume | 2 +-
src/ceph-volume/bin/ceph-volume-systemd | 2 +- src/ceph-volume/bin/ceph-volume-systemd | 2 +-
src/ceph.in | 2 +- src/ceph.in | 2 +-
@ -23,26 +21,6 @@ index c14c02f28d..7e80aab6a2 100755
import argparse import argparse
import errno import errno
import json import json
diff --git a/src/ceph-detect-init/ceph_detect_init/main.py b/src/ceph-detect-init/ceph_detect_init/main.py
index 320ae17032..c18ce74c1c 100644
--- a/src/ceph-detect-init/ceph_detect_init/main.py
+++ b/src/ceph-detect-init/ceph_detect_init/main.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python3
#
# Copyright (C) 2015 <contact@redhat.com>
# Copyright (C) 2015 SUSE LINUX GmbH
diff --git a/src/ceph-disk/ceph_disk/main.py b/src/ceph-disk/ceph_disk/main.py
index 639c49e7e1..bfcce98351 100644
--- a/src/ceph-disk/ceph_disk/main.py
+++ b/src/ceph-disk/ceph_disk/main.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python3
#
# Copyright (C) 2015, 2016, 2017 Red Hat <contact@redhat.com>
# Copyright (C) 2014 Inktank <info@inktank.com>
diff --git a/src/ceph-volume/bin/ceph-volume b/src/ceph-volume/bin/ceph-volume diff --git a/src/ceph-volume/bin/ceph-volume b/src/ceph-volume/bin/ceph-volume
index 5905cfccc0..a4f62b4a1f 100755 index 5905cfccc0..a4f62b4a1f 100755
--- a/src/ceph-volume/bin/ceph-volume --- a/src/ceph-volume/bin/ceph-volume

View File

@ -1,158 +0,0 @@
From e0c90eac818bb3cab041f983b60ba560a9f36dca Mon Sep 17 00:00:00 2001
From: Boris Ranto <branto@redhat.com>
Date: Tue, 27 Nov 2018 00:30:56 +0100
Subject: [PATCH 2/4] 32-bit compile patch
---
src/common/ceph_context.h | 2 +-
src/mon/OSDMonitor.cc | 2 +-
src/os/bluestore/BlueStore.cc | 2 +-
src/osd/PrimaryLogPG.cc | 3 ++-
src/rgw/rgw_op.h | 4 ++--
src/rgw/rgw_rest_swift.cc | 6 +++---
src/rgw/rgw_sync_log_trim.cc | 2 +-
src/test/rbd_mirror/test_ImageSync.cc | 2 +-
8 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/src/common/ceph_context.h b/src/common/ceph_context.h
index 6af282225c..cde7388fe9 100644
--- a/src/common/ceph_context.h
+++ b/src/common/ceph_context.h
@@ -144,7 +144,7 @@ public:
void do_command(std::string_view command, const cmdmap_t& cmdmap,
std::string_view format, ceph::bufferlist *out);
- static constexpr std::size_t largest_singleton = sizeof(void*) * 72;
+ static constexpr std::size_t largest_singleton = 8 * 72; // Sizeof 64-bit pointer * 72
template<typename T, typename... Args>
T& lookup_or_create_singleton_object(std::string_view name,
diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc
index da55af1519..4915d3b581 100644
--- a/src/mon/OSDMonitor.cc
+++ b/src/mon/OSDMonitor.cc
@@ -821,7 +821,7 @@ OSDMonitor::update_pending_pgs(const OSDMap::Incremental& inc,
<< " modified " << p->second.modified
<< " [" << p->second.start << "-" << p->second.end << ")"
<< dendl;
- int n = std::min(max - pending_creatings.pgs.size(),
+ int n = std::min<int>(max - pending_creatings.pgs.size(),
p->second.end - p->second.start);
ps_t first = p->second.start;
ps_t end = first + n;
diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc
index 0c4fbc0bf9..70f4e2f284 100644
--- a/src/os/bluestore/BlueStore.cc
+++ b/src/os/bluestore/BlueStore.cc
@@ -12276,7 +12276,7 @@ size_t BlueStoreRepairer::StoreSpaceTracker::filter_out(
if (e.second == 0) {
continue;
}
- size_t pos = max(e.first / granularity, prev_pos);
+ size_t pos = max<size_t>(e.first / granularity, prev_pos);
size_t end_pos = 1 + (e.first + e.second - 1) / granularity;
while (pos != npos && pos < end_pos) {
ceph_assert( collections_bfs[pos].element_count() ==
diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc
index e65171eec1..eeb2de2bc1 100644
--- a/src/osd/PrimaryLogPG.cc
+++ b/src/osd/PrimaryLogPG.cc
@@ -20,6 +20,7 @@
#include "PG.h"
#include "PrimaryLogPG.h"
#include "OSD.h"
+#include <algorithm>
#include "OpRequest.h"
#include "ScrubStore.h"
#include "Session.h"
@@ -1635,7 +1636,7 @@ void PrimaryLogPG::calc_trim_to()
pg_log.get_log().approx_size() > target) {
dout(10) << __func__ << " approx pg log length = "
<< pg_log.get_log().approx_size() << dendl;
- size_t num_to_trim = std::min(pg_log.get_log().approx_size() - target,
+ size_t num_to_trim = std::min<size_t>(pg_log.get_log().approx_size() - target,
cct->_conf->osd_pg_log_trim_max);
dout(10) << __func__ << " num_to_trim = " << num_to_trim << dendl;
if (num_to_trim < cct->_conf->osd_pg_log_trim_min &&
diff --git a/src/rgw/rgw_op.h b/src/rgw/rgw_op.h
index ba3db09821..22fd91c7f4 100644
--- a/src/rgw/rgw_op.h
+++ b/src/rgw/rgw_op.h
@@ -1977,7 +1977,7 @@ static inline int rgw_get_request_metadata(CephContext* const cct,
* as ObjectStore::get_max_attr_name_length() can set the limit even
* lower than the "osd_max_attr_name_len" configurable. */
const size_t max_attr_name_len = \
- cct->_conf->get_val<size_t>("rgw_max_attr_name_len");
+ cct->_conf->get_val<Option::size_t>("rgw_max_attr_name_len");
if (max_attr_name_len && attr_name.length() > max_attr_name_len) {
return -ENAMETOOLONG;
}
@@ -1993,7 +1993,7 @@ static inline int rgw_get_request_metadata(CephContext* const cct,
/* Swift allows administrators to limit the number of metadats items
* send _in a single request_. */
const auto rgw_max_attrs_num_in_req = \
- cct->_conf->get_val<size_t>("rgw_max_attrs_num_in_req");
+ cct->_conf->get_val<Option::size_t>("rgw_max_attrs_num_in_req");
if (rgw_max_attrs_num_in_req &&
++valid_meta_count > rgw_max_attrs_num_in_req) {
return -E2BIG;
diff --git a/src/rgw/rgw_rest_swift.cc b/src/rgw/rgw_rest_swift.cc
index ebf2803b62..70cef69f5c 100644
--- a/src/rgw/rgw_rest_swift.cc
+++ b/src/rgw/rgw_rest_swift.cc
@@ -724,7 +724,7 @@ static inline int handle_metadata_errors(req_state* const s, const int op_ret)
} else if (op_ret == -E2BIG) {
const auto error_message = boost::str(
boost::format("Too many metadata items; max %lld")
- % s->cct->_conf->get_val<size_t>("rgw_max_attrs_num_in_req"));
+ % s->cct->_conf->get_val<Option::size_t>("rgw_max_attrs_num_in_req"));
set_req_state_err(s, EINVAL, error_message);
return -EINVAL;
}
@@ -1779,7 +1779,7 @@ void RGWInfo_ObjStore_SWIFT::list_swift_data(Formatter& formatter,
formatter.dump_string("version", ceph_version);
const size_t max_attr_name_len = \
- g_conf->get_val<size_t>("rgw_max_attr_name_len");
+ g_conf->get_val<Option::size_t>("rgw_max_attr_name_len");
if (max_attr_name_len) {
const size_t meta_name_limit = \
max_attr_name_len - strlen(RGW_ATTR_PREFIX RGW_AMZ_META_PREFIX);
@@ -1792,7 +1792,7 @@ void RGWInfo_ObjStore_SWIFT::list_swift_data(Formatter& formatter,
}
const size_t meta_num_limit = \
- g_conf->get_val<size_t>("rgw_max_attrs_num_in_req");
+ g_conf->get_val<Option::size_t>("rgw_max_attrs_num_in_req");
if (meta_num_limit) {
formatter.dump_int("max_meta_count", meta_num_limit);
}
diff --git a/src/rgw/rgw_sync_log_trim.cc b/src/rgw/rgw_sync_log_trim.cc
index e1002253b8..b14d7e80be 100644
--- a/src/rgw/rgw_sync_log_trim.cc
+++ b/src/rgw/rgw_sync_log_trim.cc
@@ -351,7 +351,7 @@ int take_min_status(CephContext *cct, Iter first, Iter last,
status->clear();
// The initialisation below is required to silence a false positive
// -Wmaybe-uninitialized warning
- boost::optional<size_t> num_shards = boost::make_optional(false, 0UL);
+ boost::optional<size_t> num_shards = boost::make_optional(false, (size_t)0);
for (auto peer = first; peer != last; ++peer) {
const size_t peer_shards = peer->size();
if (!num_shards) {
diff --git a/src/test/rbd_mirror/test_ImageSync.cc b/src/test/rbd_mirror/test_ImageSync.cc
index 5ef2cbe77a..15a98423c8 100644
--- a/src/test/rbd_mirror/test_ImageSync.cc
+++ b/src/test/rbd_mirror/test_ImageSync.cc
@@ -41,7 +41,7 @@ int flush(librbd::ImageCtx *image_ctx) {
void scribble(librbd::ImageCtx *image_ctx, int num_ops, size_t max_size)
{
- max_size = std::min(image_ctx->size, max_size);
+ max_size = std::min<size_t>(image_ctx->size, max_size);
for (int i=0; i<num_ops; i++) {
uint64_t off = rand() % (image_ctx->size - max_size + 1);
uint64_t len = 1 + rand() % max_size;
--
2.19.1

View File

@ -1,32 +0,0 @@
From 9fa9fbe96deb565188ba6740c3200a67c499d68a Mon Sep 17 00:00:00 2001
From: Brad Hubbard <bhubbard@redhat.com>
Date: Thu, 13 Sep 2018 13:19:02 +1000
Subject: [PATCH 3/4] mgr: Change signature of PyString_AsString to match
return
PyUnicode_AsUTF8 now returns 'const char*'
Fixes: http://tracker.ceph.com/issues/35984
Signed-off-by: Brad Hubbard <bhubbard@redhat.com>
(cherry picked from commit b29c65623f508082ded87af6f8d068ce8882f936)
---
src/mgr/PythonCompat.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/mgr/PythonCompat.h b/src/mgr/PythonCompat.h
index 745dad1a7e..7bbaf9c43c 100644
--- a/src/mgr/PythonCompat.h
+++ b/src/mgr/PythonCompat.h
@@ -13,7 +13,7 @@
inline PyObject* PyString_FromString(const char *v) {
return PyUnicode_FromFormat("%s", v);
}
-inline char* PyString_AsString(PyObject *string) {
+inline const char* PyString_AsString(PyObject *string) {
return PyUnicode_AsUTF8(string);
}
inline long PyInt_AsLong(PyObject *io) {
--
2.19.1

File diff suppressed because it is too large Load Diff

222
ceph.spec
View File

@ -18,14 +18,8 @@
# https://fedoraproject.org/wiki/Changes/No_more_automagic_Python_bytecompilation_phase_2 # https://fedoraproject.org/wiki/Changes/No_more_automagic_Python_bytecompilation_phase_2
%global _python_bytecompile_extra 1 %global _python_bytecompile_extra 1
%global _hardened_build 1 %global _hardened_build 1
%global fixme 0
%bcond_without ocf %bcond_without ocf
%ifnarch armv7hl
%bcond_without cephfs_java
%else
%bcond_with cephfs_java
%endif
%bcond_with make_check %bcond_with make_check
%ifarch s390 s390x %ifarch s390 s390x
%bcond_with tcmalloc %bcond_with tcmalloc
@ -35,6 +29,7 @@
%if 0%{?fedora} || 0%{?rhel} %if 0%{?fedora} || 0%{?rhel}
%bcond_without selinux %bcond_without selinux
%bcond_without ceph_test_package %bcond_without ceph_test_package
%bcond_without cephfs_java
%bcond_without lttng %bcond_without lttng
%bcond_without libradosstriper %bcond_without libradosstriper
%global _remote_tarball_prefix https://download.ceph.com/tarballs/ %global _remote_tarball_prefix https://download.ceph.com/tarballs/
@ -42,6 +37,7 @@
%if 0%{?suse_version} %if 0%{?suse_version}
%bcond_with selinux %bcond_with selinux
%bcond_with ceph_test_package %bcond_with ceph_test_package
%bcond_with cephfs_java
#Compat macro for new _fillupdir macro introduced in Nov 2017 #Compat macro for new _fillupdir macro introduced in Nov 2017
%if ! %{defined _fillupdir} %if ! %{defined _fillupdir}
%global _fillupdir /var/adm/fillup-templates %global _fillupdir /var/adm/fillup-templates
@ -58,11 +54,21 @@
%endif %endif
%endif %endif
%endif %endif
%if 0%{?fedora} >= 30 || 0%{?suse_version} >= 1500 %bcond_with seastar
%bcond_without python2 %if 0%{?fedora} || 0%{?suse_version} >= 1500
# distros where py2 is _optional_
%bcond_with python2
%else %else
# distros where py2 is _mandatory_
%bcond_without python2 %bcond_without python2
%endif %endif
%if 0%{?fedora} || 0%{?suse_version} >= 1500
# 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%{without python2} %if 0%{without python2}
%global _defined_if_python2_absent 1 %global _defined_if_python2_absent 1
%endif %endif
@ -89,7 +95,7 @@
# main package definition # main package definition
################################################################################# #################################################################################
Name: ceph Name: ceph
Version: 13.2.2 Version: 14.0.1
Release: 1%{?dist} Release: 1%{?dist}
%if 0%{?fedora} || 0%{?rhel} %if 0%{?fedora} || 0%{?rhel}
Epoch: 2 Epoch: 2
@ -105,19 +111,9 @@ License: LGPL-2.1 and CC-BY-SA-3.0 and GPL-2.0 and BSL-1.0 and BSD-3-Clause and
Group: System/Filesystems Group: System/Filesystems
%endif %endif
URL: http://ceph.com/ URL: http://ceph.com/
Source0: %{?_remote_tarball_prefix}ceph-13.2.2.tar.bz2 Source0: %{?_remote_tarball_prefix}ceph-14.0.1.tar.bz2
Patch001: 0001-f30-python3-execs.patch Patch001: 0001-f30-python3-execs.patch
Patch002: 0002-32-bit-compile-patch.patch ExcludeArch: i686 armv7hl
Patch003: 0003-mgr-Change-signature-of-PyString_AsString-to-match-r.patch
#Patch004: 0004-Rename-include-assert.h.patch
%if 0%{?suse_version}
# _insert_obs_source_lines_here
%if 0%{?is_opensuse}
ExclusiveArch: x86_64 aarch64 ppc64 ppc64le
%else
ExclusiveArch: x86_64 aarch64 ppc64le s390x
%endif
%endif
################################################################################# #################################################################################
# dependencies that apply across all distro families # dependencies that apply across all distro families
################################################################################# #################################################################################
@ -136,20 +132,29 @@ BuildRequires: selinux-policy-devel
%endif %endif
BuildRequires: bc BuildRequires: bc
BuildRequires: gperf BuildRequires: gperf
BuildRequires: cmake %if 0%{?rhel} == 7
BuildRequires: cmake3 > 3.5
%else
BuildRequires: cmake > 3.5
%endif
BuildRequires: cryptsetup BuildRequires: cryptsetup
BuildRequires: fuse-devel BuildRequires: fuse-devel
%if 0%{?rhel} == 7 %if 0%{?rhel} == 7
# devtoolset offers newer make and valgrind-devel, but the old ones are good # devtoolset offers newer make and valgrind-devel, but the old ones are good
# enough. # enough.
BuildRequires: devtoolset-7-gcc-c++ BuildRequires: devtoolset-7-gcc-c++ >= 7.3.1
%else %else
BuildRequires: gcc-c++ BuildRequires: gcc-c++
%endif %endif
BuildRequires: gdbm BuildRequires: gdbm
%if 0%{with tcmalloc} %if 0%{with tcmalloc}
%if 0%{?fedora} || 0%{?rhel}
BuildRequires: gperftools-devel >= 2.6.1
%endif
%if 0%{?suse_version}
BuildRequires: gperftools-devel >= 2.4 BuildRequires: gperftools-devel >= 2.4
%endif %endif
%endif
BuildRequires: jq BuildRequires: jq
BuildRequires: leveldb-devel > 1.2 BuildRequires: leveldb-devel > 1.2
BuildRequires: libaio-devel BuildRequires: libaio-devel
@ -168,6 +173,7 @@ BuildRequires: procps
BuildRequires: python%{_python_buildid} BuildRequires: python%{_python_buildid}
BuildRequires: python%{_python_buildid}-devel BuildRequires: python%{_python_buildid}-devel
BuildRequires: snappy-devel BuildRequires: snappy-devel
BuildRequires: sudo
BuildRequires: udev BuildRequires: udev
BuildRequires: util-linux BuildRequires: util-linux
BuildRequires: valgrind-devel BuildRequires: valgrind-devel
@ -186,7 +192,17 @@ BuildRequires: python%{_python_buildid}-tox
BuildRequires: python%{_python_buildid}-virtualenv BuildRequires: python%{_python_buildid}-virtualenv
BuildRequires: socat BuildRequires: socat
%endif %endif
%if 0%{with seastar}
BuildRequires: c-ares-devel
BuildRequires: gnutls-devel
BuildRequires: hwloc-devel
BuildRequires: libpciaccess-devel
BuildRequires: lksctp-tools-devel
BuildRequires: protobuf-devel
BuildRequires: ragel
BuildRequires: systemtap-sdt-devel
BuildRequires: yaml-cpp-devel
%endif
################################################################################# #################################################################################
# distro-conditional dependencies # distro-conditional dependencies
################################################################################# #################################################################################
@ -219,6 +235,7 @@ BuildRequires: btrfs-progs
BuildRequires: nss-devel BuildRequires: nss-devel
BuildRequires: keyutils-libs-devel BuildRequires: keyutils-libs-devel
BuildRequires: libibverbs-devel BuildRequires: libibverbs-devel
BuildRequires: librdmacm-devel
BuildRequires: openldap-devel BuildRequires: openldap-devel
BuildRequires: openssl-devel BuildRequires: openssl-devel
BuildRequires: CUnit-devel BuildRequires: CUnit-devel
@ -275,6 +292,17 @@ BuildRequires: expat-devel
%if 0%{?fedora} || 0%{?rhel} %if 0%{?fedora} || 0%{?rhel}
BuildRequires: redhat-rpm-config BuildRequires: redhat-rpm-config
%endif %endif
%if 0%{with seastar}
%if 0%{?fedora} || 0%{?rhel}
BuildRequires: cryptopp-devel
BuildRequires: numactl-devel
BuildRequires: protobuf-compiler
%endif
%if 0%{?suse_version}
BuildRequires: libcryptopp-devel
BuildRequires: libnuma-devel
%endif
%endif
%description %description
Ceph is a massively scalable, open-source, distributed storage system that runs Ceph is a massively scalable, open-source, distributed storage system that runs
@ -289,6 +317,7 @@ Summary: Ceph Base Package
%if 0%{?suse_version} %if 0%{?suse_version}
Group: System/Filesystems Group: System/Filesystems
%endif %endif
Provides: ceph-test:/usr/bin/ceph-kvstore-tool
Requires: ceph-common = %{_epoch_prefix}%{version}-%{release} Requires: ceph-common = %{_epoch_prefix}%{version}-%{release}
Requires: librbd1 = %{_epoch_prefix}%{version}-%{release} Requires: librbd1 = %{_epoch_prefix}%{version}-%{release}
Requires: librados2 = %{_epoch_prefix}%{version}-%{release} Requires: librados2 = %{_epoch_prefix}%{version}-%{release}
@ -331,6 +360,7 @@ Requires: python%{_python_buildid}-rados = %{_epoch_prefix}%{version}-%{release}
Requires: python%{_python_buildid}-rbd = %{_epoch_prefix}%{version}-%{release} Requires: python%{_python_buildid}-rbd = %{_epoch_prefix}%{version}-%{release}
Requires: python%{_python_buildid}-cephfs = %{_epoch_prefix}%{version}-%{release} Requires: python%{_python_buildid}-cephfs = %{_epoch_prefix}%{version}-%{release}
Requires: python%{_python_buildid}-rgw = %{_epoch_prefix}%{version}-%{release} Requires: python%{_python_buildid}-rgw = %{_epoch_prefix}%{version}-%{release}
Requires: python%{_python_buildid}-ceph-argparse = %{_epoch_prefix}%{version}-%{release}
%if 0%{?fedora} || 0%{?rhel} %if 0%{?fedora} || 0%{?rhel}
Requires: python%{_python_buildid}-prettytable Requires: python%{_python_buildid}-prettytable
Requires: python%{_python_buildid}-requests Requires: python%{_python_buildid}-requests
@ -366,6 +396,7 @@ Summary: Ceph Monitor Daemon
%if 0%{?suse_version} %if 0%{?suse_version}
Group: System/Filesystems Group: System/Filesystems
%endif %endif
Provides: ceph-test:/usr/bin/ceph-monstore-tool
Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} Requires: ceph-base = %{_epoch_prefix}%{version}-%{release}
%description mon %description mon
ceph-mon is the cluster monitor daemon for the Ceph distributed file ceph-mon is the cluster monitor daemon for the Ceph distributed file
@ -483,8 +514,10 @@ Summary: Ceph Object Storage Daemon
%if 0%{?suse_version} %if 0%{?suse_version}
Group: System/Filesystems Group: System/Filesystems
%endif %endif
Provides: ceph-test:/usr/bin/ceph-osdomap-tool
Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} Requires: ceph-base = %{_epoch_prefix}%{version}-%{release}
Requires: lvm2 Requires: lvm2
Requires: sudo
%description osd %description osd
ceph-osd is the object storage daemon for the Ceph distributed file ceph-osd is the object storage daemon for the Ceph distributed file
system. It is responsible for storing objects on a local file system system. It is responsible for storing objects on a local file system
@ -710,9 +743,8 @@ Summary: Python 2 libraries for Ceph distributed file system
Group: Development/Libraries/Python Group: Development/Libraries/Python
%endif %endif
Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release} Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release}
%if 0%{?suse_version} Requires: python-rados = %{_epoch_prefix}%{version}-%{release}
Recommends: python-rados = %{_epoch_prefix}%{version}-%{release} Requires: python-ceph-argparse = %{_epoch_prefix}%{version}-%{release}
%endif
Obsoletes: python-ceph < %{_epoch_prefix}%{version}-%{release} Obsoletes: python-ceph < %{_epoch_prefix}%{version}-%{release}
%description -n python-cephfs %description -n python-cephfs
This package contains Python 2 libraries for interacting with Cephs distributed This package contains Python 2 libraries for interacting with Cephs distributed
@ -726,11 +758,24 @@ Group: Development/Libraries/Python
%endif %endif
Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release} Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release}
Requires: python%{python3_pkgversion}-rados = %{_epoch_prefix}%{version}-%{release} Requires: python%{python3_pkgversion}-rados = %{_epoch_prefix}%{version}-%{release}
Requires: python%{python3_pkgversion}-ceph-argparse = %{_epoch_prefix}%{version}-%{release}
%description -n python%{python3_pkgversion}-cephfs %description -n python%{python3_pkgversion}-cephfs
This package contains Python 3 libraries for interacting with Cephs distributed This package contains Python 3 libraries for interacting with Cephs distributed
file system. file system.
%if 0%{with python2} %if 0%{with python2}
%package -n python-ceph-argparse
Summary: Python 2 utility libraries for Ceph CLI
%if 0%{?suse_version}
Group: Development/Libraries/Python
%endif
%description -n python-ceph-argparse
This package contains types and routines for Python 2 used by the Ceph CLI as
well as the RESTful interface. These have to do with querying the daemons for
command-description information, validating user command input against those
descriptions, and submitting the command to the appropriate daemon.
%endif
%package -n python%{python3_pkgversion}-ceph-argparse %package -n python%{python3_pkgversion}-ceph-argparse
Summary: Python 3 utility libraries for Ceph CLI Summary: Python 3 utility libraries for Ceph CLI
%if 0%{?suse_version} %if 0%{?suse_version}
@ -741,6 +786,17 @@ This package contains types and routines for Python 3 used by the Ceph CLI as
well as the RESTful interface. These have to do with querying the daemons for well as the RESTful interface. These have to do with querying the daemons for
command-description information, validating user command input against those command-description information, validating user command input against those
descriptions, and submitting the command to the appropriate daemon. descriptions, and submitting the command to the appropriate daemon.
%if 0%{with cephfs_shell}
%package -n cephfs-shell
Summary: Interactive shell for Ceph file system
Requires: python%{python3_pkgversion}-cmd2
Requires: python%{python3_pkgversion}-colorama
Requires: python%{python3_pkgversion}-cephfs
%description -n cephfs-shell
This package contains an interactive tool that allows accessing a Ceph
file system without mounting it by providing a nice pseudo-shell which
works like an FTP client.
%endif %endif
%if 0%{with ceph_test_package} %if 0%{with ceph_test_package}
@ -850,7 +906,7 @@ python-rbd, python-rgw or python-cephfs instead.
# common # common
################################################################################# #################################################################################
%prep %prep
%autosetup -p1 -n ceph-13.2.2 %autosetup -p1 -n ceph-14.0.1
%build %build
@ -869,13 +925,6 @@ done
# the following setting fixed an OOM condition we once encountered in the OBS # the following setting fixed an OOM condition we once encountered in the OBS
RPM_OPT_FLAGS="$RPM_OPT_FLAGS --param ggc-min-expand=20 --param ggc-min-heapsize=32768" RPM_OPT_FLAGS="$RPM_OPT_FLAGS --param ggc-min-expand=20 --param ggc-min-heapsize=32768"
%endif %endif
%ifnarch armv7hl
export RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS | sed -e 's/i386/i486/'`
%else
# Assume low mem builder for armv7hl and lower garbage collection settings
export RPM_OPT_FLAGS="$(echo $RPM_OPT_FLAGS | sed -e 's/i386/i486/' -e 's/-pipe //g' -e 's/-O2 //g') --param ggc-min-expand=20 --param ggc-min-heapsize=32768"
%endif
export CPPFLAGS="$java_inc" export CPPFLAGS="$java_inc"
export CFLAGS="$RPM_OPT_FLAGS" export CFLAGS="$RPM_OPT_FLAGS"
@ -908,7 +957,12 @@ env | sort
mkdir build mkdir build
cd build cd build
cmake .. \ %if 0%{?rhel} == 7
CMAKE=cmake3
%else
CMAKE=cmake
%endif
${CMAKE} .. \
-DCMAKE_INSTALL_PREFIX=%{_prefix} \ -DCMAKE_INSTALL_PREFIX=%{_prefix} \
-DCMAKE_INSTALL_LIBDIR=%{_libdir} \ -DCMAKE_INSTALL_LIBDIR=%{_libdir} \
-DCMAKE_INSTALL_LIBEXECDIR=%{_libexecdir} \ -DCMAKE_INSTALL_LIBEXECDIR=%{_libexecdir} \
@ -917,13 +971,8 @@ cmake .. \
-DCMAKE_INSTALL_MANDIR=%{_mandir} \ -DCMAKE_INSTALL_MANDIR=%{_mandir} \
-DCMAKE_INSTALL_DOCDIR=%{_docdir}/ceph \ -DCMAKE_INSTALL_DOCDIR=%{_docdir}/ceph \
-DCMAKE_INSTALL_INCLUDEDIR=%{_includedir} \ -DCMAKE_INSTALL_INCLUDEDIR=%{_includedir} \
-DWITH_EMBEDDED=OFF \
-DWITH_MANPAGE=ON \ -DWITH_MANPAGE=ON \
-DWITH_PYTHON3=ON \ -DWITH_PYTHON3=ON \
-DWITH_SPDK=OFF \
-DWITH_PMEM=OFF \
-DWITH_BOOST_CONTEXT=OFF \
-DWITH_LEVELDB=OFF \
-DWITH_MGR_DASHBOARD_FRONTEND=OFF \ -DWITH_MGR_DASHBOARD_FRONTEND=OFF \
%if %{with python2} %if %{with python2}
-DWITH_PYTHON2=ON \ -DWITH_PYTHON2=ON \
@ -955,12 +1004,12 @@ cmake .. \
-DWITH_OCF=ON \ -DWITH_OCF=ON \
%endif %endif
%ifarch aarch64 armv7hl mips mipsel ppc ppc64 ppc64le %{ix86} x86_64 %ifarch aarch64 armv7hl mips mipsel ppc ppc64 ppc64le %{ix86} x86_64
-DWITH_RADOSGW_BEAST_FRONTEND=ON \ -DWITH_BOOST_CONTEXT=ON \
%else %else
-DWITH_RADOSGW_BEAST_FRONTEND=OFF \ -DWITH_BOOST_CONTEXT=OFF \
%endif %endif
%ifnarch %{arm} %if 0%{with cephfs_shell}
-DWITH_RDMA=OFF \ -DWITH_CEPHFS_SHELL=ON \
%endif %endif
%if 0%{with libradosstriper} %if 0%{with libradosstriper}
-DWITH_LIBRADOSSTRIPER=ON \ -DWITH_LIBRADOSSTRIPER=ON \
@ -1011,8 +1060,9 @@ ln -sf %{_sbindir}/mount.ceph %{buildroot}/sbin/mount.ceph
# udev rules # udev rules
install -m 0644 -D udev/50-rbd.rules %{buildroot}%{_udevrulesdir}/50-rbd.rules install -m 0644 -D udev/50-rbd.rules %{buildroot}%{_udevrulesdir}/50-rbd.rules
install -m 0644 -D udev/60-ceph-by-parttypeuuid.rules %{buildroot}%{_udevrulesdir}/60-ceph-by-parttypeuuid.rules
install -m 0644 -D udev/95-ceph-osd.rules %{buildroot}%{_udevrulesdir}/95-ceph-osd.rules # sudoers.d
install -m 0600 -D sudoers.d/ceph-osd-smartctl %{buildroot}%{_sysconfdir}/sudoers.d/ceph-osd-smartctl
#set up placeholder directories #set up placeholder directories
mkdir -p %{buildroot}%{_sysconfdir}/ceph mkdir -p %{buildroot}%{_sysconfdir}/ceph
@ -1023,6 +1073,8 @@ mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/mon
mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/osd mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/osd
mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/mds mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/mds
mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/mgr mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/mgr
mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/crash
mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/crash/posted
mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/radosgw mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/radosgw
mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/bootstrap-osd mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/bootstrap-osd
mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/bootstrap-mds mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/bootstrap-mds
@ -1044,15 +1096,14 @@ rm -rf %{buildroot}
%files %files
%files base %files base
%{_bindir}/ceph-crash
%{_bindir}/crushtool %{_bindir}/crushtool
%{_bindir}/monmaptool %{_bindir}/monmaptool
%{_bindir}/osdmaptool %{_bindir}/osdmaptool
%{_bindir}/ceph-kvstore-tool %{_bindir}/ceph-kvstore-tool
%{_bindir}/ceph-run %{_bindir}/ceph-run
%{_bindir}/ceph-detect-init
%{_libexecdir}/systemd/system-preset/50-ceph.preset %{_libexecdir}/systemd/system-preset/50-ceph.preset
%{_sbindir}/ceph-create-keys %{_sbindir}/ceph-create-keys
%{_sbindir}/ceph-disk
%dir %{_libexecdir}/ceph %dir %{_libexecdir}/ceph
%{_libexecdir}/ceph/ceph_common.sh %{_libexecdir}/ceph/ceph_common.sh
%dir %{_libdir}/rados-classes %dir %{_libdir}/rados-classes
@ -1062,6 +1113,7 @@ rm -rf %{buildroot}
%{_libdir}/ceph/erasure-code/libec_*.so* %{_libdir}/ceph/erasure-code/libec_*.so*
%dir %{_libdir}/ceph/compressor %dir %{_libdir}/ceph/compressor
%{_libdir}/ceph/compressor/libceph_*.so* %{_libdir}/ceph/compressor/libceph_*.so*
%{_unitdir}/ceph-crash.service
%ifarch x86_64 %ifarch x86_64
%dir %{_libdir}/ceph/crypto %dir %{_libdir}/ceph/crypto
%{_libdir}/ceph/crypto/libceph_*.so* %{_libdir}/ceph/crypto/libceph_*.so*
@ -1079,16 +1131,8 @@ rm -rf %{buildroot}
%config %{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/ceph-mon %config %{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/ceph-mon
%config %{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/ceph-osd-mds %config %{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/ceph-osd-mds
%endif %endif
%{_unitdir}/ceph-disk@.service
%{_unitdir}/ceph.target %{_unitdir}/ceph.target
%if 0%{with python2} %if 0%{with python2}
%{python_sitelib}/ceph_detect_init*
%{python_sitelib}/ceph_disk*
%else
%{python3_sitelib}/ceph_detect_init*
%{python3_sitelib}/ceph_disk*
%endif
%if 0%{with python2}
%dir %{python_sitelib}/ceph_volume %dir %{python_sitelib}/ceph_volume
%{python_sitelib}/ceph_volume/* %{python_sitelib}/ceph_volume/*
%{python_sitelib}/ceph_volume-* %{python_sitelib}/ceph_volume-*
@ -1098,15 +1142,15 @@ rm -rf %{buildroot}
%{python3_sitelib}/ceph_volume-* %{python3_sitelib}/ceph_volume-*
%endif %endif
%{_mandir}/man8/ceph-deploy.8* %{_mandir}/man8/ceph-deploy.8*
%{_mandir}/man8/ceph-detect-init.8*
%{_mandir}/man8/ceph-create-keys.8* %{_mandir}/man8/ceph-create-keys.8*
%{_mandir}/man8/ceph-disk.8*
%{_mandir}/man8/ceph-run.8* %{_mandir}/man8/ceph-run.8*
%{_mandir}/man8/crushtool.8* %{_mandir}/man8/crushtool.8*
%{_mandir}/man8/osdmaptool.8* %{_mandir}/man8/osdmaptool.8*
%{_mandir}/man8/monmaptool.8* %{_mandir}/man8/monmaptool.8*
%{_mandir}/man8/ceph-kvstore-tool.8* %{_mandir}/man8/ceph-kvstore-tool.8*
#set up placeholder directories #set up placeholder directories
%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/crash
%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/crash/posted
%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/tmp %attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/tmp
%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/bootstrap-osd %attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/bootstrap-osd
%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/bootstrap-mds %attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/bootstrap-mds
@ -1119,22 +1163,22 @@ rm -rf %{buildroot}
%if 0%{?suse_version} %if 0%{?suse_version}
%fillup_only %fillup_only
if [ $1 -eq 1 ] ; then if [ $1 -eq 1 ] ; then
/usr/bin/systemctl preset ceph-disk@\*.service ceph.target >/dev/null 2>&1 || : /usr/bin/systemctl preset ceph.target ceph-crash.service >/dev/null 2>&1 || :
fi fi
%endif %endif
%if 0%{?fedora} || 0%{?rhel} %if 0%{?fedora} || 0%{?rhel}
%systemd_post ceph-disk@\*.service ceph.target %systemd_post ceph.target ceph-crash.service
%endif %endif
if [ $1 -eq 1 ] ; then if [ $1 -eq 1 ] ; then
/usr/bin/systemctl start ceph.target >/dev/null 2>&1 || : /usr/bin/systemctl start ceph.target ceph-crash.service >/dev/null 2>&1 || :
fi fi
%preun base %preun base
%if 0%{?suse_version} %if 0%{?suse_version}
%service_del_preun ceph-disk@\*.service ceph.target %service_del_preun ceph.target ceph-crash.service
%endif %endif
%if 0%{?fedora} || 0%{?rhel} %if 0%{?fedora} || 0%{?rhel}
%systemd_preun ceph-disk@\*.service ceph.target %systemd_preun ceph.target ceph-crash.service
%endif %endif
%postun base %postun base
@ -1142,10 +1186,10 @@ fi
test -n "$FIRST_ARG" || FIRST_ARG=$1 test -n "$FIRST_ARG" || FIRST_ARG=$1
%if 0%{?suse_version} %if 0%{?suse_version}
DISABLE_RESTART_ON_UPDATE="yes" DISABLE_RESTART_ON_UPDATE="yes"
%service_del_postun ceph-disk@\*.service ceph.target %service_del_postun ceph.target
%endif %endif
%if 0%{?fedora} || 0%{?rhel} %if 0%{?fedora} || 0%{?rhel}
%systemd_postun ceph-disk@\*.service ceph.target %systemd_postun ceph.target
%endif %endif
if [ $FIRST_ARG -ge 1 ] ; then if [ $FIRST_ARG -ge 1 ] ; then
# Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to # Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to
@ -1154,9 +1198,6 @@ if [ $FIRST_ARG -ge 1 ] ; then
if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then
source $SYSCONF_CEPH source $SYSCONF_CEPH
fi fi
if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then
/usr/bin/systemctl try-restart ceph-disk@\*.service > /dev/null 2>&1 || :
fi
fi fi
%files common %files common
@ -1213,15 +1254,6 @@ fi
%config %{_sysconfdir}/bash_completion.d/radosgw-admin %config %{_sysconfdir}/bash_completion.d/radosgw-admin
%config(noreplace) %{_sysconfdir}/ceph/rbdmap %config(noreplace) %{_sysconfdir}/ceph/rbdmap
%{_unitdir}/rbdmap.service %{_unitdir}/rbdmap.service
%if 0%{with python2}
%{python_sitelib}/ceph_argparse.py*
%{python_sitelib}/ceph_daemon.py*
%else
%{python3_sitelib}/ceph_argparse.py
%{python3_sitelib}/__pycache__/ceph_argparse.cpython*.py*
%{python3_sitelib}/ceph_daemon.py
%{python3_sitelib}/__pycache__/ceph_daemon.cpython*.py*
%endif
%dir %{_udevrulesdir} %dir %{_udevrulesdir}
%{_udevrulesdir}/50-rbd.rules %{_udevrulesdir}/50-rbd.rules
%attr(3770,ceph,ceph) %dir %{_localstatedir}/log/ceph/ %attr(3770,ceph,ceph) %dir %{_localstatedir}/log/ceph/
@ -1535,9 +1567,6 @@ fi
%{_libexecdir}/ceph/ceph-osd-prestart.sh %{_libexecdir}/ceph/ceph-osd-prestart.sh
%{_sbindir}/ceph-volume %{_sbindir}/ceph-volume
%{_sbindir}/ceph-volume-systemd %{_sbindir}/ceph-volume-systemd
%dir %{_udevrulesdir}
%{_udevrulesdir}/60-ceph-by-parttypeuuid.rules
%{_udevrulesdir}/95-ceph-osd.rules
%{_mandir}/man8/ceph-clsinfo.8* %{_mandir}/man8/ceph-clsinfo.8*
%{_mandir}/man8/ceph-osd.8* %{_mandir}/man8/ceph-osd.8*
%{_mandir}/man8/ceph-bluestore-tool.8* %{_mandir}/man8/ceph-bluestore-tool.8*
@ -1551,6 +1580,7 @@ fi
%{_unitdir}/ceph-volume@.service %{_unitdir}/ceph-volume@.service
%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/osd %attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/osd
%config(noreplace) %{_sysctldir}/90-ceph-osd.conf %config(noreplace) %{_sysctldir}/90-ceph-osd.conf
%{_sysconfdir}/sudoers.d/ceph-osd-smartctl
%post osd %post osd
%if 0%{?suse_version} %if 0%{?suse_version}
@ -1569,8 +1599,6 @@ fi
%else %else
/usr/lib/systemd/systemd-sysctl %{_sysctldir}/90-ceph-osd.conf > /dev/null 2>&1 || : /usr/lib/systemd/systemd-sysctl %{_sysctldir}/90-ceph-osd.conf > /dev/null 2>&1 || :
%endif %endif
# work around https://tracker.ceph.com/issues/24903
chown -f -h ceph:ceph /var/lib/ceph/osd/*/block* 2>&1 > /dev/null || :
%preun osd %preun osd
%if 0%{?suse_version} %if 0%{?suse_version}
@ -1634,7 +1662,6 @@ fi
%{_includedir}/rados/crc32c.h %{_includedir}/rados/crc32c.h
%{_includedir}/rados/rados_types.h %{_includedir}/rados/rados_types.h
%{_includedir}/rados/rados_types.hpp %{_includedir}/rados/rados_types.hpp
%{_includedir}/rados/memory.h
%{_libdir}/librados.so %{_libdir}/librados.so
%if %{with lttng} %if %{with lttng}
%{_libdir}/librados_tp.so %{_libdir}/librados_tp.so
@ -1689,6 +1716,7 @@ fi
%files -n librgw2 %files -n librgw2
%{_libdir}/librgw.so.* %{_libdir}/librgw.so.*
%{_libdir}/librgw_admin_user.so.*
%if %{with lttng} %if %{with lttng}
%{_libdir}/librgw_op_tp.so* %{_libdir}/librgw_op_tp.so*
%{_libdir}/librgw_rados_tp.so* %{_libdir}/librgw_rados_tp.so*
@ -1701,8 +1729,10 @@ fi
%files -n librgw-devel %files -n librgw-devel
%dir %{_includedir}/rados %dir %{_includedir}/rados
%{_includedir}/rados/librgw.h %{_includedir}/rados/librgw.h
%{_includedir}/rados/librgw_admin_user.h
%{_includedir}/rados/rgw_file.h %{_includedir}/rados/rgw_file.h
%{_libdir}/librgw.so %{_libdir}/librgw.so
%{_libdir}/librgw_admin_user.so
%if 0%{with python2} %if 0%{with python2}
%files -n python-rgw %files -n python-rgw
@ -1751,11 +1781,21 @@ fi
%{python3_sitelib}/__pycache__/ceph_volume_client.cpython*.py* %{python3_sitelib}/__pycache__/ceph_volume_client.cpython*.py*
%if 0%{with python2} %if 0%{with python2}
%files -n python-ceph-argparse
%{python_sitelib}/ceph_argparse.py*
%{python_sitelib}/ceph_daemon.py*
%endif
%files -n python%{python3_pkgversion}-ceph-argparse %files -n python%{python3_pkgversion}-ceph-argparse
%{python3_sitelib}/ceph_argparse.py %{python3_sitelib}/ceph_argparse.py
%{python3_sitelib}/__pycache__/ceph_argparse.cpython*.py* %{python3_sitelib}/__pycache__/ceph_argparse.cpython*.py*
%{python3_sitelib}/ceph_daemon.py %{python3_sitelib}/ceph_daemon.py
%{python3_sitelib}/__pycache__/ceph_daemon.cpython*.py* %{python3_sitelib}/__pycache__/ceph_daemon.cpython*.py*
%if 0%{with cephfs_shell}
%files -n cephfs-shell
%{python3_sitelib}/cephfs_shell-*.egg-info
%{_bindir}/cephfs-shell
%endif %endif
%if 0%{with ceph_test_package} %if 0%{with ceph_test_package}
@ -1841,13 +1881,8 @@ if test $STATUS -eq 0; then
/usr/bin/systemctl stop ceph.target > /dev/null 2>&1 /usr/bin/systemctl stop ceph.target > /dev/null 2>&1
fi fi
# Relabel the files # Relabel the files fix for first package install
# Use ceph-disk fix for first package install and fixfiles otherwise /usr/sbin/fixfiles -C ${FILE_CONTEXT}.pre restore 2> /dev/null
if [ "$1" = "1" ]; then
/usr/sbin/ceph-disk fix --selinux
else
/usr/sbin/fixfiles -C ${FILE_CONTEXT}.pre restore 2> /dev/null
fi
rm -f ${FILE_CONTEXT}.pre rm -f ${FILE_CONTEXT}.pre
# The fixfiles command won't fix label for /var/run/ceph # The fixfiles command won't fix label for /var/run/ceph
@ -1906,6 +1941,11 @@ exit 0
%changelog %changelog
* Tue Dec 04 2018 Boris Ranto <branto@redhat.com> - 2:14.0.1-1
- New release (2:14.0.1-1)
- Sync with upstream
- Drop 32-bit support
* Wed Nov 21 2018 Boris Ranto <branto@redhat.com> - 2:13.2.2-1 * Wed Nov 21 2018 Boris Ranto <branto@redhat.com> - 2:13.2.2-1
- New release (2:13.2.2-1) - New release (2:13.2.2-1)
- Sync with upstream - Sync with upstream

View File

@ -1 +1 @@
SHA512 (ceph-13.2.2.tar.bz2) = 04cf65503120f64fcc834498f509f385d5427b09c7690bc18318d39242f48786f4703b10fae3055f7fbe9edae84bb9dae0e9b7a3bcd092bf3e257ad274d183b6 SHA512 (ceph-14.0.1.tar.bz2) = a949ea3cbd6ee0cae1cf60193b3e8de80b7af43155869f8f504e2aeedc7ee2db5d484013572b28d5ae1a0a0b7b619ee912f536a0015f4c9d18ea2a8705f9150a