tawasuyu

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…

TOML 1181Shell 82Rust 62Markdown 521515 Sutichaykuna

⎇ 08fdec3bbfb0b812d91f80c84e96e04f5332a29c scripts/farm/farm-worker-loop.sh Shell · 43 siq'ikuna · 1.8 KB Ñawpa willay ch'uya

Etapa G: kit de granja distribuida (worker VPS hub-and-spoke) d949d10dc · sergio ·

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