Parte IV — Chioma, suolo e cura

10 · Il suolo: pacchetto e gestione

Un baobab vive secoli se il suolo è buono. La mucua vive in scuole, punti di cultura e case di preghiera, lontano da chi programma: installare e aggiornare deve essere un solo comando, e deve rialzarsi da sola dopo essere caduta.

File da leggere (repository bbx-make-deb)

  1. COMO-USAR.txt — come generare il pacchetto.
  2. build.sh — copia il backend e la build del front nell'albero e chiama dpkg-deb; --vendor-wheels per installare senza internet.
  3. debian-tree/DEBIAN/postinst — l'intera installazione.
  4. debian-tree/lib/systemd/system/*.service|*.timer.
  5. debian-tree/etc/nginx/sites-available/baobaxia.
  6. debian-tree/usr/sbin/baobaxia-enriquecimento — attiva/installa OCR e Whisper.
  7. debian-tree/usr/share/doc/baobaxia/README.Debian — il manuale della mucua.

Cosa fa il postinst

flowchart TD
    A[configure] --> B[Node ≥ 18?]
    B --> C[utente baobaxia<br/>shell = git-annex-shell]
    C --> D[~/.ssh/authorized_keys pronto]
    D --> E[rsync del codice in /opt/baobaxia]
    E --> F[venv + pip<br/>requirements + extras o vendor-wheels]
    F --> G[backend.env con nuova BBX_SECRET_KEY<br/>xmpp.env, frontend.env — solo se non esistono]
    G --> G2[radio/TV? → BBX_CANAIS on/manual/off]
    G2 --> H[nginx: sito baobaxia<br/>+ RTMP :1935 se c'è il modulo e BBX_CANAIS ≠ off]
    H --> I[avahi: baobaxia.local]
    I --> J["/usr/local/bin/bbx (wrapper --api-url)<br/>baobaxia-healthcheck"]
    J --> K{credenciais.yaml esiste?}
    K -- no --> L[bbx criar-galaxia<br/>chiede l'UUID per reinstallare una mucua esistente]
    K -- sì --> M[verificar_legado.py: avvisa di dati vecchi]
    L --> N[arricchimento: OCR/Whisper?]
    M --> N
    N --> O[systemd: api, front, timer]
    O --> P[riepilogo in /etc/baobaxia/instalacao.html]

Regole che lo script segue: non sovrascrive mai backend.env (il segreto non può cambiare quando la mucua ha già dati); crea la galassia prima di avviare l'API (altrimenti l'API parte con una vista vuota); non resta mai bloccato ad aspettare un terminale (le domande hanno 30 s e compaiono solo se c'è /dev/tty).

Le variabili. Sono più di cento, e quasi tutte sono di regolazione fine. Il nuovo backend.env arriva raggruppato per tema (nucleo, indirizzo pubblico, sync, SSH/Tor, federazione, arricchimento, radio/TV) solo con quelle che una mucua di solito tocca; la sezione 4 del README.Debian spiega queste ed elenca soltanto quelle di regolazione fine; il riferimento completo, con i valori predefiniti, è docs/baobaxia-configuracao.md nel back. Attenzione alle tre simili dell'indirizzo pubblico: BBX_MUCUA_PUBLIC_URI (identità), BBX_ORIGEM_PUBLICA (link assoluti — senza, vale l'Host della richiesta) e BBX_AP_BASE_URL (ActivityPub).

Servizi

UnitàCosa faQuando
baobaxia-apibbx api --host 0.0.0.0 --port 8000sempre, Restart=always
baobaxia-frontnode build/index.js su 127.0.0.1:3000sempre
baobaxia-sincronizar.timerbbx sincronizar (sync + richieste)ogni 30 min
baobaxia-enriquecer.timerbbx enriquecer20 min dopo la fine del giro precedente
baobaxia-healthcheck.timerriavvia API/front che non rispondono entro 5 sogni 2 min
baobaxia-xmpp-botil botinstallato e spento

I servizi girano con NoNewPrivileges, ProtectSystem=strict, ProtectHome, PrivateTmp e scrivono solo in /var/lib/baobaxia, /var/log/baobaxia e /opt/baobaxia/back.

Generare e aggiornare

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

Prima di aggiornare una mucua vecchia alla 3.3:

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

Diagnostica

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

Pratiche

  1. Leggi tutto il postinst e segna ogni passo che gira solo alla prima installazione. Cosa succede se va via la luce nel mezzo di bbx criar-galaxia?
  2. Genera un .deb ed elencane il contenuto (dpkg-deb -c). Il .git è finito dentro?
  3. Installalo su una macchina virtuale Debian senza internet usando --vendor-wheels.
  4. Perché nginx chiude /api/v3/xmpp/extauth verso l'esterno della macchina?
  5. Installa rispondendo "no" alla radio/TV. Cosa cambia nel backend.env, in /etc/nginx/modules-enabled/ e nell'editor di un canale?

Per parlarne

  • Chi, nella comunità, leggerà instalacao.html? Cosa deve esserci scritto per quella persona?

vedi questo capitolo come sapere