ceph: FTBFS against python 3.15rc1

Maximiliano Curia <[email protected]>
Newsgroups gmane.linux.debian.devel.python
Message-ID <[email protected]>
Package: src:ceph
Version: ceph_20.2.4+ds-1
User: [email protected]
Usertags: python3.15
Tags: patch, ftbfs, forky, sid

Hi!

While rebuilding the python related packages against the Python 3.15rc1
version we found that ceph fails to build from source [1]. 

The issue is caused because python3.15 is available in the sandbox
builds, and the cmake rules try to build against the latest version
available, but python3-dev only installs the libraries and headers for
the default python3 version.

This can be fixed by setting the WITH_PYTHON3 to match the default
python3 version instead of letting cmake to figure it out. But I
consider this an unnecessary lack of support of the "supported" python
version, so I entered in a bit of a rabbit hole figuring out what are
the options that cmake uses so we could build the missing extensions
versions.

You can see the resulting patch to debian/rules control in the attached
debdiff.

I applied the fix in the sandbox [2] to be able to build the packages
that depend on ceph, please consider applying the proposed changes or,
at least, setting WITH_PYTHON3 to its proper value.

Happy hacking,

[1]: https://debusine.debian.net/debian/r-python-python3.15/work-request/1100089/
[2]: https://debusine.debian.net/debian/r-python-python3.15/
-- 
"Can you imagine what I would do if I could do all I can?" -- Sun Tzu
Saludos /\/\ /\ >< `/
ceph_20.2.4+ds-1.1.debdiff (text/plain, 5.9 KB)
diff -Nru ceph-20.2.4+ds/debian/changelog ceph-20.2.4+ds/debian/changelog
--- ceph-20.2.4+ds/debian/changelog	2026-08-21 17:02:48.000000000 +0200
+++ ceph-20.2.4+ds/debian/changelog	2026-08-24 09:53:23.000000000 +0200
@@ -1,3 +1,15 @@
+ceph (20.2.4+ds-1.1) UNRELEASED; urgency=medium
+
+  [ Daniel Baumann ]
+  * Non-maintainer upload.
+  * Adding #1143748 reference to previous changelog entry.
+
+  [ Maximiliano Curia ]
+  * Build against python3-all-dev
+  * Actually build the python extensions for all the supported versions.
+
+ -- Maximiliano Curia <[email protected]>  Mon, 24 Aug 2026 09:53:23 +0200
+
 ceph (20.2.4+ds-1) sid; urgency=high
 
   * Merging upstream version 20.2.4+ds (Closes: #1144947):
@@ -57,7 +69,8 @@
     version.
   * Moving debian specific patches to debian subdirectory within
     debian/patches.
-  * Cherry-picking patches from upstream to fix FTBFS with gcc-16.
+  * Cherry-picking patches from upstream to fix FTBFS with gcc-16 (Closes:
+    #1143748).
   * Refreshing common-Formatter-Include-cstdint.patch.
   * Cherry-picking patch from upstream to fix FTBFS linking rgw.
 
@@ -2392,7 +2405,7 @@
 
   * Non-maintainer upload.
   * Remove references to other libraries from dependency_libs field
-    (closes: #621208). 
+    (closes: #621208).
 
  -- Luk Claes <[email protected]>  Sat, 28 May 2011 22:28:48 +0200
 
diff -Nru ceph-20.2.4+ds/debian/control ceph-20.2.4+ds/debian/control
--- ceph-20.2.4+ds/debian/control	2026-08-21 17:02:48.000000000 +0200
+++ ceph-20.2.4+ds/debian/control	2026-08-24 09:53:23.000000000 +0200
@@ -112,7 +112,7 @@
  python3-cherrypy3,
  python3-coverage,
  python3-dateutil,
- python3-dev,
+ python3-all-dev,
  python3-grpcio,
  python3-jinja2,
  python3-jmespath,
diff -Nru ceph-20.2.4+ds/debian/rules ceph-20.2.4+ds/debian/rules
--- ceph-20.2.4+ds/debian/rules	2026-08-21 17:02:48.000000000 +0200
+++ ceph-20.2.4+ds/debian/rules	2026-08-24 09:53:23.000000000 +0200
@@ -9,6 +9,13 @@
 export DEB_BUILD_ARCH      ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
 export DEB_HOST_ARCH      ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
 
+# cmake builds the cython bindings for a single python3 version, and left to
+# itself it picks the newest one installed. Pin it to the default python3 and
+# build the bindings for the remaining supported versions in dh_auto_build.
+PY3_DEFAULT := $(shell py3versions -dv)
+PY3_OTHERS := $(filter-out $(PY3_DEFAULT),$(shell py3versions -sv))
+CEPH_LIBDIR := $(CURDIR)/obj-$(DEB_HOST_GNU_TYPE)/lib
+
 # support ccache for faster build
 # cmake uses /usr/bin/c*
 ifeq (yes,$(findstring yes,$(shell test -L /usr/lib/ccache/c++ && test -L /usr/lib/ccache/cc && echo -n yes)))
@@ -92,7 +99,7 @@
 extraopts += -DWITH_OCF=ON -DWITH_NSS=ON -DWITH_PYTHON3=ON -DWITH_DEBUG=ON -DWITH_LTTNG=OFF
 extraopts += -DWITH_MGR_DASHBOARD_FRONTEND=OFF
 extraopts += -DWITH_PYTHON2=OFF -DMGR_PYTHON_VERSION=3
-extraopts += -DWITH_PYTHON3=3
+extraopts += -DWITH_PYTHON3=$(PY3_DEFAULT)
 extraopts += -DWITH_CEPHFS_JAVA=ON
 extraopts += -DWITH_CEPHFS_SHELL=ON
 extraopts += -DWITH_TESTS=ON
@@ -173,6 +180,7 @@
 	rm -f src/liburing/src/liburing.so.* src/liburing/src/queue.ol src/liburing/src/queue.os src/liburing/src/register.ol src/liburing/src/register.os
 	rm -f src/liburing/src/setup.ol src/liburing/src/setup.os src/liburing/src/syscall.ol src/liburing/src/syscall.os
 	rm -rf src/pybind/mgr/rook/rook_client/ceph
+	rm -rf $(CURDIR)/build.python3* src/pybind/*/*.egg-info
 	rm -rf src/cephadm/.pytest_cache
 	find . -type d -iname .deps -exec rm -rf {} \; || true
 	find . -type d -iname .libs -exec rm -rf {} \; || true
@@ -309,8 +317,25 @@
 	# that appears on slower build hosts where the build happens
 	# before the headers are built.
 	dh_auto_build --buildsystem=cmake -- legacy-option-headers
+	# cmake builds the cython bindings for $(PY3_DEFAULT) only, so build them
+	# for $(PY3_OTHERS) here.
+	set -e ; for binding in rados rbd cephfs rgw ; do \
+		dh_auto_build --buildsystem=cmake -- cython_$$binding ; \
+		for v in $(PY3_OTHERS) ; do \
+			(cd $(CURDIR)/src/pybind/$$binding && \
+			 CPPFLAGS="$(CPPFLAGS) -iquote$(CURDIR)/src/include -D'void0=dead_function(void)' -D'__Pyx_check_single_interpreter(ARG)=ARG##0'" \
+			 LDFLAGS="$(LDFLAGS) -L$(CEPH_LIBDIR)" \
+			 CEPH_LIBDIR="$(CEPH_LIBDIR)" \
+			 CYTHON_BUILD_DIR="$(CURDIR)/build.python$$v" \
+			 python$$v setup.py \
+				build --build-base $(CURDIR)/build.python$$v \
+				install --root=$(CURDIR)/build.python$$v/root \
+					--install-layout=deb \
+					--single-version-externally-managed --record /dev/null) ; \
+		done ; \
+	done
 	# Start the actual build
-	dh_auto_build --buildsystem=cmake 
+	dh_auto_build --buildsystem=cmake
 
 override_dh_auto_configure:
 	env | sort
@@ -325,6 +350,10 @@
 
 override_dh_auto_install:
 	dh_auto_install --buildsystem=cmake --destdir=$(DESTDIR)
+	# add the bindings built for $(PY3_OTHERS)
+	set -e ; for v in $(PY3_OTHERS) ; do \
+		cp -a $(CURDIR)/build.python$$v/root/. $(DESTDIR)/ ; \
+	done
 	if [ ! -f $(DESTDIR)/usr/bin/ceph-dencoder ]; then \
 	    cp debian/workarounds/ceph-dencoder-oom $(DESTDIR)/usr/bin/ceph-dencoder ;\
 	fi
@@ -390,7 +419,7 @@
 	install -D -m0644 systemd/[email protected]   debian/cephfs-mirror/usr/lib/systemd/system/[email protected]
 	install -D -m0644 systemd/cephfs-mirror.target     debian/cephfs-mirror/usr/lib/systemd/system/cephfs-mirror.target
 	install -D -m0644 systemd/[email protected]    debian/radosgw/usr/lib/systemd/system/[email protected]
-	echo "Alias=radosgw.service"                    >> debian/radosgw/usr/lib/systemd/system/[email protected]  
+	echo "Alias=radosgw.service"                    >> debian/radosgw/usr/lib/systemd/system/[email protected]
 	install -D -m0644 systemd/ceph-radosgw.target      debian/radosgw/usr/lib/systemd/system/ceph-radosgw.target
 	install -D -m0644 systemd/[email protected] debian/rbd-mirror/usr/lib/systemd/system/[email protected]
 	install -D -m0644 systemd/ceph-rbd-mirror.target   debian/rbd-mirror/usr/lib/systemd/system/ceph-rbd-mirror.target
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.