diff --git a/docs/state/targets.toml b/docs/state/targets.toml index 497a2231..8c720b97 100644 --- a/docs/state/targets.toml +++ b/docs/state/targets.toml @@ -24,6 +24,12 @@ descripcion = "userland foundational C: la distro arranca y se usa (shell, VCS, # Lift verbatim de BASE_SYSTEM_PKGS (scripts/product-userland-from-repo.sh). De-Alpinizado y firmado, # tandas base-system-1..3. paquetes = [ + # `gcc-libs` (2026-09-14): `libgcc_s.so.1` y `libstdc++.so.6`. Estaba sellado y declarado sólo en + # los CUATRO perfiles de escritorio — y lo necesita cualquier binario ajeno que no sea estático + # puro. Se vio al traer el toolchain oficial de Rust: `rustc` arrancó (el cargador musl ya está, + # `musl-shared`) y murió con `Error loading shared library libgcc_s.so.1`. La lección de `foot` + # otra vez, y van tres hoy: el paquete existe y no viaja en la imagen que lo necesita. + "gcc-libs", # `os-release` (2026-09-14): la IDENTIDAD del sistema — nombre, URL, color y **el logo oficial**. # No existía: la caja decía «Host: vServer» y ni una palabra de takana. Va en `base` y no en `cli` # porque toda imagen de takana debe saber decir qué es, incluida la más pelada: lo lee cualquier @@ -1331,6 +1337,13 @@ paquetes = [ # sale 78 si el repo no existe. Una caja que se inventa su identidad soberana al arrancar es peor # que una caja sin peer. "minga", + # `rust-toolchain-bin` (2026-09-14): el compilador de Rust. Va en `servidor` y NO en `base` por + # tamaño —799 M— y porque una imagen de escritorio no compila nada; la caja que sirve el repo y + # construye sí. Es el paso 1 de tres: prebuilt ajeno (`foreign`) para desbloquear hoy; luego rustc + # desde fuente con el `llvm18` ya sellado; luego la cadena mrustc del selfhost. Sin compilador de + # Rust, la distro depende del LAB —un rootfs ajeno que ENTRA en el ArtifactHash— para poder + # reconstruir su propio instrumental, que son 12 crates y 42 555 líneas. + "rust-toolchain-bin", # `netup` (2026-09-10): el cliente DHCP propio que levanta la red al arrancar. Entra como RAÍZ # aunque su binario YA venga dentro del `product-rootfs`, y por una razón concreta: el del producto # está congelado en el artefacto sellado del bootstrap, así que un arreglo de netup no llega nunca diff --git a/recipes/rust-toolchain-bin.toml b/recipes/rust-toolchain-bin.toml index 4d01beb8..67773b9e 100644 --- a/recipes/rust-toolchain-bin.toml +++ b/recipes/rust-toolchain-bin.toml @@ -51,3 +51,32 @@ compile = "true" # `--disable-ldconfig`: no hay ldconfig acá y su ausencia haría fallar el instalador por un paso que # en una distro de binarios estáticos no significa nada. install = "./install.sh --prefix=/out/usr --disable-ldconfig --components=rustc,cargo,rust-std-x86_64-unknown-linux-musl" + +# ══ LO QUE COSTÓ HACERLO CORRER, MEDIDO EN LA CAJA ═════════════════════════════════════════════ +# El artefacto sella (799 M) y **no ejecuta** hasta tener dos cosas que la distro publica por +# separado. Ninguna se ve en el grafo: las dos son `sealed` y estaban en el perfil equivocado. +# +# 1. **El cargador musl.** `rustc` es PIE DINÁMICO (`NEEDED librustc_driver-*.so`, `NEEDED libc.so`). +# En el worker ni arranca —`cannot execute: required file not found`, que es como se ve la +# ausencia del intérprete—; en la caja sí, porque ahí está `musl-shared`. +# 2. **`libgcc_s.so.1`.** Con el cargador puesto, el siguiente error fue +# `Error loading shared library libgcc_s.so.1 … _Unwind_Resume: symbol not found`. Lo publica +# `gcc-libs`, que estaba sellado y declarado **sólo en los cuatro perfiles de escritorio**. Una +# línea en `base` y listo. (Tercera vez hoy que aparece la misma figura: el paquete existe y no +# viaja en la imagen que lo necesita.) +# +# Con eso: `rustc 1.97.0` y `cargo 1.97.0` responden en la caja. +# +# ══ Y NO HACE FALTA UN `cc` ════════════════════════════════════════════════════════════════════ +# El primer `rustc hola.rs` falla con `linker \`cc\` not found`: la caja no tiene compilador de C. +# No hace falta traer uno — **el toolchain trae su propio `lld`** +# (`lib/rustlib//bin/rust-lld` y su `gcc-ld/`), y con +# +# -C linker-flavor=ld.lld -C linker=<…>/rust-lld -C link-self-contained=yes +# +# enlaza y el binario CORRE. Probado en la caja: `fn main(){println!("ok");}` → `ok`. Es una +# propiedad que vale anotar: una distro sin compilador de C puede compilar Rust igual. +# +# ⚠ Pendiente (config del SITIO, no de la receta): que esas flags sean el default, con un +# `/etc/cargo/config.toml` o el `CARGO_TARGET_*_LINKER` correspondiente, para que `cargo build` +# funcione sin recordarlas.