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)
COMO-USAR.txt— cómo generar el paquete.build.sh— copia el backend y el build del front al árbol y llama adpkg-deb;--vendor-wheelspara instalar sin internet.debian-tree/DEBIAN/postinst— la instalación entera.debian-tree/lib/systemd/system/*.service|*.timer.debian-tree/etc/nginx/sites-available/baobaxia.debian-tree/usr/sbin/baobaxia-enriquecimento— activa/instala OCR y Whisper.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
| Unidad | Qué hace | Cuándo |
|---|---|---|
baobaxia-api | bbx api --host 0.0.0.0 --port 8000 | siempre, Restart=always |
baobaxia-front | node build/index.js en 127.0.0.1:3000 | siempre |
baobaxia-sincronizar.timer | bbx sincronizar (sync + pedidos) | cada 30 min |
baobaxia-enriquecer.timer | bbx enriquecer | 20 min después del fin de la ronda anterior |
baobaxia-healthcheck.timer | reinicia la API/front que no responde en 5 s | cada 2 min |
baobaxia-xmpp-bot | el bot | instalado 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
- Lee el
postinstentero y marca cada paso que solo corre en la primera instalación. ¿Qué pasa si se corta la luz en medio debbx criar-galaxia? - Genera un
.deby lista su contenido (dpkg-deb -c). ¿Se fue el.git? - Instálalo en una máquina virtual Debian sin internet usando
--vendor-wheels. - ¿Por qué el
nginxcierra/api/v3/xmpp/extauthhacia fuera de la máquina? - 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?
