19 gennaio 2025

Android Custom ROM: aggiornamento di un Xiaomi A2 Lite


Riporto in questo post piuttosto lungo, prevalentemente per mia memoria storica ed eventualmente per vostra cultura generale, alcuni appunti relativi agli esperimenti di aggiornamento Android di un cellulare funzionante ma invecchiato, e non più aggiornato dalla casa madre.

Il punto di partenza

Siamo nel 2025.

Xiaomi A2 Lite, retro, cortesia di Wkimedia Commons

Il cellulare è uno Xiaomi A2 Lite, un best-buy di fascia <200 € del 2018 (attenzione, diverso dallo Xiaomi A2). All'epoca, le caratteristiche che lo rendevano appetibile erano:

  • Battteria 4Ah
  • Dual SIM + SD card
  • Android Stock + Android One (aggiornamenti direttamente da Google)
  • RAM 4 / 64 interna
  • 179 Eur

I requisiti sono prettamente personali. Ho sempre desiderato Android Stock, (quello base di Google) per non trovarmi legato ad un venditore e le sue particolarità e poi trovarmi blindato nel suo universo. Per l'utilizzo che faccio di uno smartphone, continuo a rifiutare il modello Apple/Samsung, per quanto riconosco che abbia dei vantaggi nell'ottimizzazione delle prestazioni. Inoltre avevo una SIM personale e una SIM aziendale e non volevo portare in giro due telefoni.

L'A2 Lite è arrivato con Android 8.1 (Oreo) e si è aggiornato fino al 10.

Nel 2023 l'ho sostituito con un Nokia X20, ancora Android Stock, ancora a circa 200€.

Per fare il backup dei dati del A2 Lite, ho dovuto forzare l'accesso root, e installare Titanium Backup.

A questo punto lo smartphone è pronto per una seconda vita, ad esempio come primo smartphone per la prole. Ma il sistema operativo è vecchio, e non più compatibile con le ultime versioni delle app.

E' possibile installare una custom ROM con un Android recente?

Dove recuperare le informazioni? La banca dati centrale per tutte queste operazioni è il forum XDA, che nel menu 'Devices' ha l'elenco di tutti i dispositivi, compreso il mio A2 Lite, nome in codice 'daisy'.

Nel labirinto del forum XDA

Il primo imbarazzo viene quando dalla sezione dedicata del forum che ci sono dalle tre alle sette varianti di 'Custom ROM' o salse di Android che potenzialmente si possono installare, per ogni versione di Android ufficialmente rilasciata. 


Che differenza ci sarà tra CrDroid, Lineage o Derpfest? Sarà meglio la versione più recente, o richiederà troppe risorse? Meglio una versione con meno pretese, o una con ottimizzazione spinta? Boh?!! (un utente OnePlus fa una domanda simile su reddit)

Pare di capire che alcune varianti si portano dietro le 'Google App', ad esempio Google Drive, Docs, Calendar ecc; altre sono dedicate al 'modding' o personalizzazione; altre ancora si prefiggono di migliorare l'efficienza del sistema e la durata della batteria.

Dato che sono quasi tutte prodotte e mantenute da gruppi di volontari, non c'è nessuna logica nel parco di dispositivi su cui è possibile installare le varie versioni: il criterio principale è che il dispositivo è nelle mani di qualche appassionato.

Come è logico, i dispositivi più vecchi, dopo qualche anno, vengono abbandonati. 
Ad esempio, nel mio caso, ci sono diverse salse di Android 10 e 11, un paio di Android 12 e 13 e quasi niente dei successivi. Le versioni più recenti risalgono al 2022, ossia ormai 3 anni fa.

Per complicare le cose, quando si va scavare nelle istruzioni, la maggior parte del materiale è stato messo su GitHub, e, mentre le istruzioni sopravvivono sul forum XDA, i repository su GitHub hanno una vita molto più breve e fragile. Capita sovente di seguire un collegamento verso GitHub, o peggio ancora verso un sito personale, per poi scoprire che la repo o la pagina è stata cancellata.

Inoltre le tecniche di installazione differiscono parecchio tra modelli di telefono e varianti di ROM, per cui non è possibile fare un copia e incolla da un altra sequenza di istruzioni, o da un thread parallelo dedicato ad un altro modello di smartphone.

