Ciao ragazzi! Oggi volevo fare quattro chiacchiere
con voi riguardo Ubuntu Core 18.
Non so se lo sapete ma canonical, l'azienda
che segue lo sviluppo di Ubuntu Linux, ha
rilasciato da pochissimi giorni (dopo una
fase di test nel mese di dicembre) questa
nuova versione di Ubuntu basata sulla LTS
18.04 e pensata per il mondo IoT. Ubuntu Core
18, infatti, si pone come successore di Ubuntu
Core 16 (distribuzione arrivata sul mercato
a fine 2016 e di cui molto rapidamente vi
avevo già parlato in un mio precedente focus),
e rispetto alla vecchia edizione l'OS è stato
ancor di più incentrato sulla sicurezza.
Prima di addentrarci, però, ci tenevo subito
a premettere che: 1) questo OS non è pensato
per l'uso Dekstop, ma è come vedremo una
versione super scarna e minimal con delle
logiche di funzionamento ben precise; e 2)
Core supporta diverse board che solitamente
vengono utilizzate per sviluppare prodotti
o progetti IoT, e anche qui ci torneremo tra
poco, board tra cui spicca il Raspberry Pi
3 sul quale io lo ho installato.
Detto ciò, che cos'è Ubuntu Core? Ubuntu
Core è una versione di Ubuntu costruita per
dispositivi IoT sicuri. Il sistema è stato
disegnato completamente per creare una versione
Linux embedded più sicura possibile per dispositivi
ed oggetti connessi alla rete. Difatti, ogni
aspetto dell'OS è costantemente controllato
e verificato affinché durante tutto il ciclo
vitale dell'oggetto non ci possano essere
sorprese: i pacchetti hanno una firma digitale
persistente, il che significa che l'OS può
verificarli in qualsiasi momento; gli stessi
pacchetti sono confinati e non possono accedere
ai dati di altri pacchetti software né essere
a loro volta acceduti da terzi; sono garantini
fino a 10 anni di aggiornamenti software da
parte di canonical; il sistema in sé è stato
compresso all'osso al fine di ridurre la possibile
superficie di attacco dall'esterno: meno pacchetti
cioè meno strato software equivalgono sicuramente
a meno possibili bug; e perché no? anche
a più spazio a disposizione per le applicazioni
e per i dati.
Ubuntu Core vive attorno ai pacchetti snap
che sono distribuiti attraverso lo store principale,
ma è anche possibile utilizzarne di alternativi
e volendo propri, e questi pacchetti sono
costantemente monitorati al fine di verificare
la presenza di librerie vulnerabili o codice
problematico.
E' ovvio che un approccio del genere strizzi
molto l'occhio al mondo business, e Canonical
stessa non lo nasconde. Anzi l'azienda aggiunge
anche features decisamente interessanti come
il controllo remoto per decidere quali aggiornamenti
applicare e quali no, quale è la versione
del kernel in uso, e via discorrendo, il tutto
indipendemente dall'hardware sottostante su
cui gira l'OS. E pensate che svolta possa
essere un approccio del genere quando ad esempio
si ha un parco dispositivi gigantesco e c'è
la necessità di aggiornare qualcosa o fare
delle modifiche. E nel mondo IoT non è poi
così assurdo pensare su larga scala, anzi
proprio il contrario...
Comunque, Core non è orientato solo al mondo
business: sfruttando gli snap, Core condivide
con il mondo Desktop, il mondo Server e qualsiasi
altro sistema utilizzi questi pacchetti la
possibilità di creare una applicazione una
volta e distribuirla in modo uniforme ovunque:
dal proprio PC, alla propria farm, sul cloud
e perfino sui dispositivi embedded. Perciò
chi sa già lavorare con gli snap potrà aggiungere
alla lista di tutte le piattaforme supportate
anche i device IoT. Infatti il programmatore
non dovrà pensare prima alla piattaforma
che si vuol utilizzare e poi sviluppare codice
con essa compatibile: no, lo sviluppo si concentrerà
esclusivamente su quello che si vuol realizzare
e poi una volta creato lo snap si avrà la
sicurezza che esso funzionerà su ogni device
compatibile con gli snap appunto.
Usare gli snap, inoltre, porta ulteriori benefici
come la possibilità di gestire tutto da remoto
con aggiornamenti in real-time (transazionali
e con backup per tornare indietro senza problemi),
etc etc etc.
Perfetto, abbiamo detto che Core è disponibile
per Raspberry Pi, come fare per installarlo?
Tanto per cominciare il sistema è compatibile
con il Pi 2 e il 3, io ho il modello 3 quindi
dal sito ufficiale del progetto ho scaricato
l'immagine apposita per lui. La stessa immagine
va quindi scritta su microSD con uno dei classici
metodi per scrivere su microSD i sistemi per
Raspberry Pi: potete scegliere tra Etcher.io
che è cross platform, oppure Win32DiskImager
su Windows, o le varie utility preinstallate
in Linux o Mac.
A questo punto sono indispensabili 2 passaggi
che dovranno essere compiuti prima di configurare
Core sul Pi. Il primo è registrarsi sul sito
Ubuntu One (login.ubuntu.com) creando un account
personale. Il secondo è quello di generare
una chiave SSH sul PC dal quale ci si vuole
connettere in SSH da remoto al Raspberry Pi.
Sì, perché Ubuntu Core non consente di default
l'accesso diretto al dispositivo e soprattutto
non consente l'accesso con utente e password
da remoto. Il che significa che sarà impossibile
attaccare una tastiera e un monitor al Pi
e tentare di autenticarsi, né sarà possibile
aprire una connessione da remoto con nome
utente e password. L'unico modo per autenticarsi
e quindi poi controllare lo specifico device
è quello di utilizzare una coppia di chiavi
pubblica e privata che garantiscano l'identità
dell'utilizzatore. Per creare questa coppia
di chiavi, potete usare diversi software appositi:
su Linux e Mac da terminale c'è il comando
ssh-keygen -t rsa -C "[il vostro indirizzo email]"
e su Windows potete usare PuttyGen.
Alla fine il tool crea due file chiamati presumibilmente
id_rsa (che è la chiave privata) e id_rsa.pub
(che è la chiave pubblica). Aprite il file
id_rsa.pub e copiate il contenuto, quindi
tornate sul sito Ubuntu One e nell'area SSH
Keys incollate il contenuto all'interno dell'apposito
box. ATTENZIONE: verificate che, una volta
importata la chiave SSH, nell'area sovrastante
appaia una riga con la vostra email (o ciò
che avete indicato nel comando di creazione
chiave), come tipo ssh-rsa, e in text il contenuto
che avete copiato dal file id_rsa.pub.
E' fondamentale che sia tutto corretto qui altrimenti
non riuscirete a loggarvi su Ubuntu Core.
Una volta completati questi due semplici passaggi,
potete inserire la microSD nel Pi, collegarlo
ad una tastiera ed un monitor e accenderlo.
Tastiera e monitor servono solamente per la
fase di configurazione iniziale, le volte
successive non saranno più necessari.
Sarete accolti da un wizard di benvenuto che
eseguirà la configurazione iniziale. Durante
questa fase fondamentalmente vi sarà chiesto
di collegarvi alla vostra rete, nonché vi
sarà richiesta l'utenza con la quale vi siete
registrati su Ubuntu One. Questo passaggio
è importante perché il sistema si collegherà
al vostro personal account e scaricherà
automaticamente la chiave pubblica
che poc'anzi avete inserito lì sopra.
Non appena il download della chiave termina,
il sistema mostrerà un messaggio con il comando
da eseguire per collegarsi da remoto al Raspberry
Pi dal PC che contiene la chiave privata abbinata
a quella pubblica che avete inserito sul sito
e che ora è anche su Ubuntu Core.
ATTENZIONE: è noto che potrebbero esserci
problemi con la WiFi e quindi in generale
si consiglia di effettuare questa prima configurazione
collegando il Pi al router via cavo Ethernet.
Personalmente non ho avuto problemi ad usare
subito il WiFi, però sappiate che in caso
non riusciste a collegarvi alla vostra rete
allora è probabile che dobbiate usare il cavo.
Perfetto, completato il primo boot del Raspberry
Pi, potete tornare al PC e collegarvi in SSH
con il nome utente con il quale vi siete registrati
su Ubuntu One (e come era anche debitamente
indicato nella schermata di riepilogo su Ubuntu
Core). Non serve inserire alcuna password
perché verrà usata direttamente la chiave
privata immagazzinata sul PC stesso col quale
vi state collegando. Se usate programmi particolari
per loggarvi in SSH assicuratevi che appunto
come metodo di autenticazione sia impostato
quello con chiave privata su file (e ovviamente
specificate il percorso in cui trovare quel
file).
ATTENZIONE: se non doveste riuscire ad autenticarvi
su Ubuntu Core dipenderà sicuramente dal
fatto che c'è stato qualche errore di copia
e incolla della chiave pubblica sul sito Ubuntu
One oppure è sbagliato il percorso in cui
il programma SSH che state usando per accedere
al Pi da remoto va a cercare la chiave privata.
Verificate correttamente queste cose e nel
qual caso aveste sbagliato nell'inserimento
della chiave pubblica allora ci sono due possibili
strade per risolvere: quella semplice è ricominciare
tutto da capo poiché la sincronizzazione
degli account avviene SOLO nella fase di configurazione
iniziale. In alternativa va modificato il
file contenuto sulla microSD nel percorso
nomeutente/.ssh/authorized_keys inserendo
la corretta chiave pubblica. Questo vale anche
nel qual caso voleste cambiare coppia di chiave
pubblica e privata per l'autenticazione. C'è
anche il tool ssh-copy-id ma per la fase iniziale
non è una strada percorribile.
Una volta dentro, potete sfruttare Core per
installare tutto il software che volete e
smanettare per realizzare progettini IoT.
Come dicevamo ad inizio video, tutto ruota
attorno a snap, quindi per cercare software,
installarlo, aggiornarlo e così via non potrete
usare apt o altri gestori, ma appunto c'è
snap. Che alla fine è anche molto semplice
da usare, ad esempio è possibile cercare
pacchetti come nextcloud, oppure webserver
o database e vedere che cosa ci viene restituito
dalla ricerca. Al momento se non ricordo male
dovrebbero esserci tra i 4500 e i 5000 software
pacchettizzati in snap sullo store di Canonical.
Quindi, teoricamente, si dovrebbero trovare
un bel po' di cosette già pronte all'uso,
vedi node-red, postgreSQL, e tantissimo altro
software pensato per il mondo IoT.
Installare pacchetti snap è semplicissimo,
basta un snap install nomedelpacchetto ad
esempio nextcloud e il sistema si occuperà
di fare tutto il necessario. Occhio che come
in questo caso se il sistema necessita di
un riavvio poiché è stato installato un
pacchetto core che lo richiede, allora il
setup corrente potrebbe essere bloccato o
messo in pausa. Dopo il riavvio potete abortire
il tutto e ricominciare oppure far terminare
la transazione al sistema operativo.
Una volta scaricato il pacchetto ed installato
possiamo controllarne l'effettivo funzionamento.
Ad esempio nel caso di nextcloud, apriamo
il browser web all'indirizzo IP del Raspberry
Pi e dovrebbe caricarsi la schermata di login.
ATTENZIONE: se non dovesse vedersi nulla,
è probabile che sia necessario dare un riavvio
al Pi con sudo reboot. Comunque, una volta
fatto tutto ecco che sarà possibile usare
il nostro software installato con un semplice
comando. Se siete interessati ad approfondire
nextcloud, rimando al video dedicato che ho
pubblicato tempo fa qui sul canale.
Bene. Che cosa pensare di Ubuntu Core? Secondo
me è un ottimo progetto che tenta in qualche
modo di standardizzare la base software che
muove i dispositivi autonomi sempre più connessi
alla rete: dai single board computer, agli
elettrodomestici evoluti, ai più disparati
sensori che stanno invadendo la nostra vita.
Avere un sistema operativo completo ma allo
stesso tempo ridotto all'osso, con un focus
spiccato verso la sicurezza e l'isolamento
delle applicazioni che su di esso sono in
esecuzione, sempre secondo me, è un aspetto
molto importante su cui riflettere. Praticamente
tutto ciò che si può fare con Ubuntu Core
lo si potrebbe fare tranquillamente anche con
Raspbian e altri OS, i quali però sono sistemi
operativi "tradizionali" che: 1) occupano
un sacco di spazio in memoria (che su device
estremamente economici scarseggia); 2) non
garantiscono aggiornamenti di sicurezza costanti
e strutturati allo stesso modo di come abbiam
visto essere su Ubuntu Core; 3) non c'è isolamento
tra le applicazioni installate il che significa
che i dati possono potenzialmente essere letti
da chiunque e non si possono avere tante garanzie
di funzionamento a lungo termine, inoltre
diventa scomodo aggiornare perché bisogna
fare attenzione alle librerie condivise, non
si possono generalmente utilizzare in contemporanea
versioni diverse dello stesso software, diventa
complesso gestire i canali di test canary
e quant'altro; 4) non è detto che le app
funzionino indipendetemente dall'hardware
e dal software sottostante poiché da una
parte ogni OS ha determinate librerie con
versioni differenti rispetto magari a quelle
richieste dalla data applicazione che si vuole
installare, e poi le periferiche presenti
sul device possono gestire sensori e altre
componenti in modo diverso, mentre il mondo
snap unifica tutto e isola i vari software
tra loro rendendo l'hardware trasparente al
software e le librerie trasparenti tra loro;
5) i sistemi operativi tradizionali non ragionano
con l'ottica della sicurezza come è stata
pensata fin da subito su Core: troviamo la
possibilità di loggarci direttamente dal
device stesso (che magari è posizionato chissà
nel mondo dove lontano da noi), oppure si
può entrare con utenze e password anche semplici
da decifrare (come i classici admin/admin
o pi/raspberry che nessuno cambia mai), qui
invece tutto è studiato per evitare manomissioni
di alcun genere.
Che ne pensate di Ubuntu Core? Vi aspetto
nei commenti perché questo video l'ho portato
appositamente per aprire un dialogo in merito
con voi. Fatemi sapere se lo avete trovato
utile o interessante, e se vorreste vedere
in futuro qui sul canale altri video di approfondimento
come questo. Inoltre, se ancora non lo foste,
iscrivetevi al canale attivando le notifiche
per essere subito avvisati quando pubblicherò
i prossimi focus.
A questo punto non mi resta altro che salutarvi.
Ci sentiamo presto e nei commenti. Ciao!
