tawasuyu

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1572Shell 203Rust 109Markdown 993728 Definitions

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>

cf159956236c3eb4b277a8172ae949c80cca8346 · by Sergio · (4 months ago) · parent 64894d863 · browse the tree at this commit

Semantic delta · 1

crates/hammer-bootstrap/src/lib.rs

2 files · +10 −2

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.