bootstrap: builder carga overlay.ko — el sandbox de build lo exige en la VM

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) <noreply@anthropic.com>
This commit is contained in:
Sergio
2026-06-11 15:20:06 +00:00
co-authored by Claude Opus 4.8
parent 64894d863c
commit cf15995623
2 changed files with 10 additions and 2 deletions
+5 -1
View File
@@ -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=
+5 -1
View File
@@ -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.