Infine ho trovato un thread generico sull'aggiornamento per il mio specifico modello di telefono. Provo a riportare alcuni concetti chiave.

Generico upgrade su Xiaomi A2 Lite

Il post inizia elencando i prerequisiti, che sono
  1. lo Xiaomi A2 Lite con 
    1. una ROM originale installata
    2. il bootloader sbloccato 
      1. questo passaggio l'avevo fatto in precedenza per poter fare il backup utilizzando Titanium Backup. L'upgrade della ROM richiede di brasare tutti i dati. Se ci fossero dati a cui tenete, foto, bitcoin ecc, FATE PRIMA UN BACKUP.
  2. un PC Windows
  3. una mezza dozzina di componenti software da scaricare da varie fonti, tra cui
    1. i tool di manutenzione specifici per Xiaomi
    2. i tool per gli sviluppatori Android di Google (ADB)
    3. i tool e la ROM degli hacker e fai-da-te

La doppia partizione A/B

Segue spiegando come, a partire da Android 7 o Nougat, (2016) Google ha introdotto il sistema della doppia partizione di sistema (A/B) che rende trasparente l'aggiornamento di sistema. In pratica, mentre una partizione (es. A) è attiva e in uso, l'altra (B) si aggiorna. Quando l'aggiornamento su B è completo e verificato, al successivo riavvio, B diventa partizione attiva e A rimane disponibile come partizione di recupero, e per essere aggiornata alla versione successiva. Questo meccanismo viene descritto nel dettaglio nell'articolo dedicato sul forum XDA

Come è facile immaginare, la doppia partizione rende più macchinoso il processo di sostituzione integrale della ROM via cavo. Per inciso, i dispositivi Android possono avere decine di partizioni, quindi è importante sapere cosa si sta facendo e dove.

Dato che una parte del lavoro viene svolta dallo strumento di assistenza (recovery tool, es. TWRP), sarà proprio questo componente a fare in modo che la nuova ROM venga caricata nella partizione non attiva.

Generico caricamento con FASTBOOT per sistemi con doppia partizione

I file vengono generalmente forniti in un file compresso in formato payload.bin
Questo file è scompattabile utilizzando degli script in python e la libreria protobuf, in modo da poter accedere individualmente ai vari file binari.



 A loro volta i singoli file binari possono essere trasferiti sullo smartphone utilizzando il tool fastboot, in un processo noto come 'flashing', cioè registrazione permanente su memoria riscrivibile.

Fasboot si può usare per:
  1. Scoprire la partizione attiva
    1. fastboot getvar all
  2. Attivare l'altra partizione
    1. fastboot set_active other
  3. Attivare una partizione specifica
    1. fastboot set_active a
    2. fastboot set_active b
  4. Scrivere una immagine sulla partizione attiva
    1. fastboot flash partition partition.img
  5. Scrivere una immagine su una partizione specifica
    1. fastboot flash partition_a partition.img
    2. fastboot flash partition_b partition.img

ADB, Flashboot e Recovery


Per entrare in Fastboot: Power e Vol-
In Fastboot possiamo inviare comandi dalla CLI di Windows e caricare la Recovery indicata nelle istruzioni, in genere un file di tipo .img

Per entrare in recovery: Power e Vol+
In recovery troviamo il menù per operare sulle partizioni di avvio e predisporre per i comandi tipo 'adb sideload' che ci consentono di caricare la ROM.

La Recovery 'stock' o 'originale' spesso mostra un icona di un Android in riparazione e la dicitura 'No command'.

Per approfondire potete andare a leggere una guida in inglese su Android Recovery Mode, da Lifewire
o visitare il sito di TWRP

Con ADB posso verificare che il dispositivo è collegato e in quale modalità:
platform-tools>adb devices

Sia ADB che FastBoot sono sviluppati da Google e li trovate nel sito dedicato agli sviluppatori Android.

Cose che si mettono di traverso

  • File .zip, in particolare quelli di grosse dimensioni, incompleto o danneggiato. I tool di trasferimento lo rifiutano, ad esempio con 'adb: failed to read command: No error'
  • Problemi a scaricare i file da androidfilehost. Il server è spesso sovraccarico e non risponde. Posso immaginare che non sia finanziato da Google e cara grazia che esiste. Provare a ricaricare la pagina o riprovare dopo qualche minuto. Da questa discussione sembra che possa estinguersi da un giorno all'altro. 
  • Cavi USB o connettori che non fanno bene il loro lavoro. A volte può essere necessario cambiare cavo o porta.

