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 1572Shell 203Rust 109Markdown 993728 Sutichaykuna

selfhost-verify moría EN SILENCIO en cualquier máquina sin /lib/modules

El verify lanzado el 22 nunca dio veredicto: el log terminaba en la línea
«inyectar overlay.ko + e1000.ko» y no escribía una palabra más. No estaba
colgado ni corriendo — había muerto ahí mismo, dos días antes.

La causa es `set -euo pipefail` + un `find` sobre un directorio que no existe:

    src="$(find "$moddir" -name "$m.ko*" 2>/dev/null | head -1)"

Si `/lib/modules/$KVER` no está, `find` falla, con pipefail el pipe falla, la
asignación falla y `set -e` aborta ANTES del `echo "NO encontrado"` que el propio
bucle tenía preparado para ese caso. El `2>/dev/null` remata el silencio.

Pasa en el worker porque es un LXC de Proxmox: comparte el kernel del host
(7.0.0-3-pve) y NO trae árbol de módulos. Reproducido en los dos sentidos en un
bash de juguete: sin `|| true` el echo posterior no se imprime; con él, sigue y
`src` queda vacío, que es justo lo que el `else` esperaba.

Y conviene saber que para nuestros kernels la inyección no hace falta: llevan
OVERLAY_FS y E1000 built-in y ni siquiera tienen CONFIG_MODULES. El aviso nuevo
lo dice, para que nadie persiga módulos que la VM no va a cargar.

⚠ De paso, un error de método mío: di por «corriendo» un proceso muerto porque
`pgrep -f selfhost-verify` se matchea A SÍ MISMO cuando el patrón está en la
línea de comando del propio pgrep. Es la misma familia del `pkill -f` que me mató
la shell ayer. Para un proceso propio, mirar el PID o `pgrep -af` y leer lo que
devuelve.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

87a3969b1b8a1302e52eaebf24dadd7a941dee46 · ruwaq Sergio · (28 p'unchaw ñawpaq) · tayta 80227de9b · kay commitpi sach'ata qhaway

Semántico sayk'uy

Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.

1 qillqakuna · +13 −1

diff --git a/scripts/selfhost-verify.sh b/scripts/selfhost-verify.sh
index 0946885f..c5d7e789 100755
--- a/scripts/selfhost-verify.sh
+++ b/scripts/selfhost-verify.sh
@@ -138,8 +138,20 @@ KVER="$(file -bL "$KERNEL" 2>/dev/null | grep -oE 'version [0-9][^ ]*' | awk '{p
 [[ -n "$KVER" && -d "/lib/modules/$KVER" ]] || KVER="$(uname -r)"
 say "inyectar overlay.ko + e1000.ko (kernel $KVER) al toolchain"
 moddir="/lib/modules/$KVER"
+# ⚠ `|| true` y el chequeo del directorio no son paranoia: sin ellos este bloque MATA el script EN
+# SILENCIO en cualquier máquina sin `/lib/modules` — un contenedor, por ejemplo. Con `set -euo
+# pipefail`, un `find` sobre un directorio inexistente falla, el pipe falla, la asignación falla y
+# `set -e` aborta ANTES del `echo "NO encontrado"` que el `else` de abajo tenía preparado. Medido el
+# 2026-09-22 en el worker (LXC de Proxmox: comparte el kernel del host y no trae árbol de módulos):
+# el log terminaba exactamente en la línea de arriba, sin una palabra, y el veredicto no llegaba
+# nunca. Un fallo que se lee como «sigue corriendo».
+if [[ ! -d "$moddir" ]]; then
+    echo "    (sin $moddir — esta máquina no trae árbol de módulos; sigo sin inyectar)"
+    echo "    ⚠ sólo es un problema si el kernel de la VM los necesita: los nuestros traen"
+    echo "      OVERLAY_FS y E1000 built-in y ni siquiera tienen CONFIG_MODULES."
+fi
 for m in overlay e1000; do
-    src="$(find "$moddir" -name "$m.ko*" 2>/dev/null | head -1)"
+    src="$(find "$moddir" -name "$m.ko*" 2>/dev/null | head -1 || true)"
     if [[ -n "$src" ]]; then
         # Descomprimir si viene .ko.zst/.ko.gz/.ko.xz; el builder hace insmod del .ko crudo.
         case "$src" in