diff --git a/docs/adr/0015-imagenes-ajenas.md b/docs/adr/0015-imagenes-ajenas.md index 670644e0..3e60969a 100644 --- a/docs/adr/0015-imagenes-ajenas.md +++ b/docs/adr/0015-imagenes-ajenas.md @@ -235,6 +235,52 @@ se compila al mismo `PolicySpec` que ya consume `harkaq-exec`. Un `dnf` que no alcanza `~/.ssh` es un argumento que ninguna distro ofrece. +### D8 — Qué se pinea (el suelo, no la instancia) y cuántas imágenes se curan + +Dos preguntas que se confunden y tienen respuestas distintas. + +**a) Pinear no congela: fija el punto de partida.** El digest ES la identidad, igual que +`alpine-minirootfs`, `zig` y el rootfs del lab. Lo que queda dentro y fuera del pin: + +| qué | ¿pineado? | cómo se actualiza | +|---|---|---| +| el rootfs base | **sí**, por sha256 | cambiar el digest en `instancia.toml` + `hammer qorpa recrear` | +| lo que instalás adentro (`dnf install steam`, `pacman -Syu`) | **no, y no puede estarlo** | con el gestor de la imagen, cuando quieras | + +Subir la base de versión es barato **precisamente por D3**: como el manifiesto es la verdad y el +`upper/` es caché, se cambia `base = "sha256:…"` y se recrea. Sin D3 sería un rebase sobre un blob +irreemplazable; con D3 son dos líneas y un rato de red. + +El riesgo real del pin —que upstream borre el tarball— **ya está resuelto por +[ADR 0013](0013-mirror-de-fuentes.md)**: la URL no entra en la identidad, sólo el sha256, así que +espejar una imagen es gratis y una imagen pineada no se puede perder. + +**b) Pinear ≠ lista cerrada.** `hammer qorpa traer --sha256` acepta cualquier rootfs. Lo corto +no es lo que *se puede* traer, sino lo que **nosotros probamos, espejamos y publicamos**, porque cada +imagen curada es una segunda cadena de suministro que hay que sostener (§NO-resuelve 3). Se curan +**tres**, y cada una entra por un trabajo distinto — no por sabor: + +| imagen | tipo | qué trabajo hace | pin (verificado 2026-09-03) | +|---|---|---|---| +| **Arch bootstrap** | 1 | juegos: `multilib` de 32 bits de primera clase, y SteamOS *es* Arch ⇒ extiende el argumento de D6 («la configuración exacta que Valve prueba») | `archlinux-bootstrap-2026.09.01-x86_64.tar.zst`, sha256 `895661bd…`, en `archive.archlinux.org` (archivado para siempre) | +| **Ubuntu base LTS** | 1 | binarios comerciales: Zoom, Slack, Discord, Spotify, Chrome, JetBrains se compilan y prueban contra esto | `ubuntu-base-24.04.3-base-amd64.tar.gz`, sha256 `6bc2cde3…`, `cdimage.ubuntu.com` + `old-releases` | +| **Steam Runtime «sniper»** | 2 | la única **sellable**: al no mutar entra al store por `file_drop` y su digest va al índice firmado — cadena de custodia nuestra | ⚠ pin sin verificar todavía | + +**Fedora queda BYO, no curada.** No por calidad —publica `Fedora-Container-Base-Generic-43-1.6` +con CHECKSUM firmado y se pinea igual de bien— sino porque hace el **mismo trabajo que Arch** en el +slot «fresco», y una tercera cadena mutable es justo la normalización que §NO-resuelve 3 quiere +evitar. El ejemplo de D3 sigue diciendo `fedora-43` a propósito: el mecanismo no distingue, y eso es +la demostración de que la terna es una decisión de curaduría, no del diseño. + +**c) Compartibles, más adelante.** Una imagen pineada es cuerpo inmutable direccionado por +contenido, así que **[ADR 0014](0014-distribucion-multiorigen.md) se le aplica sin cambiar nada**: +puede servirse desde cualquier origen porque el digest la verifica, y ausencia ⇒ seguir mientras que +contenido distinto ⇒ ABORTAR. No se hace el día uno, pero no hay que diseñar nada para que se pueda: +lo único que falta es la decisión. ⚠ Antes de publicarlas a terceros (no a nuestras propias +máquinas, que es lo que ya hace ADR 0013 con las fuentes) hay que mirar licencia y **marca**: +redistribuir un rootfs de Ubuntu o Fedora sin modificar suele estar permitido, pero la política de +marca es cosa aparte y no es una pregunta técnica. + --- ## Lo que este ADR admite que NO resuelve