La conclusione (o anche Brute Force Attack)

Ho trovato questo thread che proponeva Pixel Experience 13, basata su Stock Android o AOSP.
Forniva in due post tutti i collegamenti per scaricare i software e le istruzioni in maniera abbastanza chiara e concisa. Forniva già una recovery specifica e testata. Punto a favore, le Google Apps incluse, non tutte, ma una buona parte, che mi evita di scaricare un sacco di app che comunque installerei.

Vi confesso umilmente che mi ci sono volute diverse ore per completare i passaggi, e capire che dovevo leggere e rileggere più volte le istruzioni per arrivare in fondo. 


Provare, provare, provare...


Alla fine, a forza di martellare e di sbagliare in tutti i modi possibili, sono arrivato in fondo, e sono riuscito ad installare Android 13, Pixel Experience e a ringiovanire il mio vecchio smartphone. 

Un sentito ringraziamento a tutti i liberi smanettoni che alimentano il forum XDA e i siti che ospitano i file, e che con grande pazienza rispondono alle domande dei principianti come me.  Uno, preso un po' a caso e italiano, è Giovanni Ricca, in arte ItsVixano, che manutiene una delle versioni che potrei installare al prossimo giro.

Una nota di demerito alle case produttrici che spingono per far crescere la montagna di rifiuti elettronici invece di incoraggiare i proprietari a mantenere in vita dispositivi che potrebbero funzionare ancora per anni. 






10 novembre 2024

Python: API Client con JWT

 Vorrei attaccarmi ad un servizio web che offre una API per fare cose, e conosco un po' di Python.

Le istruzioni dell'API dicono che posso collegarmi in maniera sicura utilizzando JWT e chiavi RSA.

Dove cominciare?

Chiavi crittografiche

scambio di chiavi:
L'articolo in inglese spiega bene con le immagini a colori, meglio dell'articolo italiano che è più orientato alla matematica.

In realtà la API in questione non usa lo scambio DH, ma RSA

generazione coppia di chiavi RSA:

Su Windows un modo semplice e grafico viene fornito dal tool PuttyGen (https://www.putty.org/)

Python

Esempio JWT: 
  • https://github.com/auth0-blog/jwts-in-python
libreria per JWT: pip install pyjwt

Sommando le cose...

 per autenticarsi usiamo
1. credenziali, user+pwd
2. eventualmente una API key, disponibile dal sito, per utenti con credenziali,
3. chiavi RSA.

con questi pezzi, ad ogni richiesta dobbiamo confezionare un JWT da accompagnare alla richiesta, per dimostrare che siamo proprio noi  

Fonti e ulteriori approfondimenti

  • https://auth0.com/blog/how-to-handle-jwt-in-python/

Appunti digitali - Obsidian e Fossil

Condivido un paio di progetti di cui sono venuto a conoscenza recentemente nella mia ricerca di sistemi di pubblicazione di appunti digitali e/o siti statici per la raccolta di informazioni.

Ovviamente, se state leggendo questo blog, sapete che sto usando (2024) Blogger di Google.

In ufficio ho usato, internamente, OneNote di Microsoft, che trovo uno dei migliori programmi mai prodotti da questa azienda. OneNote richiede di installare una App, utilizza un formato proprietario, per un periodo non era disponibile per Mac, e richiede una licenza per poter scrivere.

Ho cercato di sostituire OneNote con BookStackApp, che è gratuito e self-hosted, multilingue, e semplice anche per i meno tecnici. Purtroppo ha un limite sul meccanismo di autenticazione che lo rende un po' inflessibile. La configurazione di Apache con reverse proxy non è banale.

Da quasi dieci anni, per un progetto di pubblicazione di libri digitali, (un sito statico, molto statico :-)) utilizzo GitHub Pages + Jekyll, che è robusto, personalizzabile e abbastanza semplice da gestire, anche se non mi sono mai addentrato nel basso livello tecnico.

Obsidian

