From cf159956236c3eb4b277a8172ae949c80cca8346 Mon Sep 17 00:00:00 2001 From: Sergio Date: Thu, 11 Jun 2026 15:20:06 +0000 Subject: [PATCH] =?UTF-8?q?bootstrap:=20builder=20carga=20overlay.ko=20?= =?UTF-8?q?=E2=80=94=20el=20sandbox=20de=20build=20lo=20exige=20en=20la=20?= =?UTF-8?q?VM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit El run en la VM avanzó hasta `configure` y ahí bwrap falló: `Can't make overlay mount … No such device`. Causa raíz: el kernel trae overlay como MÓDULO (CONFIG_OVERLAY_FS=m) y el initramfs arranca sin módulos cargados ⇒ ENODEV. El sandbox de hammer-build usa `bwrap --tmp-overlay` (raíz efímera sobre el toolchain), así que necesita overlayfs. Fix: rebuild-stage1 hace `insmod /toolchain/lib/overlay.ko` tras el shim del loader (overlay no tiene deps; vermagic del kernel destino). El toolchain suma `kmod` (insmod/modprobe). El `overlay.ko` es específico del kernel (no de Alpine): se inyecta aparte en el builder (.dev-fs/alpine/lib/overlay.ko), documentado en bootstrap-devfs.sh. Progreso del run: shim OK ⇒ bwrap/git/curl corren ⇒ fetch OK ⇒ configure arranca; overlay era el siguiente muro. 28 tests verdes. Co-Authored-By: Claude Opus 4.8 (1M context) --- crates/hammer-bootstrap/src/lib.rs | 6 +++++- scripts/bootstrap-devfs.sh | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/crates/hammer-bootstrap/src/lib.rs b/crates/hammer-bootstrap/src/lib.rs index ac01ba7e..4ed2da55 100644 --- a/crates/hammer-bootstrap/src/lib.rs +++ b/crates/hammer-bootstrap/src/lib.rs @@ -507,7 +507,11 @@ set -eu /bin/mkdir -p /lib /bin/cp -f /toolchain/lib/ld-musl-x86_64.so.1 /lib/ld-musl-x86_64.so.1 export LD_LIBRARY_PATH=/toolchain/lib:/toolchain/usr/lib -export PATH=/toolchain/usr/bin:/toolchain/usr/sbin:/toolchain/bin:/usr/bin:/bin:/sbin +export PATH=/toolchain/usr/bin:/toolchain/usr/sbin:/toolchain/bin:/toolchain/sbin:/usr/bin:/bin:/sbin +# overlay es módulo (CONFIG_OVERLAY_FS=m) y el initramfs arranca sin módulos cargados: el sandbox de +# build (bwrap --tmp-overlay) lo exige ⇒ ENODEV sin esto. Lo cargamos del toolchain (insmod=kmod, +# vermagic del kernel destino). Idempotente: si ya está, insmod falla y lo ignoramos. +insmod /toolchain/lib/overlay.ko 2>/dev/null || true export HAMMER_ROOTFS=/toolchain # el sandbox de build: el toolchain (variante a, desde Alpine) export HAMMER_WORK=/work export HAMMER_CACHE= diff --git a/scripts/bootstrap-devfs.sh b/scripts/bootstrap-devfs.sh index 6a833a48..395f32dc 100755 --- a/scripts/bootstrap-devfs.sh +++ b/scripts/bootstrap-devfs.sh @@ -121,7 +121,11 @@ else # hammer-build con su propio toolchain. En el host estas tres las aporta el sistema, pero en la # VM el toolchain ES el único userland capaz, así que deben vivir aquí: `bwrap` anida el sandbox # de build, `git` rematerializa las fuentes git (git archive del mirror), `curl` baja tarballs. - NEEDED="make autoconf automake m4 patch coreutils libtool pkgconf bash binutils rust cargo linux-headers bubblewrap git curl" + # `kmod` aporta insmod/modprobe: en la VM el sandbox de build usa overlay (módulo del kernel, + # CONFIG_OVERLAY_FS=m) y el initramfs arranca sin módulos cargados, así que el builder debe poder + # cargarlo. El `overlay.ko` en sí es específico del kernel destino (no de Alpine): se inyecta + # aparte en el builder (ver docs/runbooks/stage1-vm-boot.md §8c). + NEEDED="make autoconf automake m4 patch coreutils libtool pkgconf bash binutils rust cargo linux-headers bubblewrap git curl kmod" missing="" for pkg in $NEEDED; do # apk info -e devuelve el paquete si está instalado, vacío si no.