ensayo con los DATOS REALES de gioser: su gitea corriendo en takana — y el git de la distro no clona por HTTP
Sin tocar gioser (todo lectura) y en la VM desechable. Dentro de la VM: `<title>GioSer Gitea: Git with a cup of tea</title>`, 200, `/explore/repos` listando los repos de verdad (sergio/takana, tawasuyu/agora, card, chasqui, cosmos, khipu, llimphi…) y el clon de uno de ellos con 478 commits y HEAD correcto. 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, `integrity_check` ok, 44 filas en `repository`. Copiar el fichero a pelo mientras el servidor escribe es justo lo que no hay que hacer. Tres detalles que sólo aparecen con los datos puestos: · **El uid del origen no es el del destino.** Los ficheros llegan con su uid NUMÉRICO y el gitea de gioser es 969, no el 916 que declaraba la receta. 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 969, alineada con el origen. El ArtifactHash no se mueve (`[[user]]` está fuera de hash_inputs). · El `app.ini` de gioser escucha en `127.0.0.1:3002` porque allá caddy hace de proxy: la caja sirve, pero sólo desde dentro. `HTTP_ADDR`/`ROOT_URL` son adaptación, no copiado. · 🧨 **El `git` de la distro no puede clonar por HTTP**: `git: 'remote-http' is not a git command`. Medido sobre el artefacto sellado: `git-core/` trae `git-remote-ext`, `git-remote-fd` y `git-http-backend` (el lado SERVIDOR) y no `git-remote-http`; `strings` da 0 referencias a libcurl pese a que `curl` está en `[deps] build`. No se había notado porque en el hub se usa el git de Artix, no el sellado. Un hub nuevo no podría clonar el repo por HTTPS. Re-sellar `git` es raíz de `perfil.base` ⇒ unidad propia. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016Tf9T4vGzsMoT7eS8YzMFn
This commit is contained in:
@@ -1088,6 +1088,43 @@ relanzable).
|
|||||||
relanzar se usa `restart`**, o se mira `list-units` antes. Un `start` idempotente es trabajo de arje,
|
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.
|
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:** `<title>GioSer Gitea: Git with a cup of tea</title>`, 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
|
## 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:
|
Pedido explícito del usuario. El inventario de lo que ya hace el trabajo:
|
||||||
|
|||||||
+8
-4
@@ -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
|
# 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.
|
# 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
|
# ⚠ **969 NO es un número arbitrario: es el uid que gitea tiene EN GIOSER**, y alinearlo es lo que
|
||||||
# nada, hace falta que no se mueva. `shell = /bin/false` por defecto: una cuenta de servicio a la que
|
# hace barata la mudanza. Los 2,0 G de `/var/lib/gitea` llegan con su uid NUMÉRICO puesto; si el
|
||||||
# alguien pueda entrar es una puerta que nadie declaró.
|
# 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]]
|
[[user]]
|
||||||
name = "gitea"
|
name = "gitea"
|
||||||
uid = 916
|
uid = 969
|
||||||
home = "/var/lib/gitea"
|
home = "/var/lib/gitea"
|
||||||
|
|
||||||
# ── EL SERVICIO QUE ESTE PAQUETE TRAE (SDD 30) ──────────────────────────────────────────────────
|
# ── EL SERVICIO QUE ESTE PAQUETE TRAE (SDD 30) ──────────────────────────────────────────────────
|
||||||
|
|||||||
Reference in New Issue
Block a user