DEBIAN SU SMARTMATIC A4 210 (puntata 1)

DEBIAN SU SMARTMATIC A4 210 (puntata 1)

Marzo 21, 2021 2 Di Bibliomike

Ciao a tutti, questo è il primo di una serie di post che pubblicherò su Openlinux.it e in cui vedremo come effettuare una modifica completa del software presente su un dispositivo per il voto elettronico, nel caso specifico una SmartMatic A4 210.

Nel fare questo ci lasceremo comunque aperta la possibilità di ripristinare il sistema al suo stato originale utilizzando l’utility opensource (Clonezilla).

Ho deciso di dare a ciò che pubblicherò un taglio non troppo tecnico condendo il tutto con un pizzico d’ironia, e cercando di rendere la spiegazione dei vari argomenti adatta anche a chi si avvicina per la prima volta all’ambiente Linux.

Ho inserito nel testo per questo scopo, diversi link di approfondimento su alcuni argomenti di una certa complessità o importanza.

Pur essendo la distribuzione di riferimento utilizzata GNU/Debian vi assicuro che gran parte di quanto è stato implementato può essere applicato senza particolari modifiche anche su altre distribuzioni derivate (es. Ubuntu, Mint, ecc.). 

Premessa

I cittadini lombardi ricorderanno che le Voting Machine SmartMatic sono state utilizzate nel 2017 per esprimere il voto alle consultazioni referendarie regionali (Italy’s first fully automated election).

In seguito la regione Lombardia, avendo sul groppone migliaia di questi dispositivi (se non ricordo male circa 23000), decise di darli in comodato d’uso alle scuole che ne avessero fatto richiesta (wiki.scuola).

Molte scuole colsero questa occasione pensando di dotarsi a costo zero di tablet da utilizzare per la didattica scolastica. Di lì a breve questi oggetti esotici del tablet mostrarono ben poco, considerando i 2 chiletti buoni di peso e la scarsa integrazione dell’ambiente software installato con il touch screen.

Con mio rammarico probabilmente molte scuole a questo punto staranno cercando di disfarsi di questi dispositivi, non credo infatti che molti insegnanti abbiamo la voglia e la pazienza di mettersi a configurarli per renderli produttivi.

Caratteristiche hardware

PROCESSORE Intel Atom x5-Z8350, Quad core 1.44 GHz
RAM 2 GB
MEMORIA INTERNA 16 GB
DISPLAY 10” touchscreen, 1280×800 pixel
CONNETTIVITÀ WiFi, Bluetooth
INTERFACCE 3 USB
SISTEMA OPERATIVO Ubuntu 16.04 LTS
DIMENSIONI 24,2 x 25,1 x 12,5 cm
PESO 2 Kg
ALTRO Speaker audio, stampante integrata per carta termica

Debian Boot

I contributi dal Web

Non sono sicuramente il primo che si è cimentato con questo dispositivo; a seguire vi elencherò una serie di risorse specifiche che potrete cominciare a consultare se ne avete voglia.

Eviterete così di googlare in tondo senza trovare quello che realmente vi serve.

Il LugMan in particolare mette a disposizione molte risorse adatte ai neofiti che vogliono avvicinarsi al mondo Linux, fra cui guide introduttive per Linux Ubuntu, la distribuzione che trovate nativamente installata sulla SmartMatic.

Le mie modifiche software

