#!/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."