Un collega mi ha mostrato la sua tecnica per prendere appunti dei corsi di ingegneria, utilizzando Obsidian + plugin per LaTeX. La sua dimostrazione mi ha lasciato a bocca aperta: vedere serie di Fourier, matrici, integrali, vettori e formule matematiche scritte in frazioni di secondo usando markdown + scorciatoie da tastiera è stato impressionante. Il prodotto finale, esportato in PDF, era degno di un libro di testo.

Obsidian offre l'opzione di pubblicare un proprio sito di appunti a 8 €/mese sui loro sistemi, criptato. Niente male, sarà una delle opzioni che prenderò in considerazione, vista la quantità di plugin e stili grafici disponibili.

Fossil

Altra opzione, proposta da LeonardVanDerbilt su Reddit, è Fossil, un sistema di gestione della configurazione di sistema, che comprende un wiki, oltre a sistemi di versionamento, gestione progetto, e molto altro. Da provare!

26 ottobre 2024

Imposta sul reddito: semplice o equa?

Tasse semplici 

Le tasse, secondo il filosofo ed economista Adam Smith, devono essere semplici, efficaci e soprattutto produrre un entrata che sia maggiore dei costi per la riscossione.

E' con questo spirito che nell'anno 1974 in Italia è stata abolita la tassa sul cane. Veniva pagata su iniziativa del proprietario, la pagavano in pochi, era impopolare e ritenuta iniqua, ma soprattutto i costi di registrazione, riscossione e di applicazione superavano di gran lunga le entrate.

E' con questo spirito che la tassa sulla televisione è entrata nelle bollette della corrente elettrica. Per avere la televisione ci vuole un impianto elettrico. Se hai una casa con impianto elettrico, in 99%  dei casi avrai anche una televisione, e quindi ti faccio pagare. 



Le tasse semplici sono quelle ritenute in maniera più o meno automatica alla fonte, come l'IVA e la tassa sullo stipendio del dipendente (IRPEF). Le tasse sui profitti aziendali sono più difficili da calcolare, riscuotere e tracciare.

Tasse eque

Il problema con questo metodo è che la percezione del tassatore è assai diversa dal sentimento del soggetto tassato. Come è naturale comprendere e evidente a tutti, il ricavo è ben diverso dal guadagno. Se la mia azienda ha venduto per 1 milione, ma ne ho spesi 900.000, lo stato non mi deve chiedere conto del milione, ma dei 100.000 che mi sono rimasti a fine esercizio.

Lo stesso principio vale per le entrate del singolo. Se guadagno 100 K all'anno, ma per mantenere il mio stile di vita ne spendo 90.000, mi si storce il naso a pensare che lo stato mi tassa sui 100 K. 

Per questo motivo è stato introdotto il concetto di 'detrazione' e 'deduzione'.

E' qui che casca l'asino.

Infatti, se per detrarre e dedurre, devo spendere decine di ore del mio anno fiscale, e fare conti complicatissimi, che coinvolgono franchigie (soglia minima non deducibile), tetti (soglia massima oltre il quale non deducibile) e percentuali, e dimostrare in più modi la spesa effettiva, e dimostrare che l'ho fatta per un motivo che le regole accettano come giustificato, e in cambio avere una deduzione percentualmente bassa rispetto all'esborso, allora la tassa non è più né semplice, né efficace.

Sento dire: "mi conveniva pagare in nero", o "è più il tempo perso, che il ricavo".

Quando lo Stato ogni anno cambia le regole, ti impone l'onere della correttezza e attribuisce l'intenzionalità nell'errore, e per ogni errore ti penalizza in maniera sproporzionata, il sentimento comune è che c'è avversità,  astio e tracotanza da parte dello Stato verso il contribuente. In questi anni, a testimonianza di questo disagio, hanno avuto luogo diversi episodi di espressione di malcontento dei commercialisti, oberati da normativa in continuo cambiamento, regole poco chiare, e la sensazione di trovarsi tra l'incudine e il martello dell'Agenzia delle Entrate e del contribuente (giustamente) esasperato.

Tasse semplici ed eque

