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 1574Shell 204Rust 111Markdown 993763 Definiciones

đŸ©» cosmic: escribir a /dev/ttyS0 COLGABA el arranque en metal (open() espera DCD)

Diagnosticado por el usuario en el OptiPlex 3060 quitando los pipes de say().

Abrir un puerto serie sin portadora BLOQUEA en open() esperando DCD, salvo que el
termios tenga CLOCAL. El kernel pone CLOCAL cuando registra el puerto COMO CONSOLA,
y eso pasa en QEMU porque el cmdline lleva `console=ttyS0,115200`. En ese metal la
firmware NO aplica el CONFIG_CMDLINE horneado —el kernel arranca con `Command line:`
VACÍO— asĂ­ que ttyS0 es un puerto comĂșn, sin cable: el PRIMER say() se colgaba ahĂ­.

Explica los tres sĂ­ntomas que no cerraban:
- /var/log/cosmic se creaba (el mkdir va antes) pero el .log nunca aparecĂ­a;
- `cosmic-start > /salida.txt` daba VACÍO ⇒ parecía que el script no se ejecutaba,
  cuando estaba bloqueado en su primera lĂ­nea de salida;
- la corrida terminaba siempre en «log del compositor (primer tramo)»: no era el
  Ășltimo paso, era el dump() bloqueĂĄndose en el mismo sitio.

El serial no se pierde: cuando ES la consola, /dev/console YA ES ttyS0. Cuando no lo
es, no habĂ­a nadie del otro lado. En metal lo que sirve es el fichero de log.

Con say() destrabado, la detecciĂłn de GL quedĂł CONFIRMADA en metal por primera vez:
  == cosmic :: GL por HARDWARE — kernel drm=i915 + iris_dri.so (sin overrides)

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

b8542308633f9872dc0132a5baad0d62c0495442 · por sergio · (hace 2 meses) · padre 77f8b3e3e · ver el årbol en este commit

Delta semĂĄntico

Ninguna definiciĂłn cambiĂł: el cambio es de texto, documentaciĂłn o datos.

1 archivos · +20 −8

diff --git a/scripts/cosmic/cosmic-start.sh b/scripts/cosmic/cosmic-start.sh
index 4e167fb5..81842135 100755
--- a/scripts/cosmic/cosmic-start.sh
+++ b/scripts/cosmic/cosmic-start.sh
@@ -34,15 +34,27 @@ LOG=/var/log/cosmic
 mkdir -p "$LOG" 2>/dev/null
 [ -d "$LOG" ] && [ -w "$LOG" ] || LOG=/tmp
 
-# /dev/console SÓLO si nuestro stdout no es ya un terminal. Si el script lo lanzás a mano desde el
-# getty, stdout ES la pantalla y /dev/console (=tty0 cuando el cmdline llega vacĂ­o, como en la
-# firmware del OptiPlex) es LA MISMA pantalla ⇒ cada línea salía DOS VECES, entreverada con lo que
-# arje-zero escribe a la consola. Eso es lo que se leía como «basura»: no era ruido ajeno, era esto.
+# ⚠⚠ NUNCA ESCRIBIR A /dev/ttyS0 A CIEGAS — CUELGA EL ARRANQUE EN METAL ⚠⚠
+# Abrir un puerto serie sin portadora BLOQUEA en open() esperando DCD, salvo que el termios tenga
+# CLOCAL. El kernel pone CLOCAL cuando registra el puerto COMO CONSOLA, y eso ocurre en QEMU porque el
+# cmdline lleva `console=ttyS0,115200`. En el metal del OptiPlex 3060 la firmware NO aplica el
+# CONFIG_CMDLINE horneado (el kernel arranca con `Command line:` VACÍO) ⇒ ttyS0 es un puerto comĂșn,
+# sin cable, sin portadora: el PRIMER `say` se colgaba ahĂ­ para siempre. SĂ­ntoma exacto y desconcertante:
+# /var/log/cosmic se creaba (el mkdir va antes) pero el .log nunca aparecĂ­a, y redirigir a fichero
+# daba vacío — o sea que el script parecía no ejecutarse cuando en realidad estaba bloqueado en su
+# primera lĂ­nea de salida. Diagnosticado por el usuario quitando los pipes, 2026-08-05.
+#
+# El serial no se pierde: cuando ES la consola, /dev/console YA ES ttyS0. Cuando no lo es, no habĂ­a
+# nada que escuchara del otro lado. Escribir al fichero de log es lo que sirve en metal.
+#
+# Y /dev/console sĂłlo si stdout no es ya un terminal: lanzado a mano desde el getty, stdout ES la
+# pantalla y /dev/console (=tty0 con cmdline vacío) es LA MISMA ⇒ cada línea salía DOS VECES.
 [ -t 1 ] && CONS="" || CONS=/dev/console
-say()   { echo "== cosmic :: $*" | tee -a $CONS /dev/ttyS0 "$LOG/cosmic-start.log" 2>/dev/null; }
-# `dump` iba SÓLO al serial, y ahí se perdió la explicación de los tres fallos de la primera corrida
-# en la imagen de metal: sin puerto serie, los volcados se escriben a la nada. Ahora también a disco.
-dump()  { { echo "---- $1 ----"; cat "$1" 2>/dev/null; } | tee -a /dev/ttyS0 "$LOG/cosmic-start.log" >/dev/null 2>&1; }
+say()   { echo "== cosmic :: $*" | tee -a $CONS "$LOG/cosmic-start.log" 2>/dev/null; }
+# `dump` iba SÓLO al serial: en metal eso es a la vez escribir a la nada Y COLGARSE (ver arriba). Por
+# eso el 3er viaje terminaba siempre en «log del compositor (primer tramo)»: no era el Ășltimo paso,
+# era donde se bloqueaba. Ahora va al fichero de log, que es lo que se puede leer después.
+dump()  { { echo "---- $1 ----"; cat "$1" 2>/dev/null; } >> "$LOG/cosmic-start.log" 2>/dev/null; }
 alive() { s=$(sed -n 's/^State:[[:space:]]*//p' /proc/$1/status 2>/dev/null); case "$s" in ""|Z*) return 1;; *) return 0;; esac; }
 
 say "arrancando (pid $$)"