🔬 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>
This commit is contained in:
@@ -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'
|
||||
|
||||
Reference in New Issue
Block a user