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 Definitions

🔬 cosmic/metal: `cosmic-diag` — una corrida, toda la evidencia, incluido el dmesg

En metal cada iteración cuesta un viaje físico, así que la captura no puede depender
de que alguien recuerde los pasos. `cosmic-diag` corre la sesión y deja en
/var/log/cosmic: dmesg ANTES, run.txt de la sesión, y dmesg DESPUÉS.

El dmesg de después es lo que faltaba. Medido en el OptiPlex 3060: cosmic-comp toma
seat0 (seatd lo confirma: "Opened client 1"), vive 4,9s y se DESCONECTA, pero su log
se corta a los 0,4s sin panic y con RUST_BACKTRACE=1 activo. Eso no es un error
manejado, es una señal — y si es SIGSEGV el kernel imprime
`cosmic-comp[PID]: segfault at ... in <BIBLIOTECA>`, que ES el diagnóstico.

Descartado antes de pedir otro viaje: la clausura está completa (iris_dri.so, libEGL
y cosmic-comp resuelven todos sus NEEDED en el rootfs), y los errores de tema no son
la causa — cosmic-panel sobrevive al mismo GetKey(list_button) y muere después, de
NoCompositor. Los tres clientes que "no encuentran compositor" son consecuencia.

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

e125b7a7c3545da9729ce7f1f4996cd3dad27cb0 · by sergio · (2 months ago) · parent b85423086 · browse the tree at this commit

Semantic delta

No definition changed: this change is text, documentation or data.

1 files · +27 −0

diff --git a/scripts/cosmic/metal-desktop-image.sh b/scripts/cosmic/metal-desktop-image.sh
index 18212bdc..bdc635c3 100755
--- a/scripts/cosmic/metal-desktop-image.sh
+++ b/scripts/cosmic/metal-desktop-image.sh
@@ -163,6 +163,30 @@ else
     echo "   ⚠ sin $AKEY ⇒ sshd escuchará pero será inalcanzable (depuración sólo a ciegas)"
 fi
 
+# ── cosmic-diag: UN comando que deja toda la evidencia en disco ─────────────────────────────────
+# Depurar en metal cuesta un viaje físico por iteración, así que el objetivo es que una corrida
+# capture TODO de una vez y sin que nadie tenga que acordarse de los pasos. Lo que importa acá y no
+# se estaba capturando: el `dmesg` DESPUÉS de la sesión. Si cosmic-comp muere por SIGSEGV —que es lo
+# que indica su log cortado a los 0,4 s, sin panic y con RUST_BACKTRACE=1— el kernel imprime
+# `cosmic-comp[PID]: segfault at ... in <BIBLIOTECA>`, y esa biblioteca ES el diagnóstico.
+cat > "$MERGED/usr/bin/cosmic-diag" <<'DIAG'
+#!/bin/sh
+export PATH=/usr/bin:/bin:/usr/sbin:/sbin
+L=/var/log/cosmic
+mkdir -p "$L"
+echo "== cosmic-diag: corriendo la sesión y capturando todo en $L (unos 60s) =="
+/bin/busybox dmesg > "$L/dmesg-antes.txt" 2>&1
+cosmic-start > "$L/run.txt" 2>&1 &
+sleep 50
+/bin/busybox dmesg > "$L/dmesg-despues.txt" 2>&1
+/bin/busybox sync
+echo "== listo. Lo que importa: =="
+grep -aiE "segfault|general protection|trap |Code: " "$L/dmesg-despues.txt" | tail -5 || true
+echo "== (si no salió nada arriba, no fue SIGSEGV: cosmic-comp salió por su cuenta) =="
+echo "== evidencia completa en $L — apagá y traé el USB =="
+DIAG
+chmod 0755 "$MERGED/usr/bin/cosmic-diag"
+
 # ── getty en tty1: el prompt TIENE que salir por la PANTALLA ────────────────────────────────────
 # Lección del 1er viaje físico de KDE, que costó un USB quemado: el CMDLINE horneado es
 # `console=tty0 console=ttyS0,115200 …` y el kernel hace /dev/console = la ÚLTIMA `console=` ⇒ ttyS0.
@@ -244,6 +268,9 @@ cat > "$MERGED/etc/motd" <<'MOTD'
    Arrancar el escritorio:   cosmic-start
      ⇒ tiene que decir "GL por HARDWARE". Si dice SOFTWARE, el viaje no
        sirve: ScreenCast fallaría igual que en QEMU.
+   Si NO levanta:            cosmic-diag      <-- UN comando, deja todo en
+                             /var/log/cosmic/ (incluido el dmesg de después,
+                             que es donde el kernel nombra el segfault)
    Probar el portal:         portal-probe version
                              portal-probe screencast     <-- LO QUE VINIMOS A VER
    GPU detectada:            ls /dev/dri ; dmesg | grep -iE 'i915|drm'