diff --git a/testing/ceph17/11-parse_rfc1123_alt.patch b/testing/ceph17/11-parse_rfc1123_alt.patch
index 32a7cd8a1306ebc3620fca15c51ec5740a116acd..4c1b5c25f7076fee4af7041fa1a105afda3d4c36 100644
--- a/testing/ceph17/11-parse_rfc1123_alt.patch
+++ b/testing/ceph17/11-parse_rfc1123_alt.patch
@@ -25,7 +25,7 @@ https://elixir.bootlin.com/glibc/latest/source/time/strptime_l.c#L776
 +        t->tm_gmtoff = 0;
 +    } else {
 +      if (*s != '+' && *s != '-')
-+        return NULL;
++        return false;
 +      bool neg = *s++ == '-';
 +      int n = 0;
 +      while (n < 4 && *s >= '0' && *s <= '9') {
@@ -38,10 +38,10 @@ https://elixir.bootlin.com/glibc/latest/source/time/strptime_l.c#L776
 +        val *= 100;
 +      else if (n != 4)
 +        /* Only two or four digits recognized.  */
-+        return NULL;
++        return false;
 +      else if (val % 100 >= 60)
 +        /* Minutes valid range is 0 through 59.  */
-+        return NULL;
++        return false;
 +      t->tm_gmtoff = (val / 100) * 3600 + (val % 100) * 60;
 +      if (neg)
 +        t->tm_gmtoff = -t->tm_gmtoff;
diff --git a/testing/ceph17/46-fmt9-1.patch b/testing/ceph17/46-fmt9-1.patch
new file mode 100644
index 0000000000000000000000000000000000000000..40788bbee68410b1c97ac41f773d41038ce72ece
--- /dev/null
+++ b/testing/ceph17/46-fmt9-1.patch
@@ -0,0 +1,26 @@
+fix for fmt 9
+
+diff --git a/src/mon/LogMonitor.h b/src/mon/LogMonitor.h
+index 04d63c5..64dc076 100644
+--- a/src/mon/LogMonitor.h
++++ b/src/mon/LogMonitor.h
+@@ -19,6 +19,7 @@
+ #include <map>
+ #include <set>
+ 
++#define FMT_DEPRECATED_OSTREAM
+ #include <fmt/format.h>
+ #include <fmt/ostream.h>
+ 
+diff --git a/src/tools/neorados.cc b/src/tools/neorados.cc
+index 516dfbc..9587acb 100644
+--- a/src/tools/neorados.cc
++++ b/src/tools/neorados.cc
+@@ -14,6 +14,7 @@
+  */
+ 
+ #define BOOST_COROUTINES_NO_DEPRECATION_WARNING
++#define FMT_DEPRECATED_OSTREAM
+ 
+ #include <algorithm>
+ #include <cassert>
diff --git a/testing/ceph17/46-fmt9-2.patch b/testing/ceph17/46-fmt9-2.patch
new file mode 100644
index 0000000000000000000000000000000000000000..936c430604166b527e2b93f7d3e9b6ec8f3882db
--- /dev/null
+++ b/testing/ceph17/46-fmt9-2.patch
@@ -0,0 +1,107 @@
+Patch-Source: https://github.com/ceph/ceph/commit/c0a3d46029757863e6c4b7c317ed31236b8c1345
+From c0a3d46029757863e6c4b7c317ed31236b8c1345 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?=E8=83=A1=E7=8E=AE=E6=96=87?= <huww98@outlook.com>
+Date: Wed, 22 Dec 2021 01:46:32 +0800
+Subject: [PATCH] mon: use fmt::format for stderr cluster logging
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Just like 8e78ca5f958 but for mon cluster log.
+
+Signed-off-by: 胡玮文 <huww98@outlook.com>
+---
+ src/mon/LogMonitor.cc | 26 ++++++++++++++------------
+ src/mon/LogMonitor.h  |  2 +-
+ 2 files changed, 15 insertions(+), 13 deletions(-)
+
+diff --git a/src/mon/LogMonitor.cc b/src/mon/LogMonitor.cc
+index 094ea54b65247..e6d1029a1f7b3 100644
+--- a/src/mon/LogMonitor.cc
++++ b/src/mon/LogMonitor.cc
+@@ -42,6 +42,7 @@
+ 
+ #include <boost/algorithm/string/predicate.hpp>
+ 
++#include <iterator>
+ #include <sstream>
+ #include <syslog.h>
+ 
+@@ -354,10 +355,6 @@ void LogMonitor::log_external(const LogEntry& le)
+     channel = CLOG_CHANNEL_CLUSTER;
+   }
+ 
+-  if (g_conf().get_val<bool>("mon_cluster_log_to_stderr")) {
+-    cerr << channel << " " << le << std::endl;
+-  }
+-
+   if (channels.do_log_to_syslog(channel)) {
+     string level = channels.get_level(channel);
+     string facility = channels.get_facility(channel);
+@@ -386,21 +383,19 @@ void LogMonitor::log_external(const LogEntry& le)
+     dout(7) << "journald: " << channel << dendl;
+   }
+ 
++  bool do_stderr = g_conf().get_val<bool>("mon_cluster_log_to_stderr");
++  int fd = -1;
+   if (g_conf()->mon_cluster_log_to_file) {
+     if (this->log_rotated.exchange(false)) {
+       this->log_external_close_fds();
+     }
+ 
+     auto p = channel_fds.find(channel);
+-    int fd;
+     if (p == channel_fds.end()) {
+       string log_file = channels.get_log_file(channel);
+       dout(20) << __func__ << " logging for channel '" << channel
+ 	       << "' to file '" << log_file << "'" << dendl;
+-      if (log_file.empty()) {
+-	// do not log this channel
+-	fd = -1;
+-      } else {
++      if (!log_file.empty()) {
+ 	fd = ::open(log_file.c_str(), O_WRONLY|O_APPEND|O_CREAT|O_CLOEXEC, 0600);
+ 	if (fd < 0) {
+ 	  int err = -errno;
+@@ -413,11 +408,12 @@ void LogMonitor::log_external(const LogEntry& le)
+     } else {
+       fd = p->second;
+     }
++  }
++  if (do_stderr || fd >= 0) {
++    fmt::format_to(std::back_inserter(log_buffer), "{}\n", le);
+ 
+     if (fd >= 0) {
+-      fmt::format_to(file_log_buffer, "{}\n", le);
+-      int err = safe_write(fd, file_log_buffer.data(), file_log_buffer.size());
+-      file_log_buffer.clear();
++      int err = safe_write(fd, log_buffer.data(), log_buffer.size());
+       if (err < 0) {
+ 	dout(1) << "error writing to '" << channels.get_log_file(channel)
+ 		<< "' for channel '" << channel
+@@ -426,6 +422,12 @@ void LogMonitor::log_external(const LogEntry& le)
+ 	channel_fds.erase(channel);
+       }
+     }
++
++    if (do_stderr) {
++      fmt::print(std::cerr, "{} {}", channel, std::string_view(log_buffer.data(), log_buffer.size()));
++    }
++
++    log_buffer.clear();
+   }
+ }
+ 
+diff --git a/src/mon/LogMonitor.h b/src/mon/LogMonitor.h
+index f6b433096e45a..1eccaa5c20379 100644
+--- a/src/mon/LogMonitor.h
++++ b/src/mon/LogMonitor.h
+@@ -51,7 +51,7 @@ class LogMonitor : public PaxosService,
+   version_t external_log_to = 0;
+   std::map<std::string, int> channel_fds;
+ 
+-  fmt::memory_buffer file_log_buffer;
++  fmt::memory_buffer log_buffer;
+   std::atomic<bool> log_rotated = false;
+ 
+   struct log_channel_info {
diff --git a/testing/ceph17/APKBUILD b/testing/ceph17/APKBUILD
index b13ff627933ebd2826e2f4c74a93a3fa2874746f..704fc1f23b0b872d665502660411cffcc5bbb1e6 100644
--- a/testing/ceph17/APKBUILD
+++ b/testing/ceph17/APKBUILD
@@ -4,7 +4,7 @@
 # Maintainer: Duncan Bellamy <dunk@denkimushi.com>
 _pkgname=ceph
 pkgver=17.2.3
-pkgrel=3
+pkgrel=4
 _majorver=${pkgver%%.*}
 pkgname=$_pkgname$_majorver
 pkgdesc="Ceph is a distributed object store and file system, version $_majorver"
@@ -92,6 +92,7 @@ makedepends="
 	openssl-dev>3
 	procps
 	python3-dev
+	py3-setuptools
 	py3-sphinx
 	rabbitmq-c-dev
 	readline-dev
@@ -133,9 +134,13 @@ source="https://download.ceph.com/tarballs/ceph-$pkgver.tar.gz
 	46-statx.patch
 	$pkgname-gcc12.patch::https://github.com/ceph/ceph/commit/963d756ded40f5adf2efef53893c917bec1845c1.patch
 	$pkgname-gcc12-memory.patch::https://github.com/ceph/ceph/commit/7c381ba985bd1398ef7d145cc00fae9d0db510e3.patch
+	46-fmt9-1.patch
+	46-fmt9-2.patch
+	boost.patch
 	"
 # to prevent things from installing ceph17 libs, since they have the same SOMAJOR
 sonameprefix="ceph$_majorver:so:"
+options="!check" # todo
 
 subpackages="
 	$pkgname-doc
@@ -200,7 +205,7 @@ prepare() {
 build() {
 	export CEPH_BUILD_VIRTUALENV="$builddir"
 	export NPM_REGISTRY="https://npm.open-registry.dev"
-	export CXXFLAGS="$CXXFLAGS -fpermissive -D STATX_INO=0x100U"
+	export CXXFLAGS="$CXXFLAGS -DSTATX_INO=0x100U"
 
 	case "$CARCH" in
 		s390x) _par="OFF" ;;
@@ -209,11 +214,7 @@ build() {
 
 	cmake -B build \
 		-G Ninja \
-		-DCMAKE_CXX_FLAGS="$CXXFLAGS" \
 		-DCMAKE_BUILD_TYPE=MinSizeRel \
-		"-DCMAKE_JOB_POOLS:STRING=compile=$((JOBS<16 ? JOBS : 16));link=2" \
-		-DCMAKE_JOB_POOL_COMPILE:STRING=compile \
-		-DCMAKE_JOB_POOL_LINK:STRING=link \
 		-DLUA_LIBRARIES=/usr/lib/lua"$_lua"/liblua.so \
 		-DALLOCATOR=libc \
 		-DCMAKE_INSTALL_PREFIX=/usr \
@@ -270,7 +271,7 @@ package() {
 	install -m 600 -D sudoers.d/ceph-smartctl "$pkgdir"/etc/sudoers.d/ceph-smartctl
 
 	# delete systemd related stuff
-	rm "$pkgdir"/usr/sbin/ceph-volume-systemd
+	rm -f "$pkgdir"/usr/sbin/ceph-volume-systemd
 
 	# move docs to docs
 	mkdir -p "$pkgdir"/usr/share/doc/ceph/dashboard
@@ -636,7 +637,7 @@ fd6e057ba8440f69423e870dddb2705d68015089ff8d97356bdc359c2ab41e19351fb1c914330de6
 ce5f162501f6b67fe254546dddf880d1a5b1d1a0fa69e0b1918de17e8da45c5c6124512b8cbd98b76f29d931403de0d11c5ffd330ed8ee1f4dc75bb04baecae3  ceph.initd
 94687578411bf0de1b17555ed81c188c88ea63ac4a25993bd8fde9cf68afbbfbdec7b2d7c54fdcfbd4aed4eb78754e8061c308955596cbe037ff15b575874cc6  10-musl-fixes.patch
 211e6f5f8fc962878196ec917984781eb4a8a9495bcc8d1729b34ac66abd2d4a0b7388ae2caee9d5deb664d54860d120a37215924625e82eac9bfca16179667a  11-dump_time_header_impl.patch
-ff6e281388432ef864e72e00833f979c7bafe14d56c08968835a123466bf5e82239dfb8a7d89afa9caabba445217ae4ba0d7f89093c2edf243dd7cca3353efbe  11-parse_rfc1123_alt.patch
+253a7bf9fa6a68547f2c9269570be86aa659ef75ab0ed4c9d1a53be70de1ca6079508f19fe5ddb02ed9edda349e121037f8ed4d6b5b0e640edaab863ce6b280d  11-parse_rfc1123_alt.patch
 52b11dfd157dfb7363d2d3428901559189263caaa1c5f29a924b9be7ea012d4f54a887b22d2e2a3d756f6fd771f626505912dca52e6b19a56e018be45b7acb8b  11-s3_expiration_header.patch
 3ba1801d9e2ab427ed14abd01881ef2115cd38309134145ec5a0a2a7adee2007e8b84b66ac1c7d5ea1139946aa87159dfb0768cd80181f42140979d790efe817  13-liburing.patch
 03ef3598181c45ecba5600a1e4db7fd897ea9d3c8abdfaad2dcf84c7a241d9ba18e7f7885d69ee0572ee307fc94600a2784a07da909d37a51de27f8ded2e3a70  20-pci.patch
@@ -651,4 +652,7 @@ f49427d3420574043e18cad517a6f81ee38a48b827195f564fd728fd2f2b32dbf17f9e21842b01bb
 f589c85baca2654e54ebd986ddda70a9b38116332c7c10aa5b75cd8a9c37e8d157baf0ad9ac91e36750046e7554d6831d93cb16d3967b5986155b8f38cff66c5  46-statx.patch
 e54ee5223831b23676f4de7a49fc2548e5deb524ecc0e75a6d4dac1c5e69e9f8fb9bb5fd2e423dd548ad7dd7e3d6c7b4a0e9e68ceaabfa1add8f025687bd4e60  ceph17-gcc12.patch
 f1b54767d8d3c12ca9fe9eafd0590efa8560a52b5c18f1121f8fd8b7e69d70578bdeae9a1803612a8a8d0032f039f8786b5152a889ba359850e3d3d30a6af8c7  ceph17-gcc12-memory.patch
+0dee0e3ebbf49056db06f665084bbf41109f22e513f44b7e3602e8f8717f2f658b0e1cab3893ea2fbc86045bf7982a76bee7af5b90a55d6cc4f2698c95f18aa3  46-fmt9-1.patch
+5220e02486ca5881a4902c73a79f903f3799ac352073a0a46eb37d48643a42bb48455768344db1770e27020bae3f11ba997aff6b5170decbdef6f601a89ab9c8  46-fmt9-2.patch
+2c258789d8d2c1f3807a1536c88d875c694752a5a94d096da57ce1e779b449a1802b5b4a787a46356e237d0d0e848e95762901bd32ef79f68227f5d730aac5f8  boost.patch
 "
diff --git a/testing/ceph17/boost.patch b/testing/ceph17/boost.patch
new file mode 100644
index 0000000000000000000000000000000000000000..031e27c009b67d2aacc893c8bbec2b34c60cb6cd
--- /dev/null
+++ b/testing/ceph17/boost.patch
@@ -0,0 +1,15 @@
+diff --git a/src/common/async/bind_like.h b/src/common/async/bind_like.h
+index a7fdbb869..a647869d5 100644
+--- a/src/common/async/bind_like.h
++++ b/src/common/async/bind_like.h
+@@ -15,9 +15,9 @@
+ 
+ #include <boost/asio/associated_allocator.hpp>
+ #include <boost/asio/associated_executor.hpp>
++#include <boost/asio/bind_allocator.hpp>
+ #include <boost/asio/bind_executor.hpp>
+ 
+-#include "common/async/bind_allocator.h"
+ 
+ namespace ceph::async {
+ template<typename Executor, typename Allocator, typename Completion>