summaryrefslogtreecommitdiff
path: root/net/ceph12
diff options
context:
space:
mode:
authorKurt Jaeger <pi@FreeBSD.org>2019-02-27 18:57:12 +0000
committerKurt Jaeger <pi@FreeBSD.org>2019-02-27 18:57:12 +0000
commite79925a0a7e275dce9b0e2208da0311d4535b43d (patch)
tree66510ae07e1325b5e044eb4fff9b658d1dce6803 /net/ceph12
parentdeskutils/go-for-it: Update to 1.6.10 (diff)
net/ceph: rename to net/ceph12, update 12.2.7 -> 12.2.11
PR: 236004 Submitted by: Willem Jan Withagen <wjw@digiware.nl> (maintainer) Relnotes: https://ceph.com/releases/v12-2-11-luminous-released/ https://ceph.com/releases/v12-2-10-luminous-released/ https://ceph.com/releases/v12-2-8-released/
Notes
Notes: svn path=/head/; revision=494078
Diffstat (limited to 'net/ceph12')
-rw-r--r--net/ceph12/Makefile151
-rw-r--r--net/ceph12/distinfo29
-rw-r--r--net/ceph12/files/ceph.in36
-rw-r--r--net/ceph12/files/file-git_version2
-rw-r--r--net/ceph12/files/patch-boost-1.67191
-rw-r--r--net/ceph12/files/patch-src_objectstore_store_test.cc39
-rw-r--r--net/ceph12/files/patch-src_rgw_CMakeLists.txt13
-rw-r--r--net/ceph12/files/patch-src_rgw_rgw_sync_module_es.cc13
-rw-r--r--net/ceph12/files/patch-src_tools_ceph__kvstore__tool.cc27
-rw-r--r--net/ceph12/pkg-descr21
-rw-r--r--net/ceph12/pkg-plist390
11 files changed, 912 insertions, 0 deletions
diff --git a/net/ceph12/Makefile b/net/ceph12/Makefile
new file mode 100644
index 000000000000..2edb6691da2d
--- /dev/null
+++ b/net/ceph12/Makefile
@@ -0,0 +1,151 @@
+# Created by: Willem Jan Withagen <wjw@digiware.nl>
+# $FreeBSD$
+
+PORTNAME= ceph
+DISTVERSIONPREFIX= v
+DISTVERSION= 12.2.11
+CATEGORIES= net
+PKGNAMESUFFIX= 12
+
+MAINTAINER= wjw@digiware.nl
+COMMENT= Ceph delivers object, block, and file storage in a unified system
+
+LICENSE= GPLv2 LGPL3
+LICENSE_COMB= dual
+
+# even though i386 will build, it is not really advised.
+ONLY_FOR_ARCHS= amd64
+
+BUILD_DEPENDS= \
+ yasm:devel/yasm \
+ ${PYTHON_PKGNAMEPREFIX}sphinx>=0:textproc/py-sphinx@${PY_FLAVOR} \
+ gperf:devel/gperf \
+ ${LOCALBASE}/lib/libatomic_ops.a:devel/libatomic_ops
+LIB_DEPENDS= \
+ ${PY_BOOST} \
+ libboost_thread.so:devel/boost-libs \
+ libleveldb.so:databases/leveldb \
+ libnss3.so:security/nss \
+ libsnappy.so:archivers/snappy \
+ libcurl.so:ftp/curl \
+ libxml2.so:textproc/libxml2 \
+ libexpat.so:textproc/expat2 \
+ liblz4.so:archivers/liblz4 \
+ libplds4.so:devel/nspr \
+ libtcmalloc.so:devel/google-perftools
+RUN_DEPENDS= \
+ bash:shells/bash \
+ ${LOCALBASE}/bin/getopt:misc/getopt \
+ xml:textproc/xmlstarlet \
+ jq:textproc/jq \
+ flock:sysutils/flock \
+ ${PYTHON_PKGNAMEPREFIX}virtualenv>=0:devel/py-virtualenv@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}prettytable>=0:devel/py-prettytable@${PY_FLAVOR}
+
+CONFLICTS_INSTALL= ceph-devel
+PORTSCOUT= limit:^v12\.
+
+USES= cmake:noninja fuse gettext-runtime gmake \
+ pkgconfig python:2.7 shebangfix ssl
+USE_PYTHON= cython
+USE_OPENLDAP= yes
+USE_GITHUB= yes
+GH_ACCOUNT= ceph:DEFAULT
+
+GH_TUPLE+= ceph:ceph-erasure-code-corpus:2d7d78b:ceph_erasure_code_corpus/ceph-erasure-code-corpus
+GH_TUPLE+= ceph:ceph-object-corpus:e32bf8c:ceph_object_corpus/ceph-object-corpus
+GH_TUPLE+= ceph:civetweb:de23828:civetweb/src/civetweb
+GH_TUPLE+= 01org:isa-l_crypto:603529a:isa_l_crypto/src/crypto/isa-l/isa-l_crypto
+GH_TUPLE+= ceph:gf-complete:7e61b44:gf_complete/src/erasure-code/jerasure/gf-complete
+GH_TUPLE+= ceph:jerasure:96c76b8:jerasure/src/erasure-code/jerasure/jerasure
+GH_TUPLE+= ceph:googletest:fdb8504:googletest/src/googletest
+GH_TUPLE+= ceph:isa-l:7e1a337:isa_l/src/isa-l
+GH_TUPLE+= ceph:lua:1fce39c:lua/src/lua
+GH_TUPLE+= ceph:rapidjson:f54b0e4:rapidjson/src/rapidjson
+GH_TUPLE+= ceph:rocksdb:e15382c:rocksdb/src/rocksdb
+GH_TUPLE+= ceph:xxHash:1f40c65:xxHash/src/xxHash
+GH_TUPLE+= facebook:zstd:f4340f4:zstd/src/zstd
+
+CMAKE_ARGS= \
+ -D WITH_SYSTEM_BOOST:BOOL=ON \
+ -D CEPH_MAN_DIR:STRING=man \
+ -D WITH_LTTNG:BOOL=OFF \
+ -D WITH_BABELTRACE:BOOL=OFF \
+ -D WITH_KRBD:BOOL=OFF \
+ -D WITH_XFS:BOOL=OFF \
+ -D WITH_KVS:BOOL=OFF \
+ -D WITH_BLKID:BOOL=OFF \
+ -D WITH_SPDK:BOOL=OFF \
+ -D WITH_RDMA=OFF \
+ -D WITH_BLUESTORE:BOOL=OFF \
+ -D WITH_LIBCEPHFS:BOOL=OFF \
+ -D WITH_CEPHFS:BOOL=OFF \
+ -D WITH_EMBEDDED:BOOL=OFF \
+ -D WITH_SYSTEM_BOOST:BOOL=ON \
+ -D WITH_BOOST_CONTEXT:BOOL=OFF \
+ -D WITH_FUSE:BOOL=ON \
+ -D WITH_MANPAGE:BOOL=ON \
+ -D WITH_RADOSGW_BEAST_FRONTEND:BOOL=OFF \
+ -D WITH_MGR_DASHBOARD_FRONTEND:BOOL=OFF
+
+SHEBANG_FILES=src/rbdmap src/ceph-post-file.in src/rbd-replay-many \
+ src/brag/client/ceph-brag src/ceph-rest-api \
+ src/tools/ceph-monstore-update-crush.sh src/mount.fuse.ceph \
+ src/ceph-create-keys
+
+USE_RC_SUBR= ceph
+USE_LDCONFIG= yes
+
+USERS= ceph
+GROUPS= ceph
+
+post-patch:
+ ${REINPLACE_CMD} 's|sphinx-build|sphinx-build-${PYTHON_VER}|g' ${WRKSRC}/CMakeLists.txt
+
+pre-configure:
+ ${LN} -s ${CONFIGURE_WRKSRC} ${WRKSRC}/build
+ ${CP} ${FILESDIR}/file-git_version ${WRKSRC}/src/.git_version
+
+post-install:
+ ${MKDIR} ${STAGEDIR}${PREFIX}/etc/ceph
+ ${MKDIR} ${STAGEDIR}/var/lib/ceph/bootstrap-mds
+ ${MKDIR} ${STAGEDIR}/var/lib/ceph/bootstrap-osd
+ ${MKDIR} ${STAGEDIR}/var/lib/ceph/bootstrap-rgw
+ ${MKDIR} ${STAGEDIR}/var/lib/ceph/bootstrap-mgr
+ ${MKDIR} ${STAGEDIR}/var/lib/ceph/mds
+ ${MKDIR} ${STAGEDIR}/var/lib/ceph/mon
+ ${MKDIR} ${STAGEDIR}/var/lib/ceph/osd
+ ${MKDIR} ${STAGEDIR}/var/lib/ceph/mgr
+ ${MKDIR} ${STAGEDIR}/var/lib/ceph/tmp
+ ${MKDIR} ${STAGEDIR}/var/lib/ceph/radosgw
+ ${MKDIR} ${STAGEDIR}/var/log/ceph
+ ${MKDIR} ${STAGEDIR}/var/run/ceph
+ # Use the Ceph init.d script as the interface to regular
+ # starting and stopping deamons. rc.d work is done thru
+ # a separate rc.d/ceph script calling init-ceph again.
+ ${MV} ${STAGEDIR}${PREFIX}/etc/init.d/ceph ${STAGEDIR}${PREFIX}/bin/init-ceph
+ # remove files not packaged
+ ${RM} ${STAGEDIR}${DOCSDIR}/sample.fetch_config
+ ${RM} ${STAGEDIR}${DOCSDIR}/sample.ceph.conf
+ ${RMDIR} ${STAGEDIR}${DOCSDIR}
+ ${RM} ${STAGEDIR}${PREFIX}/bin/ceph_bench_log
+ ${RM} ${STAGEDIR}${PREFIX}/bin/ceph_multi_stress_watch
+ ${RM} ${STAGEDIR}${PREFIX}/bin/ceph_perf*
+ ${RM} ${STAGEDIR}${PREFIX}/bin/ceph_psim
+ ${RM} ${STAGEDIR}${PREFIX}/bin/ceph_scratchtoolpp
+ ${RM} ${STAGEDIR}${PREFIX}/bin/ceph_smalliobench*
+ ${RM} ${STAGEDIR}${PREFIX}/bin/ceph_test*
+ ${RM} ${STAGEDIR}${PREFIX}/bin/ceph_tpbench
+ ${RM} ${STAGEDIR}${PREFIX}/bin/ceph_xattr_bench
+ ${RM} ${STAGEDIR}${PREFIX}/sbin/ceph-disk-udev
+ # ceph-volume does not support ZFS
+ ${RM} -rf ${STAGEDIR}${PYTHON_SITELIBDIR}/ceph_volume-*
+ ${RM} -rf ${STAGEDIR}${PYTHON_SITELIBDIR}/ceph_volume/
+ ${RM} ${STAGEDIR}${PREFIX}/sbin/ceph-volume
+ ${RM} ${STAGEDIR}${PREFIX}/sbin/ceph-volume-systemd
+ ${RM} ${STAGEDIR}${PREFIX}/man/man8/ceph-volume*
+
+ ${RMDIR} ${STAGEDIR}${PREFIX}/etc/init.d
+ ${INSTALL_DATA} ${WRKSRC}/src/sample.ceph.conf ${STAGEDIR}${PREFIX}/etc/ceph/ceph.conf.sample
+
+.include <bsd.port.mk>
diff --git a/net/ceph12/distinfo b/net/ceph12/distinfo
new file mode 100644
index 000000000000..d667955db534
--- /dev/null
+++ b/net/ceph12/distinfo
@@ -0,0 +1,29 @@
+TIMESTAMP = 1550935963
+SHA256 (ceph-ceph-v12.2.11_GH0.tar.gz) = 67a2afe2de2087279e5a6bfab9c2b2a391093fb73723b629aaaeb204044be499
+SIZE (ceph-ceph-v12.2.11_GH0.tar.gz) = 12451786
+SHA256 (ceph-ceph-erasure-code-corpus-2d7d78b_GH0.tar.gz) = 8ab8f36f3e0a720c882b8bb4abb3f2e26bd6b025cc263119207f7d2eb3b1e490
+SIZE (ceph-ceph-erasure-code-corpus-2d7d78b_GH0.tar.gz) = 3685656
+SHA256 (ceph-ceph-object-corpus-e32bf8c_GH0.tar.gz) = 79ff0d1b9f959c9f5264a0dff193105d71885615deaa9c8469902400fd82d214
+SIZE (ceph-ceph-object-corpus-e32bf8c_GH0.tar.gz) = 1838192
+SHA256 (ceph-civetweb-de23828_GH0.tar.gz) = a9a95dd58e9b4a696fa0c822c1401856c55ef9b67fb28cf15d97f19f1af2ecbd
+SIZE (ceph-civetweb-de23828_GH0.tar.gz) = 6850197
+SHA256 (01org-isa-l_crypto-603529a_GH0.tar.gz) = 52708b98c832bb7e6db60c949ece261d9609c822ae55239b0f2133cec2b3d155
+SIZE (01org-isa-l_crypto-603529a_GH0.tar.gz) = 439149
+SHA256 (ceph-gf-complete-7e61b44_GH0.tar.gz) = 7b0e5c1b41399d2c7d97ed7a7547ebf40023bcd104ed9a8b2b75bdee440c1a4d
+SIZE (ceph-gf-complete-7e61b44_GH0.tar.gz) = 342303
+SHA256 (ceph-jerasure-96c76b8_GH0.tar.gz) = 06edaeb8cb5c3076e34cb53dd91c91d54d46fb8c3b837c6280ea2ed076556beb
+SIZE (ceph-jerasure-96c76b8_GH0.tar.gz) = 806334
+SHA256 (ceph-googletest-fdb8504_GH0.tar.gz) = ece3265dae4d0fe5a52e7164432bb416de8bdb45e1c8cf8f361bbe893db30bb8
+SIZE (ceph-googletest-fdb8504_GH0.tar.gz) = 1281068
+SHA256 (ceph-isa-l-7e1a337_GH0.tar.gz) = 8099bc6ca3ca6ed9376f6cc5072a84d7a1863e2d7f2344bf08682d4efb7ae788
+SIZE (ceph-isa-l-7e1a337_GH0.tar.gz) = 458398
+SHA256 (ceph-lua-1fce39c_GH0.tar.gz) = fb5f778ce4da349ca903512a2fdb3987b12e3f0a52ab088fb011a8e4dd55848c
+SIZE (ceph-lua-1fce39c_GH0.tar.gz) = 366778
+SHA256 (ceph-rapidjson-f54b0e4_GH0.tar.gz) = 35c330d40ed9def99e8dea8f3b0e4fda7610b813b6f4aac9a70ffefcb9ab1f1e
+SIZE (ceph-rapidjson-f54b0e4_GH0.tar.gz) = 1019457
+SHA256 (ceph-rocksdb-e15382c_GH0.tar.gz) = e23177dd893b81b4d3d959464ee8e5c4fe64a408841c2584b29540c60ac5cf47
+SIZE (ceph-rocksdb-e15382c_GH0.tar.gz) = 3278113
+SHA256 (ceph-xxHash-1f40c65_GH0.tar.gz) = 809e06b7493ed01f13c7ba972393a5a6d23dd92fd6b884381aa907005e569372
+SIZE (ceph-xxHash-1f40c65_GH0.tar.gz) = 25484
+SHA256 (facebook-zstd-f4340f4_GH0.tar.gz) = 0db909a46914eb7800bce044b86fcf595451713e56a2b131ace6f70ff25c1c4d
+SIZE (facebook-zstd-f4340f4_GH0.tar.gz) = 1619022
diff --git a/net/ceph12/files/ceph.in b/net/ceph12/files/ceph.in
new file mode 100644
index 000000000000..4c04cccb55d3
--- /dev/null
+++ b/net/ceph12/files/ceph.in
@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+
+# PROVIDE: ceph
+# REQUIRE: LOGIN
+# BEFORE: securelevel
+# KEYWORD: shutdown
+
+# Add the following lines to /etc/rc.conf to enable `ceph':
+#
+# ceph_enable="YES"
+#
+
+. /etc/rc.subr
+
+PATH=$PATH:%%PREFIX%%/bin:%%PREFIX%%/sbin
+
+name="ceph"
+rcvar=${name}_enable
+extra_commands="condrestart"
+
+load_rc_config ${name}
+
+# read configuration and set defaults
+: ${ceph_enable="NO"}
+: ${ceph_configfile:=%%PREFIX%%/etc/ceph/ceph.conf}
+
+start_cmd="%%PREFIX%%/bin/init-ceph $*"
+stop_cmd="%%PREFIX%%/bin/init-ceph $*"
+restart_cmd="%%PREFIX%%/bin/init-ceph $*"
+condrestart_cmd="%%PREFIX%%/bin/init-ceph $*"
+
+run_rc_command "$1"
+
diff --git a/net/ceph12/files/file-git_version b/net/ceph12/files/file-git_version
new file mode 100644
index 000000000000..268e02b634ff
--- /dev/null
+++ b/net/ceph12/files/file-git_version
@@ -0,0 +1,2 @@
+26dc3775efc7bb286a1d6d66faee0ba30ea23eee
+v12.2.11
diff --git a/net/ceph12/files/patch-boost-1.67 b/net/ceph12/files/patch-boost-1.67
new file mode 100644
index 000000000000..1e3f9ba743f8
--- /dev/null
+++ b/net/ceph12/files/patch-boost-1.67
@@ -0,0 +1,191 @@
+Regressed by https://github.com/boostorg/date_time/commit/f9f2aaf5216c
+
+src/rbd_replay/Replayer.cc:353:65: error: no matching conversion for functional-style cast from 'float' to 'boost::posix_time::microseconds' (aka 'subsecond_duration<boost::posix_time::time_duration, 1000000>')
+ boost::system_time sub_release_time(action_completed_time + boost::posix_time::microseconds(dep.time_delta * m_latency_multiplier / 1000));
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+/usr/local/include/boost/date_time/time_duration.hpp:270:30: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'float' to 'const boost::date_time::subsecond_duration<boost::posix_time::time_duration, 1000000>' for 1st argument
+ class BOOST_SYMBOL_VISIBLE subsecond_duration : public base_duration
+ ^
+/usr/local/include/boost/date_time/time_duration.hpp:270:30: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'float' to 'boost::date_time::subsecond_duration<boost::posix_time::time_duration, 1000000>' for 1st argument
+/usr/local/include/boost/date_time/time_duration.hpp:286:59: note: candidate template ignored: disabled by 'enable_if' [with T = float]
+ typename boost::enable_if<boost::is_integral<T>, void>::type* = 0) :
+ ^
+
+src/test/librbd/test_mock_Journal.cc:485:42: error: reference to '_1' is ambiguous
+ std::bind(&invoke_replay_complete, _1, 0));
+ ^
+/usr/local/include/boost/bind/placeholders.hpp:46:38: note: candidate found by name lookup is 'boost::placeholders::_1'
+BOOST_STATIC_CONSTEXPR boost::arg<1> _1;
+ ^
+/usr/include/c++/v1/functional:2021:21: note: candidate found by name lookup is 'std::__1::placeholders::_1'
+constexpr __ph<1> _1{};
+ ^
+
+--- src/rbd_replay/Replayer.cc.orig 2018-02-26 21:47:18 UTC
++++ src/rbd_replay/Replayer.cc
+@@ -350,7 +350,7 @@ void Replayer::wait_for_actions(const action::Dependen
+ dout(DEPGRAPH_LEVEL) << "Finished waiting for " << dep.id << " after " << micros << " microseconds" << dendl;
+ // Apparently the nanoseconds constructor is optional:
+ // http://www.boost.org/doc/libs/1_46_0/doc/html/date_time/details.html#compile_options
+- boost::system_time sub_release_time(action_completed_time + boost::posix_time::microseconds(dep.time_delta * m_latency_multiplier / 1000));
++ boost::system_time sub_release_time(action_completed_time + boost::posix_time::microseconds(long(dep.time_delta * m_latency_multiplier / 1000)));
+ if (sub_release_time > release_time) {
+ release_time = sub_release_time;
+ }
+--- src/test/librbd/test_mock_Journal.cc.orig 2018-02-26 21:47:18 UTC
++++ src/test/librbd/test_mock_Journal.cc
+@@ -214,7 +214,6 @@ using ::testing::Return;
+ using ::testing::SaveArg;
+ using ::testing::SetArgPointee;
+ using ::testing::WithArg;
+-using namespace std::placeholders;
+
+ ACTION_P2(StartReplay, wq, ctx) {
+ wq->queue(ctx, 0);
+@@ -482,7 +481,7 @@ class TestMockJournal : public TestMockFixture { (publ
+ expect_get_max_append_size(mock_journaler, 1 << 16);
+ expect_start_replay(
+ mock_image_ctx, mock_journaler,
+- std::bind(&invoke_replay_complete, _1, 0));
++ std::bind(&invoke_replay_complete, std::placeholders::_1, 0));
+
+ MockJournalReplay mock_journal_replay;
+ expect_stop_replay(mock_journaler);
+@@ -530,7 +529,7 @@ TEST_F(TestMockJournal, StateTransitions) {
+ expect_get_max_append_size(mock_journaler, 1 << 16);
+ expect_start_replay(
+ mock_image_ctx, mock_journaler,
+- std::bind(&invoke_replay_ready, _1));
++ std::bind(&invoke_replay_ready, std::placeholders::_1));
+
+ ::journal::MockReplayEntry mock_replay_entry;
+ MockJournalReplay mock_journal_replay;
+@@ -539,11 +538,11 @@ TEST_F(TestMockJournal, StateTransitions) {
+ expect_try_pop_front(mock_image_ctx, mock_journaler, true, mock_replay_entry);
+ expect_replay_process(mock_journal_replay);
+ expect_try_pop_front(mock_image_ctx, mock_journaler, false, mock_replay_entry,
+- std::bind(&invoke_replay_ready, _1));
++ std::bind(&invoke_replay_ready, std::placeholders::_1));
+ expect_try_pop_front(mock_image_ctx, mock_journaler, true, mock_replay_entry);
+ expect_replay_process(mock_journal_replay);
+ expect_try_pop_front(mock_image_ctx, mock_journaler, false, mock_replay_entry,
+- std::bind(&invoke_replay_complete, _1, 0));
++ std::bind(&invoke_replay_complete, std::placeholders::_1, 0));
+
+ expect_stop_replay(mock_journaler);
+ expect_shut_down_replay(mock_image_ctx, mock_journal_replay, 0);
+@@ -599,7 +598,7 @@ TEST_F(TestMockJournal, ReplayCompleteError) {
+ expect_get_max_append_size(mock_journaler, 1 << 16);
+ expect_start_replay(
+ mock_image_ctx, mock_journaler,
+- std::bind(&invoke_replay_complete, _1, -EINVAL));
++ std::bind(&invoke_replay_complete, std::placeholders::_1, -EINVAL));
+
+ MockJournalReplay mock_journal_replay;
+ expect_stop_replay(mock_journaler);
+@@ -613,7 +612,7 @@ TEST_F(TestMockJournal, ReplayCompleteError) {
+ expect_get_max_append_size(mock_journaler, 1 << 16);
+ expect_start_replay(
+ mock_image_ctx, mock_journaler,
+- std::bind(&invoke_replay_complete, _1, 0));
++ std::bind(&invoke_replay_complete, std::placeholders::_1, 0));
+
+ expect_stop_replay(mock_journaler);
+ expect_shut_down_replay(mock_image_ctx, mock_journal_replay, 0);
+@@ -645,14 +644,14 @@ TEST_F(TestMockJournal, FlushReplayError) {
+ expect_get_max_append_size(mock_journaler, 1 << 16);
+ expect_start_replay(
+ mock_image_ctx, mock_journaler,
+- std::bind(&invoke_replay_ready, _1));
++ std::bind(&invoke_replay_ready, std::placeholders::_1));
+
+ ::journal::MockReplayEntry mock_replay_entry;
+ MockJournalReplay mock_journal_replay;
+ expect_try_pop_front(mock_image_ctx, mock_journaler, true, mock_replay_entry);
+ expect_replay_process(mock_journal_replay);
+ expect_try_pop_front(mock_image_ctx, mock_journaler, false, mock_replay_entry,
+- std::bind(&invoke_replay_complete, _1, 0));
++ std::bind(&invoke_replay_complete, std::placeholders::_1, 0));
+ expect_stop_replay(mock_journaler);
+ expect_shut_down_replay(mock_image_ctx, mock_journal_replay, -EINVAL);
+ expect_shut_down_journaler(mock_journaler);
+@@ -664,7 +663,7 @@ TEST_F(TestMockJournal, FlushReplayError) {
+ expect_get_max_append_size(mock_journaler, 1 << 16);
+ expect_start_replay(
+ mock_image_ctx, mock_journaler,
+- std::bind(&invoke_replay_complete, _1, 0));
++ std::bind(&invoke_replay_complete, std::placeholders::_1, 0));
+
+ expect_stop_replay(mock_journaler);
+ expect_shut_down_replay(mock_image_ctx, mock_journal_replay, 0);
+@@ -696,7 +695,7 @@ TEST_F(TestMockJournal, CorruptEntry) {
+ expect_get_max_append_size(mock_journaler, 1 << 16);
+ expect_start_replay(
+ mock_image_ctx, mock_journaler,
+- std::bind(&invoke_replay_ready, _1));
++ std::bind(&invoke_replay_ready, std::placeholders::_1));
+
+ ::journal::MockReplayEntry mock_replay_entry;
+ MockJournalReplay mock_journal_replay;
+@@ -713,7 +712,7 @@ TEST_F(TestMockJournal, CorruptEntry) {
+ expect_get_max_append_size(mock_journaler, 1 << 16);
+ expect_start_replay(
+ mock_image_ctx, mock_journaler,
+- std::bind(&invoke_replay_complete, _1, 0));
++ std::bind(&invoke_replay_complete, std::placeholders::_1, 0));
+ expect_stop_replay(mock_journaler);
+ expect_shut_down_replay(mock_image_ctx, mock_journal_replay, 0);
+ expect_start_append(mock_journaler);
+@@ -744,7 +743,7 @@ TEST_F(TestMockJournal, StopError) {
+ expect_get_max_append_size(mock_journaler, 1 << 16);
+ expect_start_replay(
+ mock_image_ctx, mock_journaler,
+- std::bind(&invoke_replay_complete, _1, 0));
++ std::bind(&invoke_replay_complete, std::placeholders::_1, 0));
+
+ MockJournalReplay mock_journal_replay;
+ expect_stop_replay(mock_journaler);
+@@ -777,7 +776,7 @@ TEST_F(TestMockJournal, ReplayOnDiskPreFlushError) {
+
+ expect_start_replay(
+ mock_image_ctx, mock_journaler,
+- std::bind(&invoke_replay_ready, _1));
++ std::bind(&invoke_replay_ready, std::placeholders::_1));
+
+ ::journal::MockReplayEntry mock_replay_entry;
+ MockJournalReplay mock_journal_replay;
+@@ -803,7 +802,7 @@ TEST_F(TestMockJournal, ReplayOnDiskPreFlushError) {
+ expect_get_max_append_size(mock_journaler, 1 << 16);
+ expect_start_replay(
+ mock_image_ctx, mock_journaler, {
+- std::bind(&invoke_replay_complete, _1, 0)
++ std::bind(&invoke_replay_complete, std::placeholders::_1, 0)
+ });
+
+ expect_stop_replay(mock_journaler);
+@@ -857,14 +856,14 @@ TEST_F(TestMockJournal, ReplayOnDiskPostFlushError) {
+ expect_get_max_append_size(mock_journaler, 1 << 16);
+ expect_start_replay(
+ mock_image_ctx, mock_journaler,
+- std::bind(&invoke_replay_ready, _1));
++ std::bind(&invoke_replay_ready, std::placeholders::_1));
+
+ ::journal::MockReplayEntry mock_replay_entry;
+ MockJournalReplay mock_journal_replay;
+ expect_try_pop_front(mock_image_ctx, mock_journaler, true, mock_replay_entry);
+ expect_replay_process(mock_journal_replay);
+ expect_try_pop_front(mock_image_ctx, mock_journaler, false, mock_replay_entry,
+- std::bind(&invoke_replay_complete, _1, 0));
++ std::bind(&invoke_replay_complete, std::placeholders::_1, 0));
+ expect_stop_replay(mock_journaler);
+
+ Context *on_flush = nullptr;
+@@ -880,7 +879,7 @@ TEST_F(TestMockJournal, ReplayOnDiskPostFlushError) {
+ expect_get_max_append_size(mock_journaler, 1 << 16);
+ expect_start_replay(
+ mock_image_ctx, mock_journaler,
+- std::bind(&invoke_replay_complete, _1, 0));
++ std::bind(&invoke_replay_complete, std::placeholders::_1, 0));
+
+ expect_stop_replay(mock_journaler);
+ expect_shut_down_replay(mock_image_ctx, mock_journal_replay, 0);
diff --git a/net/ceph12/files/patch-src_objectstore_store_test.cc b/net/ceph12/files/patch-src_objectstore_store_test.cc
new file mode 100644
index 000000000000..92997a78bba4
--- /dev/null
+++ b/net/ceph12/files/patch-src_objectstore_store_test.cc
@@ -0,0 +1,39 @@
+diff --git a/src/test/objectstore/store_test.cc b/src/test/objectstore/store_test.cc
+old mode 100644
+new mode 100755
+index 326c9785d0..8d39249360
+--- src/test/objectstore/store_test.cc
++++ src/test/objectstore/store_test.cc
+@@ -4313,7 +4313,7 @@ TEST_P(StoreTest, Synthetic) {
+ doSyntheticTest(store, 10000, 400*1024, 40*1024, 0);
+ }
+
+-
++#if defined(WITH_BLUESTORE)
+ TEST_P(StoreTestSpecificAUSize, SyntheticMatrixSharding) {
+ if (string(GetParam()) != "bluestore")
+ return;
+@@ -4485,6 +4485,7 @@ TEST_P(StoreTestSpecificAUSize, SyntheticMatrixPreferDeferred) {
+ };
+ do_matrix(m, store, doSyntheticTest);
+ }
++#endif // #if defined(WITH_BLUESTORE)
+
+ TEST_P(StoreTest, AttrSynthetic) {
+ ObjectStore::Sequencer osr("test");
+@@ -6855,6 +6856,7 @@ TEST_P(StoreTestSpecificAUSize, fsckOnUnalignedDevice2) {
+ g_conf->apply_changes(NULL);
+ }
+
++#if defined(WITH_BLUESTORE)
+ TEST_P(StoreTest, SpuriousReadErrorTest) {
+ if (string(GetParam()) != "bluestore")
+ return;
+@@ -6921,6 +6923,7 @@ TEST_P(StoreTest, SpuriousReadErrorTest) {
+ g_conf->set_val("bluestore_debug_inject_csum_err_probability", "0");
+ g_ceph_context->_conf->apply_changes(nullptr);
+ }
++#endif // #if defined(WITH_BLUESTORE)
+
+ int main(int argc, char **argv) {
+ vector<const char*> args;
diff --git a/net/ceph12/files/patch-src_rgw_CMakeLists.txt b/net/ceph12/files/patch-src_rgw_CMakeLists.txt
new file mode 100644
index 000000000000..5dd91d79b4c0
--- /dev/null
+++ b/net/ceph12/files/patch-src_rgw_CMakeLists.txt
@@ -0,0 +1,13 @@
+diff --git a/src/rgw/CMakeLists.txt b/src/rgw/CMakeLists.txt
+index 57cb2a5b94..57a9ceb78b 100644
+--- src/rgw/CMakeLists.txt
++++ src/rgw/CMakeLists.txt
+@@ -182,7 +182,7 @@ if (WITH_RADOSGW_BEAST_FRONTEND AND WITH_RADOSGW_BEAST_OPENSSL)
+ endif()
+
+ add_executable(radosgw rgw_main.cc)
+-target_link_libraries(radosgw radosgw_a librados
++target_link_libraries(radosgw radosgw_a rgw_a librados
+ cls_rgw_client cls_lock_client cls_refcount_client
+ cls_log_client cls_statelog_client cls_timeindex_client
+ cls_version_client cls_replica_log_client cls_user_client
diff --git a/net/ceph12/files/patch-src_rgw_rgw_sync_module_es.cc b/net/ceph12/files/patch-src_rgw_rgw_sync_module_es.cc
new file mode 100644
index 000000000000..661d055d8ca6
--- /dev/null
+++ b/net/ceph12/files/patch-src_rgw_rgw_sync_module_es.cc
@@ -0,0 +1,13 @@
+diff --git a/src/rgw/rgw_sync_module_es.cc b/src/rgw/rgw_sync_module_es.cc
+index aa58219b5a..de4200d75e 100644
+--- src/rgw/rgw_sync_module_es.cc
++++ src/rgw/rgw_sync_module_es.cc
+@@ -244,7 +244,7 @@ struct es_index_config {
+ };
+
+ static bool is_sys_attr(const std::string& attr_name){
+- static constexpr std::initializer_list<const char*> rgw_sys_attrs = {RGW_ATTR_PG_VER,
++ static const std::initializer_list<const char*> rgw_sys_attrs = {RGW_ATTR_PG_VER,
+ RGW_ATTR_SOURCE_ZONE,
+ RGW_ATTR_ID_TAG,
+ RGW_ATTR_TEMPURL_KEY1,
diff --git a/net/ceph12/files/patch-src_tools_ceph__kvstore__tool.cc b/net/ceph12/files/patch-src_tools_ceph__kvstore__tool.cc
new file mode 100644
index 000000000000..41cc5db2f46a
--- /dev/null
+++ b/net/ceph12/files/patch-src_tools_ceph__kvstore__tool.cc
@@ -0,0 +1,27 @@
+--- src/tools/ceph_kvstore_tool.cc.orig 2018-02-26 21:47:18 UTC
++++ src/tools/ceph_kvstore_tool.cc
+@@ -36,7 +36,9 @@ using namespace std;
+
+ class StoreTool
+ {
++#ifdef HAVE_LIBAIO
+ boost::scoped_ptr<BlueStore> bluestore;
++#endif
+
+ // TODO: make KeyValueDB enable_shared_from_this
+ // bluestore will hold *db* also, use unique_ptr/shared_ptr will
+@@ -74,10 +76,13 @@ class StoreTool
+ }
+
+ ~StoreTool() {
++#ifdef HAVE_LIBAIO
+ if (bluestore) {
+ bluestore->umount();
+ }
+- else {
++ else
++#endif
++ {
+ if (db) {
+ delete db;
+ }
diff --git a/net/ceph12/pkg-descr b/net/ceph12/pkg-descr
new file mode 100644
index 000000000000..36f0aa7439a7
--- /dev/null
+++ b/net/ceph12/pkg-descr
@@ -0,0 +1,21 @@
+Ceph is a distributed object store and file system designed to provide
+excellent performance, reliability and scalability.
+
+* Object Storage
+ Ceph provides seamless access to objects using native language bindings or
+ radosgw, a REST interface for applications written with S3 and Swift.
+* Block Storage
+ Ceph's RADOS Block Device (RBD) provides access to block device images
+ that are striped and replicated across the entire storage cluster.
+* File System
+ Ceph provides a POSIX-compliant network file system aiming for large data
+ storage, high performance, and maximum compatibility with legacy applications.
+
+This FreeBSD build will build most of the tools in Ceph:
+* Mon, OSD, rados, RadosGW, rbd
+* init-ceph, and etc/rc.d/ceph on top of that
+* ceph-disk {prepare, activate}
+With these tools one can build a multi server, multi osd cluster fully
+running on FreeBSD and do some testing...
+
+WWW: https://ceph.com/
diff --git a/net/ceph12/pkg-plist b/net/ceph12/pkg-plist
new file mode 100644
index 000000000000..d9f674ad54ef
--- /dev/null
+++ b/net/ceph12/pkg-plist
@@ -0,0 +1,390 @@
+bin/ceph
+bin/ceph-authtool
+bin/ceph-brag
+bin/ceph-clsinfo
+bin/ceph-conf
+bin/ceph-coverage
+bin/ceph-crush-location
+bin/ceph-debugpack
+bin/ceph-dencoder
+bin/ceph-detect-init
+bin/ceph-fuse
+bin/ceph-kvstore-tool
+bin/ceph-mds
+bin/ceph-mgr
+bin/ceph-mon
+bin/ceph-monstore-tool
+bin/ceph-objectstore-tool
+bin/ceph-osd
+bin/ceph-osdomap-tool
+bin/ceph-post-file
+bin/ceph-rbdnamer
+bin/ceph-rest-api
+bin/ceph-run
+bin/ceph_erasure_code
+bin/ceph_erasure_code_benchmark
+bin/ceph_objectstore_bench
+bin/ceph_omapbench
+bin/ceph_radosacl
+bin/ceph_rgw_jsonparser
+bin/ceph_rgw_multiparser
+bin/ceph_scratchtool
+bin/crushtool
+bin/init-ceph
+bin/librados-config
+bin/monmaptool
+bin/osdmaptool
+bin/rados
+bin/radosgw
+bin/radosgw-admin
+bin/radosgw-es
+bin/radosgw-object-expirer
+bin/radosgw-token
+bin/rbd
+bin/rbd-fuse
+bin/rbd-ggate
+bin/rbd-mirror
+bin/rbd-replay
+bin/rbd-replay-many
+bin/rbdmap
+etc/bash_completion.d/ceph
+etc/bash_completion.d/rados
+etc/bash_completion.d/radosgw-admin
+etc/bash_completion.d/rbd
+%%ETCDIR%%/ceph.conf.sample
+include/rados/buffer.h
+include/rados/buffer_fwd.h
+include/rados/crc32c.h
+include/rados/inline_memory.h
+include/rados/librados.h
+include/rados/librados.hpp
+include/rados/librgw.h
+include/rados/memory.h
+include/rados/objclass.h
+include/rados/page.h
+include/rados/rados_types.h
+include/rados/rados_types.hpp
+include/rados/rgw_file.h
+include/radosstriper/libradosstriper.h
+include/radosstriper/libradosstriper.hpp
+include/rbd/features.h
+include/rbd/librbd.h
+include/rbd/librbd.hpp
+lib/ceph/ceph-monstore-update-crush.sh
+lib/ceph/compressor/libceph_snappy.so
+lib/ceph/compressor/libceph_snappy.so.2
+lib/ceph/compressor/libceph_snappy.so.2.0.0
+lib/ceph/compressor/libceph_zlib.so
+lib/ceph/compressor/libceph_zlib.so.2
+lib/ceph/compressor/libceph_zlib.so.2.0.0
+lib/ceph/compressor/libceph_zstd.so
+lib/ceph/compressor/libceph_zstd.so.2
+lib/ceph/compressor/libceph_zstd.so.2.0.0
+lib/ceph/crypto/libceph_crypto_isal.so
+lib/ceph/crypto/libceph_crypto_isal.so.1
+lib/ceph/crypto/libceph_crypto_isal.so.1.0.0
+lib/ceph/erasure-code/libec_isa.so
+lib/ceph/erasure-code/libec_jerasure.so
+lib/ceph/erasure-code/libec_jerasure_generic.so
+lib/ceph/erasure-code/libec_jerasure_sse3.so
+lib/ceph/erasure-code/libec_jerasure_sse4.so
+lib/ceph/erasure-code/libec_lrc.so
+lib/ceph/erasure-code/libec_shec.so
+lib/ceph/erasure-code/libec_shec_generic.so
+lib/ceph/erasure-code/libec_shec_sse3.so
+lib/ceph/erasure-code/libec_shec_sse4.so
+lib/ceph/libceph-common.so
+lib/ceph/libceph-common.so.0
+lib/ceph/mgr/.gitignore
+lib/ceph/mgr/balancer/__init__.py
+lib/ceph/mgr/balancer/module.py
+lib/ceph/mgr/dashboard/HACKING.rst
+lib/ceph/mgr/dashboard/README.rst
+lib/ceph/mgr/dashboard/__init__.py
+lib/ceph/mgr/dashboard/base.html
+lib/ceph/mgr/dashboard/cephfs_clients.py
+lib/ceph/mgr/dashboard/clients.html
+lib/ceph/mgr/dashboard/config_options.html
+lib/ceph/mgr/dashboard/filesystem.html
+lib/ceph/mgr/dashboard/health.html
+lib/ceph/mgr/dashboard/module.py
+lib/ceph/mgr/dashboard/osd_perf.html
+lib/ceph/mgr/dashboard/osds.html
+lib/ceph/mgr/dashboard/rbd_iscsi.html
+lib/ceph/mgr/dashboard/rbd_iscsi.py
+lib/ceph/mgr/dashboard/rbd_ls.py
+lib/ceph/mgr/dashboard/rbd_mirroring.html
+lib/ceph/mgr/dashboard/rbd_mirroring.py
+lib/ceph/mgr/dashboard/rbd_pool.html
+lib/ceph/mgr/dashboard/remote_view_cache.py
+lib/ceph/mgr/dashboard/servers.html
+lib/ceph/mgr/dashboard/standby.html
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/.gitignore
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/.jshintrc
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/LICENSE
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/README.md
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/bootstrap/css/bootstrap.min.css
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/bootstrap/css/bootstrap.min.css.map
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/bootstrap/fonts/glyphicons-halflings-regular.woff
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/bootstrap/fonts/glyphicons-halflings-regular.woff2
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/bootstrap/js/bootstrap.min.js
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/dist/css/AdminLTE.min.css
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/dist/css/skins/_all-skins.min.css
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/dist/css/skins/skin-black-light.min.css
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/dist/css/skins/skin-black.min.css
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/dist/css/skins/skin-blue-light.min.css
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/dist/css/skins/skin-blue.min.css
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/dist/css/skins/skin-green-light.min.css
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/dist/css/skins/skin-green.min.css
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/dist/css/skins/skin-purple-light.min.css
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/dist/css/skins/skin-purple.min.css
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/dist/css/skins/skin-red-light.min.css
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/dist/css/skins/skin-red.min.css
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/dist/css/skins/skin-yellow-light.min.css
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/dist/css/skins/skin-yellow.min.css
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/dist/img/boxed-bg.jpg
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/dist/img/boxed-bg.png
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/dist/img/default-50x50.gif
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/dist/img/icons.png
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/dist/js/app.min.js
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/plugins/chartjs/Chart.js
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/plugins/chartjs/Chart.min.js
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/plugins/datatables/dataTables.bootstrap.min.js
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/plugins/datatables/images/sort_asc.png
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/plugins/datatables/images/sort_asc_disabled.png
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/plugins/datatables/images/sort_both.png
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/plugins/datatables/images/sort_desc.png
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/plugins/datatables/images/sort_desc_disabled.png
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/plugins/datatables/jquery.dataTables.min.css
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/plugins/datatables/jquery.dataTables.min.js
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/plugins/datatables/jquery.dataTables_themeroller.css
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/plugins/ionslider/img/sprite-skin-flat.png
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/plugins/ionslider/img/sprite-skin-nice.png
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/plugins/ionslider/ion.rangeSlider.css
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/plugins/ionslider/ion.rangeSlider.min.js
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/plugins/ionslider/ion.rangeSlider.skinFlat.css
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/plugins/ionslider/ion.rangeSlider.skinNice.css
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/plugins/jQuery/jquery-2.2.3.min.js
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/plugins/sparkline/jquery.sparkline.js
+lib/ceph/mgr/dashboard/static/AdminLTE-2.3.7/plugins/sparkline/jquery.sparkline.min.js
+lib/ceph/mgr/dashboard/static/Ceph_Logo_Standard_RGB_White_120411_fa.png
+lib/ceph/mgr/dashboard/static/favicon.ico
+lib/ceph/mgr/dashboard/static/libs/Chart.js/2.4.0/Chart.min.js
+lib/ceph/mgr/dashboard/static/libs/Chart.js/LICENSE.md
+lib/ceph/mgr/dashboard/static/libs/font-awesome/4.7.0/HELP-US-OUT.txt
+lib/ceph/mgr/dashboard/static/libs/font-awesome/4.7.0/css/font-awesome.min.css
+lib/ceph/mgr/dashboard/static/libs/font-awesome/4.7.0/fonts/fontawesome-webfont.woff
+lib/ceph/mgr/dashboard/static/libs/font-awesome/4.7.0/fonts/fontawesome-webfont.woff2
+lib/ceph/mgr/dashboard/static/libs/font-awesome/COPYING
+lib/ceph/mgr/dashboard/static/libs/moment.js/2.17.1/moment.min.js
+lib/ceph/mgr/dashboard/static/libs/rivets/0.9.6/rivets.bundled.min.js
+lib/ceph/mgr/dashboard/static/libs/underscore.js/1.8.3/underscore-min.js
+lib/ceph/mgr/dashboard/static/logo-mini.png
+lib/ceph/mgr/dashboard/types.py
+lib/ceph/mgr/influx/__init__.py
+lib/ceph/mgr/influx/module.py
+lib/ceph/mgr/localpool/__init__.py
+lib/ceph/mgr/localpool/module.py
+lib/ceph/mgr/mgr_module.py
+lib/ceph/mgr/prometheus/__init__.py
+lib/ceph/mgr/prometheus/module.py
+lib/ceph/mgr/restful/__init__.py
+lib/ceph/mgr/restful/api/__init__.py
+lib/ceph/mgr/restful/api/config.py
+lib/ceph/mgr/restful/api/crush.py
+lib/ceph/mgr/restful/api/doc.py
+lib/ceph/mgr/restful/api/mon.py
+lib/ceph/mgr/restful/api/osd.py
+lib/ceph/mgr/restful/api/pool.py
+lib/ceph/mgr/restful/api/request.py
+lib/ceph/mgr/restful/api/server.py
+lib/ceph/mgr/restful/common.py
+lib/ceph/mgr/restful/decorators.py
+lib/ceph/mgr/restful/hooks.py
+lib/ceph/mgr/restful/module.py
+lib/ceph/mgr/selftest/__init__.py
+lib/ceph/mgr/selftest/module.py
+lib/ceph/mgr/status/__init__.py
+lib/ceph/mgr/status/module.py
+lib/ceph/mgr/zabbix/__init__.py
+lib/ceph/mgr/zabbix/module.py
+lib/ceph/mgr/zabbix/zabbix_template.xml
+lib/librados.so
+lib/librados.so.2
+lib/librados.so.2.0.0
+lib/libradosstriper.so
+lib/libradosstriper.so.1
+lib/libradosstriper.so.1.0.0
+lib/librbd.so
+lib/librbd.so.1
+lib/librbd.so.1.12.0
+lib/librgw.so
+lib/librgw.so.2
+lib/librgw.so.2.0.0
+%%PYTHON_SITELIBDIR%%/ceph_argparse.py
+%%PYTHON_SITELIBDIR%%/ceph_daemon.py
+%%PYTHON_SITELIBDIR%%/ceph_detect_init-1.0.1-py%%PYTHON_VER%%.egg-info/PKG-INFO
+%%PYTHON_SITELIBDIR%%/ceph_detect_init-1.0.1-py%%PYTHON_VER%%.egg-info/SOURCES.txt
+%%PYTHON_SITELIBDIR%%/ceph_detect_init-1.0.1-py%%PYTHON_VER%%.egg-info/dependency_links.txt
+%%PYTHON_SITELIBDIR%%/ceph_detect_init-1.0.1-py%%PYTHON_VER%%.egg-info/entry_points.txt
+%%PYTHON_SITELIBDIR%%/ceph_detect_init-1.0.1-py%%PYTHON_VER%%.egg-info/requires.txt
+%%PYTHON_SITELIBDIR%%/ceph_detect_init-1.0.1-py%%PYTHON_VER%%.egg-info/top_level.txt
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/__init__.py
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/__init__.pyc
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/alpine/__init__.py
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/alpine/__init__.pyc
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/arch/__init__.py
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/arch/__init__.pyc
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/centos/__init__.py
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/centos/__init__.pyc
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/debian/__init__.py
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/debian/__init__.pyc
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/docker/__init__.py
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/docker/__init__.pyc
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/exc.py
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/exc.pyc
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/fedora/__init__.py
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/fedora/__init__.pyc
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/freebsd/__init__.py
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/freebsd/__init__.pyc
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/gentoo/__init__.py
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/gentoo/__init__.pyc
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/main.py
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/main.pyc
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/oraclevms/__init__.py
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/oraclevms/__init__.pyc
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/rhel/__init__.py
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/rhel/__init__.pyc
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/suse/__init__.py
+%%PYTHON_SITELIBDIR%%/ceph_detect_init/suse/__init__.pyc
+%%PYTHON_SITELIBDIR%%/ceph_disk-1.0.0-py%%PYTHON_VER%%.egg-info/PKG-INFO
+%%PYTHON_SITELIBDIR%%/ceph_disk-1.0.0-py%%PYTHON_VER%%.egg-info/SOURCES.txt
+%%PYTHON_SITELIBDIR%%/ceph_disk-1.0.0-py%%PYTHON_VER%%.egg-info/dependency_links.txt
+%%PYTHON_SITELIBDIR%%/ceph_disk-1.0.0-py%%PYTHON_VER%%.egg-info/entry_points.txt
+%%PYTHON_SITELIBDIR%%/ceph_disk-1.0.0-py%%PYTHON_VER%%.egg-info/requires.txt
+%%PYTHON_SITELIBDIR%%/ceph_disk-1.0.0-py%%PYTHON_VER%%.egg-info/top_level.txt
+%%PYTHON_SITELIBDIR%%/ceph_disk/__init__.py
+%%PYTHON_SITELIBDIR%%/ceph_disk/__init__.pyc
+%%PYTHON_SITELIBDIR%%/ceph_disk/main.py
+%%PYTHON_SITELIBDIR%%/ceph_disk/main.pyc
+%%PYTHON_SITELIBDIR%%/ceph_rest_api.py
+%%PYTHON_SITELIBDIR%%/ceph_volume_client.py
+%%PYTHON_SITELIBDIR%%/rados-2.0.0-py%%PYTHON_VER%%.egg-info/PKG-INFO
+%%PYTHON_SITELIBDIR%%/rados-2.0.0-py%%PYTHON_VER%%.egg-info/SOURCES.txt
+%%PYTHON_SITELIBDIR%%/rados-2.0.0-py%%PYTHON_VER%%.egg-info/dependency_links.txt
+%%PYTHON_SITELIBDIR%%/rados-2.0.0-py%%PYTHON_VER%%.egg-info/top_level.txt
+%%PYTHON_SITELIBDIR%%/rados.so
+%%PYTHON_SITELIBDIR%%/rbd-2.0.0-py%%PYTHON_VER%%.egg-info/PKG-INFO
+%%PYTHON_SITELIBDIR%%/rbd-2.0.0-py%%PYTHON_VER%%.egg-info/SOURCES.txt
+%%PYTHON_SITELIBDIR%%/rbd-2.0.0-py%%PYTHON_VER%%.egg-info/dependency_links.txt
+%%PYTHON_SITELIBDIR%%/rbd-2.0.0-py%%PYTHON_VER%%.egg-info/top_level.txt
+%%PYTHON_SITELIBDIR%%/rbd.so
+%%PYTHON_SITELIBDIR%%/rgw-2.0.0-py%%PYTHON_VER%%.egg-info/PKG-INFO
+%%PYTHON_SITELIBDIR%%/rgw-2.0.0-py%%PYTHON_VER%%.egg-info/SOURCES.txt
+%%PYTHON_SITELIBDIR%%/rgw-2.0.0-py%%PYTHON_VER%%.egg-info/dependency_links.txt
+%%PYTHON_SITELIBDIR%%/rgw-2.0.0-py%%PYTHON_VER%%.egg-info/top_level.txt
+%%PYTHON_SITELIBDIR%%/rgw.so
+lib/rados-classes/libcls_hello.so
+lib/rados-classes/libcls_hello.so.1
+lib/rados-classes/libcls_hello.so.1.0.0
+lib/rados-classes/libcls_journal.so
+lib/rados-classes/libcls_journal.so.1
+lib/rados-classes/libcls_journal.so.1.0.0
+lib/rados-classes/libcls_lock.so
+lib/rados-classes/libcls_lock.so.1
+lib/rados-classes/libcls_lock.so.1.0.0
+lib/rados-classes/libcls_log.so
+lib/rados-classes/libcls_log.so.1
+lib/rados-classes/libcls_log.so.1.0.0
+lib/rados-classes/libcls_lua.so
+lib/rados-classes/libcls_lua.so.1
+lib/rados-classes/libcls_lua.so.1.0.0
+lib/rados-classes/libcls_numops.so
+lib/rados-classes/libcls_numops.so.1
+lib/rados-classes/libcls_numops.so.1.0.0
+lib/rados-classes/libcls_rbd.so
+lib/rados-classes/libcls_rbd.so.1
+lib/rados-classes/libcls_rbd.so.1.0.0
+lib/rados-classes/libcls_refcount.so
+lib/rados-classes/libcls_refcount.so.1
+lib/rados-classes/libcls_refcount.so.1.0.0
+lib/rados-classes/libcls_replica_log.so
+lib/rados-classes/libcls_replica_log.so.1
+lib/rados-classes/libcls_replica_log.so.1.0.0
+lib/rados-classes/libcls_rgw.so
+lib/rados-classes/libcls_rgw.so.1
+lib/rados-classes/libcls_rgw.so.1.0.0
+lib/rados-classes/libcls_sdk.so
+lib/rados-classes/libcls_sdk.so.1
+lib/rados-classes/libcls_sdk.so.1.0.0
+lib/rados-classes/libcls_statelog.so
+lib/rados-classes/libcls_statelog.so.1
+lib/rados-classes/libcls_statelog.so.1.0.0
+lib/rados-classes/libcls_timeindex.so
+lib/rados-classes/libcls_timeindex.so.1
+lib/rados-classes/libcls_timeindex.so.1.0.0
+lib/rados-classes/libcls_user.so
+lib/rados-classes/libcls_user.so.1
+lib/rados-classes/libcls_user.so.1.0.0
+lib/rados-classes/libcls_version.so
+lib/rados-classes/libcls_version.so.1
+lib/rados-classes/libcls_version.so.1.0.0
+libexec/ceph/ceph-osd-prestart.sh
+libexec/ceph/ceph_common.sh
+man/man8/ceph-authtool.8.gz
+man/man8/ceph-bluestore-tool.8.gz
+man/man8/ceph-clsinfo.8.gz
+man/man8/ceph-conf.8.gz
+man/man8/ceph-create-keys.8.gz
+man/man8/ceph-debugpack.8.gz
+man/man8/ceph-dencoder.8.gz
+man/man8/ceph-deploy.8.gz
+man/man8/ceph-detect-init.8.gz
+man/man8/ceph-disk.8.gz
+man/man8/ceph-fuse.8.gz
+man/man8/ceph-kvstore-tool.8.gz
+man/man8/ceph-mds.8.gz
+man/man8/ceph-mon.8.gz
+man/man8/ceph-osd.8.gz
+man/man8/ceph-post-file.8.gz
+man/man8/ceph-rbdnamer.8.gz
+man/man8/ceph-rest-api.8.gz
+man/man8/ceph-run.8.gz
+man/man8/ceph-syn.8.gz
+man/man8/ceph.8.gz
+man/man8/crushtool.8.gz
+man/man8/librados-config.8.gz
+man/man8/monmaptool.8.gz
+man/man8/mount.ceph.8.gz
+man/man8/osdmaptool.8.gz
+man/man8/rados.8.gz
+man/man8/radosgw-admin.8.gz
+man/man8/radosgw.8.gz
+man/man8/rbd-fuse.8.gz
+man/man8/rbd-ggate.8.gz
+man/man8/rbd-mirror.8.gz
+man/man8/rbd-replay-many.8.gz
+man/man8/rbd-replay-prep.8.gz
+man/man8/rbd-replay.8.gz
+man/man8/rbd.8.gz
+man/man8/rbdmap.8.gz
+sbin/ceph-create-keys
+sbin/ceph-disk
+sbin/mount.fuse.ceph
+%%DATADIR%%/id_rsa_drop.ceph.com
+%%DATADIR%%/id_rsa_drop.ceph.com.pub
+%%DATADIR%%/known_hosts_drop.ceph.com
+@dir /var/lib/ceph/bootstrap-mds
+@dir /var/lib/ceph/bootstrap-mgr
+@dir /var/lib/ceph/bootstrap-osd
+@dir /var/lib/ceph/bootstrap-rgw
+@dir /var/lib/ceph/mds
+@dir /var/lib/ceph/mgr
+@dir /var/lib/ceph/mon
+@dir /var/lib/ceph/osd
+@dir /var/lib/ceph/radosgw
+@dir /var/lib/ceph/tmp
+@dir /var/lib/ceph
+@dir /var/lib
+@dir /var/log/ceph
+@dir /var/run/ceph