🔬 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>
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'