harkaq: declarar deps medidas por el kernel (cosecha automática)
Cosecha desatendida de la campaña harkaq. Cada dep de acá la denunció el audit de Landlock en un build real: el kernel vio al build usarla sin declararla, y el store del hub confirma qué artefacto la provee (deuda DECLARABLE, §4.5). Recetas:coreutils elfutils expat file flex gawk No se tocó ninguna receta con deuda IRREDUCIBLE: declarar algo que el store no provee rompería el build en vez de arreglarlo. Esas van a tandas/needs-review-harkaq. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -31,6 +31,9 @@ link = "static"
|
|||||||
# gettext (ausente). Las flags van al ./configure (AutoconfReady).
|
# gettext (ausente). Las flags van al ./configure (AutoconfReady).
|
||||||
flags = ["--enable-single-binary", "--disable-nls"]
|
flags = ["--enable-single-binary", "--disable-nls"]
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
build = ["busybox", "make"]
|
||||||
|
|
||||||
[build.phases]
|
[build.phases]
|
||||||
# install por defecto (make install DESTDIR=/out) deja el multicall en /out/usr/bin/coreutils; lo
|
# install por defecto (make install DESTDIR=/out) deja el multicall en /out/usr/bin/coreutils; lo
|
||||||
# relocamos a /out/bin/coreutils, que es donde apuntan los symlinks del toolchain Alpine (/bin/cp →
|
# relocamos a /out/bin/coreutils, que es donde apuntan los symlinks del toolchain Alpine (/bin/cp →
|
||||||
|
|||||||
@@ -31,6 +31,9 @@ target = "x86_64-linux-musl"
|
|||||||
link = "dynamic"
|
link = "dynamic"
|
||||||
zig_version = "0.13.0"
|
zig_version = "0.13.0"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
build = ["binutils"]
|
||||||
|
|
||||||
[build.phases]
|
[build.phases]
|
||||||
configure = """
|
configure = """
|
||||||
mkdir -p compat && \
|
mkdir -p compat && \
|
||||||
|
|||||||
@@ -13,6 +13,9 @@ target = "x86_64-linux-musl"
|
|||||||
link = "static"
|
link = "static"
|
||||||
flags = []
|
flags = []
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
build = ["make"]
|
||||||
|
|
||||||
[build.phases]
|
[build.phases]
|
||||||
# --with-pic: el .a estático lleva objetos PIC ⇒ enlazable dentro de .so (Mesa liga libexpat en
|
# --with-pic: el .a estático lleva objetos PIC ⇒ enlazable dentro de .so (Mesa liga libexpat en
|
||||||
# libgallium/xmlconfig; sin PIC: «R_X86_64_PC32 ... recompile with -fPIC»). PIC es superset.
|
# libgallium/xmlconfig; sin PIC: «R_X86_64_PC32 ... recompile with -fPIC»). PIC es superset.
|
||||||
|
|||||||
@@ -17,6 +17,9 @@ target = "x86_64-linux-musl"
|
|||||||
link = "static"
|
link = "static"
|
||||||
flags = []
|
flags = []
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
build = ["make"]
|
||||||
|
|
||||||
[build.phases]
|
[build.phases]
|
||||||
# de build() de Alpine (traducido; el lab provee $CBUILD/$CHOST — Etapa G Fase 3; revisá --shared para estático):
|
# de build() de Alpine (traducido; el lab provee $CBUILD/$CHOST — Etapa G Fase 3; revisá --shared para estático):
|
||||||
compile = '''
|
compile = '''
|
||||||
|
|||||||
@@ -24,6 +24,9 @@ link = "dynamic"
|
|||||||
# bueno por-receta ⇒ gcc deja de hacer falta (toolchain 100% zig). No es input del 4/4. SDD 11 §7.2b.
|
# bueno por-receta ⇒ gcc deja de hacer falta (toolchain 100% zig). No es input del 4/4. SDD 11 §7.2b.
|
||||||
zig_version = "0.13.0"
|
zig_version = "0.13.0"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
build = ["busybox"]
|
||||||
|
|
||||||
[build.phases]
|
[build.phases]
|
||||||
configure = "./configure --prefix=/usr --disable-nls --disable-shared"
|
configure = "./configure --prefix=/usr --disable-nls --disable-shared"
|
||||||
compile = "make -j\"$(nproc)\""
|
compile = "make -j\"$(nproc)\""
|
||||||
|
|||||||
@@ -17,6 +17,9 @@ target = "x86_64-linux-musl"
|
|||||||
link = "static"
|
link = "static"
|
||||||
flags = []
|
flags = []
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
build = ["busybox", "make"]
|
||||||
|
|
||||||
[build.phases]
|
[build.phases]
|
||||||
# de build() de Alpine (traducido; el lab provee $CBUILD/$CHOST — Etapa G Fase 3; revisá --shared para estático):
|
# de build() de Alpine (traducido; el lab provee $CBUILD/$CHOST — Etapa G Fase 3; revisá --shared para estático):
|
||||||
compile = '''
|
compile = '''
|
||||||
|
|||||||
@@ -26,6 +26,16 @@ set -u
|
|||||||
HUB="$(cd "$(dirname "$0")/../.." && pwd)"
|
HUB="$(cd "$(dirname "$0")/../.." && pwd)"
|
||||||
cd "$HUB"
|
cd "$HUB"
|
||||||
WORKER="${1:?uso: harvest-harkaq.sh root@<ip>}"
|
WORKER="${1:?uso: harvest-harkaq.sh root@<ip>}"
|
||||||
|
|
||||||
|
# LOCK: dos cosechas a la vez editarían recetas y harían `git commit` en paralelo = árbol
|
||||||
|
# corrupto. El harvest es lento (re-indexa el store por veredicto), así que un ciclo puede pisar
|
||||||
|
# al siguiente. flock con -n: si ya hay una corriendo, esta sale limpia en vez de solaparse.
|
||||||
|
LOCK="$HUB/work/.harvest-harkaq.lock"
|
||||||
|
exec 9>"$LOCK"
|
||||||
|
if ! flock -n 9; then
|
||||||
|
echo "$(date -u +%FT%TZ) otra cosecha en curso, salto este ciclo"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
SSH_KEY="${SSH_KEY:-$HOME/.ssh/github5}"
|
SSH_KEY="${SSH_KEY:-$HOME/.ssh/github5}"
|
||||||
REMOTE="${REMOTE:-/opt/hammer}"
|
REMOTE="${REMOTE:-/opt/hammer}"
|
||||||
SSH="ssh -i $SSH_KEY -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes"
|
SSH="ssh -i $SSH_KEY -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes"
|
||||||
@@ -81,8 +91,13 @@ done
|
|||||||
# que el diff SÓLO toque la línea `build = [...]`, para no arrastrar trabajo de otro agente.
|
# que el diff SÓLO toque la línea `build = [...]`, para no arrastrar trabajo de otro agente.
|
||||||
for f in $(git diff --name-only -- 'recipes/*.toml' 2>/dev/null); do
|
for f in $(git diff --name-only -- 'recipes/*.toml' 2>/dev/null); do
|
||||||
case " $tocadas " in *" $f "*) continue ;; esac
|
case " $tocadas " in *" $f "*) continue ;; esac
|
||||||
if git diff -U0 -- "$f" | grep -E '^[-+]' | grep -vE '^(---|\+\+\+)' | grep -qvE '^[-+]\s*(build\s*=|\[deps\])'; then
|
# ¿el diff toca SÓLO `[deps]`/`build =`? Se ignoran las líneas en blanco añadidas/quitadas
|
||||||
echo " ·· $f — modificado con algo que no es `[deps].build`: NO lo toco (¿otro agente?)"
|
# (`^[+-]\s*$`): add-deps mete un `\n` tras el bloque y ese `+` vacío hacía que el filtro
|
||||||
|
# rechazara recetas legítimas (flex, gawk…) como "de otro agente". Y el mensaje usa comillas
|
||||||
|
# SIMPLES: con dobles, el `[deps].build` entre backticks se ejecutaba como comando.
|
||||||
|
if git diff -U0 -- "$f" | grep -E '^[-+]' | grep -vE '^(---|\+\+\+)' \
|
||||||
|
| grep -vE '^[-+]\s*$' | grep -qvE '^[-+]\s*(build\s*=|\[deps\])'; then
|
||||||
|
echo ' ·· '"$f"' — el diff toca algo que no es [deps].build: NO lo toco (¿otro agente?)'
|
||||||
else
|
else
|
||||||
tocadas="$tocadas $f"
|
tocadas="$tocadas $f"
|
||||||
echo " ↻ $f — pendiente de un ciclo anterior, se commitea ahora"
|
echo " ↻ $f — pendiente de un ciclo anterior, se commitea ahora"
|
||||||
|
|||||||
Executable
+19
@@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# harvest-loop.sh — disparador de la cosecha harkaq SIN cron. Este laptop corre `arje-zero` como
|
||||||
|
# PID 1 (no systemd), no tiene crond activo y `crond` como usuario falla (necesita root para el
|
||||||
|
# pidfile). Instalé un crontab que NADIE leía: corrió 0 veces en toda la noche. Un loop nohup es
|
||||||
|
# el mecanismo que de verdad funciona acá — sin root, y sobrevive al fin de la sesión.
|
||||||
|
#
|
||||||
|
# nohup scripts/farm/harvest-loop.sh root@<ip> >>work/harvest-harkaq.log 2>&1 &
|
||||||
|
#
|
||||||
|
# NO sobrevive un reboot del laptop (a diferencia de un servicio en /etc/init.d, que necesitaría
|
||||||
|
# root). Tras reiniciar, relanzarlo. Parar: `pkill -f harvest-loop`.
|
||||||
|
set -u
|
||||||
|
cd "$(dirname "$0")/../.."
|
||||||
|
WORKER="${1:?uso: harvest-loop.sh root@<ip>}"
|
||||||
|
INTERVALO="${INTERVALO:-1800}"
|
||||||
|
echo "$(date -u +%FT%TZ) harvest-loop arrancado (worker $WORKER, cada ${INTERVALO}s)"
|
||||||
|
while :; do
|
||||||
|
scripts/farm/harvest-harkaq.sh "$WORKER" || echo "$(date -u +%FT%TZ) ciclo falló, sigo"
|
||||||
|
sleep "$INTERVALO"
|
||||||
|
done
|
||||||
Reference in New Issue
Block a user