python / python/cpython

failure building Python 3.15.0a3 on Alpine

Aperta
#143,632 9 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

build OS-unsupported type-bug
Lingua principale
Python
Stelle
77.2k
Fork
35.9k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

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

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia da Include/internal/pycore_mmap.h, dal controllo AC_CHECK_DECLS per PR_SET_VMA_ANON_NAME e dal failure in Objects/obmalloc.c. Riproduci la build su Alpine Linux 3.23 usando il Dockerfile collegato e confronta le architetture e i log di configure. Il lavoro è completato quando le build Alpine interessate non falliscono più a causa della struct ridefinita e il controllo della funzionalità si comporta in modo coerente.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
c, linux, python
Ambito
build-system, operating-systems
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
25/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.