From 09034a5e2ba65da3fe1e8d30f4db05d56513b5b7 Mon Sep 17 00:00:00 2001 From: Sergio Date: Thu, 11 Jun 2026 17:20:38 +0000 Subject: [PATCH] bootstrap: red en el builder para el vendoring Rust (cargo vendor) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Los componentes Rust hacen `cargo vendor` (baja de crates.io); la VM no tenía red ⇒ `failed to sync`. rebuild-stage1 ahora levanta una NIC e1000 (qemu user-mode 10.0.2.0/24): insmod del módulo e1000.ko (como overlay, =m y no cargado), config estática de eth0 (10.0.2.15, gw 10.0.2.2) y DNS de slirp (10.0.2.3). Best-effort: sin NIC es no-op (los componentes C no necesitan red). El workspace no tiene deps git, así que crates.io basta. e1000.ko se inyecta en el builder (.dev-fs/alpine). Driver de boot: añade `-netdev user -device e1000` y sube el techo a 4h (builds Rust bajo TCG). Co-Authored-By: Claude Opus 4.8 (1M context) --- crates/hammer-bootstrap/src/lib.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/crates/hammer-bootstrap/src/lib.rs b/crates/hammer-bootstrap/src/lib.rs index 25b20e15..82dd6a5b 100644 --- a/crates/hammer-bootstrap/src/lib.rs +++ b/crates/hammer-bootstrap/src/lib.rs @@ -512,6 +512,17 @@ export PATH=/toolchain/usr/bin:/toolchain/usr/sbin:/toolchain/bin:/toolchain/sbi # 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 +# Red para el vendoring de crates (los componentes Rust hacen `cargo vendor`, que baja de crates.io). +# NIC e1000 (qemu user-mode 10.0.2.0/24, módulo del kernel) + config estática + DNS de slirp. La VM +# sin NIC ⇒ todo esto es no-op (los componentes C no necesitan red). `ip` sale del toolchain (shim). +insmod /toolchain/lib/e1000.ko 2>/dev/null || true +if ip link show eth0 >/dev/null 2>&1; then + ip link set eth0 up + ip addr add 10.0.2.15/24 dev eth0 2>/dev/null || true + ip route add default via 10.0.2.2 2>/dev/null || true + printf 'nameserver 10.0.2.3\n' > /etc/resolv.conf + echo ">> red eth0: $(ip -4 -o addr show eth0 2>/dev/null | grep -o 'inet [0-9.]*' || echo down)" +fi # NOTA: el initramfs debe empaquetarse con `cpio --owner=root:root`. Si los ficheros del toolchain # quedan con el uid del que armó el builder (p. ej. 1000), ese uid no está mapeado en el userns de # bwrap (que mapea sólo 0→0) y el copy-up de overlay falla con EACCES al crear /opt/zig. Ver §8c.