From 77f8b3e3ec05c2d09dd23da1b118d8ecbd41e731 Mon Sep 17 00:00:00 2001 From: sergio Date: Wed, 5 Aug 2026 15:33:50 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=AA=B5=20cosmic:=20el=20log=20de=20MI=20v?= =?UTF-8?q?alidaci=C3=B3n=20viajaba=20horneado=20en=20el=20USB,=20y=20la?= =?UTF-8?q?=20salida=20sal=C3=ADa=20doble?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dos defectos que juntos hicieron ilegible el 3er viaje. 1. LOG CONTAMINADO. Los logs de sesión van a disco para sobrevivir al apagón en metal — bien— pero validar la imagen en QEMU ESCRIBE DENTRO DEL FICHERO DE IMAGEN, y después se quema. El usuario grepeó /var/log/cosmic en su máquina y leyó `drm=virtio-pci`: mi corrida en QEMU, no la suya. Un log viejo que parece nuevo es peor que no tener log. Fix: la imagen crea /var/log/cosmic VACÍO como último paso. Y la regla —validar sobre una COPIA, o regenerar antes de quemar— queda escrita donde se comete. 2. SALIDA DOBLE. `say` tee'aba a /dev/console siempre. Lanzado a mano desde el getty, stdout YA es la pantalla, y /dev/console es tty0 = la MISMA pantalla cuando el cmdline llega vacío (la firmware del OptiPlex no aplica el CONFIG_CMDLINE horneado). Cada línea salía dos veces, entreverada con lo que arje-zero escribe a consola. Eso es lo que se leía como «basura de init»: no era ruido ajeno, era el propio script. Ahora /dev/console sólo si `[ -t 1 ]` es falso. Co-Authored-By: Claude Opus 5 (1M context) --- scripts/cosmic/cosmic-start.sh | 7 ++++++- scripts/cosmic/metal-desktop-image.sh | 10 ++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/scripts/cosmic/cosmic-start.sh b/scripts/cosmic/cosmic-start.sh index 76cbf8b6..4e167fb5 100755 --- a/scripts/cosmic/cosmic-start.sh +++ b/scripts/cosmic/cosmic-start.sh @@ -34,7 +34,12 @@ LOG=/var/log/cosmic mkdir -p "$LOG" 2>/dev/null [ -d "$LOG" ] && [ -w "$LOG" ] || LOG=/tmp -say() { echo "== cosmic :: $*" | tee -a /dev/console /dev/ttyS0 "$LOG/cosmic-start.log" 2>/dev/null; } +# /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. +[ -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; } diff --git a/scripts/cosmic/metal-desktop-image.sh b/scripts/cosmic/metal-desktop-image.sh index 76a0ab10..18212bdc 100755 --- a/scripts/cosmic/metal-desktop-image.sh +++ b/scripts/cosmic/metal-desktop-image.sh @@ -253,6 +253,16 @@ cat > "$MERGED/etc/motd" <<'MOTD' MOTD +# ── /var/log/cosmic VACÍO, y no es un detalle ─────────────────────────────────────────────────── +# Los logs de la sesión van a disco (para que sobrevivan al apagón en metal), pero eso crea una +# trampa: si se valida la imagen arrancándola en QEMU, esa corrida ESCRIBE DENTRO DEL FICHERO DE +# IMAGEN, y al quemarla el USB se lleva el log de la prueba. Pasó: el usuario grepeó el log en metal +# y leyó `drm=virtio-pci` — mi corrida en QEMU, no la suya. Un log viejo que parece nuevo es peor que +# no tener log. +# REGLA: validar sobre una COPIA de la imagen, o regenerarla antes de quemar. Esto es el cinturón. +rm -rf "$MERGED/var/log/cosmic" +install -d -m 755 "$MERGED/var/log/cosmic" + mkdir -p "$MERGED/root/.config" "$MERGED/root/.cache" "$MERGED/run/user/0" "$MERGED/tmp" chmod 1777 "$MERGED/tmp"