Se lo Stato ha una politica economica di stampo consumista, e misura il successo economico con il PIL, ogni transazione già tassata (ad esempio tramite l'IVA) e versata ad un soggetto nazionale dovrebbe essere automaticamente deducibile

Più spendo, più gira l'economia e aumenta il PIL e più lo stato è contento e ricava tasse. 

A maggior ragione, se le mie spese sono 'obbligate', tipo mutuo, affitto, assicurazione, spese scolastiche, manutenzione della casa, viaggio per lavoro, spese bancarie, medicinali, ecc. ecc. Queste spese dovrebbero essere dedotte automaticamente, al 100% e senza impegno del contribuente.

Non sarei felice di essere tassato sui miei ricavi, i mei risparmi, quello che mi rimane a fine anno, ma me ne faccio una ragione, soprattutto se la tassazione è chiara, semplicemente computabile e progressiva. Potrei fare più semplicemente i conti, tra risparmiare e spendere, e valutare in che misura preferisco godermi l'oggi ed essere pronto per il domani. 

Sono sicuro che non sto dicendo una novità. Sono sicuro anche di aver semplificato troppo. 

Mi mancano i riferimenti bibliografici per approfondire questo tema. 

Cosa dovrei leggere secondo voi?

16 febbraio 2024

Stewart Brand & Whole Earth Catalog

 Prendo spunto da un articolo del Guardian letto recentemente che ha colmato un importante lacuna culturale nella mia formazione di informatico. Me lo appunto per non perdere la bussola.

https://www.theguardian.com/books/2013/may/05/stewart-brand-whole-earth-catalog

Si tratta di una intervista e mini biografia di uno di quei personaggi che, diversamente dalla maggior parte di noi, lasciano sul pianeta un impatto da Asteroide, e riporta alla mia mente il riverito Direttore nonche Relatore e nume ispiratore di tanti informatici come me, il mitico Gianni degli Antoni.  

A voi

Stewart Brand

di cui potete leggere una biografia più oggettiva su Wikipedia.

Stewart Brand



Mi limito a tradurre e citare alcune porzioni dell'articolo dedicato a Stewart e a ricordare la sua brillante carriera di futurologo e autore di una serie di libri che hanno avuto un impatto fortissimo sullo sviluppo della tecnologia e in particolare dell'informatica e sull'orientamento di tanti giovani talenti con cui è venuto a contatto. Un grazie sentito all'autrice Carole Cadwalladr.

Brand aveva un talento smisurato per essere al posto giusto al momento giusto. 

Nel 1968, casualmente, fu presente a quell'evento mirabolante che in futuro venne etichettato come 'la madre di tutte le demo'. Douglas Englebart sbalordì un migliaio dei più avanzati informatici al mondo dimostrando il primo 'mouse', la prima teleconferenza, il primo editor di testo e l'anteprima dell'informatica interattiva. Non era proprio casualità: Stewart era un tecnico delle riprese e un consulente per la presentazione.

 ... 1968 – Brand just happened to be at what came to be known as the "mother of all demos" when the world first saw what computers could do.


Nello stesso anno avviò la pubblicazione del 

Whole Earth Catalog

Il libro ha meritato una pagina dedicata su Wikipedia. Pubblicato tra il 1968 e il 1971 viene definito da Steve Jobs come 'una delle bibbie della mia generazione'.


Brand dice che il suo mito era Buckminster Fuller 

A sua volta fu un modello di ispirazione per Steve Jobs, che nel suo storico discorso del 2005 all'inaugurazione dell'anno accademico di Stanford, cita Brand e il suo Catalogo.

Bibliografia


Fred Turner, associate professor of communication at Stanford, Turner's 2006 book, From Counterculture to Cyberculture: Stewart Brand, the Whole Earth Network and the Rise of Digital Utopianism,

John Markoff, who wrote What the Dormouse Said: How the Sixties Counterculture Shaped the Personal Computer Industry, says, simply: "Stewart was the first one to get it. He was the first person to understand cyberspace. He was the one who coined the term personal computer. And he influenced an entire generation, including an entire generation of technologists."

Asset Monitoring IOT Database Open Source: indagine 2024

Supponiamo di voler partire con un progetto di monitoraggio IOT, e che nel 2024 qualcuno abbia già messo la propria esperienza a disposizione della collettività.

Devo scrivere da zero il database delle misure?
Devo gestire tutta la parte anagrafica?
Devo inventarmi tutta la parte di web-app, magari anche reattiva, in modo che posso vedere i grafici sia dal PC che dallo smartphone?

Requisiti di massima

  1. Orientato al monitoraggio 'lento' (frequenza oraria o minore) di oggetti statici
  2. Open Source
  3. Interrogazioni SQL con finalità di reportistica quasi metrica/contabile (es. smart meter)
  4. Longevità del progetto: >=10 anni
  5. semplicità di configurazione misure derivate/calcolate, (es bar in pascal, o °C a °F, da corrente e tensione ricavare la potenza)
  6. possibilità di esportazione dati via API
  7. gerarchia/albero delle risorse monitorate (es. città/quartiere/isolato/palazzo/casa/sensore)

Nice to Have

  1. storicizzazione con compressione, tipo RRD Tool
  2. gestione utenti/accessi personalizzata (es. admin legge e scrive tutto, tecnico o utente finale legge solo il suo)
Vediamo cosa mi propone GitHub se cerco IOT e Database...

IOTDB

https://github.com/apache/iotdb?tab=readme-ov-file#main-features

 IoTDB supports high-frequency data writing with millions of measurement points and millisecond-level query response speed. The efficient data processing capability allows users to obtain the required data quickly and accurately. 

GRIDDB

https://griddb.net/en/

https://github.com/griddb/docs-en/blob/master/manuals/GridDB_FeaturesReference.md

in-memory data
architecture — along with superb
parallel processing and minimal
overhead — grants benchmark-
shattering performance

OPENREMOTE

https://github.com/openremote/openremote
https://github.com/openremote/openremote/wiki/User-Guide%3A-Assets%2C-Agents-and-Attributes

TDENGINE

https://docs.tdengine.com/concept/

https://tdengine.com/high-performance/

The TDengine industrial data platform includes a high performance, cloud native time series database that enables efficient ingestion, processing, and monitoring of petabytes of data per day, generated by billions of sensors and data collectors. Thanks to its data model that takes full advantage of the characteristics of time-series dataTDengine delivers more than ten times the performance of general-purpose platforms while requiring only one-fifth the storage space.

THINGSBOARD

https://github.com/thingsboard/thingsboard

https://thingsboard.io/docs/user-guide/entities-and-relations/

molto promettente per Asset Monitoring, consente la scrittura di regole per organizzare gli oggetti monitorati rispetto ai dispositivi di misura e altre entità come gli utenti.

ThingsBoard back-end is written in Java, but we also have some micro-services based on Node.js. ThingsBoard front-end is a SPA based on Angular 9 framework.

20 settembre 2023

Monitoraggio server: Nagios + NCPA + plugin personalizzati

Nagios

Ho uno o più server Windows, ho un server Linux e poco budget.

Vorrei tenere d'occhio i server Windows senza dover entrare periodicamente a verificare la Gestione Attività, possibilmente con un sistema automatico, su un server esterno, in modo che se crolla tutto, mi arrivi almeno un avviso.

Guarda un po', ho proprio un serverino Linux a disposizione. e, grazie al software (o sistema) Nagios, posso fare in modo che se ci sono mancamenti o cedimenti nei servizi erogati, o nello stato di salute del sistema, Nagios mi manda un messaggio di avviso, riportando le ultime misure rilevate.

A questo proposito avevo tratteggiato a grandi linee la sequenza delle operazioni necessarie, da una parte e dall'altra, per installare e configurare Nagios Core (la versione gratuita), e attivare il server di monitoraggio su Windows, che puntualmente risponde alle interrogazioni del suo supervisore.

Vedi l'articolo: https://striscialascia.blogspot.com/2020/11/nagios-e-monitoraggio-windows.html

 Lato Windows: NCPA

Nagios mette a disposizione un server di monitoraggio chiamato NCPA, già attrezzato con le routine di osservazione più comuni: 

  • disco
  • CPU
  • RAM
  • servizi

Inoltre è previsto sia il monitoraggio 'attivo', cioè a servire le richieste di Nagios, che 'passivo' ossia che periodicamente invia uno stato aggiornato, attraverso il protocollo NRPE. 

Qui il link per la documentazione che spiega come richiamare un check 'attivo' lato Nagios:

https://www.nagios.org/ncpa/help/2.0/active.html

Ma per quelle funzioni che sono specifiche al nostro server e che costituiscono 'o core' (come direbbero a Napoli) del sistema che abbiamo messo in piedi con tanta fatica?

Per questo ci sono i 'plugin'. Il link che segue spiega dettagliatamente come creare i plugin con le diverse soluzioni elencate, e, successivamente, come richiamarli da remoto, da Nagios.

https://nagiosenterprises.my.site.com/support/s/article/Using-Scripts-Plugins-With-NCPA-32a58c75

NCPA: plugin e test personalizzati

Nello specifico NCPA supporta e spiega in maniera esaustiva come configurare dei plugin, scritti come 'batch file' (.bat), routine PowerShell, VBS o bash. Cito:

NCPA is capable of executing scripts such as:

  • Batch Script = .bat

  • Visual Basic Script = .vbs

  • PowerShell Script = .ps1

  • Bash Script = .sh

Questo ha funzionato bene per uno dei miei casi, e cioè per verificare che fosse in piedi una specifica connessione verso l'esterno. In questo caso mi basta un 'ping', e la strada più naturale è stata uno script PowerShell che utilizza 'Test-Connection'.

 Ma se dobbiamo fare parse di log, o conteggi, o  cose più complicate?

Se siete dei maghi di PowerShell o di VBS, non ci sono problemi. Vi mettete a testa bassa e smanettate.

Se, come me, sapete che Python ha un mondo di librerie, che includono ad esempio, gli strumenti per fare il parse di file JSON, e sapete che Python è disponibile sul server in questione, vi fate qualche domanda.

Ci sarà un modo di scrivere il plugin con Python?

Navigando nel forum, si scoprono delle sorprese.

Ad esempio, che in molte versioni di NCPA è incluso un interprete Python.

Ma i plugin in Python non sono ancora ufficialmente supportati. Di sicuro, scrive l'autore nel 2018, non saranno disponibili prima della versione 3. Peccato che oggi, nel 2023, siamo alla 2.4.1.

https://github.com/NagiosEnterprises/ncpa/issues/478

Nel forum citato, trovate un modello base di plugin in Python.

import os, sys

OK = 0
WARNING  = 1
CRITICAL = 2
UNKNOWN  = 3

def main():

   print ("OK: This is working")
   sys.exit(OK)

if __name__ == "__main__":
   main()

Supposto che riusciamo a scrivere il programmino che ci serve, come facciamo poi a trasformarlo in plugin?

Plugin personalizzati nel vostro linguaggio

Dato che abbiamo a disposizione i bat e i PowerShell, ho fatto qualche esperimento per richiamare il Python con questi due strumenti.

Con PowerShell non ho avuto successo, dice che non trova il 'main'.

Con i file batch invece le cose sono andate meglio.

Con queste istruzioni sono riuscito sia a fare eseguire il Python che a restituire il codice di errore nello stile NCPA.

@echo off

"C:\Python310\python.exe" "C:\Program Files (x86)\Nagios\NCPA\plugins\check_my_python.py"

exit /B %errorlevel% 

Lato Nagios, in commands.cfg e windows.cfg ho creato i corrispondenti comandi e servizi:

# 'check_ncpa' command definition
define command {
    command_name check_ncpa
    command_line $USER1$/check_ncpa.py -H $HOSTADDRESS$ -t $_HOSTTOKEN$ -P$_HOSTPORT$ $ARG1$
    } 

Noterete che ho impostato nel comando generico l'indirizzo, la porta e il token, in modo da ridurre al minimo le ripetizioni quando lo richiamo nei singoli servizi.

# Create a NCPA service to check if VPN Client is connected

define service{
    use            generic-service
    host_name        WINDOGS
    service_description    VPN Client Ping
    check_command        check_ncpa!-M 'plugins/check_ping_VPN.ps1'
    ...
    }

# Create a NCPA service to check the status of TCP connections

define service{
    use            generic-service
    host_name        WINDOGS
    service_description    TCP Connections
    check_command        check_ncpa!-M 'plugins/check_TCP_stats_py.bat'

    ...
    }

E così avete a disposizione un metodo per scrivere i vostri plugin personalizzati, probabilmente non solo in Python, ma anche nodejs, Lua, Go e quant'altro vi viene comodo per la situazione specifica che vi trovate a monitorare.

Buon divertimento!