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).
84 lines
4.1 KiB
Bash
Executable File
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."
|