4. Moduli per OpenWISP#
Tre moduli nostri completano OpenWISP. I primi due sono piccole app Django che estendono la pagina del device; il terzo è l'agente che gira sui router. Il playbook openwisp2 installa già i primi due: questo capitolo spiega cosa fanno e cosa controllare.
openwisp-netconsole#
Repository · scheda Netconsole nella pagina del device.
I router mandano i messaggi del kernel al server con netconsole (UDP 6666),
in tempo reale, anche negli ultimi istanti prima di un blocco o di un kernel
panic, quando il syslog non fa più in tempo. rsyslog li salva in
/opt/router-logs/netconsole-<nome del device>/, e la scheda li mostra
aggiornati ogni pochi secondi, con i file ruotati da scaricare.
- Lato server: Play 5 di openwisp2 (rsyslog, gruppo
router-logsin sola lettura per OpenWISP, script di rotazione). - Lato router: template Netconsole (target in configfs, controllo ogni
5 minuti, nome del device come userdata). Serve il firmware NINUX con
kmod-netconsolecompilato conNETCONSOLE_DYNAMIC. - Rotazione dei log: si regola da OpenWISP, pagina Monitoring → Rotazione dei log dei router (solo superuser). Default: ogni giorno o oltre 50 MB, 15 giorni, al massimo 30 file.
- API per l'app:
GET /api/v1/netconsole/device/<uuid>/logs/(da 0.2).
openwisp-luci#
Repository · pulsante LuCI ↗ nella pagina del device.
Apre l'interfaccia web del router in una nuova scheda passando dal server: il router deve essere raggiungibile solo dal server, non dal browser.
- Un host per router:
https://<uuid>.luci.ninux-nnxx.it, così cookie e sessioni di un router non arrivano agli altri. Servono il DNS*.lucie il certificatoluci.ninux-nnxx.it(capitolo 2); il Play 6 si ferma se il certificato manca. - Link monouso da 60 secondi, poi un cookie
__Host-legato a utente, device e password; nginx chiede a OpenWISP a ogni richiesta se l'utente può ancora. - Accesso automatico per i superuser: OpenWISP crea via SSH una sessione
LuCI per l'utente di servizio
admindel router. Nessuna password sul server. Gli altri, e chi vuole entrare comeroot, usano il login di LuCI. - Router con la gestione sulla
wan: la regolaAllow-LuCI-OpenWISPapre la 443 solo dal server. - API per l'app:
POST /api/v1/luci/device/<uuid>/link/(da 0.3; usare almeno la 0.3.1 per aprirla dall'app).
Cookie di sessione di OpenWISP
I sottodomini *.luci sono dello stesso dominio di OpenWISP: il cookie di
sessione di OpenWISP deve chiamarsi __Host-sessionid, che i sottodomini
non possono sovrascrivere. Il playbook lo imposta.
openwisp-config (fork)#
Repository · l'agente che gira sui router.
È il fork dell'agente ufficiale con le correzioni ai segnali SIGUSR1/USR2:
senza, l'agente poteva morire al primo ciclo dopo l'avvio o durante
l'applicazione di una configurazione, lasciando il router fermo su «config
modificata». Il problema è segnalato upstream in
openwisp-config#283.
Il firmware NINUX lo prende dal branch fix/sigusr-handlers-startup del fork,
con il feed in config/build.yml di ansible-ninux-openwrt:
src-git openwisp_config https://github.com/mikysal78/openwisp-config.git;fix/sigusr-handlers-startup
Quando la correzione arriverà upstream, si tornerà al pacchetto ufficiale.
Controllo#
- Nella pagina di un device ci sono le schede/pulsanti Netconsole e LuCI ↗.
- Netconsole mostra righe recenti per un router con il template Netconsole.
- LuCI si apre (da superuser, già autenticata come
admin). -
curl -X OPTIONS https://openwisp.ninux-nnxx.it/api/v1/luci/device/00000000-0000-0000-0000-000000000000/link/risponde 405 (API presente) e non 404.
Questa pagina viene dal repository mikysal78/ninux-basilicata-infra: le correzioni vanno fatte lì.
