el informe del agente de adentro: los cinco defectos y las tres trampas
Primer informe hecho DESDE la jaula, y vale más que cualquier inspección desde el anfitrión porque son las cosas con las que se choca al usarla. Queda registrado qué se arregló y —lo importante— DÓNDE vive cada arreglo: 1 y 2 en el upper, que es caché descartable, y por eso hay un guion que los repone tras cada recreate; 3 y 5 en el manifiesto; 4 en el worker. Del 4: se autorizó la clave de la caja, no la de root — credencial distinta y revocable. Del 5: takana NO se compila adentro; el binario es el musl del store, y lo que fallaba es que el target/release del anfitrión enlaza a /usr/bin/takana, que adentro es el de Arch. Y las tres trampas de orientación que el agente reportó: el store real es /store y los runbooks dicen ./store porque están escritos para el hub; hay dos checkouts y no son intercambiables; y el .fleet ausente no es defecto, lo repone la cosecha. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -3268,6 +3268,47 @@ y `groups` apuntan a `../../bin/busybox`— y se comprobó con `id` de root, de
|
||||
> que abre al agente. Es la misma familia que el `/etc/shadow` del §6.51: **la caja no avisa cuando
|
||||
> le falta algo esencial — se entera el que lo usa**.
|
||||
|
||||
### 6.54 🧭 Trabajar DESDE la jaula: lo que el agente de adentro reportó *(2026-09-18)*
|
||||
|
||||
El agente enjaulado pasó un informe de defectos —el primero hecho **desde adentro**— y vale más que
|
||||
cualquier inspección desde el anfitrión, porque son las cosas con las que se choca al usarla.
|
||||
|
||||
#### Lo que se arregló, y dónde vive cada arreglo
|
||||
|
||||
| # | defecto | dónde queda el arreglo |
|
||||
|---|---|---|
|
||||
| 1 | sin entrada en `/etc/passwd` para el uid de adentro ⇒ `ssh`/`git` mueren con *No user exists for uid 1001* | `jaula-preparar.sh` (upper) |
|
||||
| 2 | `/etc/ssh/ssh_config.d` es de la capa inferior, dueño fuera del mapa ⇒ `ssh` **aborta**, no degrada | `jaula-preparar.sh` (upper) |
|
||||
| 3 | `~/.ssh` en `ro` ⇒ `ssh` no puede escribir `known_hosts` | **manifiesto**: pasa a `rw` + semilla desde el anfitrión |
|
||||
| 4 | sin clave para el worker ⇒ `Permission denied (publickey)`, cero granja | clave **propia** de la caja autorizada en el worker |
|
||||
| 5 | sin `rsync`/`python`/`jq`/`b3sum`, y sin `takana` ejecutable | **manifiesto**: `packages`; y un `takana` que sale del store |
|
||||
|
||||
El **1 y el 2 viven en el `upper`**, que por el D3 es caché descartable: al primer `recreate` se
|
||||
pierden. Por eso existe `scripts/servidor/jaula-preparar.sh`, que los repone —escribiendo como la
|
||||
persona, no como root, para no dejarle ficheros que después no puede tocar—.
|
||||
|
||||
Sobre el **4**: se autorizó en el worker la clave **de la caja** (`sergio@caja`), no la de root. Es
|
||||
una credencial distinta y revocable: quitarla del `authorized_keys` del worker corta ese acceso sin
|
||||
tocar ningún otro. Comprobado: `ssh root@dev.gioser.net hostname` desde la caja contesta `PruebasIA`.
|
||||
|
||||
Sobre el **5**: `takana` **no se compila adentro**. El binario es el musl estático del store y corre
|
||||
igual dentro de una imagen glibc; lo que fallaba es que
|
||||
`/opt/takana/target/release/takana` del anfitrión es un enlace a `/usr/bin/takana`, y **adentro
|
||||
`/usr/bin` es el de Arch**. Queda `/work/sergio/bin/takana`, que elige el más reciente del store —no
|
||||
un hash cableado, para que sobreviva a un re-sellado— y el `target/release/takana` del clon apunta
|
||||
ahí.
|
||||
|
||||
#### Las tres trampas de orientación, que no son defectos pero cuestan una hora
|
||||
|
||||
- **El store real es `/store`**, 61 G y 1333 artefactos. Los runbooks y el `CLAUDE.md` dicen
|
||||
`takana build --store ./store` porque están escritos para el HUB; copiado literal en la caja, eso
|
||||
apunta a un store vacío dentro del clon. Desde la caja va `--store /store`.
|
||||
- **Hay dos checkouts y no son intercambiables**: `/work/sergio/takana` es el de trabajo —suyo, con
|
||||
push propio—, y `/opt/takana` es el del sistema: el que usan el cron, la granja y los servicios.
|
||||
Editar el segundo por costumbre es pisarle el árbol al latido.
|
||||
- **`scripts/farm/.fleet` ausente NO es un defecto** —el propio informe lo retiró—: `flota-permanente`
|
||||
está versionado y `cosecha-cron` lo repone.
|
||||
|
||||
### 6.51 🔥 Me dejé afuera de la caja — 20 minutos caída, y tres causas encadenadas *(2026-09-17)*
|
||||
|
||||
Crear una cuenta de usuario tiró el servidor de producción. Queda escrito entero porque **ninguna de
|
||||
|
||||
Reference in New Issue
Block a user