lab: los -dev al rootfs — es el unico sitio donde _curses se puede resolver

Decision del usuario. CPython construye sus modulos opcionales como .so
COMPARTIDOS y las .a del corpus NO son PIC («relocation R_X86_64_PC32 against
symbol 'stdscr'»), asi que declararlas en [deps] NO funciona: se probo una
por una. Las libs del rootfs son compartidas y si sirven.

Añadidos: libffi-dev ncurses-dev readline-dev sqlite-dev bzip2-dev xz-dev
expat-dev. Resultado VERIFICADO: el guardian de python3 importa los OCHO
modulos (_ctypes _curses readline sqlite3 bz2 lzma zlib pyexpat) y pasa. De
paso `libffi` sale de [deps]: ya lo aporta el lab.

openssl-dev NO va, deliberado: se de-Alpinizo porque el host-tool del kernel
enlaza el openssl del corpus desde el overlay; devolverlo podria cambiar el
artefacto del kernel. python3 sigue sin `ssl`.

Y SE CIERRA EL AGUJERO QUE ESTO ABRIA. Esas libs del rootfs ahora entran en
el CONTENIDO de un artefacto, asi que su version es parte de su identidad ⇒
van a TOOLCHAIN_PREFIXES. Sin eso habriamos reabierto en pequeño el mismo
fallo que 58d3161 cerro: instalar los -dev subio ncurses 6.5→6.6 y readline
8.3.1→8.3.3 —sin tocar gcc/rust/musl, lo confirmo el lock— y ese salto habria
cambiado el python3 producido SIN mover su direccion.

Coste: la huella del lab cambia ⇒ el corpus se re-hashea otra vez. Se hace
AHORA a proposito, con 194 artefactos, no con el corpus a medio construir.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sergio
2026-08-12 00:55:01 +00:00
co-authored by Claude Opus 5
parent 82f9055670
commit 1940a94a11
4 changed files with 53 additions and 6 deletions
+17 -1
View File
@@ -218,7 +218,23 @@ else
# con clang exige llvm-ar y llvm-objdump ⇒ sin esto configure aborta "Cannot find ar/llvm-objdump".
# Alpine deja los binarios en /usr/lib/llvm22/bin SIN symlinkear a /usr/bin (multi-versión); el paso
# 3a-ter de abajo los expone en el PATH estándar, igual que Alpine ya hace con `clang`.
NEEDED="make autoconf automake m4 patch coreutils libtool pkgconf bash binutils g++ zlib-dev rust cargo clang-dev clang-libs llvm22 linux-headers bubblewrap git curl kmod"
# `libffi-dev ncurses-dev readline-dev sqlite-dev bzip2-dev xz-dev expat-dev`: los HEADERS que
# CPython necesita para sus módulos opcionales. Sin ellos `configure` los omite EN SILENCIO y
# sella un intérprete mutilado que arranca bien; el fallo aparece días después en otra receta
# (`ModuleNotFoundError: No module named '_ctypes'` en gjs, `_curses` en gdm — 2026-08-11), y
# **310 recetas dependen de python3**.
#
# POR QUÉ EN EL ROOTFS Y NO COMO `[deps]` DE LA RECETA, que sería lo habitual: se intentó y NO
# FUNCIONA. CPython construye sus módulos opcionales como `.so` COMPARTIDOS y las `.a` del corpus
# NO son PIC ⇒ `ld.lld: relocation R_X86_64_PC32 cannot be used against symbol 'stdscr';
# recompile with -fPIC`. Las libs del rootfs son compartidas y sí sirven. Mientras no existan
# recetas PIC de esas libs, el lab es el único sitio donde esto se resuelve.
#
# ⚠ `openssl-dev` NO va, y es deliberado: se de-Alpinizó a `recipes/openssl.toml` porque el
# host-tool del kernel enlaza el openssl del corpus desde la capa overlay. Devolverlo al rootfs
# podría hacer que el kernel linkee el de Alpine y cambiar su artefacto. ⇒ python3 sigue sin
# módulo `ssl`; ninguna receta lo necesita para construir, `pip` sí lo necesitaría.
NEEDED="make autoconf automake m4 patch coreutils libtool pkgconf bash binutils g++ zlib-dev rust cargo clang-dev clang-libs llvm22 linux-headers bubblewrap git curl kmod libffi-dev ncurses-dev readline-dev sqlite-dev bzip2-dev xz-dev expat-dev"
missing=""
for pkg in $NEEDED; do
# apk info -e devuelve el paquete si está instalado, vacío si no.