Ecco cosa mi sono divertito a realizzare con un po’ di pratica:

  • Creazione di una pendrive USB per il ripristino e la clonazione del sistema operativo (distro Live Clonezilla). Ho utilizzato la procedura che sul sito Clonezilla è descritta come “Metodo B”, che permette di salvare sulla seconda partizione della pendrive le immagini clonate.
  • Installazione e ottimizzazione completa di un Sistema operativo Debian Buster con Desktop Environment XFCE.
  • Installazione di un Server Web Apache.
  • Configurazione di un’area di contenuti condivisi su server con sistema di autenticazione WebDav.
  • Installazione del software Calibre per la gestione della collezione di e-book.
  • Installazione di COPS, un server OPDS (Open Publication Distribution System) con catalogo accessibile via browser su rete locale oppure attraverso programmi client specifici (es. Aldiko, FBReader, ThoriumReader). Per il PC (Mac, Linux o Windows) vi consiglio l’utilizzo di Thorium Reader.
  • Installazione su server web di una applicazione per la gestione del prestito dei libri progettata in php su database sqlite3 e framework Bootstrap. L’applicazione utilizza come back-end Calibre per il caricamento dei meta-dati e delle copertine dei libri e il server OPDS per la consultazione del catalodo degli e-book.
  • Installazione di un ambiente di sviluppo per Arduino. A mio avviso questa potrebbe essere una soluzione utile per un laboratorio scolastico visto l’ingombro limitato di questo dispositivo (display da 10 pollici).
  • Installazione di Joplin (An open source note taking and to-do application with synchronisation capabilities). È un software molto comodo per avere i propri appunti sincronizzati su vari dispositivi attraverso un account remoto (per esempio OneDrive o GoogleDrive) e può funzionare anche come portable apps su pendrive.
  • Installazione di Sigil (potente editor di e-book). In questo caso non essendo disponibile per Debian una versione binaria aggiornata è stata necessaria la compilazione del software dai sorgenti.

Nei prossimi post approfondiremo meglio l’utilizzo di questi software.

Ecco alcuni screen-shot di esempio catturati dal dispositivo una volta eseguite le modifiche:

Form di registrazione del prestito (applicazione Bibliomike)

 

Consultazione del catalogo dal browser web (OPDS Cops)

 

Accesso al catalogo e-book da PC con software Thorium Reader (brano tratto da “Codice libero. Free as in freedom. Richard Stallman e la crociata per il software libero”)

Selezione della distribuzione

Per la modifica del dispositivo ho scelto Debian 10.8 (release stable nome in codice Buster) piuttosto che altre distribuzioni Linux più orientate al desktop (es. Zorin OS, Mint, ecc.) perché presenta alcuni vantaggi che ne semplificano l’implementazione, fra cui:

  • Il dispositivo che utilizzeremo ha un architettura a 64 bit con UEFI a 32 bit, su cui Debian ha un buon supporto.
  • Le distribuzioni Ubuntu e derivate recenti senza respin non si installano facilmente per problemi di compatibilità con il UEFI a 32 bit e al termine dell’installazione rischiereste quindi di avere un dispositivo che non si avvia correttamente.
  • I kernel più recenti con cui sono equipaggiate le distribuzioni Ubuntu e anche Debian Bullseye (test release di Debian) hanno dei problemi con il funzionamento del touch screen, che sinceramente non sono riuscito a risolvere in modo soddisfacente.

Un work-around che si può applicare per correggere parzialmente i problemi di funzionamento del touch screen:  consiste nel down-grade del kernel alla versione precedente ‘4.19’. Su Debian Bullseye la procedura l’ho provata e funziona perfettamente.

Al termine del down-grade il kernel 4.19 sarà disponibile nelle opzioni avanzate di avvio del bootloader GRUB ma è anche possibile modificare la sequenza di avvio con alcuni accorgimenti che posso spiegarvi nelle prossime puntate.

La cassetta degli attrezzi

Procuratevi i seguenti materiali:

  • Tanta pazienza ed entusiasmo.
  • Pendrive USB da almeno 700 MB per la creazione del media di installazione.
  • Un’altra pendrive da almeno 8 GB (se ne raccomanda una più capiente) che useremo per creare la Clonezilla Live per il ripristino e il salvataggio delle immagini clonate.
  • Se avete una tastiera wireless con il pad integrato il suo utilizzo è cosa buona, giusta e comoda visto che vi rimarranno due porte USB libere. Se non la avete vanno bene anche un mouse e una tastiera usb.
  • Assicuratevi di aver caricato completamente la batteria della Voting Machine. Se la mantenete in carica durante l’utilizzo tende a scaldare un po’ e la ventola di raffreddamento è più rumorosa di uno scaldabagno.
  • E per condire il tutto un minimo di conoscenza dei principali comandi da inserire sul terminale linux.

Il terminale è vostro amico non dovete temerlo, se ci applicate un po’ di trasparenza modificandone le impostazioni di visualizzazione non è poi così brutto.

Il terminale Linux è qualcosa di molto complesso e potente, di fatto vi offre un ambiente di programmazione completo descritto in manuali di migliaia di pagine.

