Files
takana/recipes/netup.toml
T
SergioandClaude Opus 5 2613fe3951 servidor-image.sh: la imagen del perfil servidor, armada por script — y netup pasa a ser raíz
El ensamblado dejaba de ser reproducible en cuanto se cerraba la terminal: cuatro pasos, tres de
ellos con una trampa que no se ve. Ahora es un script, con las trampas escritas en su cabecera:

1. **El kernel.** `linux.toml` NO sirve para hcloud (apaga SCSI y el disco de Hetzner es virtio-SCSI).
   Va `linux-generic`, que sí trae `CONFIG_SCSI_VIRTIO=y` — dato que no está en la receta, lo pone
   `make defconfig`, y sólo se ve en el `.config` que el artefacto publica.
2. **El init se pisa.** La clausura del perfil trae busybox y su `/sbin/init` gana por hidratarse
   después. El script lo restaura e IMPRIME la reparación (`../bin/busybox → /usr/bin/arje-zero`),
   que es la diferencia entre arreglarlo y creer que estaba bien.
3. **EXDEV.** Comprueba con `findmnt` que STORE y WORKDIR estén en el MISMO montaje y aborta con un
   mensaje que dice qué hacer, en vez de fallar fichero por fichero a mitad de un `cp -al`.
4. **La clave es obligatoria.** Sin `AUTHKEYS` no arma nada: una instalación remota sin
   `authorized_keys` deja una máquina viva e INALCANZABLE, que es peor que una que no arrancó.

Y el cmdline va SIN `init=`, a propósito: así corre el wrapper que escribe `install-image.sh`, que
es quien monta `/store` y `/var/lib/hammer`.

**`netup` entra como raíz de `perfil.servidor`** aunque su binario ya venga dentro del
`product-rootfs`. La razón es concreta y se pagó hoy: el del producto está congelado en el artefacto
sellado del bootstrap, así que el arreglo de la ruta on-link NO llegaba a la imagen. Declarado como
raíz, la hidratación lo proyecta encima y la imagen lleva el vigente — verificado por sha256: la
imagen trae `a23df20e…` y el product-rootfs `a84b0a0d…`.

`recipes/netup.toml` re-pineado a `be383ea4` (el commit del arreglo).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RomoxEGZUhaT4pob1QSX5x
2026-09-10 20:15:39 +00:00

25 lines
1.1 KiB
TOML

# netup — configuración de red mínima Rust-nativa (link up + cliente DHCPv4 + addr/route/resolv).
#
# Etapa C pieza 5 (userland Rust-nativo): a diferencia de uutils/findutils/ripgrep (ADOPCIÓN de un
# binario maduro), netup es código takana-PROPIO (no hay cliente DHCP Rust maduro para adoptar al estilo
# ripgrep, y el workspace es 100% sync ⇒ rtnetlink/tokio quedan fuera). Mismo patrón de receta que
# hammerd/arje-zero: construye un crate del workspace takana a un commit fijado, deps vendoreadas para
# build hermético --offline, link con zig cc. Sólo depende de libc ⇒ vendor mínimo.
#
# Reemplaza el `ip` estático de busybox. Validado in-VM contra el DHCP de QEMU slirp (lease+ruta+DNS).
name = "netup"
version = "0.0.1"
license = "MIT"
[source]
# Repo del propio takana (origin). El commit es el identificador inmutable; subirlo cuando netup avance.
repo = "ssh://gitea@git.tawasuyu.net:2345/sergio/takana.git"
commit = "be383ea485def684cb5886530efcd5333548743d"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "static"
flags = ["-p", "netup"]