Parte IV — Copa, suelo y cuidado

10 · El suelo: empaquetado y operación

Un baobab vive siglos si el suelo es bueno. La mucua vive en escuelas, puntos de cultura y casas de rezo, lejos de quien programa: instalar y actualizar tiene que ser un solo comando, y tiene que levantarse sola después de caer.

Archivos para leer (repositorio bbx-make-deb)

  1. COMO-USAR.txt — cómo generar el paquete.
  2. build.sh — copia el backend y el build del front al árbol y llama a dpkg-deb; --vendor-wheels para instalar sin internet.
  3. debian-tree/DEBIAN/postinst — la instalación entera.
  4. debian-tree/lib/systemd/system/*.service|*.timer.
  5. debian-tree/etc/nginx/sites-available/baobaxia.
  6. debian-tree/usr/sbin/baobaxia-enriquecimento — activa/instala OCR y Whisper.
  7. debian-tree/usr/share/doc/baobaxia/README.Debian — el manual de la mucua.

Qué hace el postinst

flowchart TD
    A[configure] --> B[Node ≥ 18?]
    B --> C[usuario baobaxia<br/>shell = git-annex-shell]
    C --> D[~/.ssh/authorized_keys listo]
    D --> E[rsync del código a /opt/baobaxia]
    E --> F[venv + pip<br/>requirements + extras o vendor-wheels]
    F --> G[backend.env con BBX_SECRET_KEY nueva<br/>xmpp.env, frontend.env — solo si no existen]
    G --> G2[¿radio/TV? → BBX_CANAIS on/manual/off]
    G2 --> H[nginx: sitio baobaxia<br/>+ RTMP :1935 si está el módulo y BBX_CANAIS ≠ off]
    H --> I[avahi: baobaxia.local]
    I --> J["/usr/local/bin/bbx (wrapper --api-url)<br/>baobaxia-healthcheck"]
    J --> K{¿existe credenciais.yaml?}
    K -- no --> L[bbx criar-galaxia<br/>pide el UUID para reinstalar una mucua existente]
    K -- sí --> M[verificar_legado.py: avisa de datos antiguos]
    L --> N[enriquecimiento: ¿OCR/Whisper?]
    M --> N
    N --> O[systemd: api, front, timers]
    O --> P[resumen en /etc/baobaxia/instalacao.html]

Reglas que sigue el script: nunca sobrescribe backend.env (el secreto no puede cambiar una vez que la mucua tiene datos); crea la galaxia antes de levantar la API (si no, la API arranca con una vista vacía); nunca se queda esperando una terminal (las preguntas tienen 30 s y solo aparecen si hay /dev/tty).

Las variables. Son más de cien, y casi todas son ajuste fino. El backend.env nuevo viene agrupado por tema (núcleo, dirección pública, sync, SSH/Tor, federación, enriquecimiento, radio/TV) solo con las que una mucua suele tocar; la sección 4 del README.Debian explica esas y solo enumera las de ajuste fino; la referencia completa, con valores por defecto, es docs/baobaxia-configuracao.md en el back. Ojo con las tres parecidas de la dirección pública: BBX_MUCUA_PUBLIC_URI (identidad), BBX_ORIGEM_PUBLICA (enlaces absolutos — sin ella vale el Host de la petición) y BBX_AP_BASE_URL (ActivityPub).

Servicios

UnidadQué haceCuándo
baobaxia-apibbx api --host 0.0.0.0 --port 8000siempre, Restart=always
baobaxia-frontnode build/index.js en 127.0.0.1:3000siempre
baobaxia-sincronizar.timerbbx sincronizar (sync + pedidos)cada 30 min
baobaxia-enriquecer.timerbbx enriquecer20 min después del fin de la ronda anterior
baobaxia-healthcheck.timerreinicia la API/front que no responde en 5 scada 2 min
baobaxia-xmpp-botel botinstalado y apagado

Los servicios corren con NoNewPrivileges, ProtectSystem=strict, ProtectHome, PrivateTmp y solo escriben en /var/lib/baobaxia, /var/log/baobaxia y /opt/baobaxia/back.

Generar y actualizar

cd bbx-v3-front && npm ci && npm run build
cd ../bbx-make-deb
./build.sh --back ../bbx-v3-back --front-build ../bbx-v3-front/build --version 3.3.0
sudo apt install ./dist/baobaxia_3.3.0_all.deb

Antes de actualizar una mucua antigua a la 3.3:

sudo -u baobaxia /opt/baobaxia/back/venv/bin/python \
    /opt/baobaxia/back/ferramentas/verificar_legado.py

Diagnóstico

journalctl -u baobaxia-api -f
systemctl list-timers 'baobaxia-*'
bbx tor-diagnostico
bbx diagnostico-shell
curl -s http://127.0.0.1:8000/api/v3/health

Prácticas

  1. Lee el postinst entero y marca cada paso que solo corre en la primera instalación. ¿Qué pasa si se corta la luz en medio de bbx criar-galaxia?
  2. Genera un .deb y lista su contenido (dpkg-deb -c). ¿Se fue el .git?
  3. Instálalo en una máquina virtual Debian sin internet usando --vendor-wheels.
  4. ¿Por qué el nginx cierra /api/v3/xmpp/extauth hacia fuera de la máquina?
  5. Instala respondiendo "no" a la radio/TV. ¿Qué cambia en el backend.env, en /etc/nginx/modules-enabled/ y en el editor de un canal?

Para conversar

  • ¿Quién, en la comunidad, va a leer el instalacao.html? ¿Qué tiene que estar escrito ahí para esa persona?

view this chapter as a saber