From 972eb6619dcf119cbb7916cd20e56ee42f00bc29 Mon Sep 17 00:00:00 2001 From: Sergio Date: Mon, 21 Sep 2026 19:28:17 +0000 Subject: [PATCH] =?UTF-8?q?espejo=20provisional=20del=20repo=20en=20takana?= =?UTF-8?q?.gioser.net/repo,=20sin=20firmar=20y=20dici=C3=A9ndolo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mientras repo.gioser.net espera su vhost (root), el catálogo queda servido bajo el sitio que Caddy ya atiende: /work/sergio/gioser-web/takana/repo, escribible sin root y con certificado válido. 173 paquetes; `install zsh` desde la URL pública tarda 0,22 s (1331 ficheros) y el binario corre. El índice va SIN FIRMA a propósito. La clave de release está en /root/.config/takana/keys y desde la jaula no se alcanza; firmarlo con otra habría sido peor que no firmarlo, porque una autoría inventada se lee igual que una real — es la «firma sin gestión de claves» que repo-perfil.sh se niega a hacer. Se le quitó la firma de la clave de prueba con la que se ensayó. Control: --require-signed lo rechaza. Dos cuidados, porque vive dentro del clon de git de otra web: repo/.gitignore con `*` (el directorio se ignora a sí mismo, así un `git add -A` en gioser-web no se lleva 173 .tkn) y hermanas.py no lo borra (sólo escribe index.html). Comprobado que el clon de la web sigue limpio. Se quita con un rm -rf el día que repo.gioser.net sirva el firmado. No cuenta como el segundo origen del ADR 0014: un origen sin firma no es un origen. --- docs/28-servidor-de-produccion.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/docs/28-servidor-de-produccion.md b/docs/28-servidor-de-produccion.md index ff5e2d68..d02d52a4 100644 --- a/docs/28-servidor-de-produccion.md +++ b/docs/28-servidor-de-produccion.md @@ -630,6 +630,34 @@ disfraza de «al día»: lo dice, sale ≠ 0 y **conserva el último estado buen lab. El aviso llega a cualquiera; el `install` que lo resuelve sigue siendo reproducir desde fuente (§5.4). Por eso `outdated` **no actualiza**: instalar es verificar, y eso no se cuelga de un cron. +### 5.8 El espejo provisional en `takana.gioser.net/repo` — y por qué va SIN FIRMAR *(2026-09-21)* + +Mientras `repo.gioser.net` espera su vhost (root, §5.7), el catálogo está servido bajo el sitio que +Caddy ya atiende: `/work/sergio/gioser-web/takana/repo`, que es un árbol **escribible sin root** y +con certificado válido. 173 paquetes, y `install zsh` desde la URL pública tarda **0,22 s** (1331 +ficheros) y el binario corre. + +**El índice va sin firma a propósito, y eso es lo único honesto que se podía hacer.** La clave de +release vive en `/root/.config/takana/keys` de la caja y desde la jaula no se alcanza. Firmarlo con +otra clave habría sido *peor* que no firmarlo: una autoría inventada se lee igual que una real, y es +exactamente la «firma sin gestión de claves» que `repo-perfil.sh` se niega a hacer (SDD 19 §3.2). Se +le quitó al índice la firma de la clave de prueba con la que se había ensayado. Control: +`--require-signed` lo **rechaza** — `Error: el repo no tiene firma de release`. + +Lo que sí conserva su valor: cada entrada lleva su `expected_hash` anclado, así que `install` +reconstruye desde fuente y **compara**. Lo que no se puede verificar acá es *quién* armó el +catálogo, no si el binario sale de la fuente que dice. + +Dos cuidados que lleva puestos, porque vive dentro del clon de git de otra web: + +- **`repo/.gitignore` con `*`**: el directorio se ignora a sí mismo. Un `git add -A` en `gioser-web` + no se lleva 173 `.tkn` por delante. Comprobado: `git status` del clon sigue limpio. +- **`hermanas.py` no lo borra**: sólo escribe `takana/index.html` y `hifas/index.html`, no arrasa el + directorio, así que el espejo sobrevive a `publicar-webs.sh`. + +Se quita con `rm -rf /work/sergio/gioser-web/takana/repo` el día que `repo.gioser.net` sirva el +firmado. **No es un espejo del ADR 0014**: un origen sin firma no cuenta como origen alternativo. + --- ## 6. La mudanza como experimento: el criterio de borrado