From 449028f6cbcfdacc2d1a433f9087c6734d1e1f8a Mon Sep 17 00:00:00 2001 From: Sergio Date: Thu, 17 Sep 2026 15:56:53 +0000 Subject: [PATCH] =?UTF-8?q?la=20poda=20de=20fuentes=20ya=20corre=20en=20la?= =?UTF-8?q?=20caja:=205,4=20G=20=E2=80=94=20y=20van=2032,2=20G=20recuperad?= =?UTF-8?q?os=20hoy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit El paso de poda del latido moría con `/dev/fd/63: No such file or directory` y un `viejos: unbound variable` de consecuencia. La causa no era el script: la sustitución de procesos de bash necesita /dev/fd y UNA CAJA TAKANA NO LO TIENE (gioser sí). O sea que ningún `<(...)` de ningún script del hub funcionaba allá; éste fue el primero en toparse. Arreglado en los dos lados: /dev/fd -> /proc/self/fd en la caja con Card OneShot en el genesis (comprobado: `cat <(echo funciona)` responde), y en el script fuera `<(...)` y fuera `df -B1 --output=avail`, que es GNU — sin eso corría pero decía «libres 0.0 G», y un 0 se lee como disco lleno. Resultado: 2 árboles podados, 5,4 G. Con el store-gc del §6.44 son 32,2 G recuperados hoy en la caja: /store al 62 %, /work al 29 %. ⇒ Van dos parches con forma de Card OneShot para cosas que debería hacer el init (hostname y ahora /dev/fd). Es una lista que conviene no alargar. Co-Authored-By: Claude Opus 5 (1M context) --- docs/28-servidor-de-produccion.md | 34 +++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/docs/28-servidor-de-produccion.md b/docs/28-servidor-de-produccion.md index c03877b0..f4cab48a 100644 --- a/docs/28-servidor-de-produccion.md +++ b/docs/28-servidor-de-produccion.md @@ -2667,6 +2667,40 @@ función lo DICE en vez de escribir 0 — un cero inventado habría dicho «no h `find -newermt`, sustitución de procesos, y estos dos). El patrón ya no es anécdota: **un script del hub escrito en una máquina GNU no corre en la caja hasta que se prueba ahí.** +### 6.45 🧯 `poda-fuentes` tampoco corría — y la causa no era el script: **la caja no tiene `/dev/fd`** *(2026-09-17)* + +El latido, desde la caja, moría así en su paso de poda: + +``` + poda-fuentes.sh: line 72: /dev/fd/63: No such file or directory + poda-fuentes.sh: line 73: viejos: unbound variable + ⚠ poda de fuentes falló (rc=1) — sigo +``` + +El segundo error es consecuencia del primero (el `mapfile` nunca corrió) y el primero **no nombra la +causa**: la sustitución de procesos de bash (`<(...)`) necesita `/dev/fd`, y **una caja takana no lo +tiene**. gioser sí: `/dev/fd -> /proc/self/fd`. O sea que no era este script: **ningún `<(...)` de +ningún script del hub funcionaba allá**, y éste fue el primero en toparse. + +Por eso los arreglos son dos, y los dos hacían falta: + +1. **En la caja**: `/dev/fd -> /proc/self/fd`, con una Card **OneShot** en el `genesis` para que + sobreviva al reinicio (como la de `hostname`). Comprobado después: + `bash -c 'cat <(echo funciona)'` responde. ⇒ *lo correcto a futuro es que lo haga el init o el + product-rootfs, no una Card.* Van dos parches de esta forma; es una lista que conviene no alargar. +2. **En el script**: fuera `<(...)` (fichero temporal) y fuera `df -B1 --output=avail`, que es GNU — + con `df -k` + awk. Sin eso el script corría pero decía **`libres 0.0 G`**, porque el `df` fallaba + en silencio y el 0 se lee como un disco lleno. + +Con las dos cosas, la poda hizo su trabajo por primera vez en la caja: + +``` + 2 árbol(es) por encima del suelo · borrados 2 · libres 46.1 G · LIBERADO 5.4 G +``` + +⇒ **En total, 32,2 G recuperados hoy en la caja**: 26,8 G de artefactos superados (§6.44) y 5,4 G de +árboles de fuentes. `/store` al 62 %, `/work` al 29 %. + ## 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: