aboutsummaryrefslogtreecommitdiffstats
path: root/testing/ceph
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2019-03-12 19:55:42 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2019-03-12 19:56:01 +0000
commitf07a49721b1899daf3946af4168524cdabfc61ce (patch)
tree779ab7519a0b8e8814b0188cf22a39b4515e5eff /testing/ceph
parentbadb79b87ca2e6f70e31dfdcb9004160ee5f65af (diff)
downloadaports-f07a49721b1899daf3946af4168524cdabfc61ce.tar.bz2
aports-f07a49721b1899daf3946af4168524cdabfc61ce.tar.xz
testing/ceph: upgrade to 14.1.0
Diffstat (limited to 'testing/ceph')
-rw-r--r--testing/ceph/APKBUILD288
-rw-r--r--testing/ceph/boost-1.67.patch164
-rw-r--r--testing/ceph/boost-python.patch26
-rw-r--r--testing/ceph/make-sure-PATH_MAX-is-defined.patch19
-rw-r--r--testing/ceph/musl-fixes.patch229
5 files changed, 349 insertions, 377 deletions
diff --git a/testing/ceph/APKBUILD b/testing/ceph/APKBUILD
index 4e55fa287c..74d5f9e764 100644
--- a/testing/ceph/APKBUILD
+++ b/testing/ceph/APKBUILD
@@ -1,7 +1,7 @@
# Contributor: John Coyle <dx9err@gmail.com>
# Maintainer: John Coyle <dx9err@gmail.com>
pkgname=ceph
-pkgver=11.1.1
+pkgver=14.1.0
pkgrel=0
pkgdesc="Ceph is a distributed object store and file system"
pkgusers="ceph"
@@ -11,6 +11,17 @@ arch="x86_64"
license="LGPL-2.1 and CC-BY-SA-1.0 and GPL-2.0 and BSL-1.0 and GPL-2.0-with-autoconf-exception and BSD-3-Clause and MIT"
depends="ceph-osd ceph-mds ceph-mon"
options="!checkroot"
+_base_deps="
+ cryptsetup
+ e2fsprogs
+ logrotate
+ parted
+ py2-requests py2-setuptools
+ util-linux
+ xfsprogs
+ "
+_osd_deps="lvm2 sudo"
+_ceph_test_deps="xmlstarlet"
makedepends="
acl-dev
argp-standalone
@@ -20,8 +31,9 @@ makedepends="
bzip2-dev
cmake
coreutils
- cryptsetup
+ cunit-dev
curl-dev
+ cython
cython-dev
diffutils
eudev-dev
@@ -44,57 +56,53 @@ makedepends="
libxml2-dev
linux-headers
lvm2-dev
+ lz4-dev
nss-dev
openldap-dev
- parted
procps
- python-dev
- py-pip
- py-nose
+ python2-dev
+ py2-pip
+ py2-nose
py-sphinx
- py-virtualenv
+ py2-virtualenv
+ rabbitmq-c-dev
readline-dev
rpcgen
snappy-dev
userspace-rcu-dev
- util-linux
xfsprogs-dev
xmlstarlet
yasm
+ $_base_deps
+ $_osd_deps
+ $_ceph_test_deps
"
source="http://download.ceph.com/tarballs/ceph_$pkgver.orig.tar.gz
- boost-python.patch
- boost-1.67.patch
- allperms.patch"
+ allperms.patch
+ musl-fixes.patch
+ "
subpackages="
+ $pkgname-doc
$pkgname-base
$pkgname-common
$pkgname-mds
$pkgname-mgr
$pkgname-mon
$pkgname-fuse:ceph_fuse
- $pkgname-radosgw
$pkgname-osd
- $pkgname-doc
$pkgname-bash-completion:bash_completion
+ $pkgname-dev
rbd-fuse:rbd_fuse
rbd-mirror:rbd_mirror
rbd-nbd:rbd_nbd
librbd
- librbd-dev:librbd_dev
libcephfs
- libcephfs-dev:libcephfs_dev
librados
- librados-dev:librados_dev
- librgw
- librgw-dev:librgw_dev
- py-rados:py_rados
- py-rgw:py_rgw
+ py2-rados:_py2_rados
libradosstriper
- libradosstriper-dev:libradosstriper_dev
- py-rbd:py_rbd
- py-cephfs:py_cephfs
+ py2-rbd:_py2_rbd
+ py2-cephfs:_py2_cephfs
"
_ceph_uid=167
@@ -113,7 +121,10 @@ _sbindir=/usr/sbin
_sysconfdir=/etc
_udevrulesdir=/etc/udev/rules.d
-_python_sitelib=/usr/lib/python2.7/site-packages
+
+_py2_sitelib() {
+ python2 -c "import site; print(site.getsitepackages()[0])"
+}
build() {
export CEPH_BUILD_VIRTUALENV="$builddir"
@@ -132,10 +143,17 @@ build() {
-DWITH_REENTRANT_STRSIGNAL=ON \
-DWITH_THREAD_SAFE_RES_QUERY=ON \
-DWITH_MANPAGE=ON \
+ -DWITH_SYSTEM_BOOST=ON \
+ -DWITH_PYTHON2=ON \
-DWITH_PYTHON3=OFF \
+ -DMGR_PYTHON_VERSION=2 \
-DWITH_LTTNG=OFF \
- -DWITH_SYSTEM_BOOST=ON \
+ -DWITH_RDMA=OFF \
+ -DWITH_RADOSGW=OFF \
+ -DWITH_BABELTRACE=OFF \
+ -DWITH_SYSTEMD=OFF \
-DWITH_EMBEDDED=OFF \
+ -DWITH_MGR_DASHBOARD_FRONTEND=OFF \
-DWITH_TESTS=OFF
make
@@ -149,18 +167,15 @@ package() {
rm -f "$pkgdir"$_sysconfdir/init.d/ceph
install -m 0644 -D src/etc-rbdmap "$pkgdir"$_sysconfdir/ceph/rbdmap
-
install -m 0644 -D src/logrotate.conf "$pkgdir"$_sysconfdir/logrotate.d/ceph
-
+ install -m 0644 -D etc/sysctl/90-ceph-osd.conf "$pkgdir"/$_sysconfdir/sysctl.d/90-ceph-osd.conf
chmod 0644 "$pkgdir"$_docdir/ceph/sample.ceph.conf
- chmod 0644 "$pkgdir"$_docdir/ceph/sample.fetch_config
# udev rules
install -m 0644 -D udev/50-rbd.rules "$pkgdir"$_udevrulesdir/50-rbd.rules
- install -m 0644 -D udev/60-ceph-by-parttypeuuid.rules \
- "$pkgdir"$_udevrulesdir/60-ceph-by-parttypeuuid.rules
- install -m 0644 -D udev/95-ceph-osd.rules \
- "$pkgdir"$_udevrulesdir/95-ceph-osd.rules
+
+ # sudoers.d
+ install -m 0600 -D sudoers.d/ceph-osd-smartctl "$pkgdir"/$_sysconfdir/sudoers.d/ceph-osd-smartctl
}
check() {
@@ -170,30 +185,32 @@ check() {
base() {
pkgdesc="Base is the package that includes all the files shared amongst ceph servers"
- depends="
- ceph-common
- cryptsetup
- librbd
- librados
- libcephfs
- librgw
- logrotate
- py-requests
- py-setuptools
- util-linux
- xfsprogs
+ depends="$_base_deps
+ ceph-common=$pkgver-r$pkgrel
+ librbd=$pkgver-r$pkgrel
+ librados=$pkgver-r$pkgrel
+ libcephfs=$pkgver-r$pkgrel
"
- _pkg $_docdir/ceph sample.ceph.conf sample.fetch_config
- _pkg $_bindir crushtool monmaptool osdmaptool ceph-run ceph-detect-init
- _pkg $_sbindir ceph-create-keys mount.ceph
+ _pkg $_bindir \
+ ceph-crash \
+ crushtool \
+ monmaptool \
+ osdmaptool \
+ ceph-kvstore-tool \
+ ceph-run
+ _pkg $_sbindir ceph-create-keys
_pkg $_libexecdir/ceph ceph_common.sh
- _pkg $_libdir/rados-classes *.so*
- _pkg $_libdir/ceph/erasure-code libec_*.so*
- _pkg $_libdir/ceph/compressor libceph_*.so*
+ _pkg $_libdir/rados-classes '*.so*'
+ _pkg $_libdir/ceph/erasure-code 'libec_*.so*'
+ _pkg $_libdir/ceph/compressor 'libceph_*.so*'
+ _pkg $_libdir/ceph/crypto 'libceph_*.so*'
_pkg $_sysconfdir/logrotate.d ceph
- _pkg $_python_sitelib ceph_detect_init* ceph_disk*
- for dir in tmp bootstrap-osd bootstrap-mds bootstrap-rgw; do
+ _pkg "$(_py2_sitelib)" ceph_volume 'ceph_volume-*'
+ for dir in crash crash/posted tmp bootstrap-osd bootstrap-mds \
+ bootstrap-rgw bootstrap-mgr bootstrap-rbd \
+ bootstrap-rbd-mirror; do
+
install -m 750 -o $_ceph_uid -g $_ceph_gid -d \
"$subpkgdir"$_localstatedir/lib/ceph/$dir
done
@@ -201,7 +218,7 @@ base() {
common() {
pkgdesc="Common utilities to mount and interact with a ceph storage cluster."
- depends="py-rados py-rbd py-cephfs"
+ depends="py2-rados py2-rbd py2-cephfs"
install="$pkgname-common.pre-install"
_pkg $_bindir ceph \
@@ -210,7 +227,6 @@ common() {
ceph-dencoder \
ceph-rbdnamer \
ceph-syn \
- ceph-crush-location \
cephfs-data-scan \
cephfs-journal-tool \
cephfs-table-tool \
@@ -219,12 +235,15 @@ common() {
rbd-replay \
rbd-replay-many \
rbdmap \
- ceph-post-file \
- ceph-brag
- _pkg $_datadir/ceph known_hosts_drop.ceph.com id_rsa_drop.ceph.com \
+ ceph-post-file
+ _pkg $_sbindir mount.ceph
+ _pkg $_datadir/ceph known_hosts_drop.ceph.com \
+ id_rsa_drop.ceph.com \
id_rsa_drop.ceph.com.pub
_pkg $_sysconfdir/ceph rbdmap
- _pkg $_python_sitelib ceph_argparse.py* ceph_daemon.py*
+
+ _pkg "$(_py2_sitelib)" ceph_argparse.py* ceph_daemon.py*
+
_pkg $_udevrulesdir 50-rbd.rules
install -m 3770 -o $_ceph_uid -g $_ceph_gid -d \
"$subpkgdir"$_localstatedir/log/ceph
@@ -245,174 +264,104 @@ mon() {
pkgdesc="Cluster monitor daemon for the Ceph distributed file system."
depends="ceph-base"
- _pkg $_bindir ceph-mon ceph-rest-api
- _pkg $_python_sitelib ceph_rest_api.py*
+ _pkg $_bindir ceph-mon \
+ ceph-monstore-tool
install -m 750 -o $_ceph_uid -g $_ceph_gid -d \
"$subpkgdir"$_localstatedir/lib/ceph/mon
}
ceph_fuse() {
pkgdesc="FUSE based client for Ceph distributed network file system."
-
+ depends=
_pkg $_bindir ceph-fuse
_pkg $_sbindir mount.fuse.ceph
}
rbd_fuse() {
pkgdesc="FUSE based client to map Ceph rbd images to files."
- depends="librados librbd"
-
+ depends=
_pkg $_bindir rbd-fuse
}
rbd_mirror() {
pkgdesc="Daemon for mirroring RBD images between Ceph clusters."
- depends="ceph-common librados"
-
+ depends="ceph-common=$pkgver-r$pkgrel"
_pkg $_bindir rbd-mirror
}
rbd_nbd() {
pkgdesc="NBD based client to map Ceph rbd images to local device."
- depends="librbd librados"
-
+ depends=
_pkg $_bindir rbd-nbd
}
-radosgw() {
- pkgdesc="Rados REST gateway which implements Amazon's S3 and OpenStack's Swift APIs."
- depends="ceph-common"
-
- _pkg $_bindir radosgw radosgw-admin radosgw-token radosgw-object-expirer
- mkdir -p "$subpkgdir"$_localstatedir/lib/ceph/radosgw
-}
-
osd() {
pkgdesc="Object storage daemon for the Ceph distributed file system."
- depends="ceph-base parted gptfdisk"
+ depends="$pkgname-base=$pkgver-r$pkgrel $_osd_deps"
- _pkg $_bindir ceph-clsinfo ceph-bluefs-tool ceph-objectstore-tool ceph-osd
- _pkg $_sbindir ceph-disk ceph-disk-udev
+ _pkg $_bindir ceph-clsinfo \
+ ceph-bluestore-tool \
+ ceph-objectstore-tool \
+ ceph-osdomap-tool \
+ ceph-osd
+ _pkg $_sbindir ceph-volume ceph-volume-systemd
_pkg $_libexecdir/ceph ceph-osd-prestart.sh
- _pkg $_udevrulesdir 60-ceph-by-parttypeuuid.rules 95-ceph-osd.rules
+ _pkg $_sysconfdir/sudoers.d ceph-osd-smartctl
+ _pkg $_sysconfdir/sysctl.d 90-ceph-osd.conf
install -m 750 -o $_ceph_uid -g $_ceph_gid -d \
"$subpkgdir"$_localstatedir/lib/ceph/osd
}
librados() {
pkgdesc="RADOS distributed object store client library"
-
+ depends=
_pkg $_libdir librados.so.*
+ _pkg $_libdir/ceph libceph-common.so.*
}
-librados_dev() {
- pkgdesc="RADOS distributed object store client library headers"
- depends="librados"
-
- _pkg $_includedir/rados librados.h \
- librados.hpp \
- buffer.h \
- buffer_fwd.h \
- inline_memory.h \
- page.h \
- crc32c.h \
- rados_types.h \
- rados_types.hpp \
- memory.h
- _pkg $_libdir librados.so
- _pkg $_bindir librados-config
-}
-
-librgw() {
- pkgdesc="RADOS gateway client library"
- depends="librados"
-
- _pkg $_libdir librgw.so.*
-}
-
-librgw_dev() {
- pkgdesc="RADOS gateway client library headers"
- depends="librados"
-
- _pkg $_includedir/rados librgw.h rgw_file.h
- _pkg $_libdir librgw.so
-}
-
-py_rgw() {
- pkgdesc="Python 2 libraries for the RADOS gateway"
- depends="librgw py-rados"
-
- _pkg $_python_sitelib rgw.so rgw-*.egg-info
-}
-
-py_rados() {
+_py2_rados() {
pkgdesc="Python libraries for the RADOS object store"
- depends="librados"
+ depends=
- _pkg $_python_sitelib rados.so rados-*.egg-info
+ _pkg "$(_py2_sitelib)" rados.so rados-*.egg-info
}
libradosstriper() {
pkgdesc="RADOS striping library"
- depends="librados"
+ depends=
_pkg $_libdir libradosstriper.so.*
}
-libradosstriper_dev() {
- pkgdesc="RADOS striping library headers"
- depends="libradosstriper librados-dev"
-
- _pkg $_includedir/radosstriper libradosstriper.h libradosstriper.hpp
- _pkg $_libdir libradosstriper.so
-}
-
librbd() {
pkgdesc="RADOS block device client library"
- depends="librados"
-
+ depends=
_pkg $_libdir librbd.so.*
}
-librbd_dev() {
- pkgdesc="RADOS block device client library headers"
- depends="librbd librados-dev"
-
- _pkg $_includedir/rbd features.h librbd.h librbd.hpp
- _pkg $_libdir librbd.so
-}
-
-py_rbd() {
+_py2_rbd() {
pkgdesc="Python libraries for the RADOS block device"
- depends="librbd py-rados"
+ depends="py2-rados"
- _pkg $_python_sitelib rbd.so rbd-*.egg-info
+ _pkg "$(_py2_sitelib)" rbd.so rbd-*.egg-info
}
libcephfs() {
pkgdesc="Ceph distributed file system client library"
-
+ depends=
_pkg $_libdir libcephfs.so.*
}
-libcephfs_dev() {
- pkgdesc="Ceph distributed file system client library headers"
- depends="libcephfs librados-devel"
-
- _pkg $_includedir/cephfs ceph_statx.h libcephfs.h
- _pkg $_libdir libcephfs.so
-}
-
-py_cephfs() {
+_py2_cephfs() {
pkgdesc="Python libraries for Ceph distributed file system"
- depends="libcephfs py-rados"
+ depends="py2-rados"
- _pkg $_python_sitelib cephfs.so cephfs-*.egg-info ceph_volume_client.py*
+ _pkg "$(_py2_sitelib)" cephfs.so cephfs-*.egg-info ceph_volume_client.py*
}
ceph_test() {
pkgdesc="Ceph benchmarks and test tools"
- depends="ceph-common xmlstarlet"
+ depends="ceph-common=$pkgver-r$pkgrel $_ceph_test_deps"
_pkg $_bindir ceph-client-debug \
ceph_bench_log \
@@ -449,17 +398,18 @@ ceph_test() {
}
bash_completion() {
- depends="bash-completion"
pkgdesc="Bash completions for Ceph"
- _pkg $_sysconfdir/bash_completion.d ceph rados radosgw-admin rbd
+ depends=
+ install_if="ceph=$pkgver-r$pkgrel bash-completion"
+ _pkg $_sysconfdir/bash_completion.d '*'
}
mgr() {
pkgdesc="Ceph Manager Daemon"
- depends="ceph-base"
+ depends="ceph-base=$pkgver-r$pkgrel"
_pkg $_bindir ceph-mgr
- _pkg $_libdir/ceph mgr
+ _pkg $_datadir/ceph mgr
install -m 750 -o $_ceph_uid -g $_ceph_gid -d \
"$subpkgdir"$_localstatedir/lib/ceph/mgr
@@ -468,14 +418,16 @@ mgr() {
_pkg() {
local path=$1
shift
- local files=$@
+ if ! [ -d "$pkgdir"/$path ]; then
+ error "$pkgdir/$path is not a directory"
+ return 1
+ fi
mkdir -p "$subpkgdir"$path
- for _file in $files; do
+ for _file in "$@"; do
mv "$pkgdir"$path/$_file "$subpkgdir"$path
done
}
-sha512sums="9c1c6d211bfc1e5f59e3f0115c09c7f2d8a279eda6ac9ad4b5d3533fe7c6a43d983b20a60a2597fa1340bc94521fb44125c276f18ae9870bc08ff0b02d842a1d ceph_11.1.1.orig.tar.gz
-f75b359eb35f0eb7314ed5d05c118aea8894469edb67437189c0cdeadbf28b7ec5c937d8a08da2783871e09014aab7ad039ddf7d0d18148deec10a7407389b0e boost-python.patch
-56ad2fa4433ffcb1d672762646d0dead5c8d73bf1d2770e01f1ca144b83140348d3e2020476017b0b785cf47cdb5242f0ed1ad30fe81eb5ea5fbb5ec2a799f0d boost-1.67.patch
-e1becd813ed3f28e2e4a6bef78b3b5117c1c0bb9cabe0ba9c912e0a20b551b6b2667495cddb94acd64192e287144911ff1c11e0d636fe04cc458146cfb0daca8 allperms.patch"
+sha512sums="902eb4b0b56f864eace3aaf5684b113a05875f7a8d081b45801a73cd883b35b60bcff5f7580727672839e2e68abe1bd0b73e2be4ca44ccde162cd1ce679ab313 ceph_14.1.0.orig.tar.gz
+e1becd813ed3f28e2e4a6bef78b3b5117c1c0bb9cabe0ba9c912e0a20b551b6b2667495cddb94acd64192e287144911ff1c11e0d636fe04cc458146cfb0daca8 allperms.patch
+35722b11ad52a3145153635b6a96abda2a23ae9c7e63e2eac006c1e5b8014452c4a1a11bbe0292fd731e4c43aa38e27dd75d2ff9d25bcf52290278f71e868570 musl-fixes.patch"
diff --git a/testing/ceph/boost-1.67.patch b/testing/ceph/boost-1.67.patch
deleted file mode 100644
index ea342ca675..0000000000
--- a/testing/ceph/boost-1.67.patch
+++ /dev/null
@@ -1,164 +0,0 @@
-diff --git a/src/rbd_replay/Replayer.cc b/src/rbd_replay/Replayer.cc
-index ea0f9a0..8d15378 100644
---- a/src/rbd_replay/Replayer.cc
-+++ b/src/rbd_replay/Replayer.cc
-@@ -339,7 +339,7 @@ void Replayer::wait_for_actions(const action::Dependencies &deps) {
- 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;
- }
-diff --git a/src/test/librbd/test_mock_Journal.cc b/src/test/librbd/test_mock_Journal.cc
-index ced44da..82926dc 100644
---- a/src/test/librbd/test_mock_Journal.cc
-+++ b/src/test/librbd/test_mock_Journal.cc
-@@ -465,7 +465,7 @@ public:
- 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);
-@@ -513,7 +513,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;
-@@ -522,11 +522,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);
-@@ -582,7 +582,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);
-@@ -596,7 +596,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);
-@@ -628,14 +628,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);
-@@ -647,7 +647,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);
-@@ -679,7 +679,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;
-@@ -696,7 +696,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);
-@@ -727,7 +727,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);
-@@ -760,7 +760,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;
-@@ -786,7 +786,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);
-@@ -840,14 +840,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;
-@@ -863,7 +863,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/testing/ceph/boost-python.patch b/testing/ceph/boost-python.patch
deleted file mode 100644
index 77a4402da4..0000000000
--- a/testing/ceph/boost-python.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index ebccbee..f9240f1 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -465,7 +465,7 @@ set(Boost_USE_MULTITHREADED ON)
- set(BOOST_COMPONENTS
- thread system regex random program_options date_time iostreams)
- if(WITH_MGR)
-- list(APPEND BOOST_COMPONENTS python)
-+ list(APPEND BOOST_COMPONENTS python27)
- endif()
-
- # require minimally the bundled version
-diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
-index 93963cf..15df5ad 100644
---- a/src/CMakeLists.txt
-+++ b/src/CMakeLists.txt
-@@ -596,7 +596,7 @@ if (WITH_MGR)
- $<TARGET_OBJECTS:heap_profiler_objs>)
- target_include_directories(ceph-mgr PRIVATE "${PYTHON_INCLUDE_DIRS}")
- target_link_libraries(ceph-mgr mds osdc global
-- -lboost_python ${PYTHON_LIBRARIES} ${BLKID_LIBRARIES} ${CMAKE_DL_LIBS} ${ALLOC_LIBS})
-+ -lboost_python27 ${PYTHON_LIBRARIES} ${BLKID_LIBRARIES} ${CMAKE_DL_LIBS} ${ALLOC_LIBS})
- install(TARGETS ceph-mgr DESTINATION bin)
- endif (WITH_MGR)
-
diff --git a/testing/ceph/make-sure-PATH_MAX-is-defined.patch b/testing/ceph/make-sure-PATH_MAX-is-defined.patch
deleted file mode 100644
index 0726359899..0000000000
--- a/testing/ceph/make-sure-PATH_MAX-is-defined.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-From 972c34465d1f78cc2e2ebe53192905d378c1541e Mon Sep 17 00:00:00 2001
-From: Roberto Oliveira <robertoguimaraes8@gmail.com>
-Date: Sun, 29 Oct 2017 14:05:48 +0000
-Subject: [PATCH] rbd-fuse: make sure PATH_MAX is defined
-
-On systems without glibc, as Alpine Linux, you might lack definition of
-PATH_MAX. This patch adds the limits.h header to solve this issue.
-
-Signed-off-by: Roberto Oliveira <robertoguimaraes8@gmail.com>
---- a/src/rbd_fuse/rbd-fuse.cc
-+++ b/src/rbd_fuse/rbd-fuse.cc
-@@ -19,6 +19,7 @@
- #include <getopt.h>
- #include <assert.h>
- #include <string>
-+#include <limits.h>
-
- #if defined(__FreeBSD__)
- #include <sys/param.h>
diff --git a/testing/ceph/musl-fixes.patch b/testing/ceph/musl-fixes.patch
new file mode 100644
index 0000000000..6e50e6ba5b
--- /dev/null
+++ b/testing/ceph/musl-fixes.patch
@@ -0,0 +1,229 @@
+diff --git a/src/common/secret.c b/src/common/secret.c
+index b6f26ec3..1b4531f8 100644
+--- a/src/common/secret.c
++++ b/src/common/secret.c
+@@ -63,9 +63,18 @@ int set_kernel_secret(const char *secret, const char *key_name)
+
+ ret = ceph_unarmor(payload, payload+sizeof(payload), secret, secret+secret_len);
+ if (ret < 0) {
+- char error_buf[80];
+- fprintf(stderr, "secret is not valid base64: %s.\n",
+- strerror_r(-ret, error_buf, sizeof(error_buf)));
++ char error_buf[80] = "unkown error";
++ char *p;
++#if defined(__GLIBC__)
++ p = strerror_r(-ret, error_buf, sizeof(error_buf));
++#else
++ if (strerror_r(-ret, error_buf, sizeof(error_buf)) < 0) {
++ p = "unkown error";
++ } else {
++ p = error_buf;
++ }
++#endif
++ fprintf(stderr, "secret is not valid base64: %s.\n", p);
+ return ret;
+ }
+
+diff --git a/src/dmclock/src/dmclock_util.cc b/src/dmclock/src/dmclock_util.cc
+index e8046cdc..aa9000bc 100644
+--- a/src/dmclock/src/dmclock_util.cc
++++ b/src/dmclock/src/dmclock_util.cc
+@@ -21,7 +21,7 @@
+ #include "dmclock_util.h"
+
+
+-std::string crimson::dmclock::format_time(const Time& time, uint modulo) {
++std::string crimson::dmclock::format_time(const Time& time, unsigned int modulo) {
+ long subtract = long(time / modulo) * modulo;
+ std::stringstream ss;
+ ss << std::fixed << std::setprecision(4) << (time - subtract);
+diff --git a/src/dmclock/src/dmclock_util.h b/src/dmclock/src/dmclock_util.h
+index d3fd3f19..ee8b6c3a 100644
+--- a/src/dmclock/src/dmclock_util.h
++++ b/src/dmclock/src/dmclock_util.h
+@@ -52,7 +52,7 @@ namespace crimson {
+ #endif
+ }
+
+- std::string format_time(const Time& time, uint modulo = 1000);
++ std::string format_time(const Time& time, unsigned int modulo = 1000);
+
+ void debugger();
+
+diff --git a/src/seastar/dpdk/config/common_base b/src/seastar/dpdk/config/common_base
+index 8907bea3..6d3f7577 100644
+--- a/src/seastar/dpdk/config/common_base
++++ b/src/seastar/dpdk/config/common_base
+@@ -96,7 +96,7 @@ CONFIG_RTE_MAX_TAILQ=32
+ CONFIG_RTE_LOG_LEVEL=RTE_LOG_INFO
+ CONFIG_RTE_LOG_DP_LEVEL=RTE_LOG_INFO
+ CONFIG_RTE_LOG_HISTORY=256
+-CONFIG_RTE_BACKTRACE=y
++CONFIG_RTE_BACKTRACE=n
+ CONFIG_RTE_LIBEAL_USE_HPET=n
+ CONFIG_RTE_EAL_ALLOW_INV_SOCKET_ID=n
+ CONFIG_RTE_EAL_ALWAYS_PANIC_ON_ERROR=n
+diff --git a/src/spdk/dpdk/config/common_base b/src/spdk/dpdk/config/common_base
+index d5fbb3a4..d9561545 100644
+--- a/src/spdk/dpdk/config/common_base
++++ b/src/spdk/dpdk/config/common_base
+@@ -80,7 +80,7 @@ CONFIG_RTE_MAX_TAILQ=32
+ CONFIG_RTE_ENABLE_ASSERT=n
+ CONFIG_RTE_LOG_DP_LEVEL=RTE_LOG_INFO
+ CONFIG_RTE_LOG_HISTORY=256
+-CONFIG_RTE_BACKTRACE=y
++CONFIG_RTE_BACKTRACE=n
+ CONFIG_RTE_LIBEAL_USE_HPET=n
+ CONFIG_RTE_EAL_ALLOW_INV_SOCKET_ID=n
+ CONFIG_RTE_EAL_ALWAYS_PANIC_ON_ERROR=n
+diff --git a/src/spdk/dpdk/config/rte_config.h b/src/spdk/dpdk/config/rte_config.h
+index a8e47977..7599bd39 100644
+--- a/src/spdk/dpdk/config/rte_config.h
++++ b/src/spdk/dpdk/config/rte_config.h
+@@ -30,7 +30,7 @@
+ #define RTE_MAX_MEMZONE 2560
+ #define RTE_MAX_TAILQ 32
+ #define RTE_LOG_DP_LEVEL RTE_LOG_INFO
+-#define RTE_BACKTRACE 1
++//#define RTE_BACKTRACE 1
+ #define RTE_EAL_VFIO 1
+ #define RTE_MAX_VFIO_CONTAINERS 64
+
+diff --git a/src/spdk/dpdk/drivers/bus/pci/linux/pci_uio.c b/src/spdk/dpdk/drivers/bus/pci/linux/pci_uio.c
+index a7c14421..aff241e8 100644
+--- a/src/spdk/dpdk/drivers/bus/pci/linux/pci_uio.c
++++ b/src/spdk/dpdk/drivers/bus/pci/linux/pci_uio.c
+@@ -14,6 +14,32 @@
+
+ #if defined(RTE_ARCH_X86)
+ #include <sys/io.h>
++#if defined(__GLIBC__)
++#define pci_uio_outl_p outl_p
++#define pci_uio_outw_p outw_p
++#define pci_uio_outb_p outb_p
++#else
++static inline void
++pci_uio_outl_p(unsigned int value, unsigned short int port)
++{
++ __asm__ __volatile__ ("outl %0,%w1\noutb %%al,$0x80" : : "a" (value),
++ "Nd" (port));
++}
++
++static inline void
++pci_uio_outw_p(unsigned short int value, unsigned short int port)
++{
++ __asm__ __volatile__ ("outw %w0,%w1\noutb %%al,$0x80" : : "a" (value),
++ "Nd" (port));
++}
++
++static inline void
++pci_uio_outb_p(unsigned char value, unsigned short int port)
++{
++ __asm__ __volatile__ ("outb %b0,%w1\noutb %%al,$0x80" : : "a" (value),
++ "Nd" (port));
++}
++#endif
+ #endif
+
+ #include <rte_log.h>
+@@ -527,21 +553,21 @@ pci_uio_ioport_write(struct rte_pci_ioport *p,
+ if (len >= 4) {
+ size = 4;
+ #if defined(RTE_ARCH_X86)
+- outl_p(*(const uint32_t *)s, reg);
++ pci_uio_outl_p(*(const uint32_t *)s, reg);
+ #else
+ *(volatile uint32_t *)reg = *(const uint32_t *)s;
+ #endif
+ } else if (len >= 2) {
+ size = 2;
+ #if defined(RTE_ARCH_X86)
+- outw_p(*(const uint16_t *)s, reg);
++ pci_uio_outw_p(*(const uint16_t *)s, reg);
+ #else
+ *(volatile uint16_t *)reg = *(const uint16_t *)s;
+ #endif
+ } else {
+ size = 1;
+ #if defined(RTE_ARCH_X86)
+- outb_p(*s, reg);
++ pci_uio_outb_p(*s, reg);
+ #else
+ *(volatile uint8_t *)reg = *s;
+ #endif
+diff --git a/src/spdk/dpdk/lib/librte_eal/common/eal_common_fbarray.c b/src/spdk/dpdk/lib/librte_eal/common/eal_common_fbarray.c
+index ba6c4ae3..b9b7d70d 100644
+--- a/src/spdk/dpdk/lib/librte_eal/common/eal_common_fbarray.c
++++ b/src/spdk/dpdk/lib/librte_eal/common/eal_common_fbarray.c
+@@ -9,6 +9,7 @@
+ #include <errno.h>
+ #include <sys/file.h>
+ #include <string.h>
++#include <fcntl.h>
+
+ #include <rte_common.h>
+ #include <rte_log.h>
+diff --git a/src/spdk/dpdk/lib/librte_eal/common/malloc_heap.c b/src/spdk/dpdk/lib/librte_eal/common/malloc_heap.c
+index 02a5385d..cf063d5f 100644
+--- a/src/spdk/dpdk/lib/librte_eal/common/malloc_heap.c
++++ b/src/spdk/dpdk/lib/librte_eal/common/malloc_heap.c
+@@ -1,6 +1,7 @@
+ /* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2010-2014 Intel Corporation
+ */
++ #include<string.h>
+ #include <stdint.h>
+ #include <stddef.h>
+ #include <stdlib.h>
+diff --git a/src/spdk/dpdk/lib/librte_eal/linuxapp/eal/eal_hugepage_info.c b/src/spdk/dpdk/lib/librte_eal/linuxapp/eal/eal_hugepage_info.c
+index 3a7d4b22..99b25d3c 100644
+--- a/src/spdk/dpdk/lib/librte_eal/linuxapp/eal/eal_hugepage_info.c
++++ b/src/spdk/dpdk/lib/librte_eal/linuxapp/eal/eal_hugepage_info.c
+@@ -17,6 +17,7 @@
+ #include <sys/mman.h>
+ #include <sys/queue.h>
+ #include <sys/stat.h>
++#include <fcntl.h>
+
+ #include <linux/mman.h> /* for hugetlb-related flags */
+
+diff --git a/src/spdk/dpdk/lib/librte_eal/linuxapp/eal/eal_memory.c b/src/spdk/dpdk/lib/librte_eal/linuxapp/eal/eal_memory.c
+index 0bf2aef3..0c98c74c 100644
+--- a/src/spdk/dpdk/lib/librte_eal/linuxapp/eal/eal_memory.c
++++ b/src/spdk/dpdk/lib/librte_eal/linuxapp/eal/eal_memory.c
+@@ -15,6 +15,7 @@
+ #include <sys/mman.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
++#include <fcntl.h>
+ #include <sys/queue.h>
+ #include <sys/file.h>
+ #include <unistd.h>
+diff --git a/src/spdk/dpdk/mk/target/generic/rte.vars.mk b/src/spdk/dpdk/mk/target/generic/rte.vars.mk
+index 98085cd3..dd149acc 100644
+--- a/src/spdk/dpdk/mk/target/generic/rte.vars.mk
++++ b/src/spdk/dpdk/mk/target/generic/rte.vars.mk
+@@ -108,6 +108,9 @@ CFLAGS += -include $(RTE_SDK_BIN)/include/rte_config.h
+ LDFLAGS += -L$(RTE_SDK_BIN)/lib
+ endif
+
++# always define _GNU_SOURCE
++CFLAGS += -D_GNU_SOURCE
++
+ export CFLAGS
+ export LDFLAGS
+
+diff --git a/src/tools/rbd_nbd/rbd-nbd.cc b/src/tools/rbd_nbd/rbd-nbd.cc
+index cce44e4f..b0988e64 100644
+--- a/src/tools/rbd_nbd/rbd-nbd.cc
++++ b/src/tools/rbd_nbd/rbd-nbd.cc
+@@ -552,7 +552,8 @@ private:
+ for (unsigned i = 0; i < cmdline.size(); i++) {
+ const char *arg = &cmdline[i];
+ if (i == 0) {
+- if (strcmp(basename(arg) , "rbd-nbd") != 0) {
++ const char *fname = strrchr(arg, '/');
++ if (strcmp(fname ? fname+1 : arg, "rbd-nbd") != 0) {
+ return -EINVAL;
+ }
+ } else {