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 1182Shell 87Rust 63Markdown 541592 Definitions

la subpágina de humanoid se publica con rsync, y queda dicho por qué

El resto de los sitios se publican con `git pull` porque Caddy sirve de los clones. Con humanoid no
se puede: su repo es el proyecto Android y lo que se sirve son APK ya construidos más su índice —
salida de release que no vive en ningún repo, y que para regenerarse pide Android SDK + Java, que la
caja no tiene. Hasta que la caja construya Android, esto es un puente declarado, no el modelo.

`--checksum` a propósito: los APK se reconstruyen con el mismo tamaño y otra fecha, y un rsync por
fecha subiría 91 M cada vez; medido hoy, lo que de verdad cambió fueron tres ficheros (index.html,
en/index.html y rizoma-launcher.apk) y los otros nueve sólo tenían la marca de tiempo distinta. Y no
lleva --delete: borrar a ciegas en lo que se está sirviendo no es publicar, es perder.

El control pregunta al SITIO, no al rsync —que "salió bien" y una página vieja conviven sin ruido— y
comprueba además un APK, porque el índice puede estar bien y la descarga rota: es lo que la gente se
lleva.

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

984ebdf58f035f05789c66536e8de948601c0f83 · by Sergio · (1 month ago) · parent bd8f9fbbb · browse the tree at this commit

Semantic delta

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

1 files · +57 −0

diff --git a/scripts/servidor/publicar-humanoid.sh b/scripts/servidor/publicar-humanoid.sh
new file mode 100755
index 00000000..5623c23c
--- /dev/null
+++ b/scripts/servidor/publicar-humanoid.sh
@@ -0,0 +1,57 @@
+#!/bin/sh
+# Publica la subpágina `gioser.net/humanoid` en la caja. SE CORRE DESDE EL LAPTOP, no en la caja.
+#
+# ── POR QUÉ ES DISTINTA DE LAS DEMÁS (2026-09-18) ───────────────────────────────────────────────
+# El resto de los sitios se publican con `git pull` porque Caddy sirve de los clones
+# (`publicar-webs.sh`). Con humanoid no se puede: su repo es el proyecto **Android** —gradle, con
+# consola/cubo/keyboard/launcher/matiz/nimbo/nonet/notas— y lo que se sirve son **APK ya
+# construidos** más su índice. Eso es salida de release: no vive en ningún repo, y para regenerarla
+# hay que COMPILAR con Android SDK + Java, que la caja no tiene.
+#
+# Así que hasta que la caja pueda construir Android, esto es un `rsync` del árbol que produce el
+# laptop. Es un puente declarado, no el modelo: el día que haya build reproducible, esta receta se
+# jubila y humanoid se publica como los demás.
+#
+# ⚠ `--checksum` a propósito: los APK se reconstruyen a menudo con el MISMO tamaño y otra fecha, y
+# un rsync por fecha subiría 91 M cada vez. Con checksum se midió lo que de verdad cambia: en la
+# corrida del 2026-09-18, tres ficheros (`index.html`, `en/index.html` y `rizoma-launcher.apk`) —los
+# otros nueve APK sólo tenían la marca de tiempo distinta.
+#
+# ⚠ Y NO lleva `--delete`: el árbol de la caja podría tener algo que el laptop no, y borrar a ciegas
+# en lo que se está sirviendo no es una publicación, es una pérdida. Si hace falta podar, a mano.
+set -eu
+
+ORIGEN=${ORIGEN:-/home/sergio/gioser-web/humanoid/}
+CAJA=${CAJA:-root@2.29.29.217}
+DESTINO=${DESTINO:-/work/www/gioser-web/humanoid/}
+LLAVE=${LLAVE:-$HOME/.ssh/github5}
+PUERTO=${PUERTO:-22022}
+URL=${URL:-https://gioser.net/humanoid/}
+
+[ -f "${ORIGEN}index.html" ] || { echo "no encuentro la página en $ORIGEN" >&2; exit 1; }
+SSH="ssh -i $LLAVE -p $PUERTO -o StrictHostKeyChecking=accept-new"
+
+echo "==> qué cambia (en seco, por contenido)"
+rsync -an --checksum --itemize-changes -e "$SSH" "$ORIGEN" "$CAJA:$DESTINO" | grep -E '^[<>ch]' || echo "  (nada)"
+
+echo "==> subiendo"
+rsync -a --checksum --itemize-changes -e "$SSH" "$ORIGEN" "$CAJA:$DESTINO" | grep -E '^[<>ch]' || true
+
+# ── CONTROL: lo que se SIRVE, no lo que se copió ────────────────────────────────────────────────
+# Un rsync que "salió bien" y una página vieja conviven sin ruido: hay que preguntarle al sitio.
+echo "==> control"
+loc=$(sha256sum "${ORIGEN}index.html" | cut -c1-12)
+viv=$(curl -s --max-time 30 "$URL" | sha256sum | cut -c1-12)
+[ "$loc" = "$viv" ] || { echo "  ✗ la página servida ($viv) NO es la local ($loc)" >&2; exit 1; }
+echo "  ✓ índice: $viv"
+
+# Y un APK, porque el índice puede estar bien y la descarga rota: es lo que la gente se lleva.
+apk=$(ls "$ORIGEN"*.apk 2>/dev/null | head -1)
+if [ -n "$apk" ]; then
+  n=$(basename "$apk")
+  l=$(sha256sum "$apk" | cut -c1-12)
+  v=$(curl -s --max-time 120 "$URL$n" | sha256sum | cut -c1-12)
+  [ "$l" = "$v" ] || { echo "  ✗ $n servido ($v) ≠ local ($l)" >&2; exit 1; }
+  echo "  ✓ $n: $v"
+fi
+echo "==> humanoid publicado"