Comprobaba el tamaño con 'stat -c%s'. macOS trae la versión BSD, que usa -f%z, así que el comando fallaba, caía en el '|| echo 0' y el script daba por fallida una descarga correcta: 'FALLÓ (HTTP 200, 0 bytes)'. El 200 decía que había ido bien; lo roto era la comprobación. Ahora usa wc -c, igual en los dos sistemas, y comprueba que el archivo exista. La cabecera ya no dice 'ejecutar en el nodo': si el dashboard puede vivir en una carpeta cualquiera, su instalador de fuentes también.
95 lines
4.7 KiB
Bash
Executable File
95 lines
4.7 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.
|
|
#
|
|
# Funciona igual en Linux (el nodo) y en macOS, por si quieres tener una copia
|
|
# del dashboard en tu propio ordenador.
|
|
#
|
|
# En el nodo:
|
|
# chmod +x instalar-fuentes.sh && sudo ./instalar-fuentes.sh
|
|
#
|
|
# En otra carpeta cualquiera (sin sudo si es tuya):
|
|
# ./instalar-fuentes.sh ~/donde-sea/vendor/fonts
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
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)
|
|
# `wc -c` en vez de `stat`: stat -c%s es sintaxis GNU y macOS trae la versión
|
|
# BSD, que usa -f%z. En un Mac el stat fallaba, caía en el `|| echo 0` y el
|
|
# script daba por fallida una descarga que había ido bien — "FALLÓ (HTTP 200,
|
|
# 0 bytes)", que se lee como un problema de red y era una incompatibilidad de
|
|
# shell. `wc -c` se comporta igual en los dos sistemas.
|
|
if [ -f "$archivo" ]; then tam=$(wc -c < "$archivo" | tr -d ' '); else tam=0; fi
|
|
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."
|