Files
txoko-dashboard/instalar-fuentes.sh
T
Aitor 7c12f63f7a feat: cero dependencias externas y caché de peticiones al nodo
Las librerías (React, Babel) venían de unpkg.com y las fuentes de Google.
Ninguno veía qué transacciones analizabas, pero ambos recibían tu IP y la hora
en cada apertura: sabían que usabas Txoko, cuándo y desde dónde — el metadato
que la propia herramienta enseña a proteger. Ahora se sirven desde el nodo,
con verificación por hash y versiones fijadas. El dashboard funciona sin
internet.

Además, caché con TTL y coalescencia en useApi: las transacciones confirmadas
son inmutables y se cachean toda la sesión, así que repetir un análisis ya
explorado no cuesta ninguna petición al nodo (medido).
2026-07-27 13:22:08 +02:00

84 lines
4.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# ─────────────────────────────────────────────────────────────────────────────
# Txoko — instalar IBM Plex en local (elimina la dependencia de Google Fonts)
#
# Descarga las fuentes IBM Plex (licencia OFL, libre) y genera el CSS que las
# declara. Tras ejecutarlo, el dashboard deja de contactar con
# fonts.googleapis.com y fonts.gstatic.com.
#
# Por qué importa: Google no ve qué transacciones analizas, pero sí recibe tu
# IP, la hora y la página desde la que se pide la fuente, cada vez que abres el
# dashboard. Para una herramienta de privacidad, sobra.
#
# Fuente: paquetes npm oficiales de IBM servidos por unpkg — el mismo origen
# del que ya se descargan React y Babel durante la instalación.
#
# Ejecutar EN EL NODO:
# chmod +x instalar-fuentes.sh && sudo ./instalar-fuentes.sh
# ─────────────────────────────────────────────────────────────────────────────
set -uo pipefail
DEST="${1:-/usr/share/nginx/html/vendor/fonts}"
MONO="https://unpkg.com/@ibm/plex-mono@1.1.0/fonts/complete/woff2"
SANS="https://unpkg.com/@ibm/plex-sans@1.1.0/fonts/complete/woff2"
echo "→ Instalando fuentes en: $DEST"
mkdir -p "$DEST"
cd "$DEST" || { echo "✗ No se pudo entrar en $DEST"; exit 1; }
# Pesos que usa el dashboard: Mono 400/600/700, Sans 400/500/600.
# Formato woff2 (el más comprimido, soportado por todo navegador actual).
URLS="
$MONO/IBMPlexMono-Regular.woff2
$MONO/IBMPlexMono-SemiBold.woff2
$MONO/IBMPlexMono-Bold.woff2
$SANS/IBMPlexSans-Regular.woff2
$SANS/IBMPlexSans-Medium.woff2
$SANS/IBMPlexSans-SemiBold.woff2
"
fallos=0
for url in $URLS; do
archivo=$(basename "$url")
printf " %-32s" "$archivo"
# -w escribe el código HTTP para poder diagnosticar si algo va mal
codigo=$(curl -sSL -o "$archivo" -w "%{http_code}" "$url" 2>/dev/null)
tam=$(stat -c%s "$archivo" 2>/dev/null || echo 0)
if [ "$codigo" = "200" ] && [ "$tam" -gt 10000 ]; then
echo "ok ($((tam/1024)) KB)"
else
echo "FALLÓ (HTTP $codigo, $tam bytes)"
fallos=$((fallos+1))
fi
done
if [ "$fallos" -gt 0 ]; then
echo
echo "✗ $fallos archivo(s) no se descargaron correctamente."
echo " No despliegues el dashboard nuevo todavía — avísame con esta salida."
exit 1
fi
# ── CSS que declara las fuentes ──────────────────────────────────────────────
# font-display:swap → el texto se ve desde el primer momento con la fuente de
# respaldo y se sustituye al cargar la definitiva. Sin página en blanco.
cat > ibm-plex.css <<'CSS'
/* IBM Plex — servido desde tu propio nodo. Licencia OFL (IBM).
Sustituye a fonts.googleapis.com: ninguna petición sale de tu red. */
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:400;font-display:swap;src:url('IBMPlexMono-Regular.woff2') format('woff2')}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:600;font-display:swap;src:url('IBMPlexMono-SemiBold.woff2') format('woff2')}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:700;font-display:swap;src:url('IBMPlexMono-Bold.woff2') format('woff2')}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:400;font-display:swap;src:url('IBMPlexSans-Regular.woff2') format('woff2')}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:500;font-display:swap;src:url('IBMPlexSans-Medium.woff2') format('woff2')}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:600;font-display:swap;src:url('IBMPlexSans-SemiBold.woff2') format('woff2')}
CSS
echo
echo "✓ Fuentes instaladas y CSS generado."
echo " Total: $(du -sh . | cut -f1)"
echo
echo " Comprueba que nginx las sirve (debe dar 200):"
echo " curl -sk -o /dev/null -w '%{http_code}\\n' https://localhost:4081/vendor/fonts/ibm-plex.css"
echo
echo " Si da 200, ya puedes desplegar el dashboard.html nuevo."