Per prendere confidenza con le funzionalità della shell e della riga di comando, vi consiglio di cercare in rete Linux command line cheat sheet oppure una cosa tipo guida semplice alla riga di comando linux.
Io per esempio ho trovato questo Prontuario_Comandi_Linux di semplice consultazione.

Il nostro VIMELUG inoltre da diversi anni organizza per i suoi soci corsi specifici su GNU/LINUX.

Senza pretendere di spiegarvi in 2 righe il funzionamento del terminale e della shell Bash vi riporto alcuni esempi di istruzioni comuni un po’ come me le ricordo io, quindi perdonate la sintassi non ortodossa. Spero di non annoiare a morte chi conosce già l’argomento:

  • man <comando>: stampa a video il manuale di un comando specifico con esempi di istruzioni comuni. Per esempio man ls è il manuale che ci spiega come utilizzare il comando ls
  • ls: elenca il contenuto di una directory. Il comando inserito senza alcun argomento elenca il contenuto della directory corrente. E’ possibile aggiungere al comando ls il percorso della directory di cui si vuole elencare il contenuto. Per esempio ls / elenca il contenuto della radice (o root) del sistema. In linux non esiste come in windows un’unità C:/, tutto è un file. Anche i device (cdrom, hard disk, ecc.) per esempio sono file “montati” in modo gerarchico sulla root del sistema nella cartella ‘/dev’.
  • pwd: visualizza il percorso della directory corrente.
  • cd <PATH>: il comando cd funziona esattamente come nel vecchio DOS, ovvero permette di spostarsi nella directory che noi abbiamo dato in pasto al comando, per esempio:

cd ~: fa un change directory verso la nostra home (l’operatore tilde ~ nella shell linux è uno shortcut alla directory $home dell’utente che ha eseguito il login). La directory $home è fondamentalmente la directory in cui l’utente ha i permessi di scrittura e in cui vengono salvati alcuni file di configurazione locali. La directory $home ha generalmente come percorso assoluto /home/<nomeUtente>, pertanto nel mio caso otterrei lo stesso risultato inserendo il percorso assoluto cd /home/bibliomike.
cd ..: permette di risalire di un livello gerarchico dalla directory corrente.

  • mv <oldFile> <newFile> e cp <oldFile> <newFile> permettono rispettivamente di spostare e copiare il file oldFile in newFile. Con questi comandi è possibile operare su file non necessariamente presenti nella directory corrente, occorre ovviamente specificare il percorso corretto del file di origine e di destinazione. La shell in questo ci aiuta molto attraverso l’uso sapiente del tasto ‘Tab’ che esegue l’auto-completamento dei nomi che stiamo digitando o ci suggerisce delle alternative possibili.
  • rm <fileName> è il comando “remove”, serve quindi a cancellare un file.
  • su: questo comando cambia l’utente della shell in “SuperUser” (utente root). Dopo aver inserito questo comando il sistema vi chiederà la password dell’utente root e, se corretta, modificherà l’utente loggato sulla shell in amministratore del sistema (root).

  • less <nomeFile> apre in lettura e mostra sullo schermo un file di testo. Per uscire dalla finestra è sufficiente digitare la lettera ‘q’. Il tasto ‘v’ attiva invece la modalità di scrittura sul file attraverso l’editor di testo predefinito (generalmente nano).
  • nano è un editor di testo installato in maniera predefinita su Debian ed è molto semplice da utilizzare. Una volta attivato troverete nella parte bassa dello schermo una guida con la lista dei comandi diponibili (es. CTRL+X per uscire, CTRL+O per salvare, ecc.). Se dopo il comando nano inseriamo il nome del file possiamo aprire e modificare il file stesso, se il file non esiste nano lo crea.

Altri comandi di utilità generale, che serviranno per esempio a gestire i permessi sulle directory, li vedrete all’opera nel corso delle prossime puntate, quando ci torneranno utili nelle fasi di post installazione.

Preparazione del media di installazione

Nel momento in cui scrivo il file iso più recente per il tipo di installazione che utilizzeremo lo trovate al seguente link:
https://cdimage.debian.org/debian-cd/10.8.0/amd64/iso-cd/debian-10.8.0-amd64-xfce-CD-1.iso.
Considerate che Debian Buster è un sistema che verrà supportato fino al 2024 quindi è ancora una buona scelta.
La distribuzione Ubuntu 16.04 LTS con cui vi hanno fornito la SmartMatic invece è una release che raggiungerà il suo “end of life support” il 30 Aprile 2021, quindi mantenerla su questo dispositivo non mi sembra cosa saggia.

Da terminale linux potete scaricare il file *.iso con il comando wget:

wget https://cdimage.debian.org/debian-cd/10.8.0/amd64/iso-cd/debian-10.8.0-amd64-xfce-CD-1.iso

Oppure semplicemente utilizzate il link della risorsa per scaricare il file *.iso con il vostro browser.
In Debian o Ubuntu, per la localizzazione italiana, la cartella di download predefinita è di solito ‘Scaricati’ presente nella vostra ‘home directory’.
Come vedete dal nome del file, la versione che installeremo contiene già il desktop environment XFCE, che rappresenta un giusto compromesso fra usabilità e consumo di risorse (GNOME e KDE sono troppo pesanti da far girare su questo hardware).

Volendo evitare l’installazione di pacchetti non necessari, ho scelto appositamente una versione minimale dell’immagine di installazione, considerando che la SmartMatic ha una capacità del disco di soli 16GB.

Vediamo ora come trasferire l’immagine dell’installer sulla pendrive.

Potrebbe esservi utile un tool grafico come Balena Etcher che funziona tra l’altro anche con Windows e la cui semplicità di utilizzo è disarmante.

Oppure se avete una voglia matta di riga di comando, vi posizionate sulla cartella dove avete scaricato il file *.iso e trasferite l’immagine di installazione direttamente su pendrive USB cancellandone il contenuto in modo irreversibile:

sudo dd bs=4M if=debian-10.8.0-amd64-xfce-CD-1.iso of=/dev/sdx status=progress oflag=sync
Al posto di sdx dovrete metterci il nome corretto del device della vostra pendrive.
In caso di dubbi sul nome del device vi viene in aiuto il comando lsblk che vi mostra in output tante belle cose, tra cui i nomi che Linux ha dato ai dischi e alle partizioni presenti sui dischi. Lascio a voi provare questo comando, riconoscerete facilmente la vostra pendrive in base alla sua dimensione (colonna SIZE). Io ci ho aggiunto un po’ di opzioni per verificare almeno i progressi dell’operazione sul terminale.

Una breve spiegazione dei comandi che ho utilizzato:

  • In un sistema Linux e più in generale sui sistemi della famiglia Unix l’utente non ha il permesso di scrivere su file system al di fuori delle propria home directory (men che meno su un altro device). Anteponendo il comando sudo a qualunque istruzione si attribuiscono all’utente corrente, dopo digitazione password, i privilegi di ‘SuperUser’; questo comando funziona solo se l’utente corrente è stato precedentemente aggiunto al gruppo ‘Sudoers’ (vedremo in seguito come fare). In alternativa all’impiego di sudo è possibile autenticarsi nella shell come root (vedi istruzione su riportata nel paragrafo precedente).
  • Il comando dd permette di trasferire l’immagine di installazione (if=<file iso>) su pendrive (of=/dev/<nomeDevice>). Per maggiori dettagli sull’uso di questo comando vi invito a consultare la pagina del manuale con il comando man dd.

Sul nostro dispositivo SmartMatic il nome del device del disco di sistema fortunatamente non inizia con ‘sd’, quindi a meno di mettercisi di coccio è quasi impossibile fare danni; l’hard drive del sistema operativo è infatti una memoria di tipo eMMC il cui nome comincia con il prefisso ‘mmcblk’.

Detto questo abbiamo creato finalmente la nostra pendrive e siamo pronti a far partire l’installazione del nostro sistema.

Se avete già un minimo di esperienza potrete eseguire autonomamente la procedura di installazione considerando che dovrete modificare la sequenza di avvio dal BIOS (password: smart?ecp come riportato nelle diverse guide disponibili in rete).
Il sistema una volta installato è comunque di poca utilità visto che non funziona la scheda wi-fi (unica interfaccia di rete).

Se avrete ancora la pazienza di seguirmi nelle prossime puntate vi illustrerò come configurare in maniera ottimale il nostro dispositivo e renderlo quindi utilizzabile per altri scopi scopo.