python / python/cpython

failure building Python 3.15.0a3 on Alpine

未關閉
#143,632 9 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

build OS-unsupported type-bug
主要語言
Python
星號
77.2k
分支
36k
PR 合併指標
PR 指標待擷取

描述

When building Python 3.15.0a3 - 3.15.0rc2 on Alpine Linux 3.23 (musl libc) on certain architectures, the build fails with error: redefinition of 'struct prctl_mm_map' (full error below).

This is related to the changes added in https://github.com/python/cpython/pull/142079. TL;DR: in musl libc, some kernel structs are redefined in the musl-provided headers. In this case sys/prctl.h redefines a struct in linux/prctl.h; see also https://wiki.musl-libc.org/faq.html#Q:-Why-am-I-getting-.

Configure setup:

gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"
./configure \
	--build="$gnuArch" \
	--enable-loadable-sqlite-extensions \
	--enable-option-checking=fatal \
	--enable-shared \
	--with-lto \
	--with-ensurepip

# --with-lto is not used on riscv64

Make lines, per architecture:

# nproc is used for the number of jobs, so it varies by system
# amd64 and arm64v8
make -j 8 'EXTRA_CFLAGS=-DTHREAD_STACK_SIZE=0x100000 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer' 'LDFLAGS=-Wl,--strip-all'
# i386 (x86)
make -j 8 'EXTRA_CFLAGS=-DTHREAD_STACK_SIZE=0x100000' 'LDFLAGS=-Wl,--strip-all'
# arm32v6, arm32v7, ppc64le, riscv64, s390x
make -j 8 'EXTRA_CFLAGS=-DTHREAD_STACK_SIZE=0x100000 -fno-omit-frame-pointer' 'LDFLAGS=-Wl,--strip-all' 

When building on arm32v6, arm32v7, i386, and ppc64le, the configure check for PR_SET_VMA_ANON_NAME succeeds and so it is attempted to be used during build, but during build, it fails with the following error:

$ # configure line:
checking whether PR_SET_VMA_ANON_NAME is declared... yes
$ # build error during "make"
In file included from ./Include/internal/pycore_mmap.h:25,
                 from Objects/obmalloc.c:5:
/usr/include/sys/prctl.h:88:8: error: redefinition of 'struct prctl_mm_map'
   88 | struct prctl_mm_map {
      |        ^~~~~~~~~~~~
In file included from ./Include/internal/pycore_mmap.h:24:
/usr/include/linux/prctl.h:134:8: note: originally defined here
  134 | struct prctl_mm_map {
      |        ^~~~~~~~~~~~

But on amd64, arm64v8, riscv64, and s390x (or any arch on Alpine 3.22), the same error is encountered during the configure check, so the feature is disabled, and it doesn't cause a build error.

$ # configure.log
configure:23951: checking whether PR_SET_VMA_ANON_NAME is declared
configure:23951: gcc -c    conftest.c >&5
In file included from conftest.c:415:
/usr/include/sys/prctl.h:103:1: error: redefinition of struct or union 'struct prctl_mm_map'
  103 | };
      | ^
In file included from conftest.c:414:
/usr/include/linux/prctl.h:134:8: note: originally defined here
  134 | struct prctl_mm_map {
      |        ^~~~~~~~~~~~
configure:23951: $? = 1

So, what is weird to me, is that the AC_CHECK_DECLS([PR_SET_VMA_ANON_NAME], succeeded on some architectures and then the same set of includes failed when in Include/internal/pycore_mmap.h. But also, this new feature is silently disabled (even if available in the kernel headers) because the configure check fails on Alpine because of the redefined struct in musl libc.

I think an #ifdef __GLIBC__ or similar could be used to only include both headers when using glibc, but maybe it is more complex than that.


Full build setup: https://github.com/docker-library/python/blob/ac65a0ec34172eb865a8cef47fed3dc71a38d419/3.15-rc/alpine3.23/Dockerfile
Full build log: https://doi-janky.infosiftr.net/job/meta/view/builds/job/arm32v7/job/build/88902/console

Linked PRs
  • gh-143730
  • gh-143839
  • gh-148771

貢獻指南

開啟貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

研究方向

從 Include/internal/pycore_mmap.h、針對 PR_SET_VMA_ANON_NAME 的 AC_CHECK_DECLS 檢查以及 Objects/obmalloc.c 中的失敗開始。使用連結的 Dockerfile 在 Alpine Linux 3.23 上重現建置,並比較不同架構和 configure 日誌。當受影響的 Alpine 建置不再因重新定義的結構體而失敗,且功能檢查的行為保持一致時,即視為完成。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
c, linux, python
領域
build-system, operating-systems
Issue 類型
缺陷
難度
4/5
預估耗時
3-5 天
活躍度
停滯
描述清晰度
基本清楚
新手友好度
25/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。