diff --git a/docs/28-servidor-de-produccion.md b/docs/28-servidor-de-produccion.md index 116f0695..14126736 100644 --- a/docs/28-servidor-de-produccion.md +++ b/docs/28-servidor-de-produccion.md @@ -1088,6 +1088,43 @@ relanzable). relanzar se usa `restart`**, o se mira `list-units` antes. Un `start` idempotente es trabajo de arje, no de esta imagen; queda anotado río arriba. +### 6.13 🧪 Ensayo con los DATOS REALES de gioser — el gitea de la caja vieja corriendo en takana + +Sin tocar gioser (todo lectura) y en la VM desechable. Es el ensayo que faltaba antes de cualquier +cutover, y trajo cuatro cosas que no se ven en el papel. + +**El snapshot de la DB se saca en caliente y sale consistente.** `sqlite3 gitea.db ".backup …"` con +el servidor VIVO: **1,5 s para 314 M**, `pragma integrity_check` → `ok`, 44 filas en `repository`. +Copiar el fichero a pelo con el servidor escribiendo es lo que NO hay que hacer; la API de backup de +sqlite existe justo para esto. + +**Resultado, medido dentro de la VM:** `GioSer Gitea: Git with a cup of tea`, 200, y +`/explore/repos` listando los repos de verdad (`sergio/takana`, `tawasuyu/agora`, `card`, `chasqui`, +`cosmos`, `khipu`, `llimphi`…). Y el clon de uno de los repos copiados: **478 commits**, HEAD +correcto, ficheros reales. + +#### Los tres detalles que sólo aparecen con los datos puestos + +1. **El uid del origen no es el del destino.** Los ficheros llegan con su uid NUMÉRICO (`1001` en el + rsync de prueba; el gitea de gioser es **969**) y el `[[user]]` declaraba 916. O se chownean 2 G + —lento, y hay que acordarse— o gitea no puede leer sus datos, **y eso no falla al copiar: falla + al arrancar**. La receta pasa a declarar **969**, alineado con el origen. +2. **El `app.ini` de gioser escucha en `127.0.0.1:3002`**, porque allá caddy hace de proxy. Copiado + tal cual, la caja sirve — pero sólo desde dentro. El `HTTP_ADDR`/`HTTP_PORT` y el `ROOT_URL` son + parte de la adaptación, no del copiado. +3. 🧨 **El `git` de la distro NO puede clonar por HTTP.** `git clone http://…` dentro de la imagen: + + git: 'remote-http' is not a git command. See 'git --help'. + fatal: remote helper 'http' aborted session + + Medido sobre el ARTEFACTO sellado: `/usr/libexec/git-core/` trae `git-remote-ext`, `git-remote-fd` + y `git-http-backend` (el lado SERVIDOR), y **no** `git-remote-http`/`-https`; `strings` del binario + da **0** referencias a libcurl, pese a que `curl` está en `[deps] build`. Nadie lo había notado + porque en el hub el `git` que se usa es el de Artix, no el sellado. Es + [[subcomando-sin-driver]] otra vez: instalado, con contenido, reproducible… y sin el camino que + hace falta. **Un hub nuevo no podría clonar el repo por HTTPS.** Arreglarlo re-sella `git`, que es + raíz de `perfil.base` ⇒ unidad propia, no de paso. + ## 7. Reusar los scripts que ya existen, y no escribir de nuevo Pedido explícito del usuario. El inventario de lo que ya hace el trabajo: diff --git a/recipes/gitea.toml b/recipes/gitea.toml index aa1962ad..a92973d7 100644 --- a/recipes/gitea.toml +++ b/recipes/gitea.toml @@ -66,12 +66,16 @@ install = "true" # 1000» hace que dos imágenes del mismo perfil salgan con dueños distintos y el rootfs deje de # reproducir **sin que nada falle** — los ficheros se ven iguales y `ls -l` dice otro número. # -# 916 es el uid que Alpine reserva para `git`/gitea en sus `setup-*`; no hace falta que coincida con -# nada, hace falta que no se mueva. `shell = /bin/false` por defecto: una cuenta de servicio a la que -# alguien pueda entrar es una puerta que nadie declaró. +# ⚠ **969 NO es un número arbitrario: es el uid que gitea tiene EN GIOSER**, y alinearlo es lo que +# hace barata la mudanza. Los 2,0 G de `/var/lib/gitea` llegan con su uid NUMÉRICO puesto; si el +# destino usara otro, o se chownean 2 G (lento, y hay que acordarse) o gitea no puede leer sus +# propios datos — y eso no falla al copiar, falla al arrancar. Medido en el ensayo con datos reales +# (SDD 28 §6.13): los ficheros llegaron como `1001` y hubo que chownear a mano. +# `shell = /bin/false` por defecto: una cuenta de servicio a la que alguien pueda entrar es una +# puerta que nadie declaró. [[user]] name = "gitea" -uid = 916 +uid = 969 home = "/var/lib/gitea" # ── EL SERVICIO QUE ESTE PAQUETE TRAE (SDD 30) ──────────────────────────────────────────────────