bootstrap: red en el builder para el vendoring Rust (cargo vendor)
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) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
f6dcf1028d
commit
09034a5e2b
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user