sergio/takana
> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…
Etapa G: kit de granja distribuida (worker VPS hub-and-spoke)
1#!/usr/bin/env bash
2# farm-worker-loop.sh — loop AUTÓNOMO del worker. Construye la cola recipes/incoming/ en
3# bucle (PROMOTE=0: sólo sella al store local, NO promueve, NO firma, NO toca gitea), con
4# watchdog de disco integrado. El hub (laptop) le mete recetas nuevas vía farm-sync.sh y le
5# baja el store sellado; este loop sólo muele lo que haya, 24/7, sin esperar a nadie.
6#
7# Idempotente: cada ciclo re-escanea incoming/; lo ya-sellado sale por cache-hit (instantáneo),
8# sólo construye lo nuevo. Cuando la cola está toda construida, duerme IDLE_SLEEP y reintenta.
9#
10# Lo lanza systemd (hammer-farm.service). Manual: JOBS=2 ./scripts/farm/farm-worker-loop.sh
11set -uo pipefail
12HAMMER_DIR="${HAMMER_DIR:-/opt/hammer}"
13cd "$HAMMER_DIR"
14. "$HOME/.cargo/env" 2>/dev/null || true
15JOBS="${JOBS:-$(nproc)}"
16IDLE_SLEEP="${IDLE_SLEEP:-300}"
17
18# --- watchdog de disco: cada 3 min borra work/sources/* que ningún bwrap activo bind-monta
19# (seguro: sellada=store CAS, en-cola=se re-extrae sola). Evita que el vendoring llene el disco.
20(
21 while :; do
22 sleep 180
23 active=$(pgrep -af bwrap 2>/dev/null | grep -oE 'work/sources/[^ ]+' | sort -u)
24 for d in work/sources/*/; do
25 [ -d "$d" ] || continue; dd=${d%/}
26 printf '%s\n' "$active" | grep -qxF "$dd" && continue
27 rm -rf "$dd"
28 done
29 done
30) &
31
32echo "$(date -u +%FT%TZ) worker-loop arrancado: JOBS=$JOBS IDLE_SLEEP=$IDLE_SLEEP"
33while :; do
34 n=$(ls recipes/incoming/*.toml 2>/dev/null | wc -l)
35 if [ "$n" -gt 0 ]; then
36 echo "$(date -u +%FT%TZ) ciclo: $n recetas en cola"
37 JOBS="$JOBS" PROMOTE=0 scripts/build-farm.sh 2>&1 | tail -50
38 echo "$(date -u +%FT%TZ) ciclo terminado; store sellado disponible para el hub"
39 else
40 echo "$(date -u +%FT%TZ) cola vacía; durmiendo ${IDLE_SLEEP}s"
41 fi
42 sleep "$IDLE_SLEEP"
43done