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: