poda-fuentes: no corría en takana — y la causa era que la caja NO TIENE /dev/fd
El latido, corrido desde la caja, moría así: 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 NINGÚN `<(...)` de NINGÚN script del hub funcionaba allá — esto era sólo el primero en toparse. Dos arreglos, y los dos hacían falta: 1. En el script: `<(...)` fuera (fichero temporal, que anda en cualquier shell y con cualquier /dev) y `df -B1 --output=avail`, que es GNU, por `df -k` + awk. Es la poda de `work/sources`, justo lo que un hub necesita para no llenarse. 2. 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 — queda anotado. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+13
-3
@@ -68,8 +68,18 @@ MINUTOS=$((HORAS * 60))
|
|||||||
|
|
||||||
poda() {
|
poda() {
|
||||||
local libre_antes libre_despues n
|
local libre_antes libre_despues n
|
||||||
libre_antes=$(df -B1 --output=avail "$FUENTES" | tail -1)
|
# ⚠ `df -B1 --output=avail` es GNU y **busybox no lo tiene** (medido en la caja takana el
|
||||||
mapfile -t viejos < <(find "$FUENTES" -mindepth 1 -maxdepth 1 -type d -mmin "+$MINUTOS" | sort)
|
# 2026-09-17). `df -k` + awk da los mismos bytes y anda en los dos mundos.
|
||||||
|
libre_antes=$(df -k "$FUENTES" | tail -1 | awk '{print $4*1024}')
|
||||||
|
# ⚠ NADA DE `<(...)` ACÁ. La sustitución de procesos de bash necesita `/dev/fd`, y una caja
|
||||||
|
# takana **no lo tiene** (gioser sí: `/dev/fd -> /proc/self/fd`). El síntoma no nombra la causa:
|
||||||
|
# `line 72: /dev/fd/63: No such file or directory` y después `viejos: unbound variable`, porque el
|
||||||
|
# `mapfile` nunca corrió. Un fichero temporal anda en cualquier shell y en cualquier /dev.
|
||||||
|
local lista; lista=$(mktemp)
|
||||||
|
find "$FUENTES" -mindepth 1 -maxdepth 1 -type d -mmin "+$MINUTOS" | sort > "$lista"
|
||||||
|
viejos=()
|
||||||
|
while IFS= read -r _l; do [ -n "$_l" ] && viejos+=("$_l"); done < "$lista"
|
||||||
|
rm -f "$lista"
|
||||||
n=${#viejos[@]}
|
n=${#viejos[@]}
|
||||||
local quedan
|
local quedan
|
||||||
quedan=$(find "$FUENTES" -mindepth 1 -maxdepth 1 -type d -not -mmin "+$MINUTOS" | wc -l)
|
quedan=$(find "$FUENTES" -mindepth 1 -maxdepth 1 -type d -not -mmin "+$MINUTOS" | wc -l)
|
||||||
@@ -89,7 +99,7 @@ poda() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
printf '%s\0' "${viejos[@]}" | xargs -0 -r rm -rf
|
printf '%s\0' "${viejos[@]}" | xargs -0 -r rm -rf
|
||||||
libre_despues=$(df -B1 --output=avail "$FUENTES" | tail -1)
|
libre_despues=$(df -k "$FUENTES" | tail -1 | awk '{print $4*1024}')
|
||||||
echo " borrados $n · libres $(gigas "$libre_despues") G · LIBERADO $(gigas $((libre_despues - libre_antes))) G"
|
echo " borrados $n · libres $(gigas "$libre_despues") G · LIBERADO $(gigas $((libre_despues - libre_antes))) G"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user