Sei sulla pagina 1di 132

12 progetti - 18 pagine di PYTHON - 20 pagine di SICUREZZA

Raspberry Pi
GUIDA COMPLETA
Raspberry Pi 2018

2018
tutorial per RP 1, 2, 3 E ZERO

controllo vocale
Con un microfono e la Pi AUI
Suite lanci filmati, scarichi
file e scrivi testi senza
alzare un dito

PROGETTA
IL FUTURO
CON IL PC
CALENDARIO DIGITALE
DA 40 €
Condividi la tua agenda Google,
iCloud o Outlook a casa o in ufficio:
■ Scopri come
la appendi a un muro e la controlli
con il display a sfioramento
potenziare la RP
■ Rendi domotica
la tua abitazione
■ Crea un portale
internet da zero
CERTIFICATO!

difendi la tua rete locale metti un robot in pista esperimenti con led e motori
Costruisci bot a 4 ruote
radiocomandati
con MicroPython,
poi sfida i tuoi
amici in gare
all’ultima
sterzata!

Metti in sicurezza il tuo Wi-Fi, Impara le basi


immunizza le chiavi USB ed evita dell’automazione con la
gli attacchi degli hacker scheda Explorer HAT Pro
Corri subito in edicola!

ANCHE IN
VERSIONE
DIGITALE A
,90€
2 Scansiona il QR Code

ACQUISTA LA TUA COPIA SU www.sprea.it


Raspberry Pi

Programmare la Pi
è facilissimo!
Tutti noi abbiamo visto
su Internet progetti
12 progetti - 18 pagine di pYtHon - 20 pagine di SiCUreZZa

Raspberry Pi
di fai-da-te elettronico GUIDA COMPLETA
Raspberry Pi 2018

straordinari e magari abbiamo


anche provato a riprodurli.

2018
TUTORIAL PER RP 1, 2, 3 E ZERO
Spesso i risultati non sono
Controllo voCAle
ideali, soprattutto perché sono Con un microfono e la Pi AUI
Suite lanci filmati, scarichi
progetti difficili. Ma quando file e scrivi testi senza
alzare un dito

parliamo di Raspberry Pi PROGETTA


cambia tutto! Questa piccola
scheda che costa meno di 50
IL FUTURO
euro e che fa impallidire per CON IL PC
potenza tutti i suoi concorrenti CAlendArIo dIGItAle
DA 40 €
trasforma in artigiani digitali Condividi la tua agenda Google,
iCloud o outlook a casa o in ufficio:
■ Scopri come
la appendi a un muro e la controlli potenziare la rp
anche quelli fra di noi che con il display a sfioramento

hanno meno esperienza. ■ rendi domotica


la tua abitazione
In queste 128 pagine ■ crea un portale
troverete infatti progetti di internet da zero
CERTIFICATO!
ogni genere, dalla creazione
di un calendario digitale da dIfendI lA tUA rete loCAle mettI Un robot In PIStA eSPerImentI Con led e motorI
Costruisci bot a 4 ruote
appendere a un muro fino radiocomandati
con microPython,

alla realizzazione di sistemi poi sfida i tuoi


amici in gare
all’ultima
di protezione delle reti, ma sterzata!

tutti uniti da un filo comune:


la semplicità. Grazie ai tutorial metti in sicurezza il tuo Wi-fi, Impara le basi
immunizza le chiavi USb ed evita dell’automazione con la
potrete infatti seguire le gli attacchi degli hacker scheda explorer HAt Pro

precise istruzioni passo dopo


COP_001_LXP_SP21_raspberrypi2018 1 27/11/2017 14:38

passo e con le nostre guide invenzione. Non aspettate


alla programmazione e al allora un minuto di più, QUESTA CARTA
RISPETTA L’AMBIENTE
Terminale imparerete a creare tuffatevi subito nel mondo
molti altri progetti di vostra della Raspberry Pi!

RASPBERRY PI 1
Raspberry Pi Sommario

Progetti
Sempre più in alto.................................................................................4
Timelapse con la Pi camera........................................................ 12
Wiki: diffondi la conoscenza........................................................ 14
Doom: sconfiggi l’orda demoniaca......................................... 18
Installa un CMS sulla Raspberry.............................................. 22
Esperimenti con LED e motori.................................................. 26
Crea un mondo con Minecraft Pi............................................ 28
Whiptail: un menu per gli script Bash................................... 32
Un calendario da muro con iCal.............................................. 34
Controllo vocale................................................................................. 38
Minetest: fabbrica e personalizza............................................ 42

Web
I migliori servizi VPN........................................................................ 46
Con Varnish il Web corre veloce............................................. 52
Costruire un toolkit di sistema................................................... 56
Drupal 8: create il vostro sito Web........................................ 60

Python
Un copy fatto su misura................................................................ 64
Python: scrivere il proprio find.................................................. 68
Scrivere un tool di sistema.......................................................... 72
Django: il Web per chi ha fretta............................................... 76
MicroPython: robot in pista......................................................... 80
Elaborare il testo con Python.................................................... 84
Configurare un database.............................................................. 76
2 RASPBERRY PI
Sicurezza &
Gestione
Proteggi la Raspberry!.................................................................... 92
Mettete in salvo l’IoT....................................................................102
Scopri se la tua rete è sicura..................................................106
Internet delle Cose a modo tuo............................................108

CLI: il Terminale
Amministrazione: comandi base...........................................112
Terminale: profili multipli...........................................................116
Usare Internet e navigare.........................................................118
Scripting: test e variabili.............................................................120

Test
Thonny...................................................................................................122
Pimoroni Scroll Bot.......................................................................123
Compute Module 3.......................................................................124
Rainbow HAT.....................................................................................125
Asus Tinker Board..........................................................................126
Raspberry Pi 2 v1.2......................................................................127
WD PiDrive FE..................................................................................127

RASPBERRY PI 3
Raspberry Pi Progetti

4 RASPBERRY PI
Sempre
più in alto
con la Pi La Raspberry Pi Zero W
apre straordinari orizzonti
agli appassionati
dell’Internet degli Oggetti

L
a Raspberry Pi ha cambiato In seguito sono stati aggiunti dei pin al GPIO, che mancava,
per sempre il modo di progettare altre porte USB, poi è stata aggiornata la ed è arrivata
e realizzare i “dispositivi CPU per incorporare un processore quad- con la Pi 3
intelligenti”. Quando è entrata core a 64 bit ed è arrivata ancora più RAM. all’inizio
in scena a inizio 2012, il mercato dei La Pi Zero rappresentò un passo indietro del 2016, era la connettività wireless.
computer a scheda singola (Single Board con solo 512 MB di RAM e una CPU single- La Pi Zero W è stata lanciata il 28 febbraio
Computer o SBC) era rappresentato core da 1 GHz ma era più piccola e molto e, pur mantenendo sempre la CPU
da dispositivi complessi e la RAM della scheda che l’ha
e costosi mirati agli utenti
professionali. Non solo la Pi “L’unica cosa che mancava, preceduta, ora offre lo stesso
pacchetto wireless della Pi 3: Wi-Fi
ha portato il prezzo base
da 150 a 30 €, ma ha anche
ed è arrivata con la Pi 3, 802.11n e Bluetooth 4.1 con
un’antenna integrata. Questo significa
ridimensionato il livello
di conoscenze necessarie
era la connettività wireless” che abbiamo una piattaforma
a basso costo per creare applicazioni
per sviluppare i propri progetti grazie più economica e si poteva quindi integrare Internet of Things (IoT), sostenuta
al suo uso di Linux. permanentemente nei progetti. da una comunità appassionata che ha usato
La Raspberry Pi Foundation non ha mai La Pi Zero è stata usata per fotografare una buona fetta dei 12 milioni di Pi vendute
riposato sugli allori e le specifiche sono state automaticamente animali selvatici, mandata dal giorno del lancio per creare fantastici
migliorate e modificate. Il primo in orbita e integrata in strumenti dispositivi. Vediamo come sfruttare
aggiornamento ha portato la RAM a 512 MB. di tecnologia indossabile. L’unica cosa al meglio questa piccola meraviglia.

RASPBERRY PI 5
Raspberry Pi Progetti

Nata per creare


Perché la Raspberry Pi è la preferita dai maker?

L
a Raspberry Pi è sempre riuscita a creare funzioni: non aveva il supporto di un’enorme comunità
scompiglio nel mondo degli SBC. Il lancio di maker che si aiutano l’un l’altro a inventare
iniziale nel 2012 ha causato il crollo del costo e realizzare nuovi progetti. CHIP inoltre non può uscire
delle piattaforme di sviluppo. Da allora abbiamo in HDMI senza uno speciale shield che blocca l’accesso
visto molte altre aziende proporre i loro computer a tutti i pin GPIO, il che lo rende poco adatto all’uso
a scheda singola nella speranza di condividere multimediale. Ci sono altre schede sul mercato. Orange
il successo della Raspberry Pi. La maggior parte Pi, ODROID e Pine offrono piattaforme con cui creare
di questi prodotti non ha mai ottenuto la stessa ma nessun altro computer a scheda singola dispone
attenzione, malgrado il fatto che alcuni offrano della stessa comunità e dello stesso supporto della Pi.
funzioni migliori, un prezzo più basso, ecc. La Raspberry Pi Zero W ha un connettore HDMI
Prendiamo per esempio CHIP, uscito a metà 2016 e la capacità di riprodurre video HD 1080p grazie alla
con specifiche simili a quelle della Pi Zero. scheda grafica VideoCore IV. Così a 12 € potete guardare
La cosa allora unica che offriva CHIP era un pacchetto film in HD o usare il GPIO per riprodurre video da una
wireless con Wi-Fi 802.11n / Bluetooth 4.0 miriade di input, magari anche pensati per consentire
e connessione integrata per batterie LiPo, in grado a chi ha una disabilità di usare autonomamente
di dare una grande autonomia ai progetti. Tutto questo il dispositivo. Allora perché la Raspberry Pi piace tanto
per meno di 10 €... Può essere tutto oro quel che ai maker? Perché offre la massima libertà alle loro idee
luccica? Non esattamente. Quello che infatti mancava e si può usare per creare progetti grandi o piccoli,
a CHIP era ancora più importante di tutte queste dall’accendere un LED al creare mini cluster di computer

In breve
Una Pi Zero
con connessione
Raspberry Pi Zero W
wireless.
Uno strumento
Caratteristiche, usi e punti di forza di questa piccola grande
a basso costo
e ben
scheda tanto economica quanto potente

L
supportato per
creare progetti a Pi Zero è arrivata a sorpresa Con l’uscita della Pi 3 all’inizio del 2016 interfaccia GPIO (General Purpose Input
IoT, di robotica alla fine del 2015 dimostrandosi abbiamo visto l’aggiunta di Wi-Fi Output) a 40 pin senza connettore
e dispositivi un nuovo tipo di Raspberry Pi, e Bluetooth e ora ritroviamo queste saldato per collegare la Pi a dispositivi
con sensori che rinunciava ad alte specifiche funzionalità nella Pi Zero W. è quasi elettronici e schede aggiuntive. Il layout
integrati, con
lo stesso OS
a favore dell’economicità e delle identica al precedente modello di Zero. della scheda è leggermente cambiato.
dei modelli dimensioni ridotte. Le mancava Ha la stessa porta Camera Serial Il logo Raspberry Pi non è più presente
superiori. una cosa sola, come alla Raspberry Interface (CSI) che è stata introdotta con e al suo posto c’è un piccolo chip
Pi 2: la connettività wireless. la versione 1.3 della Zero e la medesima argenteo. è il chipset wireless
BCM4343A, lo stesso della Pi 3. Invece
di usare la stessa antenna a montaggio
Caratteristiche superficiale della Pi 3, però, la Pi Zero W
ha una “cavità risonante” scavata nel
rame della scheda che funge da antenna.
è una tecnologia su licenza di Proant
e non è stata creata dalla Raspberry
Pi Foundation. Il BCM4343A consente
l’uso di Wi-Fi 802.11n, Bluetooth 4.1
e Bluetooth Low Energy (BLE) per
questa piccola scheda, rendendola ideale
per l’Internet degli Oggetti. Il mercato
Connettività wireless GPIO a 40-pin dell’IoT ha visto molte schede diverse
Il chipset BCM4343A è lo stesso della più Ha lo stesso GPIO a 40-pin che è stato
costosa Raspberry Pi 3 ma questa volta introdotto nel 2014 con la B+, che consente ma nessuna con lo stesso livello
l’antenna fa parte della scheda invece di usare la Pi Zero W con una serie immensa di supporto della Raspberry Pi, che
di essere un componente aggiunto. di schede di espansione. ha venduto oltre 12 milioni di unità

6 RASPBERRY PI
Fare di più con la Pi

Sviluppare con la Pi
Dal lancio della Raspberry Pi, il suo sistema con una serie di plug-in che possono Zero W collegata a un hard disk USB. Dato che
operativo ufficiale è sempre stato Raspbian e alla trasformarlo in un centro di programmazione Raspbian è basato su Debian, è abbastanza facile
fine del 2016 è uscita la nuova versione, Pixel. per molti linguaggi diversi, non solo il Python. installare e aggiornare il software che usate con
Sono state migliorate interfaccia e velocità, oltre La Pi però non serve solo a programmare: APT. è il primo posto in cui guardare se vi serve
ad aver introdotto sofware nuovo e aggiornato. può essere un server a basso consumo un qualsiasi programma e anche per le librerie
Per sviluppare in Python si può usare Python 2 per salvare i vostri file o per il Web. La forza di Python. Se non le trovate con APT potete usare
o 3 con l’editor IDLE Python o, se preferite di Linux è che si può usare su molti dispositivi anche PIP, il gestore di pacchetti di Python,
uno strumento più flessibile, potete adottare diversi con specifiche differenti. Così potete per installare nuove librerie. Si può usare
Geany, un editor diffuso nella comunità di Linux crearvi un server a casa con una Raspberry Pi attraverso il terminale di Linux.

per progetti scientifici. Con la nuova Pi Zero W vedremo


più progetti integrati che usano la connessione wireless
per trasmettere e ricevere dati. Progetti che non
richiedono l’uso di un monitor e si possono utilizzare
senza tastiera e mouse attraverso una connessione
locale o remota. Le iniziative di “Citizen science” trarranno
grande beneficio dalla Pi Zero W: in breve, privati cittadini
raccolgono grandi quantità di dati attraverso sensori
economici e poi li caricano in punti di raccolta per
una successiva analisi da parte degli scienziati.
Di conseguenza potremo ottenere più informazioni Il design della Pi Zero non è cambiato molto
sul mondo che ci circonda con un computer da 12 € dal suo lancio, ma qui si può vedere
non più grande di un pacchetto di gomme da masticare. che contiene sempre più componenti

in tutto il mondo. La Zero W è perfetta o tastiere, a cui si accede tramite SSH


per portare molte altre persone ad o un’interfaccia seriale, la sfruttiamo
avvicinarsi al mondo dell’IoT, ed è un al meglio come base per progetti
ecosistema sostenibile per prodotti di robotica, fotocamera per scatti
futuri. è anche utilizzabile come naturalistici e piattaforma per la
computer desktop. Possiamo usarla gestione dei sensori. è anche molto Più o meno delle dimensioni di un pacchetto di gomme
con LibreOffice per scrivere documenti, efficiente sotto il profilo energetico: un da masticare, è una piattaforma molto potente
può riprodurre video a 1080p e navigare alimentatore USB da 600 mA è più che
in Internet. Si può anche usare in classe sufficiente anche con il Wi-Fi attivo. È nell’abbassare il prezzo delle
per insegnare a programmare molto meno dell’alimentatore da 2.5A piattaforme di sviluppo e la Pi Zero W
con Python, Ruby e JavaScript. La vera necessario per la Raspberry Pi 3. Cosa farà altrettanto. Non ha una CPU quad
forza di questo modello è che è una offre quindi la Pi Zero W? Una core, 1 GB di RAM e un sacco di porte
macchina a basso costo che consente piattaforma solidissima che ancora una USB. Vi permette, però, di creare i vostri
di integrare la connettività wireless volta porta un SBC economico a fare progetti integrati per l’IoT e la tecnologia
nei progetti. Usandola come dispositivo cose mai viste. La Raspberry Pi ha indossabile a un prezzo che vi consente
headless, senza monitor, mouse svolto un ruolo fondamentale di sperimentare.

Giudizio
Benchmark Pro
Avvio Sysbench: 1 core Sysbench: 4 core Raspberry Pi Zero W
Modello Octane RAM Processore
(secondi) prime 10,000 prime 10,000 Sviluppatore: Raspberry Pi Foundation
Web: www.raspberrypi.org
Raspberry Pi 1x ARM 11 Prezzo: circa 12 €
58 354 N/D 456 512 MB
Zero W 1 GHz
Caratteristiche 9/10
Raspberry Pi 1x ARM 11 Prestazioni 5/10
57 353 N/D 458 512 MB
Zero v1.3 1 GHz Facilità d’uso 9/10
4× ARM Cortex Qualità/Prezzo 10/10
Raspberry Pi 3 31 182 45 2686 1 GB
A53 - 1,2 GHz Economica e ben supportata.
4x ARM Cortex Qualunque sia il vostro progetto
Raspberry Pi 2 31 243 61 2131 1 GB o linguaggio, non fatevela scappare.
A7 - 900 MHz

Il voto di
9.5
1 x ARM11
Raspberry Pi 1 71 512 N/D N/D 512 MB
700 MHz Linux Pro

RASPBERRY PI 7
Raspberry Pi Progetti

Spremi al massimo
la Raspberry Pi Zero W
Basta aggiungere una scheda HAT per creare progetti
hardware ancora più utili. Vediamo le migliori

A
l lancio della Raspberry Pi nel 2012 non c’erano di progetti. Ogni scheda presentava anche una serie di sfide
schede di espansione. La prima è arrivata dopo progettuali, soprattutto in termini di dimensioni, che allora
diversi mesi ed è stata la Gertboard, sviluppata variavano dalle stripboard a schede su più livelli come
dal progettista della Raspberry Pi Foundation Gert van Loo. la Gertboard. Quel che serviva era uno standard. Saltando
Era una grossa scheda pensata per espandere al lancio della B+ nel 2014 vediamo nascere un nuovo standard
le funzionalità GPIO fornendo input sia digitali per le schede di espansione: HAT, ossia Hardware Attached on
sia analogici, pin con buffer, un controllo per i motori Top (hardware attaccato sopra), che stabilisce un set
e un microcontroller compatibile con AT Mega. di dimensioni con cui si può progettare una scheda perché
La Gertboard ha avuto un ottimo impatto e ha dato il là alla si possa montare sopra la Raspberry Pi e fissare con il nuovo
nascita di svariate schede di espansione per la Raspberry Pi. GPIO a 40-pin e i fori per le viti presenti sulla Pi. La scheda deve
Aziende come Pimoroni, Cyntech, 4Tronix e altre hanno iniziato anche usare una EEPROM per comunicare con la Raspberry Pi
a creare i loro prodotti, tutti pensati per il GPIO a 26-pin che era attraverso i nuovi pin presenti sul GPIO. Lo standard HAT
lo standard del momento, e il mercato si è riempito non è canonizzato, ma se volete definire HAT la vostra scheda
di dispositivi per aiutare chiunque a fare qualsiasi cosa. dovete seguire quelle linee guida. In realtà chiunque può creare
Le prime schede offrivano semafori, semplici controller una scheda di espansione... e infatti le hanno un po’ fatte tutti.
per i motori e pin GPIO protetti e tutte avevano lo scopo C’è anche lo standard pHAT, progettato da Pimoroni per
di permettere di realizzare facilmente e velocemente vari tipi le schede da usare con la Pi Zero. Questo standard ha portato
allo sviluppo di molte nuove schede più piccole, non solo
da parte di Pimoroni. Chiunque è libero di usarlo e molti
membri della community lo hanno adottato. Oggi ci sono
moltissime schede aggiuntive diverse, da semplici kit
da montare creati dalla comunità fino a prodotti industriali
preassemblati per la domotica, l’audio di alta qualità
Ci sono o l’esplorazione spaziale. Il fascino delle schede di espansione
molte schede è che possono stimolare e ispirare gli utenti. Certo, far
di espansione
lampeggiare un LED è divertente, ma costruire un robot
per la Raspberry
e imparare a controllare dei motori con un input da sensore
Pi, con cui
lo è molto di più. In queste pagine diamo un’occhiata a cinque
potete costruire
robot, aiutare schede che offrono funzionalità extra per la vostra Raspberry
l’ambiente Pi Zero o un altro modello di Pi con GPIO a 40-pin. Dall’audio
o persino all’input analogico per sensori e componenti, alla robotica,
suonare il piano vi apriranno molti nuovi orizzonti.

Speaker pHAT www.pimoroni.com


Con una tipica Raspberry Pi sentiamo l’audio la musica con il vostro progetto. Non aspettatevi telecomandato che fa rumori imbarazzanti
attraverso un cavo connesso alla porta HDMI una qualità THX che spacca i vetri: il suono quando qualcuno ci si siede sopra o uno
o un connettore Jack... e se voleste fare un è nitido e definito ma ha pochi bassi, strumento per la domotica basato su Alexa.
progetto audio più piccolo usando una Pi Zero? soprattutto a causa delle
Ora si può fare usando Speaker pHAT, un kit dimensioni della scheda. Un gradito
facile da assemblare. Bastano pochi minuti bonus è che la Speaker pHAT
con un cacciavite e poi ancora qualche minuto è dotata di un semplice vu meter
con un saldatore. La scheda, dall’aspetto per mostrare i livelli del volume, così
accattivante che ricorda una boombox degli potete vedere l’andamento della
anni Ottanta, si monta su tutti i 40-pin musica. è un prodotto divertente
del GPIO. Per il software c’è un semplice script da usare per inserire dell’audio
di installazione avviato dal terminale. Terminata in ogni vostro progetto con la Pi
l’installazione vi basta riavviare per ascoltare Zero, che sia un cuscino

8 RASPBERRY PI
Fare di più con la Pi

Analog Zero rasp.io/analogzero


Una delle differenze più trascurate analogici, che possono essere fino a otto, Foundation,
tra la Raspberry Pi e una scheda Arduino e poi li converte per l’uso con i pin digitali quindi dovete solo
è che la Pi non ha un’interfaccia analogica. standard dei GPIO. Questa scheda viene configurare il vostro
Componenti come potenziometri, slider, ecc. venduta come un kit da assemblare progetto per usare
hanno bisogno di un’interfaccia analogica ma il montaggio richiede davvero poco la scheda attraverso
per comunicare correttamente il loro stato, tempo, anche se vi servirà saper usare l’interfaccia GPIO Zero.
altrimenti risultano solo accesi o spenti il saldatore. Dal punto di vista del software Analog Zero si può usare
come in un’interfaccia digitale. La scheda l’Analog Zero è il massimo della semplicità: con tutte le Pi con GPIO da
Analog Zero crea un ponte tra il mondo praticamente non dovete installare nulla. 40-pin. Segue le linee guida
analogico e quello digitale attraverso un chip Tutto quel che vi serve è integrato in GPIO delle schede pHAT, in quanto
MCP3008. Legge gli stati degli input Zero, la libreria Python della Raspberry Pi si può montare sopra la Pi Zero.

Picon Zero www.4tronix.co.uk


Ci sono diversi progetti con cui potete iniziare Neopixels, lavorare con i sensori, controllare resistenza pull-up 4.7k ohm. Si può anche
il vostro percorso come maker: decidere i motori di un robot... Il Picon Zero è un installare sulla scheda un sensore
di far lampeggiare un LED, usare i LED dispositivo che consente di fare tutte queste a ultrasuoni HC-SR04 per dare a un progetto
cose con una sola scheda. Picon Zero ha due robotico un sensore di distanza senza
controller per i motori H bridge (DRV8833) bisogno di un partitore di tensione. Questa
che si possono usare con motori micro gear scheda è un’ottima piattaforma per i progetti
o modelli standard in corrente continua. di robotica. Funziona con tutte le Pi dalla B+
L’alimentazione dei motori si può prendere in poi ed è pensata per incastrarsi
dalla Pi o da un alimentatore esterno, molto perfettamente sopra la Raspberry Pi Zero,
comodo quando usate modelli potenti. rimanendo piatta. è anche una piattaforma
L’output si può usare anche per controllare a costo ridotto per costruire progetti
servomotori. Gli input possono essere digitali, di physical computing con Python. Il fatto
analogici, o derivare da un sensore di supportare moltissimi componenti la rende
di temperatura (DS18B20) senza usare una utile in svariate situazioni.

PiBorg ZeroBorg www.piborg.org


L’azienda PiBorg costruisce soluzioni per realizzare il vostro esercito di cyborg
avanzate per la robotica e con ZeroBorg inarrestabili, è arrivato! La scheda ha
ha creato una piccola scheda pHAT che due input analogici, usati per i sensori,
permette di controllare indipendentemente e comunica usando I2C che sfrutta a questo
fino a quattro motori, con un massimo scopo solo alcuni pin del GPIO. Ci sono
di corrente totale di 2 ampere, più che due modelli di ZeroBorg, il KS1 e il KS2.
abbondante per una scheda di queste Il secondo ha più funzioni ed è quello
dimensioni. La ZeroBorg si può alimentare che abbiamo provato. Include un sensore
con una batteria da 9V dando a infrarossi che si può usare per controllare un per sei pin GPIO a essere precisi,
contemporaneamente energia anche robot sfruttando un qualsiasi telecomando per e in questo modo creerete una
alla Raspberry Pi Zero, il che permette la TV. Ha anche un’interfaccia I2C daisy-chain connessione semi permanente tra la Pi e
di creare robot molto piccoli ma potenti. che consente di connettere altre schede. ZeroBorg. Se la robotica è la vostra passione,
Se aspettavate il momento giusto Avrete bisogno di usare un po’ il saldatore, questa scheda vi farà sicuramente divertire!

ZeroSeg www.thepihut.com
L’umile display a sette segmenti era ovunque ma è davvero facile da usare. Nell’arco di pochi
negli anni Ottanta e Novanta del secolo scorso. minuti abbiamo fatto apparire sulla nostra
ZeroSeg è una scheda compatibile con scheda un messaggio scorrevole, poi abbiamo
la Raspberry Pi Zero che ci offre due display scritto un semplice script per far scorrere
a sette segmenti da quattro elementi ciascuno, la temperatura della nostra città. Questa
controllati da un chip MAX7219CNG attraverso scheda è stata progettata per offrire un modo
il bus SPI. Viene venduta in un kit che richiede semplice per fornire un output all’utente,
mani ferme e mente logica per l’assemblaggio e anche l’input è facile. è un buono strumento,
e ha anche due interruttori tattili per l’input pensato da un membro della community per
Alla fine del secolo scorso un display che si possono facilmente programmare. altri appassionati. Non è facile da assemblare
a sette segmenti era alta tecnologia Dal lato software, la scheda usa una libreria ma se seguite le istruzioni potrete divertirvi
ma ora possiamo farcelo in casa Python 2, purtroppo non Python 3, a costruire un piccolo pezzo di storia.

RASPBERRY PI 9
Raspberry Pi Progetti

Eben Upton
Quattro chiacchiere con Mr. Pi sulla nuova Zero e sul futuro
Linux Pro: Ciao Eben, grazie per aver trovato il tempo di fare è in grado di riprodurre video a 1080p via HDMI nativamente
due chiacchere con noi. La Raspberry Pi Zero W è uscita attraverso una porta mini HDMI, mentre il chip richiede
da poco tempo... ma era proprio necessaria? una breakout board HDMI che copre anche i pin GPIO. Il CHIP
Eben Upton: Abbiamo visto che molta gente usava dongle è un prodotto competitivo e ci piace il suo fattore di forma.
Wi-Fi e Bluetooth con la Pi Zero originale. Quando l’abbiamo Naturalmente ogni progetto ha le sue esigenze specifiche
lanciata nel 2015 non avevamo ancora sul mercato nessuno e per alcuni forse il CHIP potrà essere più adatto, ma pensiamo
dei nostri prodotti wireless. Avevamo ancora in produzione che la Pi Zero W sia la miglior scheda polifunzionale.
la Raspberry Pi 2 e stavamo lavorando sulla Raspberry Pi 3 Noi (di Raspberry Pi) siamo contenti che ci siano altre schede.
che non era ancora uscita. Le lezioni che abbiamo imparato Prima che iniziassimo a fare la Pi gli unici computer a scheda
creando il pacchetto wireless per la Raspberry Pi 3 sono state singola in circolazione costavano tra i 125 e i 150 $ (113-136 €
usate per la nuova Pi Zero W. I motivi sono due: in primo luogo, ca). Da quando c’è la Raspberry Pi abbiamo visto un calo
ovviamente, ora non c’è più la necessità di usare un dongle significativo dei prezzi e siamo felici che oggi ci siano varie
Wi-Fi e poi adesso si possono collegare tastiere e mouse alternative nella fascia di prezzo dei 10 $ (9 €).
Bluetooth alla Zero senza bisogno di un hub USB.
Ci stiamo avvicinando a rendere la Zero W un computer LXP: Quando avete iniziato a studiare il progetto della Pi
desktop completo. Zero W, avete valutato altri upgrade o caratteristiche?
EU: Credo che abbiamo fatto tutto il possibile con la Pi Zero W,
LXP: Qualcuno ha già fatto dei paragoni tra la Pi Zero non abbiamo un processore più veloce che potremmo
originale e il CHIP di Next Thing Co, un computer da 9 $ utilizzare. Naturalmente ci sono i chip presenti nelle Raspberry
che ha specifiche simili a quelle della Zero ma ha Wi-Fi Pi 2 e 3 (BCM2836 e BCM2837 rispettivamente) ma non sono
e Bluetooth integrati. In cosa è migliore la Zero W? compatibili con le dimensioni della Raspberry Pi Zero W.
EU: La Raspberry Pi offre capacità multimediali migliori: Quando abbiamo pubblicato la prima Pi Zero siamo riusciti
a ottenere 1 GHz dal BCM2835, che era un upgrade rispetto
all’hardware della Raspberry Pi originale.

LXP: Questo è il terzo modello di Pi Zero. Nel novembre


del 2015 è uscita la prima, poi c’è stato l’update
con l’interfaccia per la fotocamera nel 2016. Avete
in programma di abbandonare i vecchi modelli?
EU: La versione originale, senza attacco per la fotocamera,
in realtà non esiste più. Non ne avevamo prodotte molte
ed è considerata un modello “provvisorio”. La “vera” Raspberry
Pi Zero è quella con l’interfaccia per la fotocamera ed è quella
la versione che resterà in produzione insieme alla nuova Pi Zero
W. Le Raspberry Pi Zero hanno una posizione solida, sono
ancora razionate una per persona ma sono disponibili
per l’acquisto. Non ci sembrava giusto uscire con la nuova
Raspberry Pi Zero W senza avere buone scorte dell’originale.
Sarà interessante vedere quante persone preferiranno
la versione da 5 $ (4,50 € ca) alla Pi Zero W, dato che per così
poco in più si ottengono moltissime nuove funzioni.

LXP: L’attuale razionamento dei modelli di Pi Zero finirà


effettivamente presto?
EU: Non in prima istanza. Il nostro obiettivo, ora che la
situazione si sta stabilizzando, è di riuscire a farlo, ma la priorità
attuale è di assicurarci di avere scorte di magazzino. Ogni volta
che lanciamo un nuovo prodotto alla gente piace molto
e lo compra fino a quando esauriamo le scorte. La nostra
priorità è di avere le Pi Zero disponibili sempre e in diversi
luoghi. Quindi troverete ancora a lungo le Pi Zero W in Europa,
Giappone e negli Stati Uniti. Ci stiamo impegnando per
ampliare la disponibilità dei modelli della gamma Pi Zero

10 RASPBERRY PI
Fare di più con la Pi

e cercheremo di aumentare il numero di unità che ogni persona


può comprare, se possibile rimuovendo del tutto il tetto.

LXP: Ci saranno più stocchisti come Premier Farnell


e RS Components?
EU: In prima istanza pensiamo di no. è una strada che
consideriamo di tanto in tanto. Non è ideale per loro perché
non abbiamo ancora raggiunto il punto in cui il coinvolgimento
di stocchisti ha davvero valore dal punto di vista commerciale.
Torneremo ad analizzare la situazione in futuro e valuteremo
come procedere da lì.

LXP: Il prezzo della Pi Zero W è nella fascia dei dieci dollari...


molto competitivo.
EU: Sì, il prezzo è di circa 12 €. Se da ragazzo mi avessero detto
che avrei potuto avere una macchina così a questa cifra
non ci avrei mai creduto. Da ragazzino avevo un Amiga 600
con un 1 MB di RAM e CPU a 7 MHz che costava più
di 200 €... ora posso avere un computer a 1 GHz con mezzo
giga di RAM a meno di quindici! La Raspberry Pi ha una
tradizione importante, come l’Amiga... per me è l’Amiga
dei tempi moderni perché, come la storica console,
ha componenti hardware specifici, come la serie di chip LXP: Una delle versioni meno amate della Pi è la Model A.
BCM283X, gli acceleratori 3D custom, ecc. Solo il 2-3% Vedremo dei miglioramenti per questo modello?
del chip BCM283X è rappresentato dal processore ARM, EU: L’ A+ è fantastica, ed è anche sempre disponibile senza
il resto è composto da vari acceleratori (2D, 3D, ecc). limiti di acquisto. Per capire la sua posizione bisogna prima
comprendere i mercati della Raspberry Pi. C’è quello della
LXP: Un settore che sta attirando molto interesse negli didattica, quello degli appassionati e quello industriale. Di solito
ultimi anni è l’Internet degli Oggetti o IoT, e qui abbiamo parlando della Pi si fa riferimento ai primi due ma anche
una piattaforma economica pronta all’uso in questo ambito. l’ultimo è molto importante e in quel settore la A+ ha un grande
Pensavate all’Internet delle Cose quando avete iniziato successo, anche perché i clienti industriali possono comprarle
a progettare la Pi Zero W? in grandi quantitativi dagli stocchisti. A volte capita che
EU: Sì, assolutamente. è un’ottima piattaforma per questo le scorte di A+ si esauriscano e la gente teme che sia uscita
settore, quantomeno per la creazione di prototipi. è un chipset di produzione, ma il motivo è che i clienti fanno ordini
di alta qualità ottimizzato per l’Internet delle Cose.
Il BCM4343A è un chipset wireless fantastico e non vediamo
l’ora di scoprire tutti gli strumenti che si possono creare “Non sono mai stato bravo
usandolo. Abbiamo già visto realizzare cose splendide
con la Pi Zero e un dongle wireless, quindi sarà stimolante
a indovinare chi avrebbe
vedere cosa riesce a creare la comunità con una piattaforma
che lo incorpora come standard.
comprato uno specifico prodotto”
da 10.000 o 20.000 unità alla volta. Tipicamente i clienti
LXP: Con l’inclusione di Wi-Fi e Bluetooth, la Pi Zero W industriali sviluppano i loro prodotti usando la Raspberry Pi 3
consumerà più energia? e poi trovano un metodo per adattarli all’ A+.
EU: C’è un lieve aumento del consumo energetico, nell’ordine
di un centinaio di milliwatt. Siamo però ancora nell’ordine LXP: Qualcuna delle funzioni della Pi 3 potrebbe comparire
di grandezza per cui è difficile trovare una fonte anche nella serie A? Ci sarà una gamma 3A?
di alimentazione che non possa gestire la Pi Zero W. EU: Effettivamente manca una linea di schede 2A/3A.
Un alimentatore da 500 – 600 mA è sufficiente. L’inclusione Non abbiamo un piano concreto per realizzarla. Sarebbe
delle funzionalità wireless non ha un impatto sui requisiti relativamente facile da fare ma bisogna ottenere la conformità
di alimentazione a differenza di quanto capita con la RP 3. per le radio senza fili in tutti i Paesi in cui si vende la scheda
ed è piuttosto costoso. Inoltre, a chi si rivolgerebbe la 3A?
Pensiamo che il mercato degli appassionati potrebbe essere
interessato come lo è per la gamma Zero. L’inclusione di Wi-Fi
e Bluetooth peserebbe sull’uso della singola porta USB.
Secondo me la 3A sarebbe un prodotto per il mercato
industriale ma potrei sbagliarmi, non sono mai stato bravo
a indovinare chi avrebbe comprato uno specifico prodotto.
Magari piacerebbe agli appassionati, ma attualmente tutti
i BCM2837 sono usati per produrre la Raspberry Pi 3, dato
che la richiesta è elevatissima per questo modello.

RASPBERRY PI 11
Raspberry Pi Progetti

Timelapse
con la Pi camera
Diventa un maestro delle sequenze intervallate sfruttando la piccola
Webcam della Raspberry Pi e un semplice script Python

Il programma che scatta


C
on timelapse si intende una tecnica nella quale si
Cosa riprende un’azione, generalmente lenta, scattando Dovete configurare le interfacce sia della Pi Camera sia
ti serve una serie di fotografie intervallate nel tempo l’una dell’MCP3008. Per farlo, aprite il tool Raspberry Pi
Qualunque RP con l’altra. Queste foto poi vengono messe assieme per Configuration che trovate nel menu Preferenze. Nel tab
con GPIO a 40 pin
creare un filmato che mostra velocemente lo svolgersi Interfaces abilitate le interfacce Camera e SPI. Salvate
Raspbian Pixel
dell’azione, che invece era lenta o comunque durava molto più la configurazione e l’applicazione vi chiederà di riavviare
La Pi Camera
ufficiale tempo. Ma basta con la teoria, vediamo come si realizza una il computer. Fatelo. Per verificare che la Camera funzioni, aprite
1 pulsante sequenza intervallata con la RP e la Pi Camera ufficiale. il Terminale e digitate il comando seguente per catturare una
1 breadboard foto, salvata come immagine.jpg:
1 ADC MCP3008 Montare con cura la Webcam $ raspistill -o immagine.jpg
9 cavi jumper Per montare il circuito di questo progetto dovete piazzare Se non funziona, ricontrollate la configurazione, spegnete la RP
maschio-maschio un convertitore analogico-digitale (ADC) MCP3008 sulla e verificate che i cavi siano connessi correttamente. Adesso
8 cavi jumper breadboard. Prestate attenzione alla tacca che fa da riferimento si passa al software. Andate nel menu Programmazione
femmina-maschio
per il conteggio dei pin. Il Pin 1, il primo input analogico, si trova e cliccate sull’editor di Python 3. Quando il programma si apre,
2 potenziometri
in alto a sinistra se guardate il chip con la tacca rivolta verso create un nuovo file (File D New) e salvatelo subito (File D
da 10k
l’alto. Collegate l’MCP3008 alla vostra RP seguendo Save) come timelapse-controller.py. Il codice inizia con
il diagramma che vedete qui in basso. I potenziometri vanno le consuete istruzioni per l’importazione delle librerie
collegati a 3V e GND (massa) e i loro output ai primi due pin del necessarie. Ci sono picamera, usata per controllare la Webcam;
chip MCP3008. Il pulsante è collegato al GPIO e alla riga di GND GPIO Zero per il convertitore analogico-digitale e il pulsante;
sulla breadboard. Collegato tutto, inserite la Pi Camera nella sua la funzione sleep importata dalla libreria time; infine, serve
porta nella RP, che si trova tra la Ethernet e l’HDMI nei modelli B, anche la funzione datetime dall’omonima libreria per creare
I FILE PER SEGUIRE oppure alla fine della scheda se avete una RP Zero – in questo il timestamp.
IL TUTORIAL SONO caso vi serve anche uno speciale adattatore. Dovete inserire from picamera import PiCamera
DISPONIBILI QUI
con molta cura il cavo piatto con la linguetta blu rivolta verso from gpiozero import MCP3008, Button
la porta Ethernet e ricordate di sbloccare la slitta del connettore from time import sleep
tirandola verso l’alto (per poi ribloccarla dopo l’inserimento). from datetime import datetime
www.sprea.it/ Usando una piccola palla di plastilina potete evitare che Fatto ciò dovete impostare le connessioni al chip MCP3008,
SP21_picamera la camera vada a toccare il GPIO. Se avete collegato anche dire al GPIO a quale pin è collegato il pulsante e creare
tastiera, mouse e schermo alla RP, è il momento di avviarla. un oggetto per la libreria picamera che renderà più semplice
operare sulla Webcam.
pot1 = MCP3008(channel=0)
pot2 = MCP3008(channel=1)
button = Button(17)
camera = PiCamera()

Il circuito del
progetto non
è complesso, ma
dovete verificare
bene di aver
collegato tutto
in modo corretto

12 RASPBERRY PI
Come creare un filmato partendo dai singoli scatti

D
i recente ci è capitato di dover creare Vi siete per caso chiesti come mai abbiamo $ sudo apt-get install libav-tools
un video in timelapse e il primo ostacolo catturato gli scatti inserendo una marca Spostatevi nella directory in cui ci sono gli scatti
che abbiamo incontrato è stata temporale? Semplice, questo progetto può rinominati ed eseguite:
la conversione del timestamp in un numero essere usato in un esperimento scientifico, avconv -r 10 -start_number 1 -i %d.jpg -b:v
crescente in modo da ordinare le immagini quindi memorizzando data e ora di ogni scatto 1000k test.mp4
in base al momento dello scatto. Grazie a una è possibile scoprire il momento in cui è avvenuto Lo switch -r impostra un framerate pari a 10fps,
piccola magia Bash siamo riusciti a fare tutto qualche cambiamento. Per creare il video finale, si parte dalla foto numero 1 nella sequenza
con una singola linea. Per andare sul sicuro invece, abbiamo usato avconv, che funziona di scatti e si imposta un bitrate di 1000k.
lo abbiamo fatto su una copia delle foto: anche sulla RP (anche se le prestazioni sono Infine si salva il filmato con il nome test.mp4.
$ ls | cat -n | while read n f; do mv “$f” “$n.jpg”; ovviamente inferiori rispetto all’uso su un PC). Al termine apritelo con omxplayer:
done Per installarlo aprite il Terminale e digitate omxplayer test.mp4

Per catturare l’immagine dovete creare una funzione che verrà Queste impostazioni vengono stampate sulla shell Python
poi richiamata dal codice principale. Questa funzione, chiamata
capture, inizia con un loop for il cui numero di cicli sarà
prima di venir visualizzate all’interno della finestra d’anteprima,
al centro dell’immagine. Subito dopo c’è una pausa di 0,1
Tip
controllato dall’utente. Questo ciclo creerà il timestamp secondi prima che il procedimento venga ripetuto: Il cavo ribbon
(la marca temporale) e lo userà come nome del file immagine. print(settings) della Pi Camera
def capture(): camera.annotate_text = settings ufficiale è piuttosto
corto. Potete
for i in range(timer): sleep(0.1)
però acquistare
timestamp = datetime.now().isoformat() Ora il nostro pulsante è pronto ad avviare la cattura del un’estensione
camera.capture('/home/pi/%s.jpg’ % timestamp) timelapse. Tenendo premuto questo pulsante per due secondi da Tindie (https://
sleep(delay) si richiama la funzione capture (creata prima). Essa cattura www.tindie.com/
Per osservare ciò che vede l’obiettivo della camera dovete la sequenza di foto secondo quanto indicato dalle variabili products/freto/
pi-camera-hdmi-
creare una finestra d’anteprima. In questo caso la risoluzione timer e delay.
cable-extension/)
sarà fissa a 640 x 480 pixel e la finestra viene piazzata button.when_held = capture che consente
nell’angolo in alto a sinistra dello schermo (0,0). Di solito, Manca solo la parte finale del progetto, dove si trova la parte di usare un cavo
però, l’anteprima è a tutto schermo. “except” del costrutto try...except. Questa parte gestisce HDMI al posto
di quello piatto.
camera.start_preview(fullscreen=False, window = (0, 0, l’uscita dall’applicazione in seguito alla pressione di Ctrl+C.
Davvero comodo!
640, 480)) Questo comando da tastiera ferma l’anteprima e avvia
l’esecuzione della parte finale, in cui si stampa un messaggio
Tenta e ritenta d’uscita sulla shell Python:
Usando il costrutto try...except potete gestire eventuali errori except KeyboardInterrupt:
e l’uscita dal programma su richiesta dell’utente. Vi servono camera.stop_preview()
due variabili: timer e delay. La prima memorizzerà la durata, finally:
in minuti, del timelapse. La variabile delay, invece, si usa per print("ESCO DAL TIMELAPSE")
registrare il lasso di tempo che deve intercorrere tra uno scatto Salvate il codice e poi eseguitelo andando in Run D Run
e quello successivo. Entrambe le variabili vengono definite Module. Si aprirà la finestra d’anteprima, provate ad agire
convertendo l’input dell’utente dalla tastiera: sui cursori dei potenziomentri per variare luminosità
try: e contrasto, impostate ritardo e durata e poi tenete premuto
timer = int(input("Quanti minuti deve durare il timelapse?")) il pulsante per avviare la registrazione della sequenza.
delay = int(input("Quanto deve essere il ritardo tra uno scatto Se tutto funziona a dovere, non vi resta che trovare il giusto
e quello successivo?")) soggetto da riprendere e darvi alla fotografia! LXP
Subito dopo, all’interno di un ciclo infinito (while True), dovete
leggere il valore dei potenziometri, di solito compreso tra 0.0 La Pi Camera ufficiale
e 1.0, moltiplicandolo per 100 così da ottenere un numero utile è in grado di riprendere
a controllare la luminosità e il contrasto dell’immagine. Girando filmati a 1080p e catturare
il cursore dei potenziometri i valori letti cambieranno. immagini ad alta risoluzione
while True:
brightness = round(pot1.value * 100)
print("Luminosità",brightness)
contrast = round(pot2.value * 100)
print("Contrasto",contrast)
Si usano le variabili brightness e contrast per aggiornare la
finestra d’anteprima e vedere i cambiamenti alla configurazione.
Poi si crea la variabile “settings” che contiene entrambi i valori:
camera.brightness = brightness
camera.contrast = contrast
settings = "Luminosità: "+str(brightness)+" Contrasto:
"+str(contrast)

RASPBERRY PI 13
Raspberry Pi Progetti

Wiki: diffondi
la conoscenza
Rendete intelligente un angolo della vostra casa con una Raspberry Pi Zero
W e un wiki “wireless” sempre aggiornato sulle vostre passioni

Compatibile
con tutte le

RP

Creare una nuova pagina nel wiki è semplice: basta un click

img). Fate attenzione a non decomprimere anche questa


immagine (alcuno tool lo permettono) perché vi serve
proprio il file .img. Per scrivere in modo corretto
l’immagine sulla microSD potreste usare il classico
comando da terminale dd, ma vi raccomandiamo (così
come fa la Raspberry Pi Foundation) di impiegare Etcher,
un pratico tool con interfaccia grafica disponibile
Tip liberamente per tutte le piattaforme. Questo strumento
nasconde tutte le complessità del comando dd e il suo uso
Seguendo questo riduce anche le probabilità di sovrascrivere per errore le
tutorial avrete a che partizioni del disco.
fare con DokuWiki

Wi-Fi sempre on!


T
(https://www.
dokuwiki.org),
empo fa ci stavamo chiedendo come mettere
un software che a frutto le capacità dell’ultima nata in casa Etcher lo trovate all’indirizzo Web https://etcher.io,
consente con Raspberry Pi, la Zero W. Questo ridottissimo scaricate la versione che volete (noi abbiamo usato quella
grande facilità computer, pur non essendo potente come il “fratello per Linux). Per avviarlo è sufficiente decomprimere lo zip
la creazione di un
maggiore” RP3, può comunque essere usato per creare e fare doppio click sull’eseguibile; non c’è nulla da installare
wiki. Il progetto
è pensato progetti interessanti, anche grazie al Wi-Fi integrato che è tramite il gestore di pacchetti della distro. Al primo avvio
principalmente un plus notevole. Tra le tante idee che ci sono venute in il tool si configurerà e vi chiederà se volete creare
per la realizzazione mente, abbiamo deciso di crearci un wiki portatile! Se una scorciatoia nel menu per gli usi futuri. Dopo aver
di documentazione state pensando di acquistare una RP Zero W sappiate che avviato l’applicazione dovreste vedere tre pulsanti e solo
di qualsiasi tipo.
Tutti i dati sono
dovete prendere anche due adattatori per le connessioni due voci su cui dovrete agire: la posizione dell’immagine
conservati in file USB e HDMI, perché tutte le porte di I/O presenti sulla di Raspbian e il device di destinazione (la scheda microSD).
di testo e non scheda sono in versione micro. Fortunatamente adattatori Premete il pulsante Select image e navigate nel filesystem
in un database, di questo tipo si trovano online per pochi euro. La prima fino a raggiungere la directory in cui avete decompresso
il che semplifica
cosa da fare è creare una microSD avviabile con l’immagine. Poi selezionate l’unità della microSD premendo
enormemente
il lavoro. Ciò un’immagine di Raspbian OS. Vista la limitata potenza Select drive e, infine, premete Flash!. L’operazione
non impedisce della piattaforma conviene optare per la versione Lite del impiegherà qualche minuto per scrivere e verificare
di realizzare sistema operativo al posto di quella completa; la trovate l’immagine. Al termine siete pronti a riporre la scheda
documenti ben all’URL https://downloads.raspberrypi.org/raspbian_ di memoria nel suo alloggiamento nella RP. Alimentate
strutturati
e organizzati.
lite_latest. Scaricato il file, decomprimetelo e vi troverete la scheda e al boot inserite nome utente e password
sul disco il file immagine del sistema (con estensione . di default, che sono “pi” e “raspberry”. Dopo il login, le prime

14 RASPBERRY PI
Se SSH non funziona come dovrebbe...

O
gni tanto, installando Raspbian, si incappa
in oscuri errori relativi ad algoritmi non disponibili.
Il problema appare solo quando l’utente cerca di
effettuare un login in remoto usando SSH. La ricerca degli
errori (troubleshooting) si può fare usando lo switch --vvv.
Per ragioni sconosciute, a volte quando si installa il server
OpenSSH esso non genera correttamente le chiavi.
Il rimedio? Generarle a mano. L’errore si mostra con un
messaggio del tipo “No supported key exchange protocols
available” quando usate lo switch citato prima. Verificate
l’assenza del protocollo guardando dentro /etc/ssh
Se le chiavi pubblica e privata hanno dimensione zero
dovete rimediare così:
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
Completata la rigenerazione delle chiavi vi conviene
riavviare il server SSH giusto per stare tranquilli. SSH non vuole andare? Niente paura, bastano tre comandi per rimediare

operazioni da compiere sono impostare la rete wireless, Sono diverse le linee su cui dovete intervenire. Modificate
aggiornare il sistema operativo, stabilire un indirizzo IP fisso
e installare OpenSSH per abilitare l’accesso remoto. Usate
la linea per il DHCP in static e inserite le righe seguenti.
Le impostazioni indicate dovrebbero andare bene Tip
il comando seguente per visualizzare l’elenco degli SSID per la maggior parte delle reti, a patto di modificare
Il segreto per
disponibili: opportunamente l’indirizzo IP, il gateway e la maschera creare un buon
sudo iwlist wlan0 scan di rete indicati a seconda di quelli in uso nella vostra network. wiki è tenere ben
Se l’elenco delle reti appare, vuol dire che il Wi-Fi sulla RP Se per esempio usate una classe di indirizzi 10.0.0.0/24 ordinate e sempre
aggiornate tutte
funziona. Individuata la rete a cui collegarsi potete inserirne dovrete cambiare l’indirizzo IP e il gateway.
le informazioni.
manualmente SSID e password nel file di configurazione iface wlan0 inet static Se necessario,
della scheda wireless: address 192.168.0.8 potete allegare alle
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf netmask 255.255.255.0 pagine anche file
Invece di inserire in chiaro la password, però, potete far gateway 192.168.0.254 PDF o altri tipi di
file. Rispetto a delle
inserire in automatico il nome della rete e la chiave di cifratura dns-nameservers 8.8.8.8 8.8.4.4
semplici note, un
in wpa_supplicant.conf. Per autogenerare il contenuto wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf wiki è più versatile
di questo file di configurazione si usa il comando wpa_ Salvate le modifiche e uscite dall’editor di testo premendo ed è anche più
supplicant. Esso mostrerà sullo standard output (lo schermo) Ctrl+X. Per essere sicuri che la rete usi il nuovo setup facile effettuare
delle ricerche.
i dati necessari a collegarsi alla rete Wi-Fi e conviene quindi sarebbe meglio riavviare la RP. In alternativa potete riavviare
redirigere il suo output nel file di configurazione (per evitare i servizi di rete con il comando seguente:
errori di battitura): sudo /etc/init.d/networking restart
sudo su - Tanto per essere sicuri che tutto funzioni, provate a cercare
wpa_passphrase “SSID” “Password” >> /etc/wpa_ la RP con ping da un altro computer presente nella stessa
supplicant/wpa_supplicant.conf
Al posto di SSID dovete scrivere il nome della rete wireless
che userete (quella a cui vi collegate quando usate il portatile,
per esempio). Al posto di Password ci va invece la parola
d’ordine della stessa rete in chiaro usata in precedenza.

Qual è il vostro IP?


Dopo aver configurato la rete senza fili, il setup del
networking procede con lo stabilire l’indirizzo IP assegnato
alla RP. Una buona prassi suggerisce l’uso di un IP statico
(fisso) per un server. In questo modo è più facile gestire
la macchina quando la si deve riavviare (non si rischia
che cambi IP) o quando bisogna collegarsi a essa
da remoto. Per fare ciò cercate un indirizzo che non sia
in uso al momento e annotatelo. Potete effettuare questa
ricerca ricorrendo al comando ping (ipotizzando che
il vostro firewall non blocchi le risposte). Una volta
individuato l’IP, assegnatelo in modo permanente alla
scheda di rete modificando il file interfaces con nano. L’insieme di pulsanti presenti sopra la finestra di editing vi consentono
sudo nano /etc/network/interfaces. di formattare alla perfezione il testo con corsivi, grassetti e altro ancora

RASPBERRY PI 15
Raspberry Pi Progetti

WLAN. Passate ora all’aggiornamento del sistema operativo

Tip usando i due comandi seguenti, che si occupano anche


di riavviare la macchina.
sudo su -
In questa guida
abbiamo impiegato
apt-get update -y && apt-get upgrade -y && reboot
la Raspberry Pi Per accedere da remoto alla Raspberry Pi vi serve
Zero W come poi il server OpenSSH che si installa così:
“semplice sudo apt-get install openssh-server -y
computer”. Ma vi
L’interfaccia di OpenSSH potrebbe non essere abilitata
ricordiamo che
grazie ai pin di di default. Per verificarlo usate il tool raspi-config, guardando
input/output potete alla linea Interfacing options e selezionando l’opzione SSH.
interfacciarla con Per eseguire questa applicazione vi servono i privilegi
tantissimi tipi di di amministratore, quindi nel terminale si deve usare sudo,
device esterni,
anche se per farlo
così: sudo raspi-config. Sempre dall’interfaccia a caratteri
dovrete avere una di questo tool è possibile cambiare l’hostname del piccolo
conoscenza almeno computer (che di base è raspberrypi). Una volta fatto uscite
di base di come dal programma e verificate che OpenSSH funzioni
si effettua una
collegandovi da un’altra macchina Linux con il comando Per impostare l’interfaccia in italiano andate in admin
saldatura.
ssh pi@indirizzo_statico_appena_impostato D Configuration Settings D Interface language
Infine dovete occuparvi dell’interfaccia HDMI. Di default
il sistema potrebbe non avviarsi se questa interfaccia sudo apt-get install apache2 libapache2-mod-php5
non è abilitata (cioè se il cavo non è inserito). Quindi sudo a2enmod rewrite
dovreste fare una rapida modifica alla configurazione sudo service apache2 restart
per abilitare il boot senza cavo HDMI: Per controllare che Apache sia effettivamente attivo, usate
sudo su - un browser Web e collegatevi all’indirizzo IP della Raspberry
echo “hdmi_force_hotplug=1” >> /boot/config.txt Pi. Se appare la pagina di default di Apache e non un errore,
Fatto questo potete tranquillamente nascondere la RP tutto è a posto. Per installare il wiki è necessario modificare
da qualche parte, lontana dalla vista. Se comunque doveste la configurazione del server Web. Le istruzioni seguenti
incappare in qualche problema, sarà sempre possibile compiono le prime operazioni. Ci si sposta all’interno della
collegare il cavo HDMI e avviare normalmente il computer root del server Web e si scarica la versione più recente
(forse dovrete scollegare e ricollegare la corrente). Un riavvio e di Dokuwiki. Lo si decomprime in una sottodirectory
un login remoto via SSH vi consentirà di controllare che della radice del server Web in modo che sia accessibile
il sistema sia attivo. A volte capita che OpenSSH non crei normalmente. Infine si cambia l’owner dei file in modo
e installi correttamente le chiavi pubbliche e private: il rimedio che appartengano a www-data.
è spiegato nel box Se SSH non funziona come dovrebbe... cd /var/www
sudo wget https://download.dokuwiki.org/src/dokuwiki/
Ora attivate il wiki! dokuwiki-stable.tgz
Per creare il vostro wiki senza fili e in miniatura vi serve sudo tar xvf dokuwiki-stable.tgz
il server Web Apache e qualche altra dipendenza richiesta sudo mv dokuwiki-*/ dokuwiki
da Dokuwiki. Potete installare tutto sempre via SSH sudo chown -R www-data:www-data /var/www/dokuwiki
con la seguente sequenza di comandi: L’ultimo passo da fare consiste nel modificare la document
ssh pi@192.168.0.10 root di Apache in modo che punti al nuovo folder dokuwiki.
Aprite il file di configurazione del server Web con
sudo nano /etc/apache2/sites-enabled/000*.conf
Localizzate la linea DocumentRoot e rimpiazzatela
con DocumentRoot /var/www/dokuwiki. Salvate le modifiche
e digitate per riavviare il server Web:
sudo apachectl restart
Non resta da fare altro che configurare il software del wiki.
Per farlo è sufficiente caricare nel browser il suo programma
di installazione Web. Visitate l’URL seguente (dovete
sostituire l’indirizzo IP usato da noi con quello della
vostra RP, ovviamente):
http://192.168.0.10/install.php
Se dovesse apparire il messaggio di warning “PHP function
utf8_encode is not available” potete rimediare digitando
nel terminale questo comando:
sudo apt-get install php-mbstring -y
Una volta completata l’installazione, tutto dovrebbe
procedere normalmente. Il punto di forza di Dokuwiki è la sua
enorme facilità d’uso. Non ci sono database o complessi
Anche la creazione di un link verso un’altra pagina del wiki è un’operazione banale sottosistemi da configurare, l’installazione stessa del wiki

16 RASPBERRY PI
Wiki

Una RP per tutte le occasioni

A
ll’inizio c’era solo la Raspberry Pi. Poi, nel inferiori. Le piccole dimensioni della scheda e vecchie batterie. Esempi d’uso invece sono
tempo, sono giunte diverse varianti, via (65 x 30 x 5mm) la rende perfetta per progetti misurazioni della temperatura o della quantità di
via sempre più potenti e versatili. La RP che richiedono poca potenza ma grande pioggia caduta, per esempio. Tutti questi progetti
Zero W usata in questo tutorial ha una CPU flessibilità. Tale flessibilità si dimostra non solo che si basano sulla raccolta di dati possono
a singolo core da 1 GHz affiancati da 512 MB nella capacità di collegamento con svariati tipi godere della presenza del Wi-Fi integrato che
di RAM. Anche se sembrano specifiche di basso di dispositivi, ma anche per quanto riguarda consente di mettere la scheda un po’ ovunque!
livello, questa RP è progettata per il mercato l’alimentazione. In Rete abbiamo trovato chi
embedded che di solito ha requisiti ancora alimenta la RP Zero W con un pannello solare Ecco la Zero W in tutto il suo splendore

si fa da un’unica pagina! In questa pagina di setup dovete impostate. A questo punto vi suggeriamo di collegarvi come
assegnare un nome al wiki e configurare un superutente.
Inserite il suo nome (qualcosa di corto e significativo),
amministratore alla Raspberry Pi e rimuovere il file install.
php. Se lo lasciaste, qualche utente potrebbe divertirsi
Tip
il nome reale, l’email e la password. Dovete poi impostare a riconfigurare il sistema. Per fare ciò collegatevi via SSH alla
Per chi avesse poca
le policy ACL. Per una rete casalinga conviene indicare RP usando l’utente pi e cancellate il file: dimestichezza con
un ristretto numero di utenti che possono modificare ssh pi@192.168.0.10 la riga di comando,
le pagine del wiki. Infine, a meno di esigenze particolari, sudo rm /var/www/dokuwiki/install.php ricordiamo che
potete impostare la licenza su “Do not show license il tool raspi-config

information”. Cliccate il pulsante Save per terminare Modificare e gestire le pagine viene usato
di frequente per
il processo di setup e potrete cliccare il link continue to wiki. L’intero wiki è realizzato usando un semplice linguaggio modificare la
Dovreste essere in grado di effettuare il login (guardate di markup. Non è però l’HTML ma un linguaggio configurazione
in alto a destra nella pagina) con le credenziali appena di formattazione decisamente più semplice. I titoli più grandi e il funzionamento
della RP. Ricordatevi
si creano anteponendo sei simboli uguale (======) alla
di avviarlo sempre
scritta, seguita poi da altri sei simboli =. anteponendo sudo
Per creare un link a un’altra pagina basta scrivere il suo nome a raspi-config
e racchiuderlo tra due parentesi quadre. Per esempio perché sono
[[lamiagrandepaginadisetup]]. Questa pagina ora diventa necessari i privilegi
di root. Se avviate
parte del wiki. Di base, quindi, non è necessario creare
Raspbian con la
le pagine manualmente. Il setup ora è completo. Questo GUI attiva trovate
è solo un semplice esempio di ciò che si può ottenere l’equivalente grafico
con una Raspberry Pi Zero W e mostra la versatilità di questa di raspi-config nel
piattaforma. Il particolare più affascinante è che non dovete menu Preferenze.

creare una macchina virtuale o modificare il computer che


usate quotidianamente per tirar su il wiki. Prima di terminare,
però, è doveroso un avviso. Se dopo aver installato tutto
decidete di spostare la piccola RP da un’altra parte,
vi conviene spegnerla prima di procedere allo spostamento.
Sembra che la RP sia molto più sensibile di altri device
a un’improvvisa mancanza di corrente e si rischia
di corrompere il sistema che risiede sulla microSD.
Per cui prima di spostarla assicuratevi di spegnerla
correttamente usando sudo shutdown -h now Infine, di tanto
in tanto ricordatevi di fare un backup delle pagine del wiki,
non si sa mai. Se avete dubbi su come farlo visitate l’URL
DokuWiki è uno dei più versatili tool per creare wiki www.dokuwiki.org/faq:backup. LXP

RASPBERRY PI 17
Raspberry Pi Progetti

Doom: sconfiggi
l’orda demoniaca
Avete creato il vostro ennesimo progetto e pensate di meritarvi una pausa?
Perfetto, preparatevi a sparare ai mostri!

N
onostante la storia non proprio originale
e la grafica un po’ vetusta, Doom di id Software
continua a essere uno dei giochi più popolari.
Compatibile Pubblicato per PC nel 1993, ha contribuito fortemente
con tutte le
a radicare la passione per gli FPS (sparatutto in prima
RP persona) nei videogiocatori di tutto il mondo
e ha generato un gran numero di sequel, spin-off
e livelli creati dagli utenti. Visto che Doom è il più
rappresentativo tra gli FPS è importante riuscire
a riprodurre l’esperienza “anni ‘90” originale ed ecco
perché abbiamo scelto di installare Chocolate Doom
Engine sulla nostra Raspberry Pi.
Questo progetto è compatibile con la RP 2 e 3 e richiede
una versione recente di Raspbian. Usate i comandi sudo
apt-get update e sudo apt-get upgrade per assicurarvi
che tutto il software sia aggiornato. Inoltre, se volete
giocare con la modalità multiplayer Deathmatch, dovete All’avvio del gioco potete scegliere tra diversi livelli di
collegare la RP alla vostra LAN casalinga e a Internet. difficoltà identificati da nomi piuttosto inusuali e divertenti

Per chi non conosce Doom... che popolano il gioco hanno l’irritante abitudine
Negli FPS vivete l’azione attraverso gli occhi del di comparire quando meno ce lo si aspetta. Di solito sono
protagonista del gioco. Nel Doom originale vestivate a protezione di oggetti di valore e delle uscite e si
i panni di un marine spaziale impegnato a esplorare divertono a colpirvi da lontano con pallottole o palle
le lune Phobos e Deimos per poi ritrovarvi all’inferno! infuocate. Anche se l’inferno ha i numeri dalla sua parte,
Guidando un personaggio in grado di usare una buona l’IA dei nemici non è particolarmente evoluta e li si può
selezione di armi, dovete superare orde di demoni, indurre ad attaccarsi tra loro se si è bravi. Un altro
persone indemoniate e forze dell’occulto per avere vantaggio è l’arsenale che avete a disposizione. Anche
una speranza di vincere. Le immagini sataniche e ultra se all’inizio vi ritrovate con una misera pistola, man mano
violente non furono ben accolte da diversi gruppi religiosi che progredite riuscirete a mettere le mani su fucili
e gruppi di pressione politici, che cercarono di censurare a pompa, mitragliatori, fucili al plasma e anche una BFG
il gioco. La Germania lo bannò perché conteneva (Big Fragging Gun) 9000.
“violenza sadica e sanguinolenta”, ban che fu revocato
nel 2011. Nonostante ciò, Doom fu un successo Avviate l’engine
planetario, con oltre 10 milioni di copie installate a livello Dovete pensare all’engine Doom come la parte eseguibile
globale dal 1993 al 1995. Il gameplay è semplice: del gioco, mentre i file WAD (leggete più avanti, Dove
Tip lo scopo di ogni livello è trovarne l’uscita per arrivare sono tutti i dati?) contengono dati grezzi, come
all’area successiva. Le uscite, per fortuna, sono indicate la grafica, i suoni, le armi e così via. L’engine gestisce
Nel maggio 2016 da un’insegna. Ma non è tutto facile come sembra: aspetti del gioco come la struttura generale dei livelli
id Software rilasciò nel percorso tra i due punti dovete passare all’interno e i movimenti. Il motore ufficiale di Doom sviluppato
un reboot di Doom
(per Windows,
di un labirinto di corridoi tutti uguali e porte chiuse. da id Software è detto Vanilla dagli appassionati,
PlayStation 4 In giro per gli ambienti trovate degli aiuti (dei power-up), per distinguerlo dalle versioni non ufficiali nate dalla
e Xbox). Noi lasciati da un qualcuno non identificato. Questi aiuti comunità. Questa distinzione è importante perché
speriamo di vederlo includono chiavi, armature, munizioni e kit di pronto l’engine di Doom è stato modificato e riutilizzato
arrivare anche
soccorso. Inoltre avete a disposizione una mappa in diversi titoli commerciali, come Heretic e Hexen.
sulla Raspberry Pi.
in-game che appare premendo il tasto Tab. I tanti mostri Da quando id ha rilasciato il codice sorgente del motore,

18 RASPBERRY PI
Non c’è spazio per i bari

C
hocolate Doom riproduce molto idchoppers Questo codice vi farà trovare
da vicino l’engine originale, cheat code nell’inventario la motosega. Si attiva premendo 1.
inclusi. Questi “trucchi” possono essere idclev## vi teletrasporta nell’episodio o nella
usati durante una partita semplicemente mappa che preferite – per esempio idclev02
digitandoli con la tastiera. In molti casi vedrete vi porterà alla mappa 2.
apparire a schermo una conferma dell’attivazione. iddqd: Questo codice fissa la salute del vostro
I cheat che vi sveliamo qui di seguito considerano personaggio al 100%. Questo “God Mode”
che stiate usando una tastiera QWERTY. I trucchi vi renderà immuni alla maggior parte dei danni,
funzionano o meno anche nella modalità anche se certi tipi di pavimentazione potranno
multiplayer Deathmatch a seconda ancora danneggiarvi. Potrete anche morire
dell’impostazione scelta da chi ha creato la nel caso un altro giocatore o una creatura
partita. Avviate il gioco con il flag -nocheats per si teletrasporti nella vostra stessa posizione.
evitare che altri giocatori ottengano dei vantaggi Trovate un elenco completo all’URL http://doom. Abilitando il God Mode sarete liberi
impropri. Ecco alcuni trucchi in ordine sparso: wikia.com/wiki/Doom_cheat_codes. di scorazzare tra i corridoi con la motosega

nel 1997, diversi sviluppatori appassionati del gioco completi, ognuno dei quali era circa quattro volte più
lo hanno adattato ai propri scopi. Chocolate Doom è uno
di questi progetti. Questo rifacimento del motore di gioco
grande rispetto ai livelli originali di Doom. Pur essendo
impressionante, Eternal rimane comunque Tip
di Doom vuole riprodurre la stessa esperienza di gioco un’espansione dell’universo di Doom. Altri WAD
di quello originale. Le modifiche che sono state fatte sono considerati delle “conversioni totali” visto Gli amanti della
programmazione
all’engine non vanno a modificare il modo in cui che rimpiazzano tutte le risorse usate nel gioco originale. possono vedere
il giocatore si muove nel videogame. Cosa più La prima di queste fu Aliens TCdi Justin Fisher, il codice sorgente
importante, inoltre, è che Chocolate Doom mira alla che si basava sulla omonima e nota serie di film. del Doom originale
massima compatibilità con i file d’espansione del gioco Grazie a questo suo lavoro, a Fisher fu offerto un posto all’URL https://
github.com/
(WAD) progettati per funzionare con la versione vanilla. di lavoro da DreamWorks: Justin declino l’offerta
id-Software/
L’unica area in cui Chocolate Doom differisce per terminare gli studi universitari. E ci sono anche DOOM.
significativamente dall’originale è quando si gioca altri esempi di come disegnare livelli di un videogioco
nella modalità deathmatch multigiocatore. La macchina possa portare a un lavoro: Likka Keranen, altro noto
di uno dei giocatori deve agire da server, mentre designer di WAD, trovò un impiego presso diverse
nel Doom originale tutti i giocatori si connettevano software house che sviluppavano videogame. Tip
direttamente con gli altri. Fortunatamente l’operazione Per motivi di copyright per realizzare questo articolo
di creazione di un server è davvero semplice (vedi box abbiamo fatto ricorso al WAD ufficiale di Doom Su Doomsworld
Un server per gli scontri mortali). (DOOM1.WAD), distribuito con licenza shareware trovate una vasta
e scaricabile dal sito di appassionati www.doomworld. raccolta di WAD
Ma dove sono i dati? com. Esso contiene solamente il primo episodio,
(www.doomworld.
com/idgames).
Per giocare a Doom dovete avere sia il motore sia i file Knee Deep in the Dead, ed era stato rilasciato a scopo Poi ci sono quelli
WAD (sigla che sta per Where’s All the Data). Questi promozionale. Al termine del primo livello, il giocatore più popolari creati
ultimi contengono dati di gioco come i dettagli dei livelli, viene invitato a ordinare la versione completa. dalla comunità:
www.doomworld.
grafica, effetti sonori e sottofondi musicali. L’idea Detto questo, esistono una marea di WAD non ufficiali
com/20years/
dietro al concetto di WAD è semplificare al massimo liberamente scaricabili (ma controllate bene le loro best1.php.
la creazione di livelli personalizzati e di modifiche licenze), quindi sentitevi liberi di provarli.
al gioco. I WAD esistono separatamente dai motori
di gioco come Chocolate Doom e vanno cercati in Rete.
Esistono due tipi principali di WAD. Per questo articolo
ci focalizzeremo sugli iWAD (che sta per internal WAD),
che contengono i dati di interi livelli di gioco.
Subito dopo l’esordio di Doom, i giocatori entusiasti
iniziarono subito a creare nuovi elementi grafici,
suoni e così via, ma non avevano modo di modificare
più di tanto le caratteristiche fondamentali del gioco,
come la quantità di danni provocati dai mostri.
Però, dopo il rilascio del codice sorgente e alcuni
notevoli sforzi da parte della comunità, si riuscì
a modificare ogni aspetto del gioco e da quel momento
in poi i WAD customizzati iniziarono a nascere come
funghi. Alcuni di essi introducevano solo qualche
alterazione al gioco stesso, mentre altri espandevano
notevolmente il gioco originale. Uno dei “MegaWAD” Eternal Doom, creato dal TeamTNT, è un famoso WAD apprezzato per la sua
più noti era Eternal Doom e conteneva 32 livelli ricca grafica, l’incredibile architettura degli ambienti e i vasti livelli

RASPBERRY PI 19
Raspberry Pi Progetti

Freedoom non è libero sonori originali che potete usare senza pagare royalty.
Il progetto Freedoom è un esempio eccellente della Andate su https://freedoom.github.io per trovare
durevole popolarità di Doom. Lo scopo dichiarato queste risorse e altro ancora.
di questo progetto è di creare WAD in stile Doom
che contengano esclusivamente materiale libero. L’editor di livelli Eureka!
Freedom, partendo dal codice sorgente del gioco In pieno spirito maker, potreste non accontentarvi
rilasciato da id Software, ha costruito un buon numero di giocare con WAD creati da altri, ma potreste voler
di livelli, artwork, effetti sonori e musiche. Il risultato realizzarne di vostri. Doom fu creato per poter essere
è un videogioco Open Source gratuito completamente “hackerato”, espanso, modificato, quindi non potete che
scevro da contenuti proprietari. Freedoom fornisce continuare questa tradizione. Raspbian contiene Eureka,
solo dei file WAD, quindi richiede l’uso di un engine l’unico editor di livelli per Doom disponibile sotto Linux
di gioco compatibile per poter giocare. Sul sito Web che sia ancora sviluppato. Andate in Applicazioni D
di Chocolate Doom c’è scritto che i WAD a singolo Preferenze D Aggiungi/Rimuovi Software e cercatelo
giocatore del progetto Freedoom non sono compatibili, nella barra di ricerca che si trova in alto. In alternativa,
per cui vi consigliamo di scaricare il set di livelli visitate www.sourceforge.net/p/eureka-editor.
deathmatch noti come “FreeDM”. Diversamente Con Eureka potete modificare WAD esistenti oppure creare
dai normali livelli di tipo deathmatch di Doom Vanilla nuovi livelli da zero. Sul forum del già citato Doomworld.
e di Chocolate Doom, non troverete mostri ma solo com potete trovare un aiuto sull’uso di questo editor.
i giocatori. Se dopo aver giocato tanto vi venisse
per caso in mente di costruire dei livelli tutti vostri, Attenzione ai dettagli
sul sito di Freedoom trovate centinaia di texture ed effetti Avete scaricato Chocolate Doom e DOOM1.WAD come
suggerito prima? Bene, posizionatelo nella directory
chocolate-doom. Se invece volete tenerlo da qualche
altra parte, vi basterà semplicemente indicare all’engine
la sua posizione con lo switch -WAD:
chocolate-doom -WAD /home/pi/Downloads/DOOM1.
WAD -window 640x480
Chocolate Doom è piuttosto precisino sui nomi dei file
(insomma, le maiuscole sono da rispettare), quindi
se cercate di localizzare i file WAD usando la schermata
di setup, probabilmente vi troverete meglio rinominando
i file .wad invece di lasciarli tutti in maiuscolo. Ciò è vero
anche per Eureka: durante le nostre prove non è riuscito
a identificare DOOM1.WAD fino a quando non lo abbiamo
rinominato doom.wad. Per scoprire tutti gli argomenti
da riga di comando di Chocolate Doom e per avere
un aiuto con il suo setup, potete aprire la guida all’indirizzo
Web www.chocolate-doom.org/wiki/index.php/User_
guide. Per giocare i deathmatch in Doom dovrete aprire
la porta UDP 2342 sul vostro firewall/router. Le operazioni
Usando l’editor di livelli Eureka vi basta cliccare su un elemento per da fare dipendono dal vostro device; se vi servono
posizionarlo dove volete. Con il pannello sulla destra ne cambiate gli attributi informazioni visitate il sito www.portforward.com. LXP

Scontri mortali senza un domani... ecco come impostarli

C
hocolate Doom supporta la modalità Per unirsi alla vostra partita via Internet, nella partita e dare il via alle danze... mortali!
multiplayer senza troppi sforzi. gli altri player dovranno usare un comando Sul wiki di Chocolate Doom (www.chocolate-
Diversamente dalla versione Vanilla simile al seguente: doom.org/wiki/index.php/Multiplayer)
di Doom, vi permette di scontrarvi all’ultimo chocolate-doom -connect xxx.xxx.xxx.xxx trovate tante altre informazioni sulla modalità
colpo sia su Internet sia in LAN. Per procedere Al posto di xxx.xxx.xxx.xxx devono inserire multiplayer, se avete bisogno, oltre a tutte
senza intoppi, comunque, assicuratevi l’indirizzo IP pubblico del server. Per scoprire le istruzioni per giocare in LAN.
che tutti i giocatori stiano usando Chocolate questo indirizzo potete andare, per esempio,
Doom e lo stesso WAD prima di procedere. sul sito Web www.whatismyip.com.
Uno dei partecipanti dovrà agire come server Invece se i giocatori sono sulla vostra rete
e ospitare la partita. Ovviamente lo stesso locale, la vita è più semplice: devono
giocatore potrà partecipare alla sfida. La porta semplicemente avviare il gioco aggiungendo
UDP 2342 dovrà essere aperta sul router di ogni lo switch -autojoin, per esempio così:
player. Per ospitare una partita di deathmatch chocolate-doom -WAD DOOM1.WAD
sulla vostra RP, aprite il Terminale (o collegatevi -window 640x480 -autojoin
via SSH) e digitate il comando seguente: Apparirà la finestra del multiplayer con i vari
chocolate-doom -server -privateserver client collegati. Dovete premere la barra Sono arrivati tutti i giocatori? Bene,
-deathmatch spaziatrice quando siete pronti a entrare premete Spazio per iniziare lo scontro

20 RASPBERRY PI
Doom

Approntate Chocolate Doom

1 Prima le dipendenze 2 Scaricate l’engine


La vostra RP avrà bisogno di un po’ di programmi per compilare Andate all’URL www.chocolate-doom.org/wiki/index.php/
Chocolate Doom. Aprite il Terminale dalla voce di menu Applicazioni Downloads per vedere il nome del file più recente e poi scaricatelo
D Accessori D Terminale (o collegatevi via SSH) e installate queste con wget. Nel nostro caso abbiamo usato
dipendenze con il comando seguente: wget https://www.chocolate-doom.org/downloads/3.0.0/chocolate-
sudo apt-get install libsdl-mixer1.2-dev libsdl-net1.2-dev python- doom-3.0.0.tar.gz
imaging Una volta scaricato, estraetelo con tar, così:
Premete S per confermare quando vi viene richiesto. tar xzf chocolate-doom-3.0.0.tar.gz

3 Ora dovete compilare tutto! 4 Scaricate i file WAD


Spostatevi con cd all’interno della cartella dell’engine: Scaricate la versione shareware di Doom usando wget. Assicuratevi
cd chocolate-doom-3.0.0 di trovarvi nel folder di Chocolate Doom e digitate
Eseguite ./configure per preparare i file necessari. Alla fine delle wget http://www.doomworld.com/3ddownloads/ports/shareware_
operazioni digitate make per iniziare la compilazione. Questa può doom_iwad.zip
impiegare un po’ di tempo, quindi sentitevi liberi di fare un break. Scaricato? Ok, allora decomprimetelo con
Al termine potrete installare effettivamente il programma con unzip shareware_doom_iwad.zip
sudo make install Vedrete apparire il file DOOM1.WAD.

5 Breve setup di Doom 6 Finalmente si gioca!


Usate il comando seguente per avviare il setup: Per avviare Doom dovete usare questo comando:
chocolate-doom-setup -WAD DOOM1.wad chocolate-doom -WAD DOOM1.WAD
Tramite questa procedura potete configurare display, suoni, layout Il gioco si aprirà a tutto schermo, cosa che potrebbe mandare
della tastiera, mouse e gamepad. Potreste usare questa schermata in sofferenza la RP. Quindi forse conviene avviarlo in modalità finestra:
per ospitare una partita deathmatch in multiplayer, ma è più facile chocolate-doom -WAD DOOM1.WAD -window 640x480
farlo dalla linea di comando (vedi il box nella pagina qui a sinistra). Se usate un altro file WAD, cambiate il nome dopo lo switch -WAD.

RASPBERRY PI 21
Raspberry Pi Progetti

Installa un CMS
sulla Raspberry
Dentro la RP ci sta un sito Web completo di tutto? Certo: ecco come installare
un server Web, un database e un sistema di gestione dei contenuti

V
i è venuto in mente di crearvi un sito Web che inoltre che l’installazione di PHP include anche
volete gestire direttamente, quindi senza i pacchetti per il supporto agli script CGI, alla command
appoggiarvi a servizi online? Bene, sappiate che, line interface (cli), alla grafica e al database MySQL.
Compatibile almeno per iniziare, vi basta una Raspberry Pi e qualche Durante l’installazione del database il sistema vi farà
con tutte le
software Open Source per farlo. Se volete che il vostro definire una password: si tratta della chiave d’accesso
RP sito sia composto da più di qualche semplice pagina
HTML statica vi conviene installare un CMS (sistema di
del superuser del database (che in MySQL è root).
Questo account può fare qualunque cosa nel database,
gestione dei contenuti) che vi permette di creare siti più quindi impostate una password robusta.
o meno complessi con pochi sforzi. Tra i CMS più diffusi Terminata l’installazione riavviate il computer (con sudo
possiamo citare Drupal, WordPress e Joomla. Il primo shutdown -r now), fate il login e aprite una finestra
è nato nel 2001 mentre WordPress ha visto la luce di terminale per configurare i vari software. Durante
nel 2003. Joomla arriva invece da un fork di Mambo questa fase dovrete usare una serie di account
nel 2005. Tra i tre, la nostra preferenza ricade sul per i vari task da compiere; i meno esperti potrebbero
secondo, WordPress. Per usarlo sulla RP dovete installare confondersi un po’ visto che spesso questi account
un server Web, il linguaggio di programmazione PHP avranno lo stesso nome, ma cercheremo di spiegarvi
e un database, continuate a leggere e vedrete come... tutto per bene per dissolvere eventuali dubbi.
Quando accedete alla vostra Raspberry Pi usate
CMSPi un account utente di Raspbian. Le credenziali di default
Una qualunque Raspberry Pi dotata di porta Ethernet sono pi come nome utente e raspberry come password.
è la piattaforma ideale per fare esperimenti con un CMS Però anche i programmi che girano sotto il sistema
e per prendere dimestichezza con il funzionamento operativo usano delle credenziali. Per esempio, il server
di un server Web. Per questo tutorial abbiamo usato Web ha un suo account utente, www-data, mentre
una RP 2 con Raspbian aggiornata (vedi box nella pagina il database relazione usa il nome utente mysql.
a fianco). Approntato il tutto bisogna installare il software Quindi, mentre un programma è in esecuzione accede
necessario alla creazione di un server LAMP (Linux, alle risorse del sistema usando il proprio account
Apache, MySQL e PHP). utente, proprio come fate voi con il vostro username
sudo apt-get install -y nginx mysql-server php5-fpm quando accedete ai vostri file. Di solito gli account
php5-cli php5-gd php5-mysql delle componenti software non possono effettuare
Con questo comando installate in una volta sola il server il login al sistema.
Web (nginx), il database relazionale (mysql-server) e il
linguaggio di programmazione (php5-fpm php5-cli php5- Il database relazionale
gd php5-mysql). Come vedete, abbiamo rimpiazzato All’interno dello stesso database ci sono degli account,
la A di Apache con Nginx che è un po’ più snello. Notate che servono a gestire l’accesso alle risorse del database
(cioè archivi, tabelle e così via). Il primo account
di MySQL è root, come avete visto in fase d’installazione.
Fate attenzione a un particolare: questo account root
è distinto da quello della vostra distro.
Per impostare la vostra macchina LAMP iniziate proprio
dal database. Dalla riga di comando aprite la console
di MySQL usando l’utente root (-u): $ mysql -u root -p.
L’applicazione vi chiederà la password (-p) che avete
scelto durante l’installazione. Dal prompt dei comandi
di MySQL (cioè mysql>) impartite il comando seguente:
Durante l’installazione di MySQL dovrete definire la sua password di root show databases;. I comandi inseriti nella console

22 RASPBERRY PI
I soliti aggiornamenti

P
rima di installare i pacchetti l’elenco locale dei pacchetti (e delle loro
richiesti per un qualunque versioni) che sono disponibili nei
progetto, vi suggeriamo repository della distro. Poi il comando apt-
di assicurarsi che la distro sia aggiornata. get con l’opzione upgrade si occupa di
Potete verificare che sia effettivamente scaricare e installare le versioni più recenti
così ed eventualmente scaricare gli di tutti i pacchetti installati. Riavviare
aggiornamenti con questi comandi: il computer, soprattutto dopo un cambio
sudo apt-get update di versione, vi assicura che il sistema sia
sudo apt-get upgrade consistente. Difatti, in caso di problemi,
sudo shutdown -r now se non avete riavviato, potrebbe essere
Per prima cosa, con update, si aggiorna più complicato individuare la causa.​

server {
server_name webpi;
listen 80;
Tip
Questi sono i database che MySQL usa per funzionare
Se il sito che volete
root /home/pi/www/wordpress; creare è di natura
di MySQL devono terminare con un punto e virgola index index.php index.html; commerciale,
per essere riconosciuti. L’output di questo comando o comunque
mostra gli archivi attualmente presenti, che sono location / { ipotizzate un alto
traffico, dobbiamo
quelli usati dall’applicazione stessa per memorizzare try_files $uri $uri/ /index.php?$args;
sconsigliarvi l’uso
le informazioni. A questo punto dovete creare il database } della Raspberry
che vi servirà per il CMS: Pi come server
create database wpDB; location ~ .php$ { di produzione.
Piuttosto potete
create user wpdbprime@localhost identified by try_files $uri /index.php;
usare il piccolo
"WordPressDB"; include fastcgi_params; computer come
grant all privileges on wpDB.* to wpdbprime@localhost; fastcgi_pass unix:/var/run/php5-fpm.sock; server di stage,
flush privileges; fastcgi_param SCRIPT_FILENAME $document_ per fare delle prove
Oltre a creare il database chiamato wpDB con root$fastcgi_script_name; o come “demo”.
il comando create, questa sequenza di istruzioni imposta fastcgi_index index.php;
anche un utente wpdbprime (con password }
WordPressDB) che avrà i privilegi per accedere }
al database da localhost. è la terza istruzione
ad assegnare questi privilegi al nuovo utente in modo Il server Web
che possa gestire wpDB. Infine, l’ultimo comando rende Esaminiamo questa configurazione riga per riga.
effettivi i permessi che avete appena impostato. Nel primo set di parentesi si definisce il nome del server
Per verificare che tutto sia andato per il verso giusto Web e la porta su cui ascolta (la classica 80 in questo
scrivete di nuovo il comando caso). Subito dopo viene determinata la root del
show databases; filesystem del server Web e quale (o quali) file dovreste
e dovreste veder comparire il nome dell’archivio appena trovare di default se non viene specificato altro nell’URL.
creato nell’elenco. Per scoprire se anche il nuovo utente L’ultimo set di parentesi graffe, infine, contiene le opzioni
è stato creato correttamente indicate al server di configurazione per gli script PHP.
di database che volete accedere all’archivio che contiene Qualunque nome decidiate di indicare alla voce server_
i dati degli altri database con name, aprite in un editor di testo il file /etc/hosts
use mysql; e aggiungete in cima indirizzo IP e hostname. Nel nostro
Poi digitate
select user,host, password from user;
e vedrete che wpdbprime è presente (e la sua password
è crittografata). Con
exit;
uscite dal database mysql. A questo punto il database
è pronto all’uso, passate al server Web. La directory
/etc/nginx contiene i file di configurazione di questo
software. Usando il vostro editor di testo preferito create
un nuovo file in questo folder e inserite al suo interno
le istruzioni che trovate nelle prossime righe.
Noi abbiamo fatto tutto con l’editor vi chiamando
il file wordpress e salvandolo nella directory Potete interrogare il database server per scoprire se il nuovo utente
/etc/nginx/sites-available/. wpdbprime che avete creato è effettivamente presente

RASPBERRY PI 23
Raspberry Pi Progetti

caso abbiamo inserito 192.168.2.104 webpi, per


esempio. Il file hosts dovrebbe già contenere un
riferimento al nostro hostname che punta a 127.0.1.1
(cioè 127.0.1.1 webpi): rimuovete questa voce e salvate.
La prossima serie di comandi eliminerà la configurazione
di default del server rimpiazzandola con quella appena
definita. Per rendere attivo questo cambiamento l’ultima
istruzione riavvia il server Web.
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/wordpress /etc/
nginx/sites-enabled/wordpress
sudo service nginx restart
Giusto per capire se tutto funziona a dovere, impartite
la prossima sequenza di comandi che vi mostrerà cosa Ecco gli account del server Web, con i processi attivi,
succede “sotto il cofano”. Il server Web avrà un processo i protocolli e le porte tutte impostate per l’ascolto
a esso associato e ci sarà una porta aperta in ascolto
(LISTEN) che consentirà di usare i servizi del server Web. necessari per il CMS - il database relazionale,
sudo ps -ef|grep nginx il linguaggio PHP (che non necessita di configurazione)
sudo lsof -i:80 e il server Web - manca solo WordPress. Iniziate creando
sudo netstat -an|more la directory che lo ospiterà ed entrateci:
La schermata qui a destra mostra l’output di questi tre sudo mkdir /home/pi/www && cd /home/pi/www/
comandi. Il primo elenca il processo master del server Il sito Web di WordPress ospita un repository con l’ultima
Web, avviato in modalità root con pieno accesso alle versione del pacchetto. Scaricate quindi il file latest.zip
risorse, e i processi accessori, detti worker, che e decomprimetelo all’interno della home del server Web:
appartengono all’utente www-data (ricordate di averlo sudo wget https://wordpress.org/latest.zip
creato in precedenza?). Nell’output del secondo sudo unzip latest.zip
comando si nota che i processi worker sono in ascolto
su una porta TCP per il protocollo HTTP usato dai servizi PHP/WordPress
Web. Se non siete sicuri della corrispondenza tra porta Per terminare la configurazione è necessario impostare
e servizio dei tanti servizi disponibili, potete esaminare permessi e proprietà delle directory di WordPress. Il file
il file /etc/services che contiene un esaustivo elenco. Zip del CMS è stato scaricato e decompresso usando
Infine, nell’output dell’ultimo comando scoprite il server l’utente pi e ricorrendo a sudo per avere l’accesso come
è in ascolto sulla porta 80. Se non ne siete convinti, usate root. Per questa ragione tutti i folder e i file appartengono
di nuovo il comando impiegato prima per riavviare nginx a root (e al gruppo root). Il server Web deve poter
Tip mettendo stop al posto di restart. Subito dopo ripetete accedere a questi file e cartelle, ma il suo utente (e anche
gli ultimi tre comandi ed esaminatene l’output. il gruppo di appartenenza) è www.data. Riguardando
Creare una Nei risultati mostrati dall’ultimo comando potete notare il comando che vi ha mostrato i processi worker di Nginx,
password robusta, c’è una porta 3306 in ascolto (LISTEN). Volete sapere dovreste ricordare che il primo processo è stato avviato
e non solo per
quale dei software installati finora è in attesa di una da root ma che quelli creati da esso appartengono
il database MySQL,
è molto importante. connessione su quella porta? Allora dovete guardare all’owner del server Web, www-data. Tutto ciò fa parte
Lasciare attive il file /etc/service. La risposta che dovreste trovare di un elaborato piano per rendere sicuro il sistema
le password di è MySQL. Il test finale per il vostro server Web lo potete e, di conseguenza, dovete modificare alcuni dettagli:
default o usare delle fare collegandovi a esso (se l’avete fermato, avviatelo) sudo chown -R pi.www-data /home/pi/www/wordpress/
chiavi d’accesso
inserendo il suo indirizzo IP nel browser Web. Dovreste sudo find /home/pi/www/wordpress/ -type d -exec
semplici aumenta
le probabilità che il veder apparire un messaggio d’errore generato chmod 755 {} \;
vostro server possa dal server. Questo errore nasce dal fatto che il server sudo find /home/pi/www/wordpress/ -type f -exec
venir compromesso, non trova la directory specificata nel suo file chmod 644 {} \;
quindi non siate
di configurazione (/home/pi/www/wordpress). sudo chmod -R 775 /home/pi/www/wordpress/
pigri.
Per rimediare, dopo aver approntato tre dei componenti wp-content
Fatto? Ok, a questo punto dovete resettare la directory

I Fantastici Quattro dei CMS


wp-content per assicurarvi che non sia modificabile
da parte degli utenti non autorizzati. Per farlo digitate
il comando seguente e poi seguite la guida passo

L
AMP, cioè i quattro elementi di un passo della pagina a fianco.
server Open Source: una distro sudo chmod -R 755 /home/pi/www/wordpress/
Linux; il server Web Apache; il wp-content
database relazionale MySQL; il linguaggio
Bene, se avete seguito le nostre istruzioni vi ritrovate
PHP. Tutti assieme consentono l’uso
con un server WordPress portabile. Ricordatevi che
di CMS come WordPress che altro
non è che un pacchetto di script PHP se provate questo server in una rete diversa dalla vostra,
che sfruttano server e database per l’indirizzo IP assegnato dal DHCP potrebbe essere
consentirvi di creare siti Web dinamici. Ecco come nasce un CMS diverso da quello impostato in /etc/hosts, quindi
dovrete modificarlo di conseguenza.

24 RASPBERRY PI
CMS

Il Web è diventato facile con i gestori di contenuti

A
gli albori dello sviluppo contenuti) ha rivoluzionato Un modo per capire un CMS
Web l’aspetto più il mestiere, separando i contenuti è di dividerlo in due sottosistemi.
importante del lavoro dal layout e dal codice delle pagine. Uno è il gestore dei contenuti, cioè
consisteva nel disegnare le pagine In un CMS le pagine Web quella parte che vi permette
Web attorno ai contenuti. Testo recuperano i dati da un database, di creare, organizzare, modificare
e immagini di un sito erano hard invece di integrarli e ciò consente e cancellare il contenuto del sito.
coded nell’HTML. Lo sviluppo di manipolare testi e immagini Il secondo sottosistema, invece,
dei Content Management System con maggior velocità e senza dover si occupa di recuperare i contenuti
(CMS, sistemi di gestione dei avere particolari conoscenze. e di gestirne la pubblicazione.

Installazione e configurazione di WordPress

1 Reboot del server 2 Configurate tutto 3 Create l’account admin


Dopo aver decompresso WordPress nella sua Completate i campi presenti con i dati usati Da un terminale, create questo file
directory e aver seguito le istruzioni del testo quando avete impostato MySQL . Se non li di configurazione inserendovi le istruzioni
principale, ricordatevi di riavviare il computer. ricordate, li ritrovate nella schermata qui sopra. che vi suggerisce WordPress. Copiate i comandi
Quando riparte, aprite un browser e accedete Quando avete finito premete il pulsante Submit. visibili nella pagina Web e poi salvate il file
al front-end del CMS digitando l’URL http:// Usando i dettagli che avete fornito, WordPress wp-config.php. Tornate alla pagina Web
webpi. La piattaforma WordPress è progettata genererà il contenuto del file di configurazione e selezionate il pulsante per l’installazione.
per fornire una guida passo passo per che verrà scritto in /home/pi/www/ Il CMS vi mostrerà una schermata di benvenuto.
il completamento della configurazione. Nella wp-config.php. L’operazione di scrittura, però, I dettagli inseriti in questa schermata servono
figura c’è la prima schermata, premete Let’s go! fallirà e il sistema richiederà il vostro intervento. per creare un account d’amministrazione..

4 Installate il CMS 5 Impostate il sito 6 Il flusso dei contenuti


Usate i dettagli visibili in questa schermata per Fate il login con le credenziali appena create I contenuti vengono mostrati dal front-end
completare il form e fare gli ultimi ritocchi alla (wpadmin) e iniziate a progettare il vostro del server Web (http://webpi). Nel back-end ci
configurazione. Premete il pulsante che si trova nuovo sito. Sia i contenuti Web che andrete a sono diverse componenti che lavorano assieme
in fondo alla schermata: dopo qualche istante creare, sia i tool di configurazione di WordPress per creare le pagine da visualizzare e per
il sistema dovrebbe avvertirvi che l’operazione sono accessibili usando un normale browser. memorizzare i dati. La configurazione e il layout
è andata a buon fine. Nella schermata che Il sito realizzato con questo CMS mostra i suoi del sito sono controllati dall’admin che accede
appare, però, non potrete fare il login. Per farlo contenuti nel browser degli utenti recuperando alle funzioni di back-end tramite il front-end
dovete visitare http://webpi/wp-admin. le informazioni da un database relazionale. d’amministrazione (http://webpi/wp-admin).

RASPBERRY PI 25
Raspberry Pi Explorer HAT

Raspberry Pi Progetti

Esperimenti con
LED e motori
Qualche esempio d’uso dell’Explorer HAT Pro, una delle migliori schede
aggiuntive per chi muove i primi passi da maker con la RP

A
ll’interno di questo articolo vi presentiamo ben while True:
quattro progetti diversi, relativamente piccoli, basati Di seguito si imposta una serie di test condizionali che verificano
sulla scheda aggiuntiva Explorer HAT Pro (che se e quale pulsante touch è stato premuto. A ogni pressione
Compatibile trovate sul sito di Pimoroni per circa 20 €). di un pulsante si accenderà o si spegnerà il LED corrispondente.
con tutte le
Questi quattro mini-tutorial vi faranno capire come Abbiamo aggiunto anche una breve pausa per prevenire
RP funzionano alcuni componenti base, come un potenziometro una doppia pressione accidentale.
applicato a degli input analogici, i pulsanti e i LED. Scoprirete if eh.touch.one.is_pressed():
anche come gestire un controller H Bridge per operare eh.light.blue.toggle()
con motori DC. Prima di alimentare la RP dovete collegare sleep(0.1)
I FILE PER SEGUIRE l’Explorer HAT Pro ai 40 pin del GPIO del piccolo computer. Il resto del codice segue lo stesso pattern usando però
IL TUTORIAL SONO Ora alimentate la RP e al termine del boot installate le librerie l’istruzione elif per rappresentare le altre condizioni del test:
DISPONIBILI QUI
necessarie alla scheda aggiuntiva: elif eh.touch.two.is_pressed():
$ curl https://get.pimoroni.com/explorerhat | bash eh.light.yellow.toggle()
Seguite le istruzioni a schermo e, quando richiesto, riavviate. sleep(0.1)
www.sprea.it/ A questo punto siete pronti a mettere in campo l’editor elif eh.touch.three.is_pressed():
SP21_explorer per Python 3 che trovate nel menu Programmazione. eh.light.red.toggle()
sleep(0.1)
Progetto 1: LED on e off elif eh.touch.four.is_pressed():
Userete quattro degli otto pulsanti capacitivi (1-4) della scheda eh.light.green.toggle()
aggiuntiva per accendere e spegnere i LED integrati nella sleep(0.1)
Cosa scheda stessa. Il codice di questo primo progetto lo trovate Andate in Run D Run Module per eseguire questo codice,
ti serve nel file progetto1-LED-Toggle.py. La prima riga importa poi premete i pulsanti 1-4 e vedrete i LED animarsi.
Qualunque RP la libreria Python 3 per la gestione dell’Explorer HAT Pro
con GPIO
da 40 pin
e la rinomina eh per brevità. Poi si importa anche la funzione Progetto 2: il superlampeggio
sleep dalla libreria time. Questa volta imparerete a usare un potenziometro. Collegatelo
e Raspbian Pixel
import explorerhat as eh alla breadboard come nello schema qui a sinistra (vi serviranno
Explorer HAT
Pro, 1 LED, from time import sleep tre cavi jumper). Il potenziometro è connesso al pin ANALOG1
1 resistenza Poi trovate un loop infinito che contiene il codice principale: e crea una tensione che varia man mano che girate il cursore
da 220 Ohm, del potenziometro. A pieno voltaggio la tensione sarà pari a 5V.
1 pulsante, Caricate il file progetto2-Analog-Blink.py e vedrete che, come
1 motore DC,
6 cavi jumper
prima, si importa la libreria dell’Explorer HAT Pro:
maschio/ import explorerhat as eh
maschio, All’interno di un ciclo infinito abbiamo creato due variabili in cui
1 potenziometro si memorizza il valore del voltaggio misurato su ANALOG1:
da 10k
while True:
on = eh.analog.one.read()
off = eh.analog.one.read()
Girando Le istruzioni seguenti realizzano un piccolo “trucco” per
il cursore del
evitare un errore di “divisione per zero” (e il successivo crash
potenziometro
dell’interprete Python). Se il valore delle variabili “on” e “off”
variate la sua
raggiunge lo zero, si cambia il loro valore in 0.01:
resistenza e di
conseguenza if on == 0 and off == 0:
il valore di tensione on = 0.01
che arriva off = 0.01
all’input Analog L’ultima riga di codice fa lampeggiare i LED built-in per

26 RASPBERRY PI
Explorer HAT Raspberry Pi

Una scheda, mille funzionalità


L’Explorer HAT Pro offre un gran numero di input da 1 a 4 sono perfetti da usare con le dita, è la Explorer pHAT, progettata per la RP Zero
e output rimanendo semplice da usare. Trovate ma se volete testare la conduttività di una banana ma funzionante con tutte le schede RP con GPIO
otto pulsanti touch capacitivi, quattro input oppure usare sottili fogli di rame per creare circuiti da 40 pin. Questa scheda è priva dell’interfaccia
analogici, quattro input digitali e quattro output. più grandi potete usare gli input da 5 a 8 con clip touch capacitiva, della breadboard, dei LED
C’è poi un controller DRV8833 per i motori e dei a coccodrillo. Questi input sono simili a quelli della e del breakout per I2C. Però costa la metà
pin per le connessioni I2C/SPI. A condire il tutto scheda Makey Makey, un dispositivo che emula della versione Pro. Se vi serve una soluzione
avete a disposizione una piccola breadboard tastiera e mouse e può trasformare oggetti vari compatta per creare un robot e gestire sensori
su cui montare i circuiti. Gli input capacitivi in una forma di input. Un’altra scheda simile analogici, la pHAT è ciò che fa per voi.

cavi jumper. Qui a destra vedete il circuito montato sulla


breadboard dell’HAT con il pulsante collegato a 5V
e a INPUT1, la gamba lunga del LED connessa al pin 5V
Tip
e quella corta collegata a OUTPUT1 attraverso la resistenza. Sia l’Explorer HAT
Nell’IDE Python create un nuovo file e chiamatelo Project4- Pro sia l’Explorer
Input-Output.py, importate la libreria dell’HAT e poi pHAT sono in grado
la funzione sleep: di alimentare due
motori, ma dovrete
import explorerhat as eh
usare quelli di tipo
from time import sleep micro gear e non
Create di seguito un loop e al suo interno mettete un test quei motori DC
Noi abbiamo usato un motore Micro Gear perché funziona condizionale che verifichi lo stato dei pulsanti touch gialli e più grandi
che trovate in molti
con 5V ed è facile da usare nei progetti robotici capacitivi 1-4. Per il pulsante 1 il codice è il seguente:
kit dei robot.
while True:
un periodo di tempo che corrisponde al voltaggio letto if eh.touch.one.is_pressed():
su ANALOG1. Questo vuol dire che a una bassa tensione Se questo pulsante è stato premuto, allora si attiva
corrisponderà un lampeggio più rapido e viceversa. con la funzione toggle() il LED blu sotto il pulsante 1 così
eh.light.blink(on,off) da accenderlo o spegnerlo in base al suo stato attuale.
Mandate in esecuzione il codice e iniziate a ruotare il cursore Per evitare doppie pressioni accidentali, aggiungete anche
del potenziometro per vedere come cambiano le cose. un breve ritardo:
eh.light.blue.toggle()
Progetto 3: controllare un motore sleep(0.1)
Per questo progetto lasciate il potenziometro sulla Servono poi degli analoghi test condizionali per i restanti
breadboard e collegate un motore DC ai pin MOTOR1+ e -. tre pulsanti touch:
Il potenziometro servirà per controllare la velocità del elif eh.touch.two.is_pressed():
motore. L’Explorer HAT Pro integra un controller per motori eh.light.yellow.toggle()
DRV8833 che offre due canali e controlli forward/reverse. sleep(0.1)
Create un file chiamato progetto3-Analog-Motor.py elif eh.touch.three.is_pressed():
e, come prima, importate la libreria dell’add-on: eh.light.red.toggle()
import explorerhat as eh sleep(0.1)
Ancora una volta vi serve un ciclo infinito: elif eh.touch.four.is_pressed():
while True: eh.light.green.toggle()
Dentro questo loop create una variabile chiamata speed nella sleep(0.1)
quale memorizzerete la lettura di ANALOG1. Per semplicità Come al solito, andate in Run D Run Module per eseguire
d’uso, il valore letto da questo input va modificato, il codice e provate a premere i pulsanti da 1 a 4 per vedere
arrotondandolo a una cifra decimale. Poi si moltiplica questo accendere e spegnere i rispettivi LED. LXP
valore per 20 per ottenere un numero percentuale che viene
poi passato alla linea finale del codice che fa muovere
il motore in avanti con una velocità pari al contenuto di speed:
speed = (round(eh.analog.one.read()) * 20)
eh.motor.one.forward(speed)
Eseguite il codice e poi provate a girare il cursore del
potenziometro per vedere come cambia la velocità di
rotazione del motore.

Progetto 4: premete il pulsante


Il progetto finale vi mostra come far funzionare gli input
e gli output dell’Explorer HAT Pro con dei componenti
esterni, usando un pulsante per attivare a turno i LED built-in
e un LED esterno. Per realizzare questo progetto vi serve Pulsanti e LED sono componenti indispensabili in tantissimi progetti perché
un pulsante, un LED, una resistenza da 220 Ohm e quattro vi permettono di gestire gli input e di avere degli output visivi

RASPBERRY PI 27
Raspberry Pi Progetti

Crea un mondo
con Minecraft Pi
Avete mai pensato di realizzare una “vostra” realtà virtuale fatta di
“mattoncini”? Seguite la nostra guida e il divertimento sarà assicurato

O
ltre a essere il “mattone” base di tantissimi progetti programmatori di domani, giovani o meno. Ma bando alle
da maker, la Raspberry Pi si è guadagnata anche un ciance, avviate il gioco andando nel menu Giochi D Minecraft
posto d’onore tra le piattaforme videoludiche come Pi. Scegliete la modalità a giocatore singolo (Single Player)
Compatibile Minecraft. Si tratta di un mondo virtuale aperto nel quale e poi New Game. Premete Start Game, seguito da Create
con tutte le
l’eroe, Steve, girovaga all’interno di un paesaggio costituito da New. Dopo pochi istanti vedrete apparire il nuovo mondo di
RP voxel (blocchi). Le risorse possono essere minate e combinate gioco, sentitevi liberi di esplorarlo e di costruire cose. I controlli
per ottenere altri elementi tramite i quali costruire case, creare del gioco sono piuttosto semplici e li riassumiamo qui sotto:
coltivazioni, cucinare cibo e combattere i nemici (tutti
renderizzati con una meravigliosa grafica in bassa risoluzione). Tasto Azione
Nel 2013 è stata rilasciata una versione speciale, Minecraft:
W Avanti
Pi Edition, che è stata inclusa in Raspbian fin dal 2014. Questa
versione è ridotta rispetto a quella per gli altri sistemi: A Sinistra
mancano, per esempio, la generazione dei cattivi (mob ostili) e S Indietro
la possibilità di fare crafting, e non ci sono neanche limiti nelle
D Destra
risorse disponibili per le costruzioni. Gli sviluppatori hanno
però aggiunto delle particolarità uniche, la più importante delle E Inventario
quali è la presenza delle API Python per la manipolazione dei Spazio Salto
mondi di gioco. Non doversi preoccupare delle creature che
Doppio spazio Decolla/atterra
cercando di farvi fuori a ogni piè sospinto o da dove arriva il
cibo che mangiate può essere d’aiuto per i nuovi giocatori, Esc Pausa/menu Game
consentendo loro di concentrarsi sugli aspetti creativi. Le API Tab Rilascia il cursore del mouse
COM E FARE TUTT
O IN Python rendono Minecraft Pi Edition la piattaforma ideale per i
MINECRAFT
MINECRAFT

CREIAMO
MONDI CON
VIAGGIO AGLI INFERI! I MOD!
COME
ESPLORIAMO QUALI SONO E
SI USANO I 10 MIGLIORI
IL NETHER PER STRUMENTI PER
I

SCOPRIREE PROGETTISTI

LA DIMENSION
PIÙ TERRIFICANTE
DI MINECRAFT
E IMPARARE
A USCIRNE VIVI!

SUPER PROGETTO!

IL BUONO,
LA GUIDA
PASSO, PASSO
IMPERDIBILI! PER IL TUO
S/NA
N.46) ART. 1, COMMA 1,

CASTELLO!

IL BRUTTO O!
EFFETTI
SPECIALI GLI ESPERTI TI
MERAVIGLIOSI
(CONV. IN L. 27/02/2004

SVELANO TUTTI
COSTRUZIONI A I LORO TRUCCHI!
TUTTO FANTASY!

E IL SUPER-CATTIV
ABB. POST. D.L. 353/2003

IL DIARIO !
DEL GUERRIERO
ITALIANE SPA - SPED. IN
TARIFFA R.O.C. - POSTE

ONDIMENTI
TANTI APPROF

ATTENTI AI MOB!
CHE PERSONA GGI! to!
O Tecniche di combattimen
LO DICE L’ESPERT modificarti!
Tanti mod per...
LA DOLCE CASETTA Intervista a MagmaMusen! ANDRO ID
Benvenuti nelle fiabe! PS VITA
n iOS n

PC n PS4 n 3DS n

SWITCH
n

XBOX ONE MOD  TEXTURE  BIOMI


n
PS4
 SPECIALI UFFICIAL
n

 EFFETTI  NEWSENTE E
GUIDE  ARMI  MOB 100% INDIPEND
E NON

Tutto su
Minecraft
Se il gioco con
la grafica a quadretti
è la vostra passione
non potete perdervi
la nostra rivista
dedicata interamente
a Minecraft!
La trovate in edicola
e all’indirizzo www.
sprea.it/minecraft a
9,90 € per la versione
cartacea e 4,90 € per
quella digitale.
Con un po’ di tempo, pazienza e abilità nella programmazione riuscirete a costruirvi un castello su misura

28 RASPBERRY PI
Minecraft Pi

Con il mouse, invece, vi guardate attorno e selezionate gli Premente Invio, poi eseguite le due istruzioni seguenti per
oggetti dall’inventario. Di default, tenete in mano una
spada. Cliccando contro un qualunque blocco lo
creare un cubo gigante 10x10x10 di solido oro:
x, y, z = mc.player.getPos()
Tip
distruggerete; la spada può essere usata anche per mc.setBlocks(x+1, y+1, z+1, x+11, y+11, z+11, gold) Se vi serve
scavare. Se selezionate un blocco nell’inventario, potete Questa è solo una piccola selezione di comandi che potete dello spazio
iniziare a costruire. Usate il tasto destro del mouse per eseguire in Minecraft Pi. Potete anche comporre forme supplementare,
piazzare il blocco o il sinistro per distruggerlo. complesse, teletrasportare il giocatore e perfino far cadere sappiate che
Minecraft può
blocchi sul terreno mentre vi muovete. All’URL www.
Programmare i blocchi stuffaboutcode.com/p/minecraft-api-reference.html
essere installato
su un disco esterno.
Per iniziare a programmare il mondo di Minecraft: Pi Edition, trovate l’elenco completo dei comandi che potete impartire Vi basta chiudere
premete il tasto Tab mentre il gioco è in esecuzione. al gioco e gli ID do ogni tipo di blocco. il gioco e spostare
In Raspbian entrate nel menu Programming. , avviate l’IDE la sua cartella

di Python 3 e cercate di piazzare i box di testo uno accanto Evitate i campi minati nel drive
di destinazione.
all’altro. Per cambiare il mondo di gioco potete digitare La versione per la RP di Minecraft deriva dalla Pocket Edition
comandi nell’editor. Nel tempo imparerete anche a creare uno del gioco, che nasce per funzionare nei dispositivi mobile,
script che piazzi un blocco di roccia sul vostro passaggio, ma come gli smartphone Android e iPhone. La versione Pocket
procedete per gradi. Come primo esperimento, provate a far non può interagire con le persone che usano il client ufficiale
apparire un semplice messaggio all’interno del gioco. Digitate di Minecraft. Secondo i report presenti sul sito dello
i comandi seguenti, premendo Invio dopo ognuno di essi: sviluppatore, Mojang, il client per la RP non è aggiornato da
from mcpi.minecraft import Minecraft molto tempo, ma questo non è un problema se volete
mc = Minecraft.create()
mc.postToChat(“Ciao mondo, gioco a Minecraft Pi!!!”)
Dopo aver premuto Invio per la terza volta vedrete a schermo
il vostro primo messaggio in-game. Provate ora a guardare in
alto a sinistra nello schermo di Minecraft Pi: dovreste vedere
le coordinate X, Y e Z della posizione del vostro personaggio.
Potete usare Python per far apparire un qualunque numero
di blocchi di vari materiali. Iniziate con un blocco d’oro subito
dietro di voi. Digitate il comando seguente:
x, y, z = mc.player.getPos()
Dovrete usare questo comando ogni volta che vi muovete
per aggiornare il gioco sulla vostra posizione. Poi scrivete
mc.setBlock(x+1, y, z, 41)
Il numero 41 alla fine rappresenta l’ID numerico dell’oro. Ogni
blocco o oggetto nel gioco è identificato da un ID unico. Se
conoscete il numero di un particolare tipo di blocco, potete
assegnargli un nome per ricordarlo con facilità. Per esempio: Quando vi sarete stancati di avere il tocco di re Mida, provate a cambiare l’ID
gold=41 dei blocchi che usate per costruire il vostro cubo gigante

Come si installa la versione full del gioco sulla RP 3


Aprite il Terminale della Raspberry Pi 3 a scaricare i file. Al termine dovrete chiudere il simbolo = inserite le vostre credenziali
e installate alcuni tool: il launcher e riaprire il terminale, digitando di Minecraft: email, nome utente e password.
sudo apt-get -y install xcompmgr libgl1-mesa- poi i comandi seguenti: Premete Ctrl+X quando avete finito, poi S
dri && sudo apt-get -y install libalut0 libalut-dev $ cd ~/Minecraft/Natives && wget https://www. e infine Invio per salvare le modifiche.
&& sudo apt-get -y install mesa-utils dropbox.com/s/4oxcvz3ky7a3x6f/liblwjgl.so Per eseguire Minecraft, infine, sarà sufficiente
Poi dovete abilitare i driver video sperimentali. $ wget https://www.dropbox.com/s/ il comando seguente:
Eseguite sudo raspi-config e spostatevi nelle m0r8e01jg2og36z/libopenal.so cd ~/Minecraft && ./run.sh
opzioni avanzate: scegliete la voce AB – GL
Driver e abilitatela. Ora scaricate il client $ cd /home/pi/.minecraft/libraries/org/lwjgl/
ufficiale di Minecraft: lwjgl/lwjgl/2.9.4-nightly-20150209 && rm lwjgl-
mkdir ~/Minecraft; mkdir ~/Minecraft/Natives; 2.9.4-nightly-20150209.jar
cd ~/Minecraft && wget https://s3.amazonaws. $ wget https://www.dropbox.com/s/
com/Minecraft.Download/launcher/Minecraft.jar mj15sz3bub4dmr6/lwjgl-2.9.4-nightly-20150209.jar
Eseguitelo con
$ java -jar Minecraft.jar $ cd ~/Minecraft/
Ora dovete eseguire il login con il vostro nome $ wget https://www.dropbox.com/s/
utente e la vostra password. Spostatevi nel tab jkhr58apwa7pt1w/run.sh
Profile Editor e da lì fate click sul box che sta $ sudo chmod +x run.sh
sotto Version per aprire una nuova finestra. Qui Prima di giocare, dovete modificare uno dei file
troverete un menu a cascata denominato Use che avete scaricato; usate Nel menu a cascata scegliete la versione
Version: scegliete la 1.8.9. Infine cliccate su Save $ sudo nano ~/Minecraft/run.sh 1.8.9. Non è la più recente, ma è quella
Profile. Premendo il pulsante Play inizierete Scendete verso il basso con i tasti cursore e dopo che funziona meglio con la RP

RASPBERRY PI 29
Raspberry Pi Progetti

sfruttare il gioco per imparare la programmazione Python e Sostituite 1.x.x con il giusto numero di versione.

Tip non vi interessano le funzionalità extra introdotte nel client


Minecraft completo. A dir la verità, esiste un trucchetto per
Il programma vi dirà che dovrete accettare l’EULA
per avviare il server. Lo potete fare modificando il file
far girare la versione completa di Minecraft 1.8.9 sotto la dell’EULA con un editor di testo:
Le stringhe
\u00A74 Raspberry Pi 3 (guarda il box nella pagina precedente), ma il $ nano eula.txt
e \u00A7l metodo è supportato ufficialmente dai creatori del gioco e Scorrete verso il basso con in tasto cursore giù e cancellate
poste prima potreste incappare in prestazioni non proprio ottimali se la parola false, rimpiazzandola con true. Premete Ctrl+X
di un messaggio
confrontate con quelle di un PC desktop, se non addirittura e poi S e Invio per salvare e uscire.
cambiano
semplicemente in crash improvvisi o glitch grafici. Avviate di nuovo il server con lo stesso comando di prima:
il colore e la Inoltre, i driver grafici sperimentali che devono essere abilitati $ java -jar -Xms512M -Xmx1008M spigot-1.x.x.jar nogui
formattazione del sulla RP per usare la versione full del gioco impediscono il Questa volta vedrete apparire il messaggio ‘Loading
testo. Per scoprire corretto funzionamento di Minecraft Pi, ma potete Libraries, please wait...’ e qualche informazione.
l’intero elenco
disabilitarli eseguendo sudo raspi-config e poi riavviando la La modalità di gioco preimpostata è Survival e vedrete
di codici colore,
visitate l’URL macchina. Infine, nessuna versione di Minecraft funziona comparire piano piano una percentuale. Questo valore
http://minecraft. particolarmente bene se accedete alla RP tramite VNC. Se potrebbe ripartire un paio di volte man mano che vengono
gamepedia.com/ optate per il client full, dovete acquistare un account Mojang caricati i vari livelli. Un “Done!” vi mostrerà la fine
Formatting_
(che al momento costa 23,95 €). Se con le nostre parole vi del processo. Mettete quindi subito alla prova il vostro
codes#Color_
codes. abbiamo fatto venire ancor più voglia di saperne di più su server. Spostatevi su un computer con installato il client
questo gioco, continuate a leggere... Minecraft e avviatelo. Dalla schermata principale scegliete
Multiplayer. Poi premete il pulsante per l’aggiunta
Un server per Minecraft di un server. Digitate un nome di vostra scelta – per
Dopo aver fatto un po’ di pratica con il videogioco, potete esempio Pi Minecraft Server. Andate nel box in cui
passare alla creazione di un vostro mondo virtuale. Per farlo si inserisce l’indirizzo del server e digitate l’indirizzo IP
dovete installare la versione server di Minecraft sulla RP3; della vostra RP. Terminate premendo il pulsante Done
questo consentirà agli altri giocatori di collegarsi al vostro e dovreste veder apparire il vostro server nell’elenco.
mondo online e giocare liberamente. Spostate il cursore del mouse su di esso e premete
Minecraft è un’applicazione Java ed è preinstallata in il pulsante blu per giocare. Non appena il mondo virtuale
Raspbian, il che vuol dire che parte del lavoro è già fatto. Il si è caricato, sentitevi liberi di esplorarlo e se volete
server di Minecraft è piuttosto leggero, non richiede molte sfogarvi anche di distruggere qualche blocco, giusto
risorse, ma vi sconsigliamo di farlo girare sulle prime versioni per capire se il gioco risponde bene. Quando siete
della RP (poca memoria e poca potenza equivalgono a soddisfatti, chiudete la finestra di Minecraft e tornate
scarse performance). Quindi accendete la RP 2 o 3, al client SSH, che dovrebbe essere ancora collegato
collegatevi a essa via SSH e prendete nota del suo indirizzo alla RP. Digitate stop per fermare il server. Potete usare
IP perché vi servirà successivamente. Ora create una questo comando in qualunque momento per arrestare
directory per Minecraft ed entrateci: il server se, per esempio, volete operare qualche
$ mkdir minecraft && cd minecraft cambiamento. In futuro, se vorrete eseguire il server,
Scaricate la versione più recente di SpigotMC, una versione collegatevi alla RP sempre via SSH e usate
altamente personalizzabile e leggera del server Minecraft: $ cd ~/minecraft && java -jar -Xms512M -Xmx1008M
$ wget https://hub.spigotmc.org/jenkins/job/BuildTools/ spigot-1.x.x.jar nogui
lastSuccessfulBuild/artifact/target/BuildTools.jar Ricordatevi di inserire sempre il giusto numero di versione
Al termine ordinate alla RP di fare il building di tutto: al posto di 1.x.x. Se non siete sicuri di quale versione avete
$ java -jar BuildTools.jar installato, guardate il nome del file jar scaricato usando
Quando tutto il lavoro sarà terminato vedrete a schermo la cd ~/minecraft && ls.
scritta Saved as spigot-1.x.x.jar, dove 1.x.x è la versione
corrente di Spigot che è stata scaricata (1.11.2 quando Le prime impostazioni
scriviamo). Ora avviate il server: Una volta che il server è pronto potete divertirvi
$ java -jar -Xms512M -Xmx1008M spigot-1.x.x.jar nogui a modificarne alcune impostazioni. Quelle di base
sono contenute nel file server.properties; potete
guardarlo e modificarlo con:
$ cd ~/minecraft && nano server.properties
Se volete controllare davvero ogni aspetto del gioco,
vi consigliamo di visitare la pagina Web http://minecraft.
gamepedia.com/server.properties dove trovate tutti
i possibili valori di ogni parametro. Per ora vi sia sufficiente
sapere come fare qualche modifica di base. Scendete
in fondo al file fino a trovare la parola motd=. Questo
è il messaggio che appare quando vi collegate la prima
volta al server Minecraft. Di default recita solo
“A Minecraft server”. Cancellate questa linea e rimpiazzatela
con la riga seguente:
Questa è la schermata per il multiplayer sotto Debian. Il messaggio motd=\u00A74 \u00A7l Welcome to my Pi Minecraft
di benvenuto è stato personalizzato nel file di configurazione del server Server\!

30 RASPBERRY PI
Minecraft Pi

Un’altra modifica che potreste voler fare – per aiutare


soprattutto chi non ha mai giocato a Minecraft –
è cambiare la modalità di gioco da Survival a Creative.
In questo modo il giocatore avrà risorse infinite
per costruire ciò che vuole. Inoltre l’avatar non perderà
energia e non diventerà affamato. Quindi, cercate nel file
la riga gamemode=0 e mettete 1 al posto dello zero.
Assicuratevi anche di cambiare l’opzione force-
gamemode=false in true per assicurarvi che chiunque
si connetta in futuro lo faccia in modalità creativa.
Se invece siete determinati a mettervi alla prova nella
modalità Survival, ma volete iniziare con gradualità, prendete
in considerazione l’ipotesi di modificare la voce spawn-
monsters=true in false. Potete anche agire sul livello
di difficoltà modificando la voce difficulty=1 : sono accettati Il sito http://portforward.com vi mostra le istruzioni per impostare il port
i valori tra 0 e 3, con 0 che indica la difficoltà minore. Terminati forwarding con molti modelli di router, così potrete giocare via Internet
i cambiamenti, premete Ctrl+X, poi S e Invio per salvare.
$ cd ~/minecraft && java -jar -Xms512M -Xmx1008M
Modifiche avanzate -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
Man mano che prenderete confidenza con Minecraft, o se -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=2
siete già esperti, potreste trovare un po’ limitanti le poche -XX:+AggressiveOpts -jar spigot-1.x.x.jar nogui Le impostazioni
opzioni presenti in server.properties. È proprio in queste Per ottenere delle prestazioni ancora più elevate, potete di base del gioco
situazioni che SpigotMC offre il meglio di sé, con un file di infine riaprire in un editor di testo il file server.properties si configurano
configurazione avanzato. Arrestate il gioco e poi digitate portando l’opzione view-distance da 10 a 5. Questa voce nel file server.
properties.
$ cd ~/minecraft && nano spigot.yml determina la dimensione della sezione di mappa che si
Potete indicare
Per capire il livello di personalizzazione a cui si può arrivare, deve caricare man mano che vi muovete nel mondo di
quattro modalità
scorrete questo file verso il basso fino a trovare zombie- gioco. Cambiando l’opzione max-players, invece, potete di gioco: Survival,
aggressive-towards-villager: true e impostate la voce a false. anche controllare il numero di giocatori che si possono Creative,
Questa impostazione indica se gli zombie possono cercare collegare contemporaneamente al vostro server di gioco, Adventure
di uccidere o meno gli abitanti di Minecraft. La RP userà limitatelo se notate troppi rallentamenti. LXP e Hardcore
un minor numero di risorse per l’IA che controlla gli zombie,
e quindi il server risponderà più prontamente. All’indirizzo
Web www.spigotmc.org/wiki/spigot-configuration
troverete la descrizione di tutte le opzioni di Spigot.

Se il server rallenta...
Con una modifica qua e una là siete giunti a un risultato
soddisfacente, però man mano che si aggiungono giocatori
e che la struttura del mondo diventa più complessa, potreste
incappare in qualche rallentamento di troppo. Un primo
accorgimento è dare a Minecraft tutto lo spazio di cui
necessita spostandolo su un disco esterno usando
$ sudo mv ~/minecraft /media/pi/MIAUSB
dove MIAUSB è il nome della vostra chiave USB. Quindi
il comando per entrare nella cartella di Minecraft passerà
dall’essere cd ~/minecraft a cd /media/pi/MYUSB/minecraft.
Se avete ancora dei problemi, avviate il server con le opzioni
indicate qui di seguito che, senza entrare troppo nel
tecnico, ordinano a Java di sfruttare al meglio la CPU.

Accedere al server via Internet


Nella nostra guida vi abbiamo mostrato come un determinato tipo di traffico che arriva oppure andando su www.whatismyip.com.
giocare a Minecraft in una rete locale. da Internet verso la RP. Ogni router ha menu Il sito Port Forward ha tantissime guide
Ma cosa fare se voleste far accedere utenti e configurazioni differenti, quindi vi conviene per eseguire il port forwarding: http://
che si trovano in giro per il mondo? Per prima consultare il manuale del vostro dispositivo portforward.com/english/applications/
cosa dovete assegnare un indirizzo IP fisso oppure chiedere a un amico esperto. port_forwarding/Minecraft_Server.
alla vostra RP agendo sul file /etc/network/ In entrambi i casi dovrete aprire la porta Infine, visto che il vostro ISP cambierà di tanto
interfaces. Poi, usando una opzione del vostro 25565 per i protocolli TCP e UDP. Dovete poi in tanto il vostro indirizzo IP pubblico,
router conosciuta come port forwarding scoprire anche l’indirizzo esterno del vostro vi conviene sfruttare un servizio di DNS
dovete fare in modo di indirizzare router, che potete trovare nel menu del device dinamico come www.noip.com.

RASPBERRY PI 31
Raspberry Pi Progetti

Whiptail: un menu
per gli script Bash
Ecco come racchiudere i comandi che usate più spesso in un pratico
sistema a menu simile a quello usato dal tool raspi-config

V
i divertite di tanto in tanto ad automatizzare alcune
operazioni realizzando script Bash? Probabilmente sì,
e se non lo fate dovreste iniziare così da poter passare
Compatibile il tempo risparmiato guardando l’ultima puntata di Mr. Robot...
con tutte le
Di solito questi script hanno un’interfaccia a caratteri
RP decisamente scarna, per non dire inesistente, ma grazie
a Whiptail riuscirete a donare ai vostri programmi Bash
un comodo sistema di menu. Per scrivere il codice dello script
vi suggeriamo di usare l’editor Geany (www.geany.org),
I FILE PER SEGUIRE
IL TUTORIAL SONO preinstallato in Raspbian, che integra le funzionalità base
DISPONIBILI QUI di un IDE (come l’evidenziazione della sintassi Il nostro menu è semplice. Consente di eseguire un buon
e l’autocompletamento delle istruzioni), supporta un gran numero di funzioni e può essere ampliato molto facilmente
numero di linguaggi e le sue funzionalità possono essere
estese tramite un sistema di plug-in. Lo trovate nel menu per esempio IP per scoprire l’indirizzo IP della Raspberry Pi.
www.sprea.it/ Programmazione: avviatelo e si aprirà un documento vuoto; A questa voce di menu corrisponde un tag (IP in questo caso)
SP21_whiptail salvatelo (File D Save) con il nome system-tool.sh. La prima e una breve descrizione. Il tag viene salvato in answer usando
riga del programma dovrà essere #! /bin/bash che indica un processo che cattura l’output del comando whiptail
al sistema con quale strumento deve eseguirlo (la shell Bash scrivendolo sullo standard error (3>&1 1>&2 2>&3 inverte
in questo caso). Subito dopo potreste togliervi uno sfizio: lo standard output e lo standard error). L’istruzione seguente,
creare uno splashscreen generando una scritta in ASCII exitstatus=$?, memorizza l’exit status del menu in una
usando un servizio online (cercate ascii generator in Google) variabile. Se l’utente sceglie di uscire, questo status sarà pari
e poi copiarla e incollarla nello script come argomento a 1, altrimenti sarà 0; questa variabile è indispensabile
di un comando echo (echo "inserite qui l’ASCII"). Aggiungete per consentire all’utente di terminare il programma e tornare
anche una breve pausa (sleep 2) per dare il tempo all’utente al terminale. Le linee successive contengono un test if:
di ammirare la vostra arte! Ora mettete in campo Whiptail. if [ $exitstatus = 0 ];
whiptail --title "LXP Raspberry Pi System Tool" --msgbox then
"Gestisce la tua RP"\ "dal 2017" 10 40 echo "Hai scelto la voce:" $answer
Questa riga crea un box con un titolo e un messaggio else
di benvenuto per l’utente. Viene creato anche un pulsante OK echo "Hai scelto di uscire."
da usare per chiudere la finestra di dialogo. I due numeri answer="Exit"
alla fine della riga, 10 40, indicano rispettivamente l’altezza fi

Tip del box in righe e la larghezza in colonne. La sezione seguente


di codice è racchiusa all’interno di un ciclo until che proseguirà
Questo brano di codice controlla se l’utente intende uscire
dal programma. In questo caso impostate la variabile answer
fino a quando l’utente deciderà di uscire: a "Exit" facendo terminare il loop principale. Per qualunque
Esistono diversi
framework per
until [ "$answer" == "Exit" ]; do altra risposta si stampa la voce selezionata nella shell a scopo
la creazione di GUI answer=$(whiptail --title "Menu Principale" --menu "Scegli una di debug. Notate che abbiamo dovuto chiudere il costrutto
sotto GNU/Linux. opzione" --ok-button "Select" --cancel-button "Esci" 20 78 14 \ condizionale if...else con un fi come richiesto da Bash.
Una scelta molto "Spegnimento" "Spegni la tua RP" \ Subito dopo si entra in un test condizionale if...elif...else più
popolare è Zenity,
"IP" "Verifica un indirizzo IP" \ grande che gestirà l’input dell’utente agendo di conseguenza.
https://help.
gnome.org/users/ ... if [ "$answer" == "Spegnimento del sistema" ]
zenity/stable, "Visita LXP" "Visita la pagina Facebook di LXP!" ${value} then
che consente 3>&1 1>&2 2>&3) if (whiptail --title "System Shutdown" --yesno "Sei sicuro?"
di creare finestre La voce scelta dall’utente viene memorizzata in una variabile 10 60) then
e box di dialogo
con grande facilità.
chiamata answer. Per catturare l’input abbiamo creato sudo sync && sudo poweroff
un menu che funziona così. L’utente seleziona un’opzione, else

32 RASPBERRY PI
Trasforma lo script in un comando di sistema
Il nostro menu è davvero comodo ma è racchiuso del filesystem, associato con sudo, dovete
in una directory un po’ scomoda da raggiungere, ora spostare lo script in una cartella che sia
quindi perché non renderlo accessibile automaticamente accessibile a tutti gli utenti
da qualunque parte del filesystem? Per prima del vostro sistema, per esempio /usr/bin:
cosa dovete cambiare i permessi dello script $ sudo mv system-tool /usr/bin
rendendolo eseguibile. In un terminale, spostatevi Ora che il comando si trova nel posto giusto,
nella cartella dello script (da qualche parte sotto sarà sufficiente digitarne il nome nel terminale
/home/pi presumibilmente) e digitate per avviarlo, indipendentemente dalla cartella
$ chmod +x system-tool.sh in cui ci si trova. Per verificarlo, tornate
Il passo seguente consiste nel rimuovere nella vostra home directory e provate
l’estensione .sh. Sempre dal terminale potete ad avviare system-tool:
usare il comando mv per rinominare lo script: $ cd ~
$ mv systems-tool.sh system-tool $ system-tool Per eseguire uno script senza anteporre
Sempre usando il comando mv, il cui scopo Congratulazioni: avete creato il vostro primo bash al suo nome bisogna assegnargli
principale è spostare un file da una parte all’altra comando di sistema! i permessi d’esecuzione con chmod

whiptail --title "Spegnimento cancellato" --msgbox un --msgbox. Eccoci alle ultime due condizioni elif, che
"Spegnimento del sistema abortito!" 10 60 gestiscono rispettivamente l’avvio dal terminale del videogioco
fi Minecraft e del browser Web Chromium.
Lo scopo di questo test è confrontare l’input dell’utente elif [ "$answer" == "Gioca a Minecraft" ]
con una serie di valori predeterminati. Si inizia con l’opzione then
di spegnimento (shutdown) per la RP. Se questo test ha esito Minecraft-pi &
positivo (cioè se è stata scelta questa opzione) viene mostrata elif [ "$answer" == "Visita LXP" ]
un’altra finestra di dialogo di Whiptail, un box di tipo sì/no, then
che chiederà una conferma. Rispondendo affermativamente chromium-browser http://fb.me/LinuxProItalia &
si esegue il comando sync che sincronizza il filesystem (cioè Nel caso del browser, gli si passa anche un indirizzo Web
scrive su disco eventuali dati presenti in memoria) e poi quello da aprire. Entrambi i comandi per l’avvio delle due applicazioni
per spegnere effettivamente il computer. Altrimenti si fa terminano con il carattere &. Questo è un trucco del terminale
apparire un’altra finestra che avverte l’utente che l’operazione che consente di eseguire programmi in background, lasciando
è stata cancellata e si torna al menu principale. L’istruzione cioè il terminale sotto il controllo dell’utente (o dello script
successiva è un else if, abbreviato in elif, che viene verificata in questo caso). L’ultima sezione del codice contiene
solo se la condizione precedente si è rivelata falsa. la condizione che si verifica quando tutte le altre sono false:
elif [ "$answer" == "IP" ] else
then echo "Exit"
ip=$(hostname -I) fi
echo $ip done
whiptail --title "Indirizzo IP:" --msgbox "$ip" 10 30 In pratica si stampa semplicemente Exit , si chiude
Si esegue il comando hostname -I per ottenere l’indirizzo IP la condizione if creata all’inizio e, infine, si chiude anche
della macchina: il suo output viene memorizzato in una il ciclo until con l’istruzione done. Bene, il codice è finito:
variabile chiamata ip e poi mostrato a schermo all’utente. salvate, aprite un terminale, spostatevi con cd nella cartella
I due test successivi servono a capire se sono state in cui l’avete salvato e digitate
selezionate le opzioni di verifica dello spazio su disco o quella bash system-tool.sh
per l’aggiornamento dei pacchetti del sistema. Entrambe Potete personalizzare i comandi a piacimento e anche
le voci hanno una struttura simile all’elif precedente. trasformare il nostro menu in un vero e proprio comando
Ora passiamo alla voce "Test della rete", che eseguirà di sistema (leggete il box in alto per scoprire come). LXP
il comando ping usando l’indirizzo IP specificato dall’utente.
Questo è il primo passo da fare quando bisogna diagnosticare
un problema della LAN. Se non sapete verso quale IP
indirizzare ping, potete provare 8.8.8.8, il DNS di Google:
elif [ "$answer" == "Test della rete" ]
then Non abbiamo
address=$(whiptail --inputbox "Quale indirizzo IP devo resistito:
sfruttando
verificare?" 19 90 3>&1 1>&2 2>&3)
il servizio Web
test="$(ping $address -c5)"
http://bit.ly/
whiptail --title "Risultati del test" --msgbox "${test}" 19 90 ASCII_ART
Questa volta abbiamo usato un input box per acquisire abbiamo creato
l’indirizzo IP verso cui dirigere il ping. Questo input viene uno splashscreen
salvato nella variabile chiamata address e poi si esegue in ASCII per
il comando cinque volte. Il risultato viene mostrato tramite la nostra opera

RASPBERRY PI 33
Raspberry Pi Progetti

Un calendario
da muro con iCal
Un modo per condividere con classe gli appuntamenti in famiglia o in ufficio

U
na costante di diversi film di fantascienza, come

Tip Ritorno al Futuro e Time Cop, è che chiunque


ha un assistente digitale appeso alla parete del
salotto che gli ricorda gli appuntamenti del giorno. Certo,
Se per caso
in passato abbiamo il calendario del nostro smartphone o del tablet,
avete installato ma ora, grazie alla Raspberry Pi potete costruirvi anche
OwnCloud, voi un calendario “da parete” personalizzato per la casa
il suo calendario o l’ufficio. Una soluzione di questo genere vi permette
è perfetto per
di creare qualcosa di più piacevole rispetto al calendario
questo progetto.
Assicuratevi solo del vostro device mobile: se cercate in Rete troverete gente
che tutte le persone che gli ha costruito attorno una cornice di legno o altri
che devono che lo hanno montato dietro a uno specchio. Il vantaggio
accedervi abbiano
principale, però, è che vi consente di condividere
il link LDAP.
il calendario con altre persone mettendolo in un luogo
condiviso come la vostra cucina, per esempio. Oppure
lo si può usare in ufficio, impostando la modalità Agenda Se siete abili nel fai-da-te potete dare un aspetto rustico
di Google Calendar, per organizzare riunioni (chi non ne al vostro calendario, come quello di questa foto
fa almeno una alla settimana di questi tempi?) e assegnare
compiti ai colleghi. il vostro device su una mensola o un tavolo. Nel posizionarlo
dovete badare anche alla lunghezza del cavo
Pezzo per pezzo dell’alimentatore (se non volete ricorrere a batterie
Per prima cosa vi serve una Raspberry Pi con accesso per smartphone o cose simili). Una volta che tutto
a Internet. Per comodità (cioè per evitare il ricorso al cavo è in ordine, dovete pensare al tipo di calendario che volete
di rete) vi suggeriamo di usare una RP3 che integra il Wi-Fi. usare. Se voi e i vostri familiari o i colleghi condividete
Poi vi serve un monitor; un’opzione eccellente è il display già un calendario, la scelta è d’obbligo, altrimenti dovrete
touchscreen ufficiale della RP (leggete il box La difficile crearne uno per questa guida. Se volete usare Google
scelta del monitor per tutte le informazioni del caso), Calendar seguite le istruzioni dell’URL http://bit.
ma qualunque display compatibile va bene. ly/2t9cnNc. Per gli utenti Mac, invece, c’è questo link
Non è obbligatorio appendere lo schermo al muro relativo al calendario di iCloud: http://apple.co/2nz2w1v.
(soprattutto se non siete pratici con trapano e viti), se esso Infine gli utenti di Outlook possono visitare http://
dispone di uno stand, potete tranquillamente appoggiare calendar.live.com. Non è importante quale servizio
di calendario volete usate, è sufficiente che sia fruibile
tramite Mozilla Firefox, il browser che useremo per questo
progetto. Ricordatevi solo di assegnare un nome significativo
al calendario, così che chiunque riesca a distinguerlo
da quello degli altri.

Importare i calendari
Se avete già un calendario, potreste voler importare in quello
nuovo i vostri appuntamenti personali, i compleanni e così
via, cosa comunque non necessaria visto che i vari servizi
consentono l’uso di più calendari, ognuno identificato
da un colore diverso, a voi la scelta. L’importazione diventa
necessaria se adottate Google Calendar, per esempio,
Se scegliete di iscrivervi anche ad altri calendari, potreste trovare utili quelli e gli altri utenti del calendario condiviso usano quello
relativi alle festività italiane (o di altri paesi), che verranno evidenziate per voi di un servizio diverso, come iCloud per gli utenti iPhone.

34 RASPBERRY PI
La difficile scelta del monitor
Ci sono diversi schermi compatibili Pi Hut vi mette a disposizione un dotato di questo ingresso va bene;
con la Raspberry Pi. Se collegare cavo USB corto per l’alimentazione alcuni display sono anche dotati
qualche cavo non vi spaventa, per fare in modo che la RP prenda di una scheda che vi consente
il display touch ufficiale da 7 pollici energia dalla porta USB del monitor. di collegarli alla porta DSI della RP.
ha le dimensioni più adatte per lo Lo schermo ufficiale, essendo Se invece siete abili con l’elettronica
scopo di questo tutorial e ha un di tipo touch, ha il vantaggio e volete risparmiare denaro, provate
pratico alloggiamento per il piccolo di consentirvi di selezionare gli a recuperare un portatile rotto
computer. Lo schermo, assieme appuntamenti con la punta che abbia l’LCD funzionante: potete
alle istruzioni per il montaggio, sono di un dito. Se però a voi non rimuovere lo schermo e acquistare
disponibili sul sito di Pi Hut interessa, su Amazon ed eBay online un controller compatibile. Una scheda come questa
(https://thepihut.com). trovate delle alternative meno Per info: www.instructables.com/ trasforma magicamente
Se non vi va di trafficare con i cavi costose. Visto che la RP ha una id/Old-laptop-screen-into- lo schermo di un portatile in
(operazione comunque semplice) porta HDMI, qualunque schermo Monitor/?ALLSTEPS. un monitor per questo progetto

Per importare gli eventi di iCloud Calendar a Google mouse e il click sinistro. Potete farlo per creare un evento
dovete prima esportarli in formato ICS seguendo i passi
indicati qui: http://apple.co/1I0wS0p. Poi dovete
o per modificarne la data o l’ora. Ma se provate, per esempio,
a cambiare il nome di un appuntamento, incappate subito Tip
importare il file creato seguendo il passo due di http:// in un problema… come inserire il testo? Certo, è sempre
Se avete già
bit.ly/2shcUAc. Per esportare, invece, un calendario possibile lasciare nelle vicinanze del device una piccola
installato l’add-on
da Microsoft Outlook a Google Calendar, seguite questi tastiera wireless, ma sarebbe una soluzione poco elegante. Real Kiosk, non
passi: http://bit.ly/2cI17lN. In questi casi è indispensabile ricorrere a una tastiera riuscirete a visitare
a schermo e, guarda caso, esiste proprio un’estensione il sito delle
Personalizzazioni di Firefox che la realizza. Si chiama VKeyBoard, è progettata estensioni
di Firefox. Quello
Una volta che avete approntato il vostro calendario per i chioschi Internet e compare quando viene selezionata
che potete fare
condiviso, prendetevi un po’ di tempo per scegliere per consentire all’utente di digitare il testo. è aprire un terminale
il formato che più vi sembra appropriato. In genere Per installarla vi basta visitare l’URL https://mzl.la/ ed eseguire firefox-
è quantomeno possibile scegliere tra una vista giornaliera, 2njGePN e premere il pulsante Add to Firefox. Se avete esr -safe-mode
settimanale o mensile. Poi sentitevi liberi di modificare già installato e attivato r-kiosk, dovete riavviare il browser per aprire il browser
con gli add-on
a piacere l’aspetto del calendario. Per esempio, potete in modalità sicura (leggete il box Tips a lato).
disabilitati.
cambiare quello di iCloud, magari definendo il periodo
di tempo visibile, seguendo le istruzioni all’URL http:// Condividere gli appuntamenti
apple.co/2oeuCm2. L’aspetto predefinito di Google Se volete usare altri dispositivi, oltre alla RP collegata allo
Calendar, invece, è piuttosto spartano, ma potete schermo, per aggiungere o cambiare gli appuntamenti
sperimentare layout differenti, li trovate qui: http://bit.ly/ su Google Calendar, vi basta collegarvi allo stesso account
2oeD7O6. Avrete bisogno dell’estensione Stylish da un altro device, oppure condividere il calendario con altri
di Firefox per poterli utilizzare: andate su https://mzl. utenti. Per condividere Google Calendar seguite i passi
la/1fe2Nwr e premete il pulsante Add to Firefox. indicati all’URL http://bit.ly/2rk8ymZ. Potete inviare
un link ad alcuni indirizzi email, oppure rendere il calendario
A pieno schermo! visibile a chiunque ne possieda l’indirizzo. Potete fare
Visto che userete uno schermo più piccolo di quello
del vostro PC, vi consigliamo di installare un altro add-on
di Firefox, Real Kiosk (r-kiosk), che è progettato per
trasformare il browser in un chiosco Internet. Questo vuol
dire che menu, barre degli strumenti e anche il click destro
sono disabilitati. Il vantaggio principale è che Firefox viene
sempre aperto in modalità fullscreen (a tutto schermo),
rendendo il vostro calendario più semplice da usare. Inoltre
ciò vi assicura che il vostro dispositivo verrà usato solo come
calendario, impedendo per esempio agli utenti di navigare
su altri siti. Se per qualche ragione vi ritrovaste a dover
chiudere Firefox, potrete farlo collegando una tastiera
e premendo Alt+F4.

Modificate il calendario
Per quanto visto finora, sembrerebbe che si possa solo fruire
del calendario… ma bisognerà pure permettere a tutti gli
utenti previsti l’inserimento degli appuntamenti, vero?
Se state usando il display ufficiale della RP vi basta toccare Per inserire gli appuntamenti direttamente nel calendario appeso dovete
un punto dello schermo per simulare il movimento del installare una tastiera virtuale, VKeyBoard, che appare e scompare a comando

RASPBERRY PI 35
Raspberry Pi Progetti

che vi consente di guardare e modificare i calendari del


servizio di Microsoft. Tristemente, invece, non è così facile
accedere a iCloud, però esistono alcune app di terze parti,
come SmoothSync, nel Play Store di Google che
vi permettono di sincronizzare calendari diversi. Chi usa
un iPhone è fortunato. Esiste l’app ufficiale del calendario di
Google su iTunes Store tramite la quale potete eseguire il login
e guardare il calendario condiviso. C’è anche l’app ufficiale
di Outlook (Microsoft Outlook – Email and Calendar).

Gli enigmi del sistema


Google Calendar vi consente di attivare calendari multipli che potete colorare Se create o modificate un appuntamento e questo non
in modo diverso così da identificarli al volo appare nei dispositivi delle altre persone, aspettate una
decina di minuti prima di partire a caccia del problema.
lo stesso con il servizio di iCloud seguendo quanto scritto qui: Se la modifica che avete fatto è presente nel calendario
http://apple.co/2bfWHk8. Infine, se usate Outlook 2010, appeso – quindi sul sito Web – il problema molto
potete anche pubblicare un calendario su Outlook.com probabilmente risiede nei device usati, non nella Raspberry
visitando http://bit.ly/2oCrLzn e seguendo la sezione Pi. Dal punto di vista pratico, il software e gli add-on da usare
intitolata Condividere un calendario tramite per questo progetto sono molto facili da installare, quindi
pubblicazione online. Una volta che il calendario è condiviso la parte più problematica riguarda l’aggiunta del monitor
in Rete, chiunque vorrà modificarlo potrà accedervi usando e il suo fissaggio alla parete se non siete abili nei lavori
i dispositivi in suo possesso. Con un computer è sufficiente manuali. L’operazione sarà più semplice se acquisterete
visitare l’URL del calendario con il browser così come fareste un monitor progettato per la RP, che vi consente
con la Raspberry Pi. Ma è possibile farlo anche con i device di “nascondere” comodamente il piccolo computer dietro
mobile. Se avete usato Google Calendar, gli utenti Android allo schermo. Se il posto in cui volete appendere il calendario
possono usare direttamente la loro app Calendario, anche è difficile da raggiungere, potreste acquistare un cavo
se usano un account diverso. È sufficiente seguire microUSB piuttosto lungo, tenendo però bene a mente
le istruzioni presenti all’URL http://bit.ly/2tcnmWk. che la tensione diminuisce man mano che la lunghezza
C’è poi un’app ufficiale per Outlook per Android, del cavo aumenta. Potete optare per un hub USB alimentato.
Se la Raspberry Pi va in crash per qualche motivo, Firefox
tenterà di ripristinare tutte le pagine aperte al riavvio,
Tip il che vuol dire che dovrete ricollegare il mouse o la tastiera
per chiudere tutti i tab extra. Potete ridurre le possibilità che
ciò accada avviando Firefox in modalità safe e poi digitando
Se avete un
appuntamento
about:config nella barra degli indirizzi: verrete portati nella
personale, schermata delle impostazioni del browser. In questa pagina
potete creare cercate la voce Browser.sessionstore.resume_from_crash
un evento privato. e fate doppio click per modificare il suo valore da True
Le altre persone
a False. Una nota: se state usando Google Calendar
che accedono
al calendario chiunque scorra la pagina fino in cima potrà accedere alle
condiviso vedranno altre app di Google, come Gmail. È anche possibile cercare
che siete occupati, i documenti memorizzati in Drive usando la barra di ricerca.
ma non potranno Se questo è un problema per voi, vi consigliamo di creare
Il retro dello schermo ufficiale della RP. La RP è alloggiata
leggere i dettagli.
comodamente; lo stand che vedete è opzionale un account dedicato solo per il calendario.

Un po’ di trucchi e suggerimenti


Dopo aver appeso il vostro programmare Firefox in modo il simbolo del cancelletto,
calendario, il cursore potrebbe che si riapra automaticamente. aggiungete uno spazio dopo la X
darvi fastidio, soprattutto Sempre dal terminale della RP e digitate -s 0 --dpms. Premete
se usate un modello touchscreen. eseguite sudo nano /etc/xdg/ come prima Ctrl+X, Y e Invio
C’è però un’app chiamata lxsession/LXDE-pi/autostart. per salvare e riavviate
Unclutter che lo nasconde Scendete in fondo alla finestra la Raspberry Pi. Se state usando
eccetto quando lo muovete e aggiungete la linea @firefox-esr. Google Calendar, aprite il menu
o quando toccate lo schermo. Premete Ctrl+X, Y e poi Invio a comparsa Altri calendari,
Aprite il terminale della RP per salvare e uscire dall’editor. scegliete la voce Sfoglia
(o collegatevi a essa via SSH) Infine, per assicurarvi che calendari interessanti
e digitate lo schermo non si spenga a causa per trovare qualche elenco di
sudo apt-get install unclutter del risparmio energetico, eseguite eventi predefinito a cui iscrivervi,
Per evitare problemi in caso sudo nano /etc/lightdm/lightdm. come quello delle festività.
di crash della RP - e del conf e cercate la linea #xserver- In Altri calendari trovate Cliccate su Iscriviti per poterli
conseguente reboot - vi conviene command=X. Rimuovete tanti utili elenchi di eventi visualizzare nel vostro device.

36 RASPBERRY PI
Controllo vocale

Impostate il calendario da muro passo per passo

1 Aggiornate Raspbian 2 Un’occhiata alle preferenze di Firefox


Prima di trasformare fisicamente la vostra Raspberry Pi nel calendario Andate in Menu D Internet D Firefox ESR per avviare il browser.
da muro, dovete connetterla a Internet e aprire il Terminale. Da qui Visitate l’URL del vostro calendario, http://calendar.google.com,
eseguite i comandi sudo apt-get update e sudo apt-get upgrade per esempio, e fate il login. Se Firefox vi chiede di memorizzare
per aggiornare tutto il software installato. Poi con la riga di comando la password, acconsentite. Caricato il calendario, andate in Modifica
sudo apt-get install iceweasel installate il browser Firefox Extended D Preferenze e fate click sul pulsante Usa la pagina corrente
Support Release sul mini computer. per assicurarvi che Firefox visualizzi sempre il calendario.

3 Andate in full-screen 4 Qualche aggiustamento


Questo passo è opzionale, ma raccomandato. Andate all’URL https:// Assicuratevi che sia attiva la vista del calendario che preferite,
addons.mozilla.org/en-US/firefox/addon/r-kiosk che disabiliterà per esempio quella mensile. Poi seguite i consigli del box della pagina
menu e barre degli strumenti; dovrete riavviare il browser per attivare accanto per nascondere il puntatore del mouse quando non è in uso
questo add-on. Ricordatevi che potrete lo stesso chiudere la finestra e per disabilitare lo spegnimento automatico dello schermo.
corrente collegando una tastiera e premendo Alt+F4. Assicuratevi anche di far riavviare Firefox in automatico al boot.

5 Collegate tutto 6 I ritocchi finali


Ora si passa alla parte riguardante l’hardware: collegate tutti Collegata la Raspberry Pi allo schermo, dovete trovare una posizione
i componenti. Ovviamente le operazioni da fare cambiano in base che sia accessibile a tutti in casa o in ufficio. Anche l’aspetto del
al tipo di display che avete acquistato. Se state usando il monitor calendario ha la sua importanza, ovunque lo mettiate, ma per questo
LCD ufficiale della RP trovate le istruzioni passo passo per il suo aspetto dovete affidarvi alla vostra fantasia, alla vostra abilità con il fai-
montaggio all’URL http://bit.ly/2nR9qRs. da-te e magari a qualche suggerimento che potete trovare online. LXP

RASPBERRY PI 37
Raspberry Pi Progetti

Controllo vocale
per la Raspberry Pi
Grazie alla Pi AUI Suite potete comandare il computer senza usare la tastiera

N
el film Star Trek IV: Rotta verso la Terra, c’è una
scena in cui Scotty e il dottor McCoy rimangono
perplessi quando il computer che vogliono usare
Compatibile non risponde ai loro comandi vocali. Questo film è del
con tutte le
1986 e da allora il riconoscimento vocale ha fatto passi
RP da gigante tanto da poterlo avere anche sulla Raspberry
Pi: con l’aiuto di un economico microfono USB
e di qualche software anche voi avete la possibilità
di cercare video su YouTube, aprire pagine Web,
avviare applicazioni e altro ancora semplicemente
parlando alla vostra RP.

Cosa vi serve
La RP non ha un jack audio, quindi vi serve un microfono Se avete un microfono con attacco jack, collegatelo alla RP
USB o una Webcam con microfono integrato per realizzare tramite una scheda sonora USB come questa (3 € su Amazon)
questo progetto. Noi abbiamo provato il software con
una Webcam Microsoft HD-3000, ma qualunque device cerca in Rete i file e li scarica automaticamente per voi.
compatibile con la RP andrà bene: all’URL http://elinux. Se decidete di installarlo, vi viene chiesto di configurare
org/RPi_USB_Webcams trovate l’elenco delle Webcam host, porta, nome utente e password. Se non siete sicuri di
compatibili, se non ne possedete una. cosa inserire, premete Invio per scegliere i valori di default.
In alternativa, se per caso avete già un microfono con jack Google Text to Speech Service Installate questo
audio, potete cercare su Amazon o eBay una scheda audio servizio se volete che la RP sia in grado di leggere
USB, di solito molto economica: questi dispositivi i contenuti dei file di testo. Per usarlo il computer deve
in genere hanno un’uscita cuffie e un jack d’ingresso essere connesso a Internet perché la conversione
per il microfono. Passando al software, esistono diverse del testo in parole viene eseguita dai server di Google.
soluzioni di riconoscimento vocale per la RP. Noi abbiamo Al termine della conversione viene scaricato un file audio
scelto la Pi AUI Suite di Steven Hickson (https://github. riprodotto poi dal media player della RP. Per usare questo
com/StevenHickson/PiAUISuite) perché la riteniamo servizio dovete avere un account Google: l’installer
al contempo potente e semplice da configurare. vi chiederà sia lo username sia la password.
Nell’ultima pagina di questo articolo trovate la guida passo Google Voice Commands Vi permette di sfruttare
passo per installare e configurare questo software. il motore di riconoscimento vocale creato dell’azienda
di Moutain View, per cui anche per questo vi servono
Comandi vocali per ogni cosa delle credenziali Google.
Durante la procedura di setup, la Pi AUI Suite vi pone Gli script di YouTube Anche se avete deciso di non
una sequenza di domande sui vari tool da installare, installare i programmi di Google visti finora, la procedura
necessari per svolgere tutte le sue funzioni. Potete di setup vi chiede se volete usare questo tool. Esso
decidere di installarli tutti, oppure solo quelli che ritenete vi consente di cercare e riprodurre filmati presenti sul noto
più utili. Vediamoli rapidamente. servizio di streaming video con un comando del tipo
PlayVideo Questo software vi permette di avviare “youtube gattini”.
la riproduzione di filmati tramite la voce. Se rispondete Voicecommand Questo software comprende alcuni
di sì alla richiesta d’installazione, vi viene richiesta degli script più utili della Pi AUI Suite. Per esempio, uno
la directory in cui si trovano i file video, per esempio di questi vi permette di avviare il browser Internet
/home/pi/Videos. Notate che è importante indicare semplicemente dicendo “Internet”. Voicecommand
in modo esatto le lettere maiuscole e minuscole; vi chiederà se volete che si configuri autonomamente:
se inserite un path non valido, il programma vi avverte, se incappate in un errore in questa fase, date un’occhiata
Downloader Un altro tool che potrebbe tornarvi utile: al passo 3 della nostra guida nell’ultima pagina dell’articolo.

38 RASPBERRY PI
Comandi base
Una volta installata la Pi AUI Suite YouTube Esclamando ‘youtube’ Download Pronunciando per esempio ‘play concertomozart.
e avviato Voicecommand, questo e il titolo di un video verrà effettuata ‘download’ seguito da un termine mp4” fa partire l’esecuzione del file
software rimane in attesa una ricerca nel noto servizio video di ricerca, il sistema effettua una indicato presente nella cartella
di un vostro comando. Ma cosa e verrà riprodotta la prima clip ricerca su PirateBay (attenzione dei file multimediali impostata
dirgli esattamente? Prima di tutto, trovata. Questo comportamento a ciò che cercate). Per esempio, in fase di configurazione.
ognuno dei comandi che vedrete è simile al “Mi sento fortunato” dovete dire ‘download ubuntu Show me Pronunciando queste
a breve deve essere preceduto dell’homepage di Google. yakkety yak’ per scaricare l’ISO parole viene aperto un folder
da una parola chiave che di default Internet Quando dite ‘Internet’, di Ubuntu 16.10 Desktop. di vostra scelta che dovete definire
è ‘pi’; sentitevi liberi di cambiarla il sistema apre il browser Web Play Questo comando usa nel file di configurazione, inserendo
come preferite. Ora vi elenchiamo di default, che nella RP è Midori, il media player integrato per per esempio
alcuni dei comandi built-in più utili: se non l’avete cambiato. riprodurre un filmato o una canzone, show me==/home/pi/Documents

La voce del padrone di dire qualcosa e vi chiede se lo avete sentito.


Dopo aver installato Voicecommand vi conviene fare
alcuni semplici cambiamenti alla sua configurazione
Risposta di default Quando dite la parola d’attivazione,
la risposta predefinita di Voicecommand è “Yes, sir?”. Tip
di base. Per farlo aprite il terminale nella vostra RP Se scegliete y alla richiesta di modificare tale risposta,
Se durante la prova
(oppure collegatevi a essa via SSH) e digitate dovete poi digitare la frase alternativa, per esempio
della conversione
sudo voicecommand -s “Yes, Mr. Stark?”. Premete Invio quando avete finito. da testo a voce
Vi verrà posta una serie di domande a cui rispondere Il sistema ripeterà la risposta così che possiate controllare sentite la parola ‘fill’,
y o n (sì o no). La prima vi chiede se volete impostare se siete soddisfatti. dovete impostare a 0
il flag filler. Premete
il flag continuous. Con parole semplici, vuol dire Comando non riconosciuto La procedura è identica
y per confermare
che Voicecommand vi sta chiedendo se deve rimanere alla precedente quando si tratta di definire il messaggio la modifica.
continuamente in ascolto di un vostro comando vocale. predefinito che viene letto quando non viene riconosciuto
Per il momento rispondete di sì. Poi dovete decidere il comando che chiamate. Di default Voicecommand dice
se impostare il flag verify. Selezionando y ordinerete “Received improper command” ma potete impostare
a Voicecommand di eseguire il comando che esclamate qualcosa di meno “robotico” digitando y e poi la frase
solo se prima dite una particolare parola (che di default scelta, per esempio “Mi spiace, non posso farlo”.
è ‘pi’). Questo può essere utile se avete impostato
l’ascolto continuo e non volete che la RP esegua qualcosa
ogni volta che parlate. “Per riuscire a pilotare la RP con la
La domanda successiva riguarda il flag ignore.
Se lo selezionate, quando Voicecommand percepisce voce dovete usare un buon microfono
un comando non indicato esplicitamente nel suo file
di configurazione, cerca il programma tra quelli installati
e configurare con cura il software”
e lo manda in esecuzione. Per esempio, se dite la parola
‘leafpad’, che è un semplice editor di testo, Opzioni di riconoscimento automatico La domanda
Voicecommand lo cerca e lo avvia anche se non lo avete successiva dello script riguarda la configurazione di questa
esplicitamente definito. Non vi consigliamo di abilitare funzionalità. Viene verificato automaticamente se avete
questa opzione perché Voicecommand viene eseguito installato un microfono compatibile. Poi Voicecommand
con i privilegi di amministratore e quindi potrebbe vi chiede se volete che la RP verifichi per voi i livelli audio.
capitare che, inavvertitamente, diciate qualcosa Assicuratevi che non ci siano rumori di fondo, premete
che potrebbe danneggiare il sistema. y e poi Invio. Subito dopo il sistema vi chiederà di chiamare
Se volete aggiungere un’applicazione a quelle
che funzionano con Voicecommand potete inserire
la voce relativa nel file di configurazione (leggete il box
Personalizzare Voicecommand). L’elenco di flag e opzioni
da attivare o meno non è ancora finita... ecco quelli rimanenti.
quiet Questa opzione, quando attivata, ordina
a Voicecommand di non darvi una risposta verbale quando
parlate. Rispondete y o n a vostra discrezione.
Durata di default del riconoscimento vocale Dovreste
modificare questo valore solo se riscontrate delle difficoltà
nella comprensione dei vostri comandi. Se digitate
y dovrete inserire un numero che corrisponde al periodo
in secondi durante il quale la RP ascolta il vostro comando.
Il valore di default è pari a 3.
Text-to-speech Avete la possibilità di attivare o disattivare
la funzione di lettura del testo. Se la attivate, assicuratevi Potete far pronunciare alla RP una risposta quando impartite un comando,
di aver alzato il volume delle casse: il programma cerca ma se non siete dei fan di Star Trek forse preferirete disattivare questa funzione

RASPBERRY PI 39
Raspberry Pi Progetti

i tasti cursore per selezionare il vostro microfono USB


e premete Invio. Questo controllo modifica il volume
del microfono: usate freccia su per portarlo al massimo
(100). Se il device USB non viene proprio rilevato, il motivo
potrebbe essere che richiede più energia di quella
che gli viene fornita dalle porte del computer. Potreste quindi
collegarlo a un hub USB alimentato per provare a risolvere
il problema. Il sito Web Pi Hut ne vende uno a sette porte per
poco più di 13 € (https://thepihut.com/products/7-port-
usb-hub-for-the-raspberry-pi).
Un altro intoppo, a volte, si ha con il programma Download.
Se riscontrate un errore di connessione, potrebbe essere
dovuto a restrizioni al sito PirateBay. Inoltre, per poter
scaricare i file, sulla RP deve essere installato un client
Torrent, per esempio Transmission. Potete farlo digitando
Grazie ad AlsaMixer potete regolare con precisione il volume del vostro il semplice comando sudo apt-get install transmission.
microfono se la Raspberry Pi non riesce a percepire bene i comandi Se non lo avete mai usato (è comunque semplicissimo)
trovate tutte le informazioni del caso sul suo sito Web all’URL
un comando così da verificare di aver scelto il dispositivo https://forum.transmissionbt.com. Inutile aggiungere
di input audio corretto. Infine la RP vi domanderà se volete che potete scaricare solo file che non infrangano il copyright
modificare la keyword di default (‘pi’) per l’attivazione di qualcuno. Se scegliete di usare Google Voice Commands
dei comandi vocali. Digitate y e poi scrivete la parola che o Google TTS (Text to Speech) tenete bene a mente
preferite. Dopo aver premuto Invio la macchina vi chiederà che tutto ciò che pronunciate e ogni file che inviate finiscono
di leggere la parola scelta così da capire come sui server di Google per la traduzione. L’azienda di Mountain
la pronunciate. Se tutto sembra funzionare premete y View afferma di non memorizzare questi contenuti,
per terminare la configurazione. Seguite ora il passo 6 del ma anche ritenendolo vero, qualunque informazione inviata

Tip tutorial qui a destra per avviare Voicecommand e provate


l’esecuzione dei comandi più semplici (leggete il box
attraverso Internet può essere intercettata da una terza
parte. In effetti, per mitigare questo tipo di pericolo Google
Comandi base). Terminate le prime prove, usate cifra le comunicazioni dirette verso i suoi server. Se vi trovate
Scegliete una
il comando sudo killall voicecommand per chiudere a vostro agio con il setup raggiunto, potete far eseguire
parola d’attivazione
che non possa il programma e perfezionarne il setup. automaticamente l’assistente vocale al boot della Raspberry
essere confusa con Pi. Dal terminale (o via SSH) eseguite
un’altra. La keyword Voci ingannevoli sudo nano /etc/rc.local
di default, ‘pi’ si I software di riconoscimento vocale sono in continua Questo comando apre il file che determina quali programmi
può confondere
con ‘di’, per esempio,
evoluzione e la RP potrebbe non comprendere tutto ciò che devono essere eseguiti durante l’avvio del computer.
mentre ‘elefante’ dite. Per aiutarla nel compito assicuratevi di trovarvi vicini Scendete in fondo e subito prima della riga exit 0 inserite
sarebbe meno al microfono e di parlare lentamente e in modo chiaro. sudo voicecommand -c
soggetto Se incontrate ancora delle difficoltà nel farvi capire, Premete Ctrl+x, poi y e infine Invio per salvare e uscire
a fraintendimenti...
aprite un terminale sulla RP o collegatevi a essa via SSH dall’editor. Riavviate e per accertarvi che Voicecommand
anche se un po’
più buffo. ed eseguite alsamixer per aprire le impostazioni audio. sia attivo usate il comando ps -a, che mostra l’elenco
Premete F4 per scegliere il device di input e poi F6. Usate dei processi in esecuzione.

Personalizzare Voicecommand
Dopo aver installato e configurato Per esempio, per aprire il desktop esclamando
Voicecommand potete modificare a mano ‘desktop’ dovete aggiungere la linea seguente
il suo file di configurazione per aggiungere alla fine del file: desktop==home/pi/Desktop.
nuovi comandi o cambiare quelli esistenti. Potete anche aprire un programma come
Eseguite sudo nano /root/.commands.conf fareste dal terminale, come notepad==leafpad.
per osservare questo file. Da quel che si vede, Visto che state parlando alla vostra RP, magari
la maggior parte delle righe inizia con vi piacerebbe che vi rispondesse anche.
il carattere # per indicare che si tratta di un Per ottenere ciò aprite il terminale e installate
commento. Cancellate il # per attivare le linee il software di sintesi vocale Festival:
che vi interessano. Se, per esempio, volete sudo apt-get install festival
cambiare la parola che attiva il riconoscimento Per verificare che tutto funzioni digitate echo
vocale mettendo ‘paperino’ al posto di ‘pi’, “Ciao Mondo” | festival --tts. Potete anche far
dovete agire sulla riga #!keyword==pi leggere alla RP alcune informazioni di sistema.
cambiandola in -!keyword=paperino. Se volete Ecco un esempio: per farvi leggere l’ora
usare Firefox al posto di Midori, invece, dovete e la data potete aggiungere la linea seguente Dovete rimuovere il carattere # all’inizio
editare la riga ~Internet==midori & al file di configurazione: di una linea per renderla attiva. Cambiando
trasformandola in ~Internet==firefox-esr &. time==echo "Data e ora" | festival --tts && il valore che segue == modificate
Il software può eseguire qualunque comando. date | festival --tts il comportamento di Voicecommand

40 RASPBERRY PI
Controllo vocale

Come impostare i comandi vocali

1 Recuperate i file per l’installazione 2 Eseguite l’installer


Aprite il Terminale nella vostra RP (o collegatevi via SSH) e scaricate Usate il comando sudo ./InstallAUISuite.sh per avviare l’installer
i file d’installazione eseguendo il comando git clone git: //github.com/ testuale. Premete y per installare le dipendenze e poi procedete
StevenHickson/PiAUISuite.git. Al termine del download scrivete seguendo il wizard di configurazione. Nelle pagine precedenti
cd PiAUISuite/Install per entrare nella directory d’installazione. di questo articolo abbiamo spiegato i vari passaggi.

3 Installate la libreria C++ Boost 4 Copiate i file di configurazione


Se incappate in un errore durante la configurazione di Voicecommand, Visto che eseguirete il programma Voicecommand con i privilegi
digitate sudo apt-get install libboost-regex1.49.0 per installare di amministratore, dovete usare il comando sudo mv /home/pi/.
la libreria che manca al vostro sistema. Poi scrivete nuovamente sudo commands.conf /root/.commands.conf per copiare nel posto giusto
./InstallAUISuite.sh per rieseguire la procedura di setup. il file di configurazione necessario al tool.

5 Modificate il setup 6 Avviate Voicecommand


Con il comando sudo nano /root/.commands.conf potete ispezionare Con sudo voicecommand -c avviate il programma. Esso si metterà
il file di configurazione di Voicecommand e, volendo, anche in ascolto della parola chiave prestabilita che, una volta pronunciata,
personalizzarne il funzionamento o aggiungere nuovi comandi. vi consente di impartire un comando vocale, come ‘youtube gattini’. LXP

RASPBERRY PI 41
Raspberry Pi Progetti

Minetest: fabbrica
e personalizza
Alla scoperta di una versione libera di Minecraft che offre molte ore
di divertimento ma anche una piattaforma di sviluppo con il linguaggio Lua

M
inecraft Pi Edition, grazie alle sue API Python,
è uno strumento eccezionale per invogliare i più
giovani a imparare l’arte della programmazione.
Compatibile Questa versione, però, non regge il confronto con quella
con tutte le
commerciale e, inoltre, non viene aggiornata da parecchio
RP tempo. È stata perfino creata una petizione per spingere
Mojang, gli sviluppatori di Minecraft, ad aggiornarla (http://
bit.ly/MojangDevMinecraftPi). Nell’attesa chiunque abbia
voglia di aggiungere del codice alle avventure basate su voxel
(leggete il box qui a lato per sapere cosa sono) può ricorrere
Tip a Minetest, un clone Open Source di Minecraft che può essere
personalizzato (moddato) usando il linguaggio Lua. Minetest
Uno dei metodi è in circolazione dal 2012 e al momento di andare in stampa
di rappresentazione
la versione più recente è del dicembre dello scorso anno Questo balcone con la sua facciata in vetro colorato
di uno spazio
3D prevede di (0.4.15), anche se per i sistemi Linux è disponibile solo sembra bello. Preparatevi per una lunga scalata...
suddividere questo la release 0.4.10. In passato le sue prestazioni sulla RP erano
spazio in una un po’ deficitarie a causa dell’engine grafico usato, Irrlitch, fuori il Macguyver che è in voi e costruirvi una torcia. Visto
griglia composta
che usa un renderer OpenGL ES sperimentale che non andava che siete in modalità creativa non avrete problemi nel
da elementi
(usualmente bene con il driver VideoCore nativo della RP. Si era quindi recuperare i materiali base. Sono tutti disponibili nell’inventario
parallelepipedi costretti a passare al rendering software con il conseguente che si apre premendo i. Per creare la torcia vi servono
o cubetti) detti rallentamento al limite della giocabilità. Però, grazie al lavoro un bastone e un pezzo di carbone. Questi a loro volta
volume elements o di Eric Anholt (uno degli sviluppatori di Broadcom che provengono da assi di legno (di qualsiasi tipo) e da un blocco
voxel e di assegnare
lavorano ai driver video della RP - il suo blog è http://anholt. di carbone. Troverete tavole di legno (Wooden Planks) e blocchi
a ciascun elemento
di volume un grado livejournal.com) ora c’è un nuovo driver OpenGL Open di carbone (Coal Blocks) tra le pagine della sezione Nodi:
di densità del chiamato VC4 che offre il supporto alle API versione 2.1. trascinateli negli slot dell’inventario sottostanti. Poi spostatevi
suo riempimento Anche questo driver è sperimentale, ma non abbiamo avuto nella parte destinata al crafting (la zona quadrata con nove
secondo una scala/
alcun problema nei nostri test. piccoli quadrati) e piazzate il carbone nello spazio centrale.
palette prestabilita.
Sulla destra appariranno nove cumuli di carbone: trascinateli
Si inizia a giocare anch’essi in uno slot dell’inventario.
Installare Minetest sulla RP o su un PC è semplicissimo
(leggete il box nella pagina accanto). Al primo avvio partite Fabbricare cose
dalle cose facili: dal tab Giocatore singolo premete il pulsante Allo stesso modo si costruiscono i bastoni di legno. La torcia

Tip Nuovo e assegnate un nome al mondo; lasciate le altre


impostazioni così come sono e premete Creare. Mettete
si compone piazzando un pezzo di carbone nel mezzo e sotto
di esso il legno. Gli slot dell’inventario con più entry, come
il segno di spunta alla voce Modalità creativa e disattivate i nove pezzi di carbone di prima, possono essere divisi
Con Minetest si
possono realizzare invece Abilitare il danno. In questo modo avrete accesso trascinando le parti con il tasto destro del mouse. Metà
cose incredibili. a tutti i blocchi esistenti e non dovrete preoccuparvi degli oggetti rimarranno nello slot originale, l’altra metà verrà
Se non ci credete, di danneggiare il vostro personaggio. Premendo Giocare spostata nello spazio di destinazione. Un blocco di carbone
provate a dare vi ritroverete immersi in un mondo davvero bizzarro. Potete e un bastone produrranno quattro torce. Se non volete
un’occhiata a
esplorarlo usando i tasti WASD, saltare premendo la barra sprecare risorse (considerate comunque che in modalità
questo filmato:
https://www. spaziatrice e distruggere o raccogliere oggetti con il tasto creativa sono infinite) se mettete tutti e nove i pezzi di carbone
youtube.com/ sinistro del mouse. Dopo un po’ che girovagate dovrebbe nel centro della piazza e tutti i bastoni di legno sotto di essi
watch?v=y iniziare il crepuscolo. Quando va via la luce non avete potrete fabbricare quattro torce e vi rimarranno otto pezzi
Fn6VX_8VCM
lo smartphone da usare come lampada, per cui dovrete tirar di carbone e tre bastoni. Ma manca ancora una cosa... il fuoco!

42 RASPBERRY PI
Installazione facile
Trovate la versione più recente disponibile e scendete fino a trovare l’opzione A6 GL Driver. avere un modello di RP uscito prima di ottobre
di Minetest direttamente nei repository di Entrateci con Invio e attivate i driver GL 2012 che usa un firmware più vecchio (in questo
Raspbian eseguendo questi due comandi: sperimentali. Dovrete riavviare la RP per rendere caso cercate le istruzioni per la modifica del file
sudo apt update effettiva la modifica. Fatelo senza timori: nelle start.elf). 64 MB di memoria video dovrebbero
sudo apt install minetest nostre prove questi driver si sono dimostrati essere sufficienti, ma potrebbe causare problemi
Per abilitare i driver video sperimentali, invece, sufficientemente stabili e difficilmente se avete solo 256 MB di RAM totali.
serve un piccolo sforzo in più. Se ometterete vi causeranno problemi durante il normale Minetest si trova anche nei repository di molte
questo passaggio, il gioco si avvierà lo stesso, uso della RP. Se dovesse capitare qualche distro ma è sempre possibile compilarlo
ma apparirà fastidiosamente lento, soprattutto inconveniente, comunque, è facile tornare dai sorgenti più recenti che trovate all’URL
sulle RP più vecchie. Avviate il tool indietro. Gli utenti delle vecchie RP con 256 o 512 https://github.com/minetest. Nei sistemi
di configurazione con MB di memoria dovrebbero anche aumentare desktop non dovreste preoccuparvi di OpenGL
$ sudo raspi-config la quantità di RAM assegnata alla scheda video. visto che questa libreria funziona sia con i driver
Entrate nel menu delle opzioni avanzate Lo fate sempre con raspi-config a meno di non Open Source che con quelli proprietari.

Durante il gioco avete accesso solo alla prima riga ricerca. Come prima, i personaggi non si feriscono (neanche
dell’inventario quindi piazzate lì una delle torce prima di tornare se gli saltate in testa), ma volendo potrete ferire i loro
al gioco. Lo slot attivo si seleziona premendo i tasti dall’1 all’8 sentimenti scrivendogli. Esatto, potete inviare dei messaggi
oppure con la rotella del mouse, quindi scegliete quello con la ai giocatori: premete T, scrivete Ciao mondo, premete Invio
torcia. Non potete tenerla in mano mentre vagate (sarebbe e tutte le persone presenti lo vedranno. Avete a disposizione
troppo facile) ma è possibile appoggiarla sul pavimento diversi comandi in stile IRC; digitando /help li potete scoprire.
(o su un muro, un albero o perfino un soffitto) usando il tasto Volendo è anche possibile avviare un server dedicato
destro del mouse. Dopodiché potrete fissare il fuoco per tutta (un server a cui non c’è collegato alcun utente) direttamente
la notte contemplando la vostra immortalità (avete disattivato dalla linea di comando. In questo modo avete la possibilità
i danni, ricordate?). Alla comparsa della luce diurna potrete di eseguire il server su una macchina priva di monitor oppure
ricominciare a esplorare il mondo e a fabbricare (in gergo, su un VPS remoto. Vi basta digitare
craftare) qualche altro oggetto. Le ricette per la fabbricazione $ minetest --server
possono essere “con forma” o “senza forma” (o “informi”). In Raspbian (così come in Debian, Ubuntu e tutte le loro
Le prime richiedono una precisa posizione nella griglia derivate) esiste anche un pacchetto minetest-server
di fabbricazione, le seconde no. Per maggiori dettagli leggete che non ha tutte le dipendenze grafiche del gioco completo:
http://wiki.minetest.net/Crafting o http://minecraft-it. $ sudo apt-get install minetest-server
gamepedia.com/Fabbricazione. Oltre al crafting, c’è anche Per avviarlo è sufficiente digitare $ minetestserver . Questo
la cottura (smelting) che prevede che gli ingredienti vengano pacchetto contiene anche le unità di Systemd, utili per avviare
combinati in una fornace. Agli indirizzi di prima trovate tutte automaticamente il gioco alla partenza del sistema.
le informazioni del caso. Le impostazioni del server si cambiano specificando un file con
l’opzione --config. All’URL http://wiki.minetest.com/wiki/
Create un server per il multiplayer Minetest.conf trovate tutte le informazioni del caso. Se volete
Tirar su un server Minetest nella vostra rete locale è un gioco che il server sia accessibile da Internet dovete fare il forward
da ragazzi e vi consente di abbandonare il gioco in singolo della porta TCP 30000 (o qualunque altra porta sia indicata
e di apprezzare invece le gioie del multiplayer con amici nel file di configurazione o dal parametro --port) verso l’IP
e parenti. Se avete una RP con CPU multi core potete eseguire del server agendo nel setup del router. I file dei mondi che
sia il server sia il client, cosa non raccomandabile invece
se avete una delle prime RP a singolo core. I giocatori potranno
collegarsi al server da altre Linux box, da PC con Windows
o da altre Raspberry Pi presenti nella stessa LAN. Dovrete
installare Minetest su tutti i computer che intendete usare.
Sul server, dovete prima scoprire il suo indirizzo IP – il modo
più facile è digitare ip a in un terminale – e poi avviare Minetest
andando nella scheda Server. Potete creare un mondo nuovo
oppure usarne uno già pronto; in tutti i casi dovete impostare
il vostro nome nella parte sinistra della finestra e anche
un’eventuale password. Per connettervi a questo server, avviate
Minetest nei vari client e andate nel tab Client. Il gioco
scaricherà un elenco di server dalla Rete (anche se a volte non
ci riesce, in base alla nostra esperienza) ma vi interessa poco
perché vi basta digitare nel box sulla destra l’indirizzo IP
scoperto in precedenza, lasciando indicata la porta di default
(30000 se non avete modificato le impostazioni), scegliere
un nome e premere Connettere. Quando tutti i player Illuna è uno dei server più impressionanti che abbiamo trovato. Scoprite i suoi
si saranno collegati, potrete iniziare a girovagare alla loro fantastici mondi collegandovi all’URL https://illuna-minetest.tk

RASPBERRY PI 43
Raspberry Pi Progetti

“In Rete trovate sfide impegnative l’engine di Minetest. I giochi sono


semplicemente delle raccolte di mod e i
in stile Cattura la bandiera, mondi sono gli ambienti generati in modo
procedurale all’interno dei quali il giocatore
survival e gara di costruzione” fabbrica, fonde, scambia e fa qualunque
altra azione permessa dal mod.
creerete possono diventare molto grandi in poco tempo, La prima delle due opzioni, Minetest, è una sandbox con
per cui vi suggeriamo di non memorizzarli nella SD della RP. un gran numero di texture e suoni ma senza uno scopo preciso
Di solito conviene lasciarli in RAM. In generale, tutte o sfide a cui sopravvivere. Insomma, è qualcosa di meno
le impostazioni di gioco, i mod e i mondi sono controllati di un gioco. Minimal development test è ancora meno, visto
dal server. Per vedere il livello di personalizzazione che potete che offre un solo suono e delle texture piuttosto blande
applicare ai mondi vi conviene visitarne uno presente nei server e ha l’unico scopo di essere usato come ambiente di test.
in Rete. Noi abbiamo apprezzato Illuna (https://illuna- L’engine di Minetest “da solo” non è molto interessante
minetest.tk) con la sua Torre della Follia in stile Lovecraft, dal punto di vista del giocatore. Esso gestisce le varie operazioni
la statua del gatto e le grandiose mura cittadine. Il nome che di base (movimento, salto, la messaggistica
userete come login verrà usato automaticamente per creare e qualche altro dettaglio) ma tutte le azioni di crafting, farming,
un account sul server scelto, quindi vi conviene annotare le texture, i suoni, l’acqua e qualunque altra cosa esotica
da qualche parte la password scelta, comunque potrete potreste incontrare nel vostro errare in uno dei server esistenti
cambiarla dal menu principale durante il gioco. Molti server sono decise dai mod in uso. Questo dovrebbe darvi l’idea del
non permettono ai nuovi utenti di danneggiare l’ambiente livello di personalizzazione di questo gioco, l’unico limite è
o costruire cose, almeno finché non si saranno dimostrati attivi veramente la vostra fantasia (o forse le vostre abilità di
e civili per un po’ di tempo. Ogni server ha una sua policy programmatori in Lua). Per esempio, in Internet troverete dei
riguardo il livello di interazione, ma ce ne sono molti che server con obiettivi simili a quelli di altri giochi, come Cattura la
vi permettono la distruzione più assoluta. I mod con la TNT bandiera (capture the flag), survival (bisogna evitare di morire
in genere sono piuttosto restrittivi perché possono risultare di fame vo sbranati dai mostri) oppure sfide di costruzione. Nei
Questi funghi pesanti dal punto di vista computazionale. repo di Raspbian ci sono alcuni mod, per esempio potete avere
riproducono a disposizione nuovi blocchi con
l’Amanita Mod, giochi e mondi $ sudo apt install minetest-mod-moreblocks
muscaria, che Dovete avere ben chiaro dove finisce l’intervento dell’engine Inoltre è molto facile recuperare dei mod da altre sorgenti.
sono velenosi di Minetest e dove iniziano i mod. Nel menu principale, nel tab Un ottimo punto di partenza è http://wiki.minetest.net/
e non devono
Giocatore singolo, dovreste aver notato un paio di opzioni: List_of_Mods dove trovate i mod divisi per categoria.
essere mangiati...
Minetest e Minimal development test. Questi sono due Per installare Simple Mobs che trovate elencato in questa
nella vita reale
sottogiochi (in gergo chiamati “giochi”) che agiscono sopra pagina, per esempio, che aggiunge topi, pecore e cinque mostri
e anche nel gioco
spaventosi (mobs sta per mobile entities) seguite il link
al suo repository (https://github.com/PilzAdam/mobs)
e scaricate il file zip Master (il ramo principale). Create
una directory mods e decomprimete lo zip al suo interno:
$ mkdir -p ~/.minetest/mods
$ cd ~/.minetest/mods
$ unzip ~/Downloads/master.zip
In alternativa, se avete installato Git, vi basta clonare
il repository all’interno della directory mods:
git clone https://github.com/PilzAdam/mobs.git
A questo punto provate a creare un nuovo mondo e premete
Configurare. Sulla destra apparirà un elenco di mod – tutti
quelli richiesti dal subgame di default e dal mobs appena
scaricato. Selezionate mobs e mettere il segno di spunta
per abilitarlo. Premete Salvare e Giocare. Dovreste ritrovarvi
delle pecore che girovagano sulle colline mentre durante

Le API di Minetest
Minetest ha tre classi di oggetti fondamentali: deve contenere almeno questo file Nyan_Cat) arcobaleno usando una mela
Node (nodi) – i blocchi del mondo d’inizializzazione all’interno di una directory e un blocco di sporcizia.
Tools (strumenti) – armi e altri attrezzi presente in ~/.minetest/mods per i mod minetest.register_craft({
Craftitems – oggetti artigianali vari (minerali, del singolo utente o /usr/share/minetest/ output = '"default:nyancat_rainbow" 1',
carta, bastoni, ecc.) mods per l’uso globale. Oltre agli oggetti, potete recipe = {
Quando vi ritrovate a scrivere i vostri mod definire le ricette per il crafting. Per esempio, {'default:dirt', 'default:apple', ''},
dovete registrare ogni nuovo oggetto definito se aggiungete la clausola seguente per i mod {'', '', ''},
nel file chiamato init.lua, usando, per esempio, mobs a init.lua sarete in grado di fabbricare {'', '', ''},
il metodo minetest.register_node(). Ogni mod un Nyan Cat (https://it.wikipedia.org/wiki/ }

44 RASPBERRY PI
Minetest

In Minetest,
con un po’
di pazienza,
potete costruire
torri gigantesche
come questa.
A qualcuno
piace aggiungere
anche una gru
altrettanto
grande al suo
fianco, chissà
perché...

la notte potreste venire attaccato dall’ostile Oerkki. Minetest vedere i primi build può scaricare http://
usa il linguaggio Lua per lo sviluppo dei mod. Alcuni dei nostri packages.8dromeda.net/minetest/minetest-c55-
lettori probabilmente conoscono bene le API Python di win32-101010000530.zip. Si tratta di un eseguibile
Minecraft e potrebbero non trovarsi bene con questo linguaggio. Windows, mi piace creare pacchetti Windows compatibili
Però lo sviluppatore originale di Minetest, Perrtu Ahola (noto con Wine perché mi permette di raggiungere l’audience più
come celeron55/c55) ci ha detto la sua opinione in proposito: ampia con una singola compilazione”. “Avevo
“Lua è il motore di scripting più facile e rapido del mondo da una discreta familiarità con il C++ avendo realizzato
integrare nei programmi e ha una licenza libera. Una volta che per hobby alcuni progetti con interfaccia grafica usando
avrete finito di odiarne la sintassi e dopo aver aggiunto le cose wxWidgets e cose simili. Ripensandoci, non ero molto abile
che vi servono, diventa come un JavaScript più minimalista”. con il C++... Non avevo neanche esperienza con la grafica
Il box Le API di Minetest vi dà un’idea della questione. 3D, ma solo una conoscenza base del 2D, quindi ero alla
ricerca di un engine che potesse essere personalizzato
Quattro chiacchiere con Mr Minetest velocemente e totalmente. Alla fine le opzioni possibili
Abbiamo avuto la fortuna di incontrare Perrtu Ahola e ci rimasero Ogre e Irrlicht. La mia prima preoccupazione
siamo fatti raccontare com’è nato il progetto: “Scoprii riguardava la licenza, quindi optai per il secondo, visto che
Minecraft quando era in alfa (ottobre 2010). Al tempo non Ogre era distribuito sotto LGPL all’epoca. Non ero sicuro
andava neanche la modalità survival in multiplayer così mi di voler fare un progetto Libero e la licenza di Irrlicht
sono ritrovato a chiedere ai miei amici su IRC quanto consentiva di non citare l’uso di questo motore nei propri
potesse essere complesso programmare una cosa del software. Ho imparato quello che mi serviva mettendo le
genere. Dopo qualche giorno avevo preparato la prima mani agli esempi sulla geometria di irrlicht forniti. Avevo
versione di Minetest, non ce l’ho più ma se qualcuno vuole anche bisogno di ricorrere al multithreading e trovai che
JThread soddisfaceva le mie necessità. Non avevo mai
provato la programmazione basata su thread in
precedenza. Irrlicht è un po’ datato e a dir la verità lo era
anche nel 2010, ma funziona. è questa la cosa bella: Tip
ci sono tante cose in questo mondo che non funzionano
Uno dei mod
quando provi a usarle. Quindi usai Vim, C++, Irrlicht
più avanzati
e JThread per circa due mesi. Poi aggiunsi zlib per la in circolazione
compressione dei dati dei mondi e CMake per semplificare è Mesecons.
il processo di build. Questi sono stati i componenti chiave Esso consente
di Minetest per circa due anni, qualche tool di base e delle ai giocatori
di costruire
librerie affidabili sono le uniche cose che ti servono per
interruttori elettrici,
creare qualcosa. E una determinazione assoluta, sensori, pistoni
aggiungerei. Quando nacque una comunità attorno al e anche porte
programma e iniziarono ad arrivare delle patch, decisi digitali. Lo trovate
Non tutti gli oggetti che trovate sono “di scena”.
all’URL http://
Per esempio, queste console potenziate dal linguaggio di rendere Minetest un progetto FOSS e ora, difatti,
mesecons.net.
Lua, anche se bruttine, vi permettono di giocare a Tetris è rilasciato sotto licenza LGPL”. LXP

RASPBERRY PI 45
Raspberry Pi Web

I migliori
servizi VPN
Siete alla ricerca di una VPN veloce per la vostra PI, ricca di funzioni e
affidabile? Allora questo confronto è quello che fa per voi!

Modalità del test


Tutte le VPN che abbiamo preso in
considerazione sono state provate
con Ubuntu 16.10. Per verificarne le
prestazioni, sono stati usati diversi
benchmark Web, tra cui quelli di
speedtest.net e testmy.net.
Naturalmente non ci siamo fermati
al primo risultato, ripetendo quindi
i test più di una volta su diversi
server collocati in quattro grandi
aree: Europa, Stati Uniti, Australia e
Asia. Per ogni prova, la VPN è stata
poi disattivata per verificare la
differenza in modalità di
navigazione normale. Sono stati poi
considerati i profili di sicurezza. Per
esempio, alcune VPN, seppure
assegnino un nuovo indirizzo IP,
lasciano trasparire qualche
informazione circa il vostro
indirizzo reale. Per l’occasione,
abbiamo usato ipleak.net e
dnsleaktest.com. In sostanza, non
ci è sfuggito niente!

N
on importa che si tratti di se siete persone esigenti. La maggior che forniscono il massimo controllo
hacker o malware, Google parte delle Virtual Private Network si nelle opzioni di navigazione. La
o Microsoft, CIA o NSA. concentra sulla semplicità, mettendo maggior parte delle soluzioni scelte
Quando si parla di a disposizione solo un ridotto numero offrono un ottimo supporto per Linux:
monitoraggio online, dovete guardarvi di funzioni e impostazioni, con in più client personalizzati, tutorial ben fatti
bene le spalle. Le VPN, per fortuna, un supporto base per i dispositivi e assistenza in-house. Oltre all’aspetto
possono aiutarvi crittografando il comuni. Abbiamo però tecnico, però, non abbiamo tralasciato
traffico Web e mantenendolo al sicuro deliberatamente evitato questi servizi la politica riguardante la privacy,
dagli snoopers. In più, hanno la facoltà rivolti soprattutto ai principianti, mettendo in luce solo chi dà precise
La nostra di proteggervi dai punti di accesso concentrandoci solo sulle piattaforme garanzie di riservatezza e affidabilità.
selezione Wi-Fi non sicuri. Coprono la vostra
Buffered VPN
IVPN
identità assegnando un nuovo
indirizzo IP e probabilmente sono in
“Non importa se parliamo di Google
Mullvad
Perfect Privacy
grado di offrire un accesso diretto ai
siti geo-bloccati. Trovare la giusta VPN
o della CIA, quando siete in Rete
SlickVPN
può però essere difficile, soprattutto dovete proteggere la privacy”
46 RASPBERRY PI
Le funzioni
Cosa offrono per le cifre che pagate?

L
a struttura di una VPN, almeno in considerazione, per quanto riguarda
in teoria, è piuttosto semplice i programmi, hanno un punteggio
da comprendere. In linea di superiore alla media. Buffered e
principio, ci si connette a un server, si Mullvad garantiscono applicazioni per
ottiene un nuovo indirizzo IP e una Linux, Windows e Mac. Perfect
posizione geografica, quindi si Privacy, allo stesso modo, copre il
continua a navigare come se niente Pinguino e il sistema Microsoft, così
fosse. Al di là di questo, non si deve come SlickVPN e IVPN. Potete
però commettere l’errore di pensare configurare il servizio manualmente
che siano tutte uguali. Il numero di tramite OpenVPN o utilizzare Avete davvero bisogno di un server in Pakistan? Cercate
potenziali server cui è possibile qualsiasi altro client che vi soddisfi, una VPN che lavori nei paesi che vi servono!
connettersi è un aspetto molto anche su dispositivi Android e iOS.
importante. SlickVPN offre sedi in Ogni VPN, inoltre, fornisce una serie di tenere a mente: il supporto P2P. IVPN
ben 142 città sparse nel mondo.
Buffered VPN, invece, sfrutta 37
tutorial che possono aiutarvi. Bisogna
poi tenere in considerazione
e Perfect Privacy gestiscono questo
protocollo solo per una serie di server
Verdetto
paesi, mentre IVPN solo 12. l’eventualità in cui è necessario selezionati, mentre SlickVPN, Mullvad Buffered
Naturalmente, il primo servizio vince a connettersi alla VPN da diversi e Buffered non hanno preferenze. Se HHHHH
IVPN
mani basse, ma oltre a questo dovete dispositivi contemporaneamente. però siete interessati a utilizzare una
HHHHH
considerare la posizione geografica di Mullvad e IVPN, per esempio, Virtual Private Network con siti Mullvad
ciascun server. In più, è fondamentale supportano fino a tre collegamenti particolari, dovrete valutare HHHHH
valutare il numero di client di cui ogni simultanei. SlickVPN e Buffered, attentamente l’opzione scelta. Perfect Privacy
VPN dispone. Questi, infatti, si tuttavia, vanno oltre e garantiscono Qualsiasi VPN potrebbe funzionare HHHHH
SlickVPN
differenziano per svariati fattori, tra fino a cinque connessioni. Il migliore è senza problemi, ma se la piattaforma HHHHH
cui la semplicità d’installazione e le però Perfect Privacy che non ha alcun cui siete interessati viene bloccata,
Buffered VPN
funzioni aggiuntive. Avere client limite. Tenete presente che la maggior potreste rimanere a piedi. Prima di offre un servizio
personalizzati indica che il fornitore parte delle VPN autorizza l’uso di un fare una scelta, è quindi che copre ben
mantiene il proprio servizio con una singolo utente e non certo per 24 ore fondamentale valutare con 142 città sparse
discreta cura. Tutte le soluzioni prese al giorno. C’è un altro aspetto da attenzione le proprie necessità. nel mondo.

Politica sulla privacy


Mantengono le loro promesse sulla riservatezza?

U
sare una VPN significa impedire un’enorme mole di informazioni. Vale “non segue alcuna attività di navigazione
a qualcuno di intercettare il quindi la pena approfondire la privacy dell’utente registrato”. Certo, suona bene,
traffico Web. Tuttavia vuol dire policy di ciascun fornitore di servizi e ma tutti dicono più o meno la stessa
anche fidarsi del provider che fornisce il leggerla con attenzione. SlickVPN, per cosa. Perfect Privacy, da questo punto di
servizio e che di fatto ha accesso a esempio, afferma in modo chiaro che vista, si esprime molto meglio ed
esplicita che l’azienda non registra né i
login né qualsiasi altro dettaglio sul
Verdetto
traffico VPN. I soli dati memorizzati sono
Buffered
il nome utente, la password, l’indirizzo HHHHH
email e la data di scadenza. Mullvad, IVPN
oltre a garantire l’assenza di qualsiasi HHHHH
registro, permette l’iscrizione senza un Mullvad
HHHHH
indirizzo email, consentendo il Perfect Privacy
pagamento perfino in Bitcoin. IVPN, oltre HHHHH
all’email, non fa richiesta di altri dati. SlickVPN
La sua privacy policy, inoltre, è semplice. HHHHH
Anche Buffered mantiene un approccio Mullvad, per la
intuitivo, ma per alcuni versi più vago. registrazione,
non chiede alcun
Non registra dati, ma può ottenere dato personale.
Per la registrazione a Mullvad non è necessario alcun dato personale informazioni sull’uso della banda.

RASPBERRY PI 47
Raspberry Pi Web

I primi passi
Sono abbastanza semplici da configurare?

L
e VPN possono non essere semplici da servizi Linux-friendly, provando ogni provider e condizioni realistiche. Se siete esperti del
configurare e spesso i fornitori non valutando l’approccio a un nuovo utente: settore e cercate solo un servizio come
offrono validi aiuti per ottenere iscrizione, installazione e via dicendo. Tutti i OpenVPN, probabilmente questa sezione non
un’impostazione rapida e indolore. In questo client sono stati provati controllando i tutorial sarà di vostro interesse, ma vale comunque la
caso, abbiamo deliberatamente selezionato i messi a disposizione, utilizzandoli poi in pena dargli un’occhiata.

Mullvad  HHHHH
Mullvad è un servizio perfetto per i principianti. La registrazione è molto
semplice e richiede solo una procedura di pochi passaggi, che termina
con l’inserimento di un CAPTCHA per ottenere un numero di account.
Allo stesso modo, l’installazione del client su Linux segue la stessa
filosofia d’immediatezza. In circa 60 secondi è possibile registrarsi,
scaricare il programma, installarlo e mettersi all’opera. Nell’applicazione
troviamo le informazioni circa l’IP assegnato, il server, la porta e il
protocollo che utilizzate. Potete poi sfruttare il port forwarding, la
protezione contro il DNS leak, il supporto IPv6, nonché un vasto stuolo
di impostazioni avanzate con tanto di guide su come gestirle. Alcuni
client consentono la modifica dell’IP in un solo click. Qui, invece, ce ne
vogliono almeno sei. Anche le prestazioni sono un po’ sotto la media.

Buffered VPN  HHHHH


Buffered VPN ha un buon client, ma tutt’altro che semplice da
utilizzare. Il programma per Linux non è contenuto nella scheda
principale dedicata al download. Lo trovate solo nella sezione
beta, ma senza alcuna istruzione per l’installazione. Il sito ha un
lungo elenco di tutorial, ma sono molto brevi e spesso lasciano a
desiderare. Una guida che abbiamo interpellato richiede
l’accesso a buffered.com, quindi il download del file di
configurazione. Non c’è alcun collegamento, né un nome o
consiglio su dove si debba cercare. Certo, gli esperti non si
faranno fermare da queste “dimenticanze”, ma per un
principiante potrebbe essere un’esperienza poco piacevole. Una
volta installato e presa confidenza con l’interfaccia, il client
funziona bene e non è difficile da gestire.

Prezzo e pagamento Verdetto


Quanto costano e quali piani mettono a disposizione? Buffered
HHHHH

C
omparare i prezzi non è facile. Perfect Privacy, infine, è il più costoso di preservare ancora di più la vostra IVPN
Alcuni servizi hanno piani tutti. Infatti, dobbiamo sborsare ben privacy. SlickVPN, IVPN, Perfect Privacy HHHHH
gratuiti, altri offrono pagamenti 8,95 euro al mese per il piano annuale e Mullvad, infatti, permettono la Mullvad
mensili e altri ancora permettono di da 107,40 euro. Se avete bisogno del sottoscrizione tramite questa valuta.
HHHHH
Perfect Privacy
risparmiare se sottoscrivete l’offerta per servizio per soli 30 giorni e in modo Naturalmente, sarebbe interessante HHHHH
più tempo. Se state cercando un occasionale, probabilmente è meglio sfruttare una prova gratuita di ciascun SlickVPN
abbonamento annuale, allora SlickVPN puntare su Mullvad che ricarica solo 5 servizio, ma in questo senso solo HHHHH
è il migliore con soli 40,70 euro (3,39 euro. Infatti, SlickVPN, sempre Mullvad garantisce questa possibilità. Il pagamento
euro al mese). Buffered è più caro con i mensilmente, viene 8,47 euro, Buffered Purtroppo, però, è davvero breve e non mensile è il
minimo tra cui
suoi 6,57 euro il mese che per 12 fanno 11, IVPN 12,71 e Perfect Privacy 13,48. permette di superare le tre ore di
scegliere, ma
ben 78,84. IVPN, con 7 euro al mese (84 Considerate anche i servizi che connessione. Tuttavia è sufficiente per non l’unico.
all’anno), è ancora più impegnativo. permettono di pagare in Bitcoin, così da capire le potenzialità del prodotto.

48 RASPBERRY PI
Servizi VPN

Perfect Privacy  HHHHH


Il sito di Perfect Privacy è progettato in modo perfetto. Infatti, è il punto
di partenza più adatto per iniziare. Puntate il browser a www.perfect-
privacy.com/howto. Viene immediatamente rilevato il vostro sistema
operativo e di conseguenza compare il giusto file da scaricare. Trovate
poi una vasta serie di guide passo a passo, consigli per l’installazione e
molto altro ancora. Il supporto è comunque poco necessario perché,
una volta scaricato, il client si installa in pochi e semplici passaggi.
L’applicazione mostra poi diverse informazioni, tra cui i paesi e le città
in cui risiedono i server, nonché il loro carico attuale. L’interfaccia,
rispetto ad altre soluzioni, non è del tutto intuitiva, ma una volta
comprese le basi, utilizzarla non sarà certo un problema.

SlickVPN  HHHHH
SlickVPN non mette a disposizione un client Linux e ciò non contribuisce
a rendere l’installazione un processo immediato. Il sito, tuttavia, offre
diversi tutorial che trattando di OpenVPN su NetworkManager,
Command Line e PPTP. Il programma Windows, che potete lanciare
tramite Wine, funziona abbastanza bene. Visualizza i server in una lista o
su una mappa, esegue test di velocità per trovare il servizio più veloce e
dispone di alcune caratteristiche e impostazioni avanzate, utili per gli
utenti più esperti. Connettersi in Linux permette l’accesso a tutte le
funzioni proprie di OpenVPN tramite NetworkManager, o di qualsiasi
altro client compatibile con OpenVPN che volete usare. I principianti,
tuttavia, potrebbero avere qualche grattacapo in più, perché il sito del
progetto non offre grandi spiegazioni sull’uso post-installazione.

IVPN  HHHHH
IVPN, come SlickVPN, non ha un client Linux. L’azienda, tuttavia, fa del
suo meglio per aiutarvi con diversi tutorial riguardanti l’installazione
tramite NetworkManager o il Terminale. Sono davvero molto
approfonditi e vanno ben al di là delle tradizionali funzioni di base e i
soliti elenchi di comandi. Abbiamo provato il client Windows in Wine
e siamo rimasti pienamente soddisfatti. Infatti, si possono usare
connessioni al volo, ma anche configurazioni avanzate che faranno
la felicità degli utenti più esperti. IVPN, durante le prove, si è rivelato
molto affidabile e non c’è mai stata occasione di rilevare problemi.
Se però non siete così fortunati, il produttore garantisce un’enorme
quantità di how-to su come risolvere la maggior parte dei grattacapi
che potrebbero emergere.

Supporto e documentazione
A chi chiedere in caso di necessità? Verdetto

S
e guardiamo alla teoria, in giusto rivolgersi a chi deve fornirci un tramite un indirizzo email univoco, a cui Buffered
HHHHH
generale le VPN dovrebbero aiuto concreto. A livello base, Mullvad si promette risposta entro un giorno IVPN
funzionare senza problemi. mette a disposizione diversi articoli su lavorativo. Perfect Privacy è più adatto HHHHH
Tuttavia, quando si parla di Reti, c’è svariati argomenti, ma sono tutti ai principianti: offre tutorial con grandi Mullvad
sempre qualcosa che può andare abbastanza brevi. Per quanto riguarda schermate e istruzioni passo a passo. HHHHH
Perfect Privacy
storto. È quindi importante che il più nello specifico Linux, c’è un pezzo Potete chiedere informazioni tramite
HHHHH
servizio cui vi affidate per la Virtual in cui viene trattata l’installazione su posta elettronica, forum e perfino Team SlickVPN
Private Network abbia un buon più distro. È poi presente il supporto via Viewer. IVPN va addirittura oltre Perfect HHHHH
supporto. Sull’argomento VPN, in email. SlickVPN presenta una buona Privacy, ma rispetto al concorrente è IVPN e Perfect
Internet si trovano svariate gamma di guide per molti sistemi dedicato maggiormente agli utenti Privacy offrono
informazioni, tra cui la configurazione operativi e router. Le eventuali richieste esperti. Se però sapete cosa state un supporto a
360 gradi.
nei sistemi Linux. Se però paghiamo, è di aiuto dirette sono però gestite facendo, c’è molto su cui studiare.

RASPBERRY PI 49
Raspberry Pi Web

Prestazioni effettive
Nella vita di tutti i giorni, quanto veloce riescono ad andare?

V
isitando i siti dei fornitori di VPN quanto riguarda navigazione e attività soprattutto quando abbiamo usato
si trovano grandi slogan standard, compreso lo streaming. server molto lontani dalla nostra
riguardo alle prestazioni, ma in Tuttavia, nei download tramite P2P, postazione. In ogni caso, la velocità
pratica è la prova su strada quella che siamo rimasti abbastanza delusi. minima è rimasta comunque superiore
conta. La realtà, infatti, può essere SlickVPN ha ottenuto risultati ai 15 Mbps (in Redazione facciamo uso
molto diversa. La velocità di Mullvad superiori, garantendo un utilizzo di una Fibra 100 Mega). Buffered VPN
era al di sotto della media. Utilizzando soddisfacente in tutti i comparti. va ancora meglio. I server vicino
pagine di benchmark come speedtest. Le prestazioni sono però scese all’Italia hanno fornito velocità davvero
net, i risultati sono stati buoni per bruscamente sulle lunghe distanze, ottime, vicine al massimo che
riusciamo a ottenere senza VPN.
Anche il ping è sempre stato molto
basso, consentendoci addirittura Verdetto
un’ottima esperienza di gioco online.
Buffered
Perfino con i server distanti non HHHHH
abbiamo avuto niente di cui lamentarci. IVPN
IVPN si è comportato in modo simile a HHHHH
Buffered, seppure con qualche Mullvad
HHHHH
differenza marginale. Il vero vincitore è
Perfect Privacy
però Perfect Privacy che si è affermato HHHHH
come il migliore in campo. SlickVPN
Indipendentemente dalla HHHHH
localizzazione del server, le prestazioni Anche la VPN
sono state davvero ottime. In nessun più lenta era
abbastanza
caso, utilizzando ipleak.net e altri veloce per l’uso
servizi simili, sono state rilevate falle a di base.
Abbiamo valutato la velocità reale di tutte le VPN prese in considerazione livello di privacy.

Funzioni avanzate
Andate oltre le opzioni di base

L
’uso di qualsiasi VPN offre le e far sembrare la connessione
stesse funzioni di base. Tuttavia, uscente da Amsterdam. In
se cercate qualcosa di più, le questo modo, il rilevamento
cose possono cambiare radicalmente delle attività Web è molto più
da un servizio all’altro. Per esempio, non complesso. Perfect Privacy
dovete mai dimenticare le opzioni per sfrutta una caratteristica
proteggere maggiormente privacy e simile, chiamata però
sicurezza. Le tradizionali Virtual Private “cascading”. SlickVPN, infine, Verdetto
Network instradano tutto il traffico impiega la tecnologia Hydra Hydra di SlickVPN gestisce il traffico
Buffered
verso uno specifico server. In casi che reindirizza il tutto verso attraverso diversi server HHHHH
normali è perfetto, ma se qualcuno può server casuali. Buffered VPN IVPN
vedere quando siete connessi e il server non è allo stesso livello dei contendenti. supporto provvisorio per WireGuard e HHHHH
assegnato (alcuni fornitori mantengono Infatti, pur avendo diverse buone un nuovo protocollo VPN che potrebbe Mullvad
HHHHH
questo genere di informazioni durante caratteristiche, non ha niente di essere adottato nel kernel Linux del Perfect Privacy
la sessione), allora c’è la possibilità di sorprendente. Mullvad si propone come 2017. In sostanza il servizio si pone in HHHHH
essere intercettati. Determinati servizi, un servizio abbastanza tradizionale, ma grado di seguire l’evoluzione SlickVPN
infatti, forniscono un livello di non dovete farvi ingannare perché c’è tecnologica, mantenendo fermo il buon HHHHH
protezione supplementare mediante il molto su cui agire. Può gestire IPv6, funzionamento di base. Allo stesso Mullvad e
routing del traffico tramite più server. tunneling, blocco e protezione di livello troviamo Perfect Privacy che, Perfect Privacy
sono perfetti
IVPN, per esempio, dispone di eventuali perdite e molto altro ancora. oltre a essere molto configurabile, ha anche per chi
un’opzione “multihop”, in cui è possibile Sfogliando le specifiche, ci sono molte opzioni avanzate per evitare qualsiasi cerca di più.
connettersi a un server negli Stati Uniti altre funzioni apprezzabili come il intercettazione.

50 RASPBERRY PI
Servizi VPN

Il verdetto
L
a maggior parte dei servizi VPN problemi. Il punto dolente è la
sembra simile e non è mai semplicità d’uso. Rispetto ad altri client,
semplice scegliere quello giusto infatti, è rivolto principalmente agli
in base a statistiche o prezzo. Infatti, ci utenti esperti. Per quanto riguarda
sono molti altri fattori che devono funzioni e prestazioni, invece, non
essere presi in considerazione. In primo abbiamo niente di cui lamentarci.
luogo, se non avete intenzione di SlickVPN arriva al quarto posto,
collegarvi a grande distanza dalla zona offrendovi un ottimo stuolo di server a
in cui risiedete, è inutile sfruttare una cui connettervi (più di 140). Inoltre, è
piattaforma che gestisce centinaia di piuttosto economico. Tuttavia, in ogni Le nostre VPN sono tutte buone, ma il vincitore è solo uno
server. Il prezzo troppo economico, comparto di prova non è mai riuscito a
inoltre, potrebbe non garantire un distinguersi particolarmente dagli altri. mensile basso e la possibilità di
servizio capace di sfruttare buone Se però il numero di server e l’offerta sfruttare le funzioni di OpenVPN sono
prestazioni in fatto di velocità e economica vi solleticano, può essere vantaggi importanti, ma sulle
reattività. In altre parole, l’unico modo una buona soluzione. IVPN è due volte prestazioni avrebbe potuto fare di più.
per essere sicuri di cosa avete per le più costoso di SlickVPN, ma vanta Perfect Privacy è quindi il vincitore, in
mani è provare. Il nostro consiglio, prestazioni davvero interessanti. quanto ha riportato il più alto tasso di
pertanto, è sottoscrivere l’offerta La privacy policy è molto chiara successi in tutte le prove.
minima di un mese e valutare se il e ci è piaciuta la possibilità di registrarsi
prodotto fa ciò che dice e si confà alle
vostre esigenze. Venendo però alla
in modo semplice e veloce. Mullvad
garantisce un ottimo livello di
“Non dovete mai scegliere
nostra classifica, partiamo da Buffered
VPN. Pur essendosi classificato al
anonimato, consentendo di provare il
servizio gratuitamente per tre ore senza
solo sulla base del prezzo
quinto posto, non significa che abbia dei fornire nessun dato personale. Il prezzo e delle statistiche... ”

1° Perfect Privacy  HHHHH 4° SlickVPN  HHHHH


Web: www.perfect-privacy.com Prezzo: 8,95 € al mese (annuale) Web: www.slickvpn.com Prezzo: 3,39 € al mese (annuale)
Una VPN funzionale e veloce in qualunque condizione. Avete a disposizione server sparsi in oltre 140 paesi.

2° Mullvad  HHHHH 5° Buffered VPN  HHHHH


Web: www.mullvad.net Prezzo: 5 € al mese Web: buffered.com Prezzo: 6,57 € al mese (annuale)
Iscrizione istantanea, senza richiesta di dati personali. Un semplice client Linux con buone prestazioni.

3° IVPN  HHHHH A voi la parola...


Web: www.ivpn.net Prezzo: 7 € al mese (annuale Non siete d’accordo con le scelte fatte? Avreste scelto altri servizi?
Affidabile, funzionale e facile da usare. Inviate le vostre opinioni su questo confronto a: recensioni@linuxpro.it

Considerate anche...
In questo confronto abbiamo selezionato le Gli utenti Linux, però, dovranno configurare com) che sfrutta Tor per instradare il proprio
sole VPN che offrono qualcosa in più rispetto ai l’applicazione manualmente o, in alternativa, traffico, garantendo un livello di protezione
tradizionali servizi. Tuttavia, nel panorama utilizzare Wine. VPN Unlimited (www. supplementare. Infine non dovete per forza
odierno ci sono molte altre alternative. vpnunlimitedapp.com) dispone di un client escludere le VPN gratuite. Seppure molte
IPVanish (www.ipvanish.com) ritiene di Linux e piani settimanali a basso costo. C’è poi abbiano limiti di banda (di solito si tratta di 500
essere la VPN più potente in circolazione, con PureVPN (www.purevpn.com) che garantisce MB al mese), sono comunque una buona
più di 500 server sparsi per il mondo. In effetti circa 140 paesi in cui sfruttare i propri server. scelta se non avete intenzione di farne un
è veloce e offre client Windows, Mac e mobile. Da non dimenticare NordVPN (www.nordvpn. utilizzo intensivo. LXP

RASPBERRY PI 51
Raspberry Pi Web

Con Varnish il
Web corre veloce
Scopri come installare e configurare uno dei migliori sistemi
di gestione della cache per velocizzare il vostro sito Internet

Nella homepage del sito Web di Varnish trovate le ultime


news e la documentazione delle sue funzionalità

di fare i vostri esperimenti con Varnish in un ambiente


di test o in una macchina virtuale perché un processo
non configurato correttamente può compromettere
l’accesso al vostro sito da parte del resto del mondo.

Installare Varnish
Installarlo su una Raspberry Pi è semplicissimo, basta

V
arnish è un reverse proxy per il caching HTTP eseguire questo comando:

Tip che funziona come livello trasparente tra il vostro


server Web e i client. In parole povere, agisce
# apt-get install varnish
Potete vedere la versione di Varnish che state utilizzando
salvando in cache i contenuti Web per poterli distribuire eseguendo il comando
Vi potreste chiedere
se conviene usare più velocemente senza che il client debba aspettare # varnishd -V
Varnish anche la risposta del server Web. Il sistema, quindi, non varnishd (varnish-4.0.2 revision bfe7cd1)
se il numero di siti funziona da solo: si deve trovare davanti a un server Copyright (c) 2006 Verdens Gang AS
Web da rendere correttamente configurato. Il suo vantaggio più Copyright (c) 2006-2015 Varnish Software AS
disponibili è
significativo è che aumenta sensibilmente i tempi La sua installazione include diversi eseguibili:
limitato. La risposta
è sì: anche se non di risposta dei vostri siti. In questo tutorial ne vedremo varnishadm, varnishhist, varnishncsa, varnishtest,
noterete un grande le funzionalità di base, ma sappiate che può fare molto varnishd, varnishlog, varnishstat e varnishtop.
miglioramento, di più. Anche se può funzionare con Nginx, in questo La directory principale di configurazione di Varnish
rimane un buon
tutorial utilizzeremo il server Apache: impiegare Nginx è /etc/varnish ma ci sono anche alcuni file collegati
esercizio educativo
installarlo al posto di Apache non è così complicato ammesso a questo tool all’interno di /etc/default:
e imparare a usarlo, che sappiate come modificare la configurazione. Potete $ ls -l /etc/default/varnish*
quindi non esitate trovare molte altre informazioni su Varnish nel suo sito -rw-r--r-- 1 root root 3423 mar 2 18:16 /etc/default/
e provatelo anche Web ufficiale https://varnish-cache.org/ (in inglese). varnish
se avete soltanto
Potete vedere una parte del sito nello screenshot di questa -rw-r--r-- 1 root root 799 mar 2 18:16 /etc/default/
un sito Web.
pagina. Un avviso particolare: vi consigliamo vivamente varnishncsa

52 RASPBERRY PI
Che cos’è il caching HTTP

C
on caching HTTP si intende un modo anche se il server vero e proprio dovesse avere dei scartata, non serve la richiesta e blocca l’accesso.
per salvare il traffico Web così che problemi, purché i dati siano già presenti in cache. Quando siete ‘fortunati’ e i dati vengono trovati
gli utenti che si connettono al sito Un server proxy interagisce con i client e il server nella cache, viene definito hit, altrimenti si chiama
Internet utilizzi il server di caching invece Web di destinazione in questo modo affascinante. miss. Quando abbiamo un miss, il recupero del
di quello vero, rendendo il tutto più veloce. Quando il server proxy riceve una richiesta che dato desiderato può richiedere un po’ di tempo
Le ragione per cui utilizziamo il caching HTTP può servire o tramite la cache in memoria o in più perché la ricerca nella cache inserisce un
sono due: i client hanno la percezione che la loro tramite quella sul disco, il messaggio richiesto non ritardo aggiuntivo. Ci sono anche dei passes che
connessione sia più veloce. Inoltre questo ci viene inoltrato alla destinazione reale e il proxy sono delle richieste che vengono ignorate e non
permette di filtrare e trasformare il nostro traffico. ritorna i file dalla propria cache. In modo simile, vengono mai messe in cache; in quel caso viene
Un effetto secondario del caching HTTP è che quando il server proxy riceve una richiesta che stabilita una connessione diretta con il server,
i client sono in grado di recuperare le pagine Web corrisponde alla sua lista di controllo e andrebbe spesso si usa questa strategia per lo streaming.

I file di configurazione più importanti sono due, # cd /etc/default/


/etc/varnish/default.vcl e /etc/default/varnish:
qui trovate le definizioni dei parametri principali di Varnish.
# diff varnish varnish.orig
47c47
Tip
Il parametro più critico quando si imposta un processo < DAEMON_OPTS=”-a :80 \
Potete imparare
Varnish è la dimensione della cache, perché ha un forte --- molto su Varnish
impatto sulle performance. In questo tutorial manterremo > DAEMON_OPTS=”-a :6081 \ leggendo il libro
la dimensione di default per la cache. # cd /etc/varnish/ (in inglese) The
Varnish Book
# diff default.vcl default.vcl.orig
Configurazione di base 18c18
che potete trovare
all’indirizzo
Potete avviare Varnish in questo modo: < .port = “8000”; https://info.
# service varnish start --- varnish-software.
# service varnishlog start > .port = “8080”; com/the-varnish-
book, e le white
# service varnishncsa start La prima modifica indica a Varnish di utilizzare la porta 80
papers (sempre in
In modo molto simile potete stoppare i servizi, così: mentre la seconda gli dice che il suo client, nel nostro caso inglese) all’indirizzo
# service varnish stop Apache, lavora sulla porta TCP 8000. Inoltre, dovremo dire https://info.
# service varnishlog stop a tutti i siti virtuali di Apache che sono in ascolto sulla varnish-software.
com/white-
# service varnishncsa stop porta 80 di passare sulla 8000 da adesso in poi. Per fare
papers.
Quindi, se eseguite ps ax | grep varnish dopo aver questo dobbiamo modificare il valore del parametro Listen
avviato il proxy, vedrete almeno tre distinti processi nel nostro file /etc/apache2/ports.conf. Se avete altri
in esecuzione: varnishd che si occupa di tutte le host virtuali di Apache che non usano la porta TCP 80,
funzionalità di Varnish; il servizio varnishlog che si non dovete modificare la loro configurazione. Per
occupa di salvare i log di Varnish; il servizio varnishncsa concludere dobbiamo effettuare le seguenti azioni:
che si occupa anch’esso di salvare i log di Varnish ma nel # cp /lib/systemd/system/varnish.service /etc/systemd/
formato NCSA Common Log. Potete vedere come viene system
eseguito il servizio di varnish (varnishd) con facilità: # vi /etc/systemd/system/varnish.service
$ ps ax | grep varnishd | head -1
4661 ? Ss 0:00 /usr/sbin/varnishd -j
unix,user=vcache -F -a :6081 -T localhost:6082 -f /etc/
varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
Quindi, questa istanza di Varnish utilizza la porta 6081
(-a :6081), che solitamente viene utilizzata a scopo
di test. Per prendere il controllo in modo trasparente
del traffico Web del vostro sito, però, Varnish dovrebbe
mettersi in ascolto sulla porta TCP utilizzata
normalmente dal server Web e il server Web, a sua volta,
dovrebbe passare su un’altra porta disponibile.
In altre parole, Varnish sarà il processo che si occuperà
per primo di gestire tutte le richieste HTTP.
Per questo, è giunto il momento di cambiare
la configurazione attuale del nostro server Linux
e far sì che Varnish si metta in ascolto sulla porta 80
e il server Web Apache passi sulla porta TCP 8000,
che abbiamo scelto perché è facile da ricordare.
Su un sistema Debian GNU/Linux, per prima cosa
dovrete apportare delle modifiche a due file
di configurazione di Varnish, come potete vedere
dall’output dell’utility diff qui di seguito: Qui possiamo vedere il formato dei dati salvati in varnish.log e in varnishncsa.log

RASPBERRY PI 53
Raspberry Pi Web

# diff /lib/systemd/system/varnish.service /etc/systemd/


system/varnish.service
9c9
< ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a
:6081 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/
varnish/secret -s malloc,256m
---
> ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a
:80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/
varnish/secret -s malloc,256m
# systemctl daemon-reload
# systemctl restart apache2.service
# systemctl restart varnish.service
Gli ultimi due comandi servono a riavviare i due servizi.
Dobbiamo riavviare prima Apache affinché liberi la porta
TCP 80 e poi Varnish, in modo che possa prendere il suo
posto. Quindi, la prossima domanda è “come faccio
Tip a sapere se sto usando Varnish?”. La risposta
è abbastanza semplice: potete provare ad accedere a uno
Se volete imparare
dei siti gestiti da Apache e vedere se funziona! Inoltre,
di più sui protocolli
Web e sul modo in potete controllare i file di log di Varnish, una delle sue
cui funziona HTTP varie utility oppure l’output del seguente comando: Ecco uno screenshot che mostra l’utility varnishtop
trovate moltissime # ps ax | grep varnishd | grep -v grep | tail -1 in azione. Potete modificare il suo output utilizzando
informazioni in giro. 6068 ? Sl 0:00 /usr/sbin/varnishd -j le opzioni da riga di comando
Vi raccomandiamo
unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/
High Performance
Browser varnish/default.vcl -S /etc/varnish/secret -s malloc,256m è di fondamentale importanza. È buona norma inoltre
Networking Se il valore del parametro -a è :80, allora Varnish mantenere una copia di backup di tutti i file di
di Ilya Grigorik è configurato correttamente. Tenete a mente che dargli configurazione che avete modificato perché qualcosa
e Web Protocols
molto spazio su disco o RAM potrebbe non portare potrebbe andare storto. In questo tutorial i file originali
and Practice:
HTTP/1.1, ai miglioramenti prestazionali che si potrebbe pensare sono stati rinominati aggiungendo l’estensione .orig.
Networking perché causerebbe un rallentamento della velocità
Protocols, Caching, di ricerca all’interno della cache. A seconda dei vostri dati, I log di Varnish
and Traffic 4 GB di spazio su disco possono essere un buon punto Nei sistemi Debian, potete trovare il file di log di Varnish nella
Measurement
di inizio. Trovare la dimensione ottimale per la cache cartella /var/log/varnish/. Al suo interno ci sono due file,
di Balachander
Krishnamurthy è un arte che richiede un monitoraggio costante delle uno chiamato varnish.log e l’altro chiamato varnishncsa.log.
e Jennifer Rexford performance del reverse proxy con l’aiuto di tool come Il primo conserva i dati di log di Varnish in un formato definito
(entrambi varnishstat e varnishtop. Infine, dovreste tenere a mente dallo stesso reverse proxy, che è più leggibile ma occupa più
in inglese).
che l’intero processo è trasparente ai client Web, il che spazio sullo schermo, mentre il secondo utilizza lo stesso
formato di log usato dai file di Apache. L’immagine nella
pagina precedente mostra un esempio di dati contenuti
nei due file, così potete farvi un’idea di come funzionano.
L’utility varnishlog permette di interpretare il contenuto dei file.
È importante sapere che Apache continua a mantenere i suoi
file di log dov’erano prima, quindi non perdete alcun dato.
L’utility varnishncsa mostra i dati che vengono scritti nel file
varnishncsa.log mentre varnishtest permette di testare
la cache del proxy. Potete trovare maggiori informazioni
su entrambi i tool nella loro pagina man. Nell’immagine
qui a sinistra possiamo vedere la man page di varnishtop,
che funziona come l’utility da riga di comando top ma per
i file di log di Varnish. Comunque, l’immagine qui sopra
è più interessante perché mostra varnishtop in azione. Il tool
varnishadm permette di controllare un’istanza attiva di
Varnish, mentre varnishhist mostra un istogramma delle
richieste Varnish, che può rivelarsi molto utile per monitorare
le performance di Varnish. Come abbiamo visto, questo
reserve proxy offre molte utility che ci permettono di
controllare le operazioni che esegue e le performance. In
questa sezione parleremo di varnishstat che mostra
statistiche relative i processi attivi di Varnish utilizzando
La man page dell’utility da riga di comando varnishtop, tool diverse metriche. Questo tool può convertire il proprio output
che ci permette di reperire informazioni sui log del nostro Varnish in XML, utilizzando lo switch -x, e in formato JSON utilizzando

54 RASPBERRY PI
Varnish

“Un buon sistema di cache può attualmente è sperimentale è il supporto


a HTTP/2, che permette di testare
farvi persino risparmiare soldi il traffico HTTP/2 e verificarne
il funzionamento con Varnish. Comunque,
per la banda del vostro server!” tenete presente che il supporto
all’HTTP/2 non è attivo di default
lo switch -j – potete vedere il formato di entrambi in Varnish 5. Un’altra caratteristica di questa nuova versione
nell’immagine qui sotto. Dei dati strutturati in questo modo è che è passata da una pianificazione dei rilasci basata sulle
non sono molto comodi se si sta verificando l’andamento funzionalità a una pianificazione periodica, questo significa
in tempo reale, ma il vantaggio di un output in XML o JSON che ci possiamo aspettare una nuova versione ogni sei mesi
è che ci permette di salvare il report in un database anche se questo attualmente sembra aver generato qualche
e di interrogarlo in un secondo momento. Potete ottenere problema. Varnish 5 supporta anche la terminazione TLS
anche l’output in tempo reale sfruttando l’opzione -l. che permette di terminare una connessione TLS per voi
Se non utilizzate nessuna di queste tre opzioni varnishstat e il protocollo PROXY. Se cercate maggior supporto su
lavorerà in modo simile all’utility top e aggiornerà il proprio queste funzionalità potete dare un’occhio a Hitch TLS
output finché non lo terminate premendo Q. (https://hitch-tls.org/). Varnish 5 ha introdotto anche una
cartella chiamata Shard, che si occupa del bilanciamento
Sicurezza e HTTP/2 del carico e ha il supporto per la Negative Cache, che
HTTP/2 è l’ultima versione del protocollo HTTP e si concentra è una funzionalità piuttosto avanzata. Esistono diverse altre
sulle performance. Le differenze chiave tra HTTP/2 e HTTP/1.1 nuove capacità in Varnish 5 ma parlare di esse va oltre lo
sono che include binari invece di testo per trasferire i dati, scopo di questo tutorial. Tenete presente che non dovete
la sicurezza utilizzando TLS, il multiplexing, che permette utilizzare ogni funzione, anche perché alcune di esse sono
a HTTP/2 di utilizzare una singola connessione TCP per molto specializzate. L’idea generale è quella di utilizzare
il parallelismo, la compressione degli header e il supporto per le cose di cui avete davvero bisogno prima di
le risposte ‘push’. Nonostante le differenze e i miglioramenti, implementare funzionalità più avanzate in questo modo
molti dei quali rendono HTTP/2 significativamente più veloce potrete capire meglio come funziona il tutto. LXP
di HTTP/1.1, tutti i metodi HTTP, i codici di stato e la semantica
rimangono invariati in HTTP/2. Potreste chiedervi come
sia possibile fare il debug delle connessioni HTTP/2 se sono
criptate. La soluzione sta nell’utilizzare il keylogging NSS
insieme al plug-in Wireshark che è disponibile sia per Chrome
sia per Firefox. Potete trovare maggiori informazioni su HTTP/2
all’indirizzo http://httpwg.org/specs/rfc7540.html (in
inglese). TLS sta per Transport Layer Security (sicurezza del
livello di trasporto) e il suo scopo principale è quello di offrire
sicurezza e privacy tra due applicazioni che comunicano.
Potete scoprire tutti i dettagli del protocollo TLS guardando
il suo RFC all’indirizzo https://tools.ietf.org/html/rfc5246.
Perché un programma come Varnish possa implementare
la gestione della cache, abbiamo bisogno di due cose principali:
un modo per decidere se una risorsa può andare nella cache
e un modo efficiente per accedere e mantenere la cache.
In altre parole, non ha molto senso salvare in cache una pagina
dinamica che cambia ogni secondo così come non ha senso
avere in cache dati che richiedono troppo tempo per essere
trovati o troppo pesanti da mantenere.

Il futuro di Varnish
Anche se in questo tutorial è stata utilizzata la versione
4 di Varnish, esiste una versione 5 che offre alcune nuove L’utility da riga di comando varnishstat mostra un’immagine dettagliata delle
funzionalità importanti. Quella più rilevante e che performance attuali di Varnish e può generare output anche in XML e JSON

Varnish contro la seppia: chi vince?

S
quid (Seppia) è un server proxy molto superiori perché è un’applicazione multi-thread rivelarsi molto importanti per certi tipi di utenti.
famoso che può essere configurato mentre Squid usa un unico processo. Infine Infine, è più maturo dato che la sua prima
per funzionare da reverse proxy, mentre in suo favore ha un miglior supporto di validazione. apparizione risale a luglio 1996. Se le differenze
Varnish è stato progettato sin dall’inizio per D’altra parte, Squid offre supporto built-in per appena citate non hanno senso per voi,
lavorare in questa modalità. Inoltre, quest’ultimo SSL, mentre Varnish ha bisogno di configurazioni significa che entrambi fanno al caso vostro!
ha un sistema di configurazione migliore che aggiuntive per supportarlo. Inoltre, Squid offre Potete ottenere maggiori informazioni
vi permette di riscrivere gli URL e offre prestazioni supporto per plug-in antivirus che possono andando su www.squid-cache.org.

RASPBERRY PI 55
Raspberry Pi Web

Costruire un
toolkit di sistema
Ecco come fare sviluppo Web con facilità e solide fondamenta

U
na delle migliori ragioni per utilizzare Linux è che un server Web e trasferirci file. Così, può essere utilizzato
rende lo sviluppo per Internet un processo semplice. come server remoto proprio come se aveste un VPS o un
Quando diciamo semplice, intendiamo che rende server dedicato da una compagnia di hosting.
gratuito e facile la produzione di un sito. Dato che moltissimi
siti e applicazioni sul Web sono gestiti e ospitati su ambienti Il software
Linux, inclusi quelli di giganti come Google e Facebook, Per avere un ambiente di sviluppo sulla vostra macchina
utilizzarlo per lo sviluppo è chiaramente una scelta solida dovrete installare un server Web, un database ed eventualmente
e conveniente. In questo articolo andremo a costruire supporto per linguaggi di scripting. Per rimanere più vicini agli
un ambiente di sviluppo da zero. Indipendentemente dal standard attuali andremo a utilizzare una configurazione LAMP
setup, tenete sempre presente che le tecnologie server tradizionale che significa Linux, Apache, MySQL e PHP
cambiano nel tempo e che comunque vada sulla Raspberry Pi (o se preferite Perl o Python). Per questo tutorial, la P di LAMP
potete eseguire l’ultima versione delle tecnologie server sta per PHP. Secondo le statistiche di https://w3techs.com/
per il Web come Apache, PHP, mySQL e PhpMyadmin. technologies/details/pl-php/all/all, PHP è utilizzato
dall’82,7% dei siti Web per i quali è conosciuto il linguaggio di
Iniziare da zero programmazione lato server, quindi siamo in buona compagnia.
Se volete una nuova macchina dedicata allo sviluppo Le statistiche non significano che sia per forza migliore,
potete scegliere hardware nuovo o usato. Il nuovo e se cercate con Google potrebbe sembrare che ci sia un’intera
ha dei benefici ovvi, ma ci sono moltissimi gioiellini usati armata contro PHP. Ma la sua popolarità ha generato un gran
nel mondo. Noi abbiamo avuto alcuni portatili Lenovo numero di strumenti che lo rendono un linguaggio molto
Business che costano un centinaio di euro e diverse semplice con cui iniziare lo sviluppo. Quindi, torniamo al setup...
workstation HP XW8600 comprate tramite aste. La sequenza dei comandi è scritta sotto. Quando vi viene
Aggiungete un SSD e avrete un ottimo PC per lo sviluppo. chiesto se installare sì o no, seguite semplicemente le istruzioni
Un’altra cosa da tenere in mente per scegliere per il sì. Con mySQL e PhpMyAdmin, potete lasciare la
la distribuzione Linux: per questo speciale la scelta cade password vuota per completare l’installazione. Questa opzione
naturalmente su una Raspberry Pi, e in questo caso può andare bene per un ambiente di test sulla vostra
Ubuntu Mate è la prima scelta. Vi raccomandiamo una piattaforma Linux, ma se pianificate di utilizzare il server come
Raspberry Pi 3: è molto più veloce dei modelli precedenti; host Web forwardando le porte tramite il vostro router, dovreste
ci potete collegare un TV via HDMI, mouse e tastiera utilizzare delle password forti e tenerne una copia in un posto
e usarlo come desktop, oppure lanciare semplicemente sicuro, se pensate di poterle dimenticare.
$ sudo apt-get update
$ sudo apt-get install apache2
$ sudo apt-get install mysql-server
$ sudo apt-get install php7.0 php-pear libapache2-mod-php7.0
php7.0-mysql
$ sudo apt-get install php7.0-curl php7.0-json php7.0-cgi
$ sudo apt-get install phpmyadmin
<Premere invio diverse volte durante l'installazione>
In questi giorni, PhpMyAdmin sta dando qualche problema
se si cerca di utilizzarlo in ambienti di test senza una password.
Potete recuperare maggiori informazioni all'indirizzo https://
docs.phpmyadmin.net/en/latest/ (in inglese). Se pensate
di sviluppare seriamente sul Web utilizzando MySQL (questo
vale anche se utilizzerete Wordpress) e che accedere
al database tramite GUI potrebbe farvi comodo, PhpMyAdmin
Possiamo aggiungere NetBeans al menu principale di Ubuntu Mate. Basta è quasi obbligatorio. Ora che siete arrivati a questo punto,
inserire, percorso, nome e cliccare su OK vogliamo aggiungere un’installazione opzionale. Stiamo

56 RASPBERRY PI
Toolkit

Il setup di questo software è abbastanza semplice per tutti


gli utenti della rete. Vi permette di gestire i privilegi degli utenti
o impostare dati in sola lettura. Dopo aver configurato il server
Tip
Web (cosa che abbiamo fatto prima), possiamo passare
Potete scaricare
al suo test. Apriamo il browser e andiamo all’indirizzo Wordpress
http://localhost. I dati che compariranno provengono dal file da https://
/var/www/html/index.html. Per accedere al file dal vostro it.wordpress.
desktop vi basta aprire la directory home e spostarvi nella org/. Vi basterà
scompattare
cartella var/www/html/ qui troverete il file index.html. Potete
l’archivio e spostare
cliccarci con il tasto destro e aprirlo con il vostro editor preferito. la cartella nella
Per esempio, con Pluma o Vim. Ora, potete modificarlo posizione che
e salvarlo. Se, per un qualunque motivo, doveste avere problemi preferite, come
per esempio /var/
con i permessi quando cercate di salvare il file, dovrete
www/html.
assicurarvi che la cartella www/html abbia i permessi Se volete il sito nella
impostati correttamente. Lo script che segue può aiutarvi root del dominio,
a dare i permessi al vostro utente copiate tutti
$ sudo chown -R nomeutente:nomeutente www i file della cartella
L’inizio di un progetto con Netbeans. Vi basterà impostare
decompressa
la directory sorgente e sarete praticamente pronti all’azione Nello sviluppo Web, e in quello Android, si fa largo uso di una
di WordPress nella
tecnologia chiamata NodeJS. I passi che seguono mostrano cartella html.
parlando di Samba. Potete installarlo sia sulla macchina host come installarla nel modo corretto.
sia su quella client se avete un’altra macchina Linux, come $ sudo apt-get update
una Raspberry Pi, per cui volete salvare file o cartelle di backup. $ sudo apt-get install nodejs
Per scambiare dati avanti e indietro tra le macchine, Samba $ sudo apt-get install npm
è molto comodo, vi basta semplicemente trascinare i file nelle $ sudo apt-get install build-essential
varie cartelle proprio come fate normalmente nel vostro $ which node
desktop. Se non volete installarlo e fare il backup dei vostri file $ which nodejs
su un server Samba potete tranquillamente saltare questa /usr/bin/nodejs
parte. Per la sua installazione e la configurazione vi basta fare: $ sudo ln -s /usr/bin/nodejs /usr/bin/node
$ sudo apt-get install samba samba-common-bin $ node -v
$ sudo /etc/init.d/samba start v4.7.2
Ora vediamo come creare una cartella (/home/miosamba) Ora che anche NodeJS è installato, vediamo come installare
da condividere Grunt, il popolare tool per gestire i task.
$ sudo mkdir /home/miosamba 1 Installare l’interfaccia da riga di comando

$ sudo chown vostroutente:sambashare /home/miosamba $ sudo npm install -g grunt-cli


2 Da riga di comando, andiamo nella cartella nella quale

$ cd /etc/samba vogliamo eseguire grunt, per esempio quella della nostra


$ sudo vi smb.conf applicazione o sito web
A questo punto possiamo modificare il suo file di configurazione $ cd nomecartella
aggiungendo le istruzioni seguenti. $ cd /var/www/html
[vostroutente] 3 Installiamo Grunt in locale

comment = Condivisione pubblica $ npm install grunt --save-dev


path = /home/miosamba/ 4 Creiamo un semplice file grunt chiamato gruntfile.js

#valid users = @users e aggiungiamo il codice che segue. Questo ci permette


valid users = @sambashare,fileserver,vostroutente
#force roup = users
create mask = 0770
directory mask = 0770
read only = no
guest ok = yes
browseable = yes
#security = user
wins support = yes
Riavviamo Samba affinché le modifiche abbiano effetto.
$ sudo /etc/init.d/samba restart
I comandi che seguono mostrano come creare un utente
e assegnargli una password Samba.
$ sudo useradd vostroutente -m -G users
$ sudo passwd vostroutente
... inseriamo la password e la verifica
$ sudo smbpasswd -a vostroutente La versione di Netbeans per lo sviluppo di applicazioni PHP offre il completamento
New SMB password: automatico e i suggerimenti, potete scoprire cosa fanno le funzioni e quali parametri
Retype new SMB password: si aspettano mentre scrivete il codice

RASPBERRY PI 57
Raspberry Pi Web

di vedere dei messaggi nel nostro terminale da riga di comando grunt.registerTask('default', ['jshint']);
quando vengono effettuate delle modifiche al file test.js. Perché console.log('File cambiato');
dovreste volere una funzionalità simile? Immaginate di avere
dei colleghi o dei dipendenti che stanno lavorando su questo };
file. Se il file rimane invariato per troppo tempo, potreste 5 Creiamo un semplice file package.jsonoppure eseguiamo
arrabbiarvi e chiedervi come mai nessuno sta facendo niente. il comando npm init da riga di comando che lo creerà per noi.
module.exports = function(grunt) { Sotto vediamo un esempio di un file package.json con tutto
grunt.initConfig({ il necessario.
jshint: { {
files: ['test.js'], "name": "progetto-di-prova",
options: { "version": "0.1.0",
globals: { "devDependencies": {
jQuery: true "grunt": "~0.4.1",
} "grunt-contrib-concat": "~0.1.3",
} "grunt-contrib-jshint": "^1.1.0",
}, "grunt-contrib-uglify": "^2.0.0",
watch: { "grunt-contrib-watch": "^1.0.0",
files: ['<%= jshint.files %>'], "grunt-livereload": "^0.1.3"
tasks: ['jshint'] }
} }
}); Ed ecco come installare le dipendenze:
$ npm install grunt-contrib-jshint --save-dev
grunt.loadNpmTasks('grunt-contrib-jshint'); $ npm install grunt-contrib-watch --save-dev
grunt.loadNpmTasks('grunt-contrib-watch'); $ npm install grunt-livereload --save-dev
Per vedere grunt in azione, basta lanciare il prossimo comando,
modificare il file e guardare la console; ovviamente prima
di lanciare grunt create il file test.js se non lo avete già fatto.
grunt watch

Gulp
Gulp è un altro gestore di task. Installiamolo globalmente:
$ sudo npm install -g gulp
Andiamo nella cartella nella quale vogliamo usarlo. Nel nostro
caso la cartella gulp all’interno della nostra cartella html.
$ cd /var/www/html/gulp
Creiamo un semplice file package.json (oppure si può sempre
usare il comando npm init), con questo contenuto:
{
"name": "test",
"version": "0.1.0",
La connessione al nostro server FTP è pronta, non ci resta che metterci al lavoro "devDependencies": {
}

Vim: editor da riga di comando }


Installiamo Gulp in locale:
$ npm install gulp --save-dev

L’
editor Vim è una buona e scoprirete che con esso potrete Creiamo un file chiamato gulpfile.js e aggiungiamo tutti i task
scelta se pensate di accedere risparmiare molto tempo. Ecco una che ci servono. Eccone un esempio:
a server remoti o se avete piccola lista di comandi Vim:
var gulp = require('gulp');
bisogno di modificare file G - vi porta semplicemente alla fine
var gutil = require('gulp-util');
rapidamente da riga di comando. del file che avete aperto
Inoltre, è un editor fantastico e potete /stringa - Inserendo una barra
usarlo anche per modificare i file in avanti seguita da un testo livereload = require('gulp-livereload');
con privilegi da super user. Alcuni file e premendo Invio cercherete
per i quali avete bisogno di privilegi nel testo la stringa inserita. gulp.task('watch', function () {
superiori sono php.ini, /etc/ Premendo N potete spostarvi livereload.listen();
apache2/apache2.conf ed /etc/ all’istanza successiva
php/7.0/apache2/php.ini. :q! <invio> - Chiude il file gulp.watch('*.html').on('change',function(file) {
$ sudo apt-get install vim senza salvare livereload.changed(file.path);
Se non volete utilizzare Vim per :wq!</c> <invio> - Salva il file
console.log('File Modificato');
cambiare i file, potete utilizzare Nano e lo chiude immediatamente
gutil.log(gutil.colors.yellow('File HTML
che è preinstallato in Linux. Ma se :w</c> <invio> - Salva il file e basta
dedicate un po' di tempo a Vim, modificato' + ' (' + file.path + ')'));
i - Permette di inserire del testo
potreste trovarlo interessante esc - Esce dalla modalità inserimento. });
});

58 RASPBERRY PI
Toolkit

Installare Netbeans

N
etbeans offre un eccellente editor Programmazione D NetBeans IDE 8.2. Se Se volete potete iniziare un progetto anche
per qualsiasi tipo di linguaggio di volete aggiungerlo al menu principale potete direttamente da remoto. Ecco come: File D
programmazione. Ci sono versioni per andare su Sistema D Preferenze D Aspetto Nuovo Progetto D PHP Application from
Java, PHP, HTML / Javascript e C/C++ solo per e Stile D Menu principale, cliccare su Nuova Remote Server D Successivo. Date un nome
nominarne alcune. Su https://netbeans.org/ voce, compilare i campi e chiudere. Ora, potete al progetto, scegliamo la versione di PHP
potete scaricarlo. Ci sono diverse versioni ma accederci anche dal menu principale. Iniziare quindi: Successivo D Configuriamo la
la versione PHP è specifica per lo sviluppo Web un nuovo progetto è semplicissimo. Scegliete connessione D Successivo D Fine. A questo
Lamp. Scegliete tra la versione x86 e quella a File D Nuovo Progetto D Scegliamo PHP D punto vedrete un nuovo progetto nella parte
64 bit. Netbeans necessita della JDK 8 di Java Successivo D Date un nome al progetto sinistra sotto Progetti. Se non avete un server
per funzionare. Potete scaricarla e installarla e scegliete la cartella ora potete fare click su FTP installato nel vostro host remoto dovrete
tramite riga di comando da: www.oracle.com/ Fine. Ora, avete accesso a tutti i file nella vostra installarlo. Se per esempio state utilizzando
technetwork/java/javase/downloads. Dopo directory. Tutto è impostato in locale: vediamo una Raspberry Pi come host remoto, potete
averlo scaricato cliccate con il tasto destro come impostare la connessione FTP per poter installare il server FTP con:
sul file netbeans-8.22-php-linux-x64.sh, trasferire i file anche sul server. Per impostare $ sudo apt-get update
scegliete permessi e dategli il permesso un server FTP o SFTP vi basta cliccare con il $ sudo apt-get install vsftpd
di essere eseguito. Ora seguite le semplici tasto destro sulla cartella del progetto e andare $ sudo vi /etc/vsftpd.conf
istruzioni della GUI per completare su Proprietà, cliccate su Run configuration Aggiungete quindi quanto segue al file
l'installazione. Dopo aver installato il tutto nella parte sinistra dello schermo. Creiamo /etc/vsftpd.conf:
troverete un’icona di Netbeans sul vostro una nuova configurazione e diamogli un nome. chroot_local_user=YES
desktop. Facendo doppio click su di essa Sotto Run As scegliete Remote Web Server write_enable=YES
si aprirà Netbeans. Se state usando Ubuntu (FTP, SFTP). Inserite l’URL del progetto. allow_writeable_chroot=YES
Mate potete lanciare il programma sfruttando Poi, scegliamo Manage vicino a Remote Dopo aver modificato il file, riavviate il servizio:
il menu, andando su Applicazioni D Connection D inserite tutti i dati e cliccate Ok. $ sudo systemctl restart vsftpd

Aggiungiamo le dipendenze necessarie. Facendolo il file Per eseguire il task ‘watch’ di Gulp che controlla
package.json dovrebbe aggiornarsi da solo. le modifiche di tutti i file html presenti nella cartella
$ npm install gulp-concat --save-dev basta lanciare il comando
$ npm install --save-dev gulp-livereload $ gulp watch
$ npm install gulp-uglify gulp-rename --save-dev Per terminare Gulp basta utilizzare il classico Ctrl + C.
Ecco come sarà il file package.json dopo aver installato Se Grunt o Gulp non dovessero funzionare come previsto,
le dipendenze, ovviamente non è detto che il vostro sia verificate i permessi dei file. Se appartengono tutti
esattamente uguale. all'utente, tutto funzionerà come previsto e simulerà
{ un ambiente di hosting. Lanciamo il task watch e vediamo
"name": "test", nella console cosa succede quando si modifica un file
"version": "0.1.0", HTML all'interno della cartella sotto monitoraggio. Oltre
"devDependencies": { a monitorare file Grunt e Gulp hanno tantissimi altri usi.
"gulp": "^3.9.1",
"gulp-concat": "^2.6.1", Un server FTP
"gulp-livereload": "^3.8.1", Parliamo di qualche altro programma, potete utilizzare
"gulp-rename": "^1.2.2", Filezilla per trasferire i file su di un server remoto. Questo
"gulp-util": "^3.0.8", programma non è soltanto un metodo per caricare
"gulp-uglify": "^3.0.0" e scaricare file da un server remoto direttamente da un
} editor di testo come Vim, Gedit o Pluma, ma può aiutare
} a risolvere i problemi più comuni legati all'FTP dato che
offre molte informazioni relative alle connessioni fallite
e a quelle avvenute con successo.
$ sudo apt-get install filezilla
Per eseguire Filezilla, basta lanciare l’ovvio comando:
$ filezilla
A questo punto il vostro ambiente di sviluppo Web
è pronto per essere utilizzato. Potete optare per un CMS
come Wordpress, Joomla o Drupal ed evitare di scrivere
codice vostro, ma questo non vi aiuterà molto a crescere.
Per progredire nella programmazione vi consigliamo di
iniziare a provare con qualcosa di vostro, magari seguendo
corsi o tutorial che potete trovare online in modo da poter
Il nostro script di monitoraggio con grunt ci permette padroneggiare il cuore dei programmi prima di passare a
di tenere sotto controllo il lavoro dei nostri collaboratori utilizzare il lavoro degli altri. Buona programmazione! LXP

RASPBERRY PI 59
Raspberry Pi Web

Drupal 8: create
il vostro sito Web
Dovete progettare un portale a intenso volume di traffico e con strumenti
di amministrazione avanzati? Ecco come fare!

Il sito ufficiale di Drupal, oltre alle ultime versioni


del CMS, fornisce tutta la documentazione disponibile

D
rupal 8 è un Content Management System (CMS) drupal.org/download. Nel momento in cui stiamo
che può aiutarvi a creare portali Web ricchi scrivendo, il CMS ha raggiunto la release 8.3.1. Procediamo
di funzioni. Vedrete come installarlo, gestire l’utility quindi al download:
drush dalla riga di comando e aggiungere i moduli $ wget https://ftp.drupal.org/files/projects/drupal-8.3.1.tar.gz
più interessanti. In questo tutorial svilupperete un sito $ ls -l drupal-8.3.1.tar.gz
completamente operativo e accessibile da Internet. Dovrete -rw-r--r-- 1 linux linux 12665617 apr 6 02:38 drupal-
quindi configurare i DNS in modo che puntino al dominio 8.3.1.tar.gz
corretto, che in questo caso sarà quello da voi usato.
Apache per Drupal 8
Tip Per comodità, faremo riferimento all'esempio http://
tuodominio.it. Se preferite, potete comunque installare Ogni sito Web ha bisogno di una propria directory con
questo CMS in locale. In entrambi i casi avrete bisogno i permessi corretti, ma anche del file di configurazione
Apache non del server Web Apache. Prima di procedere, assicuratevi per Apache. In una distro Debian, per esempio, dovrete
è l'unico server
che il dominio esista realmente: lanciare le seguenti operazioni
Web utilizzabile
con Drupal. Nginx $ host tuodominio.it # cd /etc/apache2/sites-available/
è un'ottima Host tuodominio.it not found: 3(NXDOMAIN) # vi tuodominio.it.conf
soluzione Nel nostro caso la risposta al comando indica che il dominio # a2ensite tuodominio.it
alternativa.
non è operativo. Considerando che si tratta di un esempio, Enabling site tuodominio.it.
Per approfondire,
visitate https:// non c'è niente di anomalo. In condizioni regolari dovrebbe To activate the new configuration, you need to run:
nginx.org. invece mostrare un indirizzo IP. Per ottenere l’ultima service apache2 reload
versione di Drupal, consigliamo di visitare https://www. L’ultimo comando crea un soft link per tuodominio.conf

60 RASPBERRY PI
Drupal

Drupal 8 vs altri CMS


Drupal, ovviamente, non è l'unico CMS volume di traffico. Le potenzialità di drush, Se volete andare oltre le impostazioni
disponibile. Ce ne sono molti altri, tra cui inoltre, giocano un ruolo di primo piano predefinite e preferite creare qualcosa
WordPress e Joomla. Dal punto di vista quando ci si deve cimentare con più attività di personale, allora è il CMS che fa per voi.
estetico, WordPress ha molte più amministrative complesse. Sfruttando Basta spostarsi nella scheda Structure, fare
caratteristiche e potenzialità rispetto agli altri la shell, lanciate diverse istanze click su Content Types e seguire le istruzioni
due. Infatti è il più usato e consigliato in contemporanea e senza perdere tempo a schermo. In definitiva, chi opera su siti
in ambito fotografico. Anche sotto il profilo nei menu grafici (a condizione di potersi semplici e veloci da amministrare può
dell'amministrazione, WordPress si conferma collegare al server Web tramite SSH). sfruttare senza problemi WordPress
come il più semplice e intuitivo. Dall'altra Il principale cavallo di battaglia di Drupal, o Joomla. Chi invece prevede di gestire
parte, Drupal sfoggia prestazioni migliori su cui peraltro abbiamo puntato in questo un grande portale trafficato, ha in Drupal
quando ha a che fare con pagine a intenso tutorial, consiste nella sua versatilità. il suo miglior strumento di lavoro.

nella directory /etc/apache2/sites-available. Ricordate è il proprietario del servizio. Ciò significa che tutti i file
che se un file di configurazione non ha estensione .conf,
a2ensite non funziona:
e le directory collegate a Drupal appartengono allo stesso
profilo. A ogni modo, si può proseguire così:
Tip
# a2ensite tuodominio.it # cd /srv/www
La documentazione
ERROR: Site tuodominio.it does not exist! # chown -R www-data:root tuodominio.it di Drupal
Non è obbligatorio dare un nome al file di configurazione # ls -ld tuodominio.it/ è disponibile
di Apache dopo lo stesso nome del dominio. Farlo, tuttavia, drwxr-xr-x 4 www-data root 4096 apr 14 10:53 dr8. su https://www.
vi aiuterà a ricordare la sua funzione. In tuodominio.conf tuodominio.it/ drupal.org/
documentation.
aggiungete le istruzioni che seguono: Riavviate Apache per rendere operative le modifiche:
La guida per
<VirtualHost *:80> # /etc/init.d/apache2 reload sviluppatori, invece,
ServerAdmin anEmail@gmail.com [ ok ] Reloading apache2 configuration (via systemctl): la trovate al link
ServerName tuodominio.it apache2.service. https://www.
DocumentRoot /srv/www/tuodominio.it/public_html/ Se adesso vi collegate al dominio, compare la pagina drupal.org/docs/
develop. Il forum
ErrorLog /srv/www/tuodominio.it/logs/error.log d’installazione di Drupal 8. si trova all'indirizzo
CustomLog /srv/www/tuodominio.it/logs/access.log https://www.
myformat Configurare MySQL drupal.org/forum.
Per questo progetto potete usare qualsiasi database Web.
<Directory /srv/www/tuodominio.it/public_html/> Tuttavia abbiamo scelto MySQL che per essere installato
Options Indexes FollowSymLinks prevede le seguenti fasi:
AllowOverride All $ mysql -u root -p
Require all granted Enter password:
</Directory> ...
</VirtualHost> mysql> CREATE USER 'lxp'@'localhost' IDENTIFIED BY
Ora dovrete creare le directory necessarie in base a quanto 'password';
espresso in tuodominio.it.conf: Query OK, 0 rows affected (0.00 sec)
# mkdir /srv/www/tuodominio.it mysql> CREATE DATABASE LXP;
# mkdir /srv/www/tuodominio.it/public_html
# mkdir /srv/www/tuodominio.it/logs
# cd /tmp
# tar zxvf drupal-8.3.1.tar.gz
# ls -ld /tmp/drupal-8.3.1
drwxr-xr-x 8 root root 4096 apr 6 02:38 /tmp/drupal-8.3.0
# cd /srv/www/tuodominio.it/public_html/
# mv /tmp/drupal-8.3.1/* .
# mv /tmp/drupal-8.3.1/.* .
Sebbene non sia obbligatorio collocare i propri siti nella
stessa directory di root, è comunque consigliabile.
Infatti è per questo che abbiamo inserito tuodominio.it
in /srv/www. Gli ultimi due comandi aggiungono i file
d’installazione di Drupal 8 nella cartella indicata. Le prime
tre istruzioni, invece, generano le directory necessarie.
Se non sapete a quale utente appartiene il processo
di Apache, potete scoprirlo con:
# ps aux | grep apache | grep -v grep | head -1 | awk ‘{print
$1}’
www-data Una volta installato Drupal, entrate nel menu Configuration. Da qui potete
Dal nostro output, risulta che l’account www-data gestire le impostazioni principali del portale

RASPBERRY PI 61
TutorialRaspberry Pi Web

“Drush permette di gestire # drush --version


Drush Version : 8.1.7
Drupal da riga di comando, Per visualizzare tutte le opzioni di drush,
si può eseguire la funzione drush senza
facendovi risparmiare tempo” argomenti. Se doveste riscontrare problemi,
aggiungete il parametro --debug che mostra
Query OK, 1 row affected (0.00 sec) le informazioni su ciò che accade dietro le quinte, incluse
mysql> GRANT ALL PRIVILEGES ON LXP.* to 'lxp'@ le note interne. Il comando drush core-status mostra una
localhost; panoramica generale dell'installazione di Drupal. Se siete
Query OK, 0 rows affected (0.00 sec) al di fuori della directory public_html, è necessario lanciare
Per prima cosa create un nuovo utente (lxp), cui segue la precedente istruzione in questo modo:
la generazione di un database (LXP) che conterrà i dati # drush -r /srv/www/miodominio.it/public_html core-status
di Drupal 8. Infine fornite all'account le autorizzazioni utili Drupal version : 8.2.3
ad amministrare LXP. Appuntatevi i dati inseriti, perché Site URI : http://default
verranno chiesti in seguito. Aprite il browser e collegatevi Database driver : mysql
al vostro dominio che in questo caso è tuodominio.it, Database hostname : localhost
quindi seguite le istruzioni. In primo luogo scegliete Database port : 3306
la lingua desiderata e continuate con l'installazione Database username : lxp
standard. Nella terza schermata dovete riportare Database name : LXP
le informazioni riguardanti il database. Nella sezione Database : Connected
Advanced Option, se non siete sicuri di cosa state Drupal bootstrap : Successful
facendo, non toccate nulla. Al termine basta fornire Drupal user :
le credenziali del nuovo sito Web, inclusi nome utente Default theme : bartik
e password dell'amministratore. Trattandosi di un accesso Administration theme : seven
admin, prendete tutte le precauzioni perché non PHP configuration : /etc/php5/cli/php.ini
sia facilmente attaccabile. Ricordate che la maggior parte PHP OS : Linux
degli hacker cercherà di forzare il profilo con variabili come Drush script : /usr/local/bin/drush
admin, root, super, superuser e via dicendo. Se qualcosa Drush version : 8.1.7
non dovesse funzionare, controllate sempre i log di Apache Drush temp directory : /tmp
in /srv/www/tuodominio.it/logs e quelli di Drupal 8 Drush configuration :

Tip nella scheda Reports. Drush alias files


Install profile
:
: standard

Se non trovate un
Drupal Shell Drupal root : /srv/www/tudominio.it/public_
modulo per Drupal Drush significa DRUpal SHell e rappresenta l'interfaccia html
8, potete ripiegare di scripting e riga di comando del CMS. Se siete amanti Drupal Settings File : sites/default/settings.php
su Drupal 7, delle stringhe di codice, drush è il vostro miglior alleato. Site path : sites/default
decidendo Potete addirittura utilizzarlo con cron. Vi riveliamo però File directory path : sites/default/files
poi di aggiornare
un grande segreto: DRUpal SHell è solo uno script PHP Temporary file directory path : /tmp
in seguito. La scelta
dipende dal sito che può essere installato come segue... Sync config path : sites/default/files/config_
Web che dovete # php -r “readfile('https://s3.amazonaws.com/files.drush. XRjI0twGrIAUdNGMxs7V2-
creare, nonché org/drush.phar');" > drush ercPcTewG2lONGHKRoLP1WjTo0-4EpJRVYs7lQCeRwi-
dal tempo e dalle
# chmod 755 drush hOKJRqCw/sync
risorse disponibili.
# mv drush /usr/local/bin Se avete più piattaforme Drupal, l'opzione core-status
può fornire una rapida panoramica sul loro stato. Il tutto
senza accedere all'interfaccia Web del CMS. Il comando
che segue, invece, visualizza le opzioni di drush relative
a backup e ripristino.
$ drush | grep -1 -i backup
Core drush commands: (core)
archive-dump (ard, Backup your code, files, and
database into a single file.
archive-backup, arb)
archive-restore Expand a site archive into a Drupal
web site.
Per lanciare un backup di un sito Web con Drupal, dovrete
pertanto impiegare queste istruzioni:
# drush -r /srv/www/tuodominio.it/public_html archive-dump
Database dump saved to /tmp/drush_
tmp_1480314619_583bcefb254bd/LXP.sql [success]
Archive saved to [ok]
Quando premete+Add Content e scegliete Article, si apre questa pagina /root/drush-backups/archive-dump/20170424063011/
che permette di aggiungere un nuovo contenuto LXP.20170424_063012.tar.gz

62 RASPBERRY PI
DrupalDrupal 8

I moduli del CMS


Dopo aver installato Drupal 8, probabilmente è modificare l'interfaccia di gestione del CMS, (www.drupal.org/project/devel), una suite
avrete bisogno di aggiungere alcuni moduli. rendendola più diretta e pratica. C'è poi il plug- dedicata a programmatori di moduli e temi.
Fate click sull'opzione Extend per visualizzare in Google Analytics che si occupa di integrare Se avete intenzione di aprire un sito
i componenti installati. Nella colonna a destra il servizio di statistica all'interno del CMS. di e-commerce, non può mancare Ubercat
trovate una breve descrizione di ciascuno. Da non dimenticare Simple XML sitemap (https://www.drupal.org/project/ubercart),
Ricordate che i moduli abilitati sono quelli con (https://www.drupal.org/project/simple_ il plug-in più popolare per i portali commerciali.
il segno di spunta davanti. Tutti i componenti sitemap) e XML sitemap (https://www. Naturalmente esistono centinaia di altri
aggiuntivi per Drupal sono disponibili su www. drupal.org/project/xmlsitemap), due add-on componenti aggiuntivi che vale la pena provare.
drupal.org/project/project_module. per creare e gestire la mappa da dare in pasto Per motivi di spazio è impossibile elencarli tutti,
Un ottimo plug-in dedicato agli sviluppatori ai motori di ricerca per una migliore ma è importante ricordare che la potenza
è ctools (Chaos tool suite), che potete trovare indicizzazione del sito. Sempre per la parte SEO di Drupal sta proprio nella sua flessibilità. Usare
su www.drupal.org/project/ctools. Un altro c'è Metatag (https://www.drupal.org/ questo CMS senza sfruttare i moduli è inutile.
modulo molto utile per gli amministratori project/metatag) che aggiunge in automatico Detto questo, fate una scelta oculata e installate
è invece Admin Toolbar (https://www.drupal. metadati strutturati ai vostri contenuti. Un altro solo quelli realmente necessari. In caso
org/project/admin_toolbar). Il suo scopo add-on che ci sentiamo di consigliare è Devel contrario rischiate di rallentare l'infrastruttura.

così un profilo con privilegi amministrativi. La struttura


di users_field_data può essere visionata con il seguente
comando (dopo il collegamento al database LXP):
tmysql> desc users_field_data;
Se volete esaminare l'intero schema del database di Drupal
8, fate questa richiesta:
mysql> SELECT table_name FROM INFORMATION_
SCHEMA.TABLES
WHERE table_schema = ‘LXP’;
Se avete un portale con Drupal 7 e volete aggiornare alla
versione 8, consigliamo di fare un backup totale dei
contenuti. Anche se la procedura è indolore e di solito priva
di rischi, è meglio giocare d'anticipo e premunirsi
da eventuali spiacevoli eventi. In ogni caso, il modo migliore
per prendere confidenza con Drupal è provare. Va anche
detto che recentemente le offerte dei provider Internet si
sono aggiornate con soluzioni che prevedono il CMS già
incluso nello spazio Web. Basta seguire le procedure
guidate e in pochi minuti avrete Drupal pronto all'uso.
Per installare un nuovo modulo è sufficiente accedere Potete anche seguire un'altra strada usando bitnami,
alla voce Extend che trovate nel menu superiore, quindi https://bitnami.com. Questo servizio consente di
fare click su + Install new module cimentarsi con diversi CMS, tra cui questo trattato nel
tutorial, con la massima semplicità per fare prove. LXP
Il salvataggio è stato archiviato con il nome LXP.20170424
_063012.tar.gz. Potete visualizzarne il contenuto senza
decomprimere il file con:
# tar ztvf /root/drush-backups/archive-
dump/20170424063011/LXP.20170424_063012.tar.gz
Per installare gli aggiornamenti tramite drush, usate:
# drush -r /srv/www/tuodominio.it/public_html up
Update information last refreshed: Mon, 24/04/2017 - 08:32
No code updates available. [ok]
Se vi state chiedendo come faccia drush a collegarsi
al database corretto, dovete ricordare che Drupal 8 archivia
tutte le informazioni relative a questo componente
in ./sites/default/settings.php. Fatta eccezione per i file
memorizzati nella directory public_html, tutto il resto,
inclusi post, utenti e impostazioni, è conservato nel
database. Chiunque abbia accesso a tale strumento
è in grado di modificare il vostro portale Drupal. Per gli
utenti, fortunatamente, le informazioni sono crittografate
nella tabella users_field_data. Il rovescio della medaglia
non è però di poco conto. Un hacker abbastanza esperto Questo è il risultato del tutorial: un sito Web con Drupal 8 pienamente
potrebbe aggiungere alcune voci a questo indice, creando operativo. Basta solo aggiungere i contenuti

RASPBERRY PI 63
Raspberry Pi Python

Un copy fatto
su misura
Ecco come sviluppare in Python 3 una versione alleggerita
del classico comando cp per copiare in sicurezza i propri file

T
I FILE PER SEGUIRE utti i sistemi operativi offrono almeno un modo if len(sys.argv) >= 2:
IL TUTORIAL SONO di copiare file e Linux non fa eccezione. Per capire cosa = str(sys.argv[1])
DISPONIBILI QUI
quanto importante sia il comando cp, vi basti sapere else:
che si trova all’interno di /bin, che è disponibile anche print(‘Argomenti insufficienti!’)
se avviate la macchina Linux in modalità single user. sys.exit(0)
www.sprea.it/
SP21_copy Utilizzare cp if os.path.isdir(cosa):
L’output che segue mostra diversi utilizzi dell’utility cp: print(cosa, ‘è una cartella!’)
$ ls -l /bin/cp elif os.path.isfile(cosa):
-rwxr-xr-x 1 root root 150912 ott 15 2015 /bin/cp print(cosa, ‘è un file!’)
$ cp /bin/cp . Il metodo os.path.isdir() ci dice se il parametro è una cartella
$ ls -l cp o meno, mentre os.path.isfile() indica se il suo argomento
-rwxrwxr-x 1 light light 150912 set 18 18:13 cp è un file regolare o meno. Dovreste notare che anche se sembra
$ rm cp ripetitivo eseguire entrambi i controlli, questo è il modo giusto
$ cp /bin/cp /tmp/ di fare il lavoro perché in Linux sono supportati altri tipi di file
$ ls -l /tmp/cp come i socket, i link e i pipe. Eseguendo fileOcartella.py
si ottiene un output simile a questo:

“Per l’importanza del comando $ ./fileOcartella.py .


. è una cartella!
cp, basta sapere che si trova $ ./fileOcartella.py /usr/
/usr/ è una cartella!
all’interno di /bin” $ ./fileOcartella.py /bin/cp
/bin/cp è un file!
-rwxr-xr-x 1 light light 150912 set 18 18:14 /tmp/cp Questa operazione è importante perché se il secondo
$ cp -n /bin/cp /tmp argomento da riga di comando di cp è una cartella, significa
$ cp -i /bin/cp /tmp che deve creare una copia del file originale, dato come primo
Tip cp: sovrascrivere “/tmp/cp”? y argomento, in quella cartella. Inoltre, se il primo argomento da
Il primo comando copia l’eseguibile di cp nella directory riga di comando è una cartella, lo script Python non funzionerà.
La programmazione corrente, come potete vedere, il nuovo file appartiene all’utente
di tool di sistema corrente mentre il file originale appartiene all’utente root. Lavorare con i file
è un’area L’ultimo comando cp mostra come utilizzare l’opzione -i. In questa sezione del tutorial vedremo i metodi Python 3
particolare dello Potete dare un’occhiata alla man page di cp(1) per avere collegati ai file. Questo ci permetterà di aggiungere funzionalità
sviluppo. Quando
UNIX era agli esordi
maggiori informazioni su questa opzione così come aggiuntive al nostro miocp.py. Il codice Python 3 che segue,
il solo modo per su tutte le altre opzioni supportate. salvato come operazioniFile.py, mostra alcuni metodi
scrivere software che esplorano i metadati dei file:
di sistema era
utilizzando C.
Identificare file e directory #!/usr/bin/env python3
Abbiamo la necessità di trovare un modo di differenziare
Ora possiamo
scrivere software tra cartelle e normali file, e si tratta di un lavoro import sys
di sistema per lo script fileOcartella.py. import os
utilizzando #!/usr/bin/env python3 import stat
altri linguaggi di from stat import *
programmazione
inclusi Python,
import os
Perl, Rust e Go. import sys if len(sys.argv) >= 2:
nomefile = str(sys.argv[1])

64 RASPBERRY PI
else:
print(‘Argomenti insufficienti!’) “Molti linguaggi di
sys.exit(0)
programmazione, inclusi C,
metadatiFile = [(nomefile, os.lstat(nomefile))] Perl e C++, offrono più
for nome, meta in metadatiFile: di un modo per copiare file”
if S_ISDIR(meta.st_mode):
print(‘È una cartella!’) #!/usr/bin/env python3
else: from shutil import copyfile
print(‘È un file regolare’) import sys
print(nome, ‘occupa’, meta.st_size, ‘byte’)
print(‘Permessi file:’, stat.filemode(os.stat(nomefile).st_ if len(sys.argv) >= 3:
mode)) sorgente = str(sys.argv[1])
La differenza tra os.lstat() e os.stat(), entrambi presenti destinazione = str(sys.argv[2])
in Python 3, è che il primo non segue i link simbolici, else:
il che lo rende più sicuro del secondo. Eseguendo print(‘Argomenti insufficienti!’)
operazioniFile.py si ottiene un output di questo tipo: sys.exit(0)
$ ./operazioniFile.py operazioniFile.py
È un file regolare try:
operazioniFile.py occupa 505 byte copyfile(sorgente, destinazione)
Permessi file: -rwxr-xr-x except IOError as e:
$ ./operazioniFile.py . errno, strerror = e.args
È una cartella! print(“Errore I/O ({0}): {1}”.format(errno,strerror))
. occupa 4096 byte La funzione copyfile() del modulo shutil fa tutto
Permessi file: drwxr-xr-x il lavoro per noi. Dato che questa tecnica utilizza un
Come potete vedere nel valore di “Permessi file” i file regolari singolo metodo non abbiamo alcun controllo su di essa,
iniziano con un meno, mentre le cartelle iniziano con la lettera d. il che a volte è una buona cosa, ma a volte può essere
cattiva. Il secondo metodo è incluso nel file copia2.py:
Un piccolo trucco! #!/usr/bin/env python3
Python ci permette di utilizzare comandi esterni nei nostri
script con l’aiuto del metodo os.system(). In questo modo import sys
potreste implementare l’utility per copiare i file utilizzando if len(sys.argv) >= 3:
lo stesso cp. Il codice che segue, salvato nel file trucco.py, sorgente = str(sys.argv[1])
ci mostra questa tecnica: destinazione = str(sys.argv[2])
#!/usr/bin/env python3 else:
print(‘Argomenti insufficienti!’)
import os sys.exit(0)
import sys
dimensione = 16384
if len(sys.argv) >= 3:
sorgente = str(sys.argv[1]) try:
destinazione = str(sys.argv[2]) with open(sorgente,‘rb’) as f1:
else: with open(destinazione,‘wb’) as f2:
print(‘Argomenti insufficienti!’) while True:
sys.exit(0) buf = f1.read(dimensione)
os.system(‘cp ’+ sorgente + ‘ ’ + destinazione) if buf:
In ogni caso questa tecnica non è consigliata e sarebbe n = f2.write(buf)
meglio evitarla. else:
break
Copiare file in Python 3 except IOError as e:
Molti linguaggi di programmazione, inclusi C, errno, strerror = e.args
Perl e C++, offrono più di un modo per copiare print(“Errore I/O ({0}): {1}”.format(errno,strerror))
file. Python 3 non fa eccezione, ovviamente. Questa tecnica utilizza il metodo write() per copiare i dati
In termini generali, quando avete diversi modi nel nuovo file utilizzando una variabile buffer chiamata buf.
per eseguire un compito dovreste scegliere la strada Utilizzare un buffer molto piccolo, tipo otto byte, potrebbe
più generica. Se tutte le strade sono generiche, mettere in pericolo le performance dello script. La soluzione
allora dovreste scegliere la più veloce. Se non sapete è quella di utilizzare un buffer relativamente grande nella RAM
in anticipo quale tecnica lo sia, potete eseguire della vostra macchina. Da notare che sia copia1.py sia copia2.
alcuni test per scoprirlo. In questa sezione vedremo py utilizzano il blocco ‘try’ per catturare e gestire potenziali
due modi per copiare un file in Python 3. Il primo errori durante la fase di copia. Anche se entrambe le tecniche
metodo è nel file copia1.py: sono buone, la seconda ci dà un maggior controllo sul processo

RASPBERRY PI 65
Raspberry Pi Python

“Quando avete diversi modi per destinazione = destinazione + ‘/’ + sorgente


print(‘Copia in’, destinazione)
eseguire un compito dovreste # Se la destinazione esiste già
scegliere la strada più generica” if os.path.isfile(destinazione):
print(destinazione, ‘Esiste già!’)
e potrebbe essere più efficiente: per questo l’implementazione #Se lo switch -n è spento controlliamo lo switch -i
Python 3 di cp che andremo a fare userà questa tecnica. if nSwitch == 0:
if iSwitch == 1:
Gestire le opzioni risposta = input(‘Sovrascrivere? [s|n]: ’)
La prima cosa da tenere in considerazione durante if risposta == ‘y’ or risposta == ‘Y’ or risposta == ‘s’ or
l’implementazione di miocp.py è cosa fare nel caso in cui risposta == ‘S’:
il file di destinazione esista già. In sostanza, dobbiamo print(‘Copio’, sorgente, ‘in’, destinazione)
cancellare il file originale o dobbiamo terminare il processo else:
di copia? Di default l’utility cp cancella la destinazione del file print(‘Non posso sovrascrivere’, destinazione)
a meno che non si utilizzi lo switch -n. Inoltre, utilizzando sys.exit(0)
l’opzione -i, cp ci chiederà se vogliamo sovrascrivere il file # Se lo switch -n è acceso fermiamo il programma
di destinazione o meno. Il secondo obiettivo è quello di riuscire elif nSwitch == 1:
a dire se il file di destinazione è una cartella e in questo caso sys.exit(0)
copiare il file in questa cartella. Iniziamo con il vedere come else:
processare le opzioni e gli argomenti da riga di comando print(‘Copio’, sorgente, ‘in’, destinazione)
collegati alla procedura di copia grazie al codice Python 3 Per semplificare il codice, il file sorgente deve sempre essere
presente in processaOpzioni.py: passato per primo e la destinazione per seconda, come potete
#!/usr/bin/env python3 vedere dal messaggio di utilizzo dello script stesso. Ora,
possiamo gestire tutte le opzioni che ci servono. Eseguendo
import os processaOpzioni.py otteniamo un output di questo tipo:
import sys $ ./processaOpzioni.py
Utilizzo: ./processaOpzioni.py sorgente destinazione [-in]
iSwitch = 0; $ ./processaOpzioni.py unfile
nSwitch = 0; Utilizzo: ./processaOpzioni.py sorgente destinazione [-in]
$ ./processaOpzioni.py unfile unaltrofile
if len(sys.argv) == 3: unfile non è un file. Esco...
sorgente = str(sys.argv[1]) $ ./processaOpzioni.py processaOpzioni.py nuovoFile
destinazione = str(sys.argv[2]) Copio processaOpzioni.py in nuovoFile
elif len(sys.argv) == 4: $ mkdir prova
sorgente = str(sys.argv[1]) $ ./processaOpzioni.py processaOpzioni.py prova
destinazione = str(sys.argv[2]) Copia in prova/processaOpzioni.py
opzione1 = str(sys.argv[3]) Copio processaOpzioni.py in prova/processaOpzioni.py
if opzione1 == “-i”: $ touch prova/processaOpzioni.py
iSwitch = 1; $ ./processaOpzioni.py processaOpzioni.py prova -n
if opzione1 == “-n”: Copia in prova/processaOpzioni.py
Tip nSwitch = 1; prova/processaOpzioni.py Esiste già!
elif len(sys.argv) >= 5: $ ./processaOpzioni.py processaOpzioni.py prova -i
Una chiamata Copia in prova/processaOpzioni.py
sorgente = str(sys.argv[1])
di sistema C è
semplicemente una destinazione = str(sys.argv[2]) prova/processaOpzioni.py Esiste già!
funzione C. Ciò che opzione1 = str(sys.argv[3]) Sovrascrivere? [s|n]: s
rende le chiamate opzione2 = str(sys.argv[4]) Copio processaOpzioni.py in prova/processaOpzioni.py
di sistema differenti if (opzione1 == “-i” or opzione2 == “-i”): $ ./processaOpzioni.py processaOpzioni.py prova -i
da una normale
iSwitch = 1; Copia in prova/processaOpzioni.py
funzione C è il fatto
che le chiamate if (opzione1 == “-n” or opzione2 == “-n”): prova/processaOpzioni.py Esiste già!
di sistema nSwitch = 1; Sovrascrivere? [s|n]: n
implementano else: Non posso sovrascrivere prova/processaOpzioni.py
funzionalità print(‘Utilizzo: ‘, sys.argv[0], ‘sorgente destinazione [-in]’) Anche se processaOpzioni.py non esegue realmente
di basso livello
e connettono il
sys.exit(0) l’operazione di copia del file, è molto vicino a ciò che vogliamo
kernel UNIX al resto fare, per questo utilizzeremo il codice di processaOpzioni.py
del mondo. Alla fine # Se il sorgente non è un file come scheletro per il nostro miocp.py.
anche i comandi if os.path.isfile(sorgente) == False:
del nostro codice
Python 3 legati alle
print(sorgente, ‘non è un file. Esco...’) La versione finale
operazioni sui file sys.exit(0) Qui è dove tutto ciò che abbiamo detto e il codice che abbiamo
sono tradotti scritto si uniscono. La versione finale della nostra
in chiamate # Se la destinazione è una cartella implementazione dell’utility cp, salvata in miocp.py, è questa:
di sistema C. if os.path.isdir(destinazione): #!/usr/bin/env python3

66 RASPBERRY PI
Copy

import os
import sys # Se la destinazione è una cartella
if os.path.isdir(destinazione):
def copiaFile(sorgente, destinazione): destinazione = destinazione + ‘/’ + sorgente
dimensione = 16384 # Se la destinazione esiste già
try: if os.path.isfile(destinazione):
with open(sorgente,’rb’) as f1: #Se lo switch -n è spento controlliamo lo switch -i
with open(destinazione,’wb’) as f2: if nSwitch == 0:
while True: if iSwitch == 1:
buf = f1.read(dimensione) risposta = input(‘Sovrascrivere? [s|n]: ’)
if buf: if risposta == ‘y’ or risposta == ‘Y’ or risposta == ‘s’ or
n = f2.write(buf) risposta == ‘S’:
else: copiaFile(sorgente, destinazione)
break else:
except IOError as e: sys.exit(0)
errno, strerror = e.args # Se lo switch -n è acceso fermiamo il programma
print(“Errore I/O ({0}): {1}”.format(errno,strerror)) elif nSwitch == 1:
sys.exit(0)
def main(): else:
iSwitch = 0; copiaFile(sorgente, destinazione)
nSwitch = 0;
if len(sys.argv) == 3: if __name__ == ‘__main__’:
sorgente = str(sys.argv[1]) main()
destinazione = str(sys.argv[2]) else:
elif len(sys.argv) == 4: print(“Questo è un programma standalone, non un
sorgente = str(sys.argv[1]) modulo!”)
destinazione = str(sys.argv[2]) Guardando sia miocp.py sia processaOpzioni.py potete
opzione1 = str(sys.argv[3]) vedere quanto siano simili ma anche un’importante
if opzione1 == “-i”: differenza: miocp.py utilizza due funzioni e la variabile __
iSwitch = 1; name__ nella sua implementazione. Quando si sviluppano
if opzione1 == “-n”: tool di sistema, la fase di test è cruciale tanto quanto
nSwitch = 1; l’implementazione perché serve a verificare che il tool faccia
elif len(sys.argv) >= 5: il lavoro per cui è stato sviluppato in modo corretto.
sorgente = str(sys.argv[1]) Per assicurarci che tutto funzioni facciamo questi test:
destinazione = str(sys.argv[2]) $ ./miocp.py miocp.py prova
opzione1 = str(sys.argv[3]) $ ./miocp.py miocp.py prova/unAltroFile
opzione2 = str(sys.argv[4]) $ ./miocp.py miocp.py prova/unAltroFile -i
if (opzione1 == “-i” or opzione2 == “-i”): Sovrascrivere? [s|n]: n
iSwitch = 1; $ ./miocp.py
if (opzione1 == “-n” or opzione2 == “-n”): Utilizzo: ./miocp.py sorgente destinazione [-in]
nSwitch = 1; Ben fatto, ora siete ufficialmente dei programmatori di tool
else: di sistema per Linux. LXP
print(‘Utilizzo: ’, sys.argv[0], ‘sorgente destinazione [-in]’)
sys.exit(0)
“Quando si sviluppano tool di
# Se il sorgente non è un file
if os.path.isfile(sorgente) == False: sistema, la fase di test è cruciale
print(sorgente, ‘non è un file. Esco...’)
sys.exit(0)
tanto quanto l’implementazione”

Qualcosa sui permessi UNIX

O
gni file Linux ha dei permessi a esso e ci dice il tipo di dato, gli altri nove posti può essere scritto anche come 644 perché rw-
associati. Guardiamo questo output: possono essere divisi in tre gruppi ognuno di tre è considerato simile a 110, che corrisponde
$ ls -l miocp.py dati.txt bit. Il primo set ci dice i permessi dell’utente, a 6 e r-- è uguale a 4. Allo stesso modo, rwxr-
-rw-r--r-- 1 light light 0 set 19 19:31 dati.txt il secondo set riguarda i permessi del gruppo xr-x può essere rappresentato come 755.
-rwxr-xr-x 1 light light 1926 set 19 19:13 miocp.py Linux, e l’ultima parte riguarda i permessi di Ci sono diversi tipi di permessi per i file UNIX,
La prima colonna di questo output del tutti gli altri utenti. Se conoscete la matematica inclusi i file che non possono essere
comando ls ci dice i permessi di ogni file. Come binaria capirete facilmente che ogni set può modificati o aperti dall’utente corrente perché
potete vedere, i permessi di ogni file occupano avere i valori che vanno da 000 a 111, che nel appartengono ad altri utenti. Se avete
10 posti, che possiamo considerare come bit. sistema numerico decimale corrisponde ai i permessi giusti potete modificare quelli
A parte il primo bit, che è definito da Linux numeri che vanno da 0 a 7. Quindi rw-r--r-- di un file utilizzando il comando chmod.

RASPBERRY PI 67
Raspberry Pi Python

Python: scrivere
il proprio find
Questa utility da riga di comando è utile per trovare velocemente file e cartelle.
Ecco come scrivere la propria versione di questo tool

F
I FILE PER SEGUIRE ind è uno strumento Unix popolare e comodo che la filosofia Unix, find non stampa nessun output. Il secondo
IL TUTORIAL SONO ci aiuta a trovare file e cartelle all'interno della nostra comando find cerca nell’albero delle cartelle partendo dalla
DISPONIBILI QUI
macchina. In questo tutorial vedremo come cartella attuale i file o le cartelle che si chiamano “python”,
implementare soltanto una piccola parte di esso ma una volta invece il terzo comando cerca soltanto le cartelle. L’ultimo
capito il codice Python 3 di queste pagine potrete esempio ritorna un messaggio di errore perché l’opzione -type
www.sprea.it/ implementare le altre funzionalità in autonomia. non è completa. Da notare che nei sistemi Unix il punto
SP21_python singolo (.) fa riferimento alla cartella corrente mentre due
Le sue basi punti (..) fanno riferimento alla cartella padre. Questo tipo
In questa sezione vedremo l'utilizzo di questa utility attraverso di notazione è molto comoda se non si vogliono scrivere
degli esempi facili da capire. Il codice qui sotto mostra i percorsi completi. L’utility find può fare molte altre cose,
un utilizzo di base del comando: essendo un comando molto potente, ma non possiamo
$ find /home/light -name mioFind.py coprirle tutte in questa sede. La cosa buona è che una volta
/home/light/codice/mioFind.py che avrete sviluppato la vostra versione in Python 3 sarà
$ find . -name python relativamente semplice estenderla per supportare altre
./python opzioni. La cosa più difficile è sviluppare una prima versione
./python/python funzionante. Sapere cosa si andrà a implementare
$ find . -type d -name python è fondamentale, quindi cercate sempre di capire con chiarezza
./python quali funzionalità volete inserire! L’immagine sulla sinistra
$ find . -type -name python mostra una piccola parte del manuale dell’utility find.
find: L'argomento di -type deve contenere solo una lettera
Il primo comando cerca in tutte le cartelle partendo da __main__ e __name__
/home/light, che è un percorso assoluto perché inizia dalla Anche se non è necessario, è buona norma all’inizio
directory root (/), e trova tutti i file o le directory che si dell’esecuzione di uno script Python 3 testare il valore della
chiamano mioFind.py. Se ci sono delle corrispondenze variabile __name__. Diamo un’occhiata al codice che segue
mostra i risultati a schermo, altrimenti in accordo con salvato come file b.py:
if __name__ == '__main__':
print('Questo è b.py eseguito come ', __name__)
else:
print('Questo è b.py eseguito da: ', __name__)
Ciò che fa __name__ è determinare se il file viene importato
da un altro modulo oppure no. Quando uno script Python 3
viene eseguito come programma standalone, il valore della
variabile __name__ è __main__. Questo viene definito
automaticamente da Python 3. Vediamo il codice in azione:
$ cat a.py
import b
print("Ecco il modulo a!")
$ python3 b.py
Ecco b.py eseguito come __main__
$ python3 a.py
Ecco b.py eseguito da: b
Ecco il modulo a!
Questa immagine mostra una piccola parte dalla man page dell'utility find, $ ls -l __pycache__/
potete visualizzarla digitando man find totale 4

68 RASPBERRY PI
Il tool da riga di comando time

L’
utility time può aiutarvi a misurare le
performance dei vostri programmi mostrando
informazioni utili relative alla loro esecuzione.
Questo tool esegue il comando specificato e ritorna
delle statistiche sui tempi dello stesso una volta
conclusa l’esecuzione del comando. Potete vedere
il suo output nell’immagine qui a destra.
Le statistiche sui tempi si dividono in tre parti: real, user
e sys. Il primo è il tempo che intercorre dall’inizio
alla fine. Il secondo è il tempo speso dalla CPU
in user-mode. Il terzo è il tempo speso dalla CPU nel
kernel. Per semplificare, Sys è il tempo nel quale il vostro
programma sta aspettando che Linux esegua qualcosa
per lui, mentre User è il tempo in cui il vostro programma
sta utilizzando la CPU. Sommando i tempi di User e Sys
potete scoprire quanto tempo CPU utilizzate. Se la vostra
macchina ha diverse CPU e i vostri processi utilizzano
thread multipli, i valori di questi due elementi potrebbero Questa immagine mostra la differenza di performance tra la versione
superare il valore del dato di Real. di os.walk() di Python 2.7.10 e quella di Python 3.5.2

-rw-rw-r-- 1 light light 226 lug 5 17:57 b.cpython-34.pyc print('**', root)


$ file __pycache__/b.cpython-34.pyc for file in files:
__pycache__/b.cpython-34.pyc: python 3.4 byte-compiled percorso = os.path.join(root,file)
Dopo aver utilizzato b.py come modulo, troviamo una nuova if os.path.exists(percorso):
cartella chiamata __pycache__ all'interno della directory print(percorso)
in cui ci troviamo. La cartella __pycache__ contiene del codice Eseguendo imparareWalk.py si ottiene un output simile
compilato per Python 3, che serve a velocizzare l’esecuzione a questo (ridotto per risparmiare spazio):
dei programmi Python. Potete cancellarla se volete, $ ./imparareWalk.py /home/light/codice
ma Python 3 la creerà di nuovo alla prossima esecuzione ** /home/light/codice
del modulo b.py o di qualunque altro modulo con funzionalità /home/light/codice/a.py
simili. Il comando file è un utility da riga di comando Linux ...
che permette di determinare il tipo di un file. Quindi, lo scopo ** /home/light/codice/__pycache__
della variabile __name__ è quello di permetterci di capire /home/light/codice/__pycache__/b.cpython-34.pyc
se il nostro codice Python è eseguito come programma Come potete vedere, imparareWalk.py visita tutto partendo
stand-alone oppure no e agire di conseguenza. A causa da una cartella passata come argomento e stampa l’elenco
dello scarso spazio a nostra disposizione, soltanto la versione dei file o delle directory che incontra: semplice ma molto
finale del codice trarrà beneficio da questa tecnica. efficace. Il metodo os.path.exists() si assicura che un file esista
prima di stamparlo. Assicuratevi di capire bene questa tecnica
Un’occhiata a os.walk() prima di procedere con il resto del tutorial. È giunta l’ora di
Questa funzione è estremamente comoda per visitare sviluppare la nostra prima versione dell’utility find in Python 3.
ricorsivamente un albero di cartelle e processare tutti i file
e le cartelle al suo interno. È interessante notare che os.walk() Effettuare ricerche con Python 3
necessita soltanto di un parametro, il nome della directory Ora che abbiamo tutti gli elementi necessari, è giunto
che si vuole visitare. Poi, un ciclo for fa il resto del lavoro il momento di combinarli insieme per creare la prima versione
scorrendo tutte le sottodirectory e i file all’interno della cartella della nostra utility, che chiameremo primoFind.py. Questa
principale passata come parametro a os.walk(). Il codice versione richiede due argomenti da riga di comando, il primo
che segue, salvato come imparareWalk.py, mostra come è il nome della cartella dalla quale iniziare la ricerca, il secondo
utilizzare os.walk(): è il nome del file da cercare. Il contenuto del file primoFind.py è:
#!/usr/bin/env python3 #!/usr/bin/env python3

import os import os
import sys import sys

if len(sys.argv) >= 2: if len(sys.argv) >= 3:


directory = str(sys.argv[1]) directory = str(sys.argv[1])
else: nomefile = str(sys.argv[2])
print('Argomenti insufficienti!') else:
sys.exit(0) print('Argomenti insufficienti!')
sys.exit(0)
for root, dirs, files in os.walk(directory):

RASPBERRY PI 69
Raspberry Pi Python

#!/usr/bin/env python3

import os
import sys

def find(directory, nomefile, soloDir, soloFile):


if (soloDir == 0 and soloFile == 0):
soloDir = 1;
soloFile = 1;

for root, dirs, files in os.walk(directory):


if soloDir == 1:
if os.path.basename(os.path.normpath((root))) ==
nomefile:
print(root)
for file in files:
percorso = os.path.join(root,file)
if os.path.exists(percorso):
if soloFile == 1:
if file == nomefile:
In questa print(percorso)
immagine for root, dirs, files in os.walk(directory):
vediamo print('**', root) def main():
alcune for file in files: soloDir = 0;
semplici percorso = os.path.join(root,file) soloFile = 0;
esecuzioni del if os.path.exists(percorso): if len(sys.argv) == 3:
tool di sistema if file == nomefile: directory = str(sys.argv[1])
mioFind.py print(percorso) nomefile = str(sys.argv[2])
con lo scopo
Eseguendo primoFind.py si ottiene un output simile a: elif len(sys.argv) == 4:
di testare
$ ./firstFind.py . a.out directory = str(sys.argv[1])
lo script
$ ./primoFind.py . primoFind.py nomefile = str(sys.argv[2])
** . option1 = str(sys.argv[3])
./primoFind.py if option1 == "-d":
** ./__pycache__ soloDir = 1;
$ ./primoFind.py if option1 == "-f":
Argomenti insufficienti! soloFile = 1;
L’output qui sopra ci dimostra anche che il nostro script elif len(sys.argv) >= 5:
primoFind.py funziona. Le righe che iniziano con ** sono directory = str(sys.argv[1])
cartelle, utilizziamo questo tipo di output per assicurarci nomefile = str(sys.argv[2])
che primoFind.py visiti tutte le nostre directory, la versione option1 = str(sys.argv[3])
finale del nostro tool di sistema non genererà questo tipo option2 = str(sys.argv[4])
di output. primoFind.py trova anche i file desiderati. if (option1 == "-d" or option2 == "-d"):
Fin qui il nostro script primoFind.py sembra funzionare soloDir = 1;
come dovrebbe quindi possiamo continuare la nostra if (option1 == "-f" or option2 == "-f"):
implementazione e aggiungere funzionalità che un comando soloFile = 1;
find basilare dovrebbe avere. La cosa più importante else:
che ci manca è il supporto alle opzioni da riga di comando print('Utilizzo: ', sys.argv[0], 'cartella
che può essere una cosa insidiosa da implementare. nomefile [-df]')
sys.exit(0)
La versione finale # Se esiste il percorso continuiamo il lavoro
La versione finale di find si trova nel file mioFind.py, if os.path.isdir(directory):
la differenza principale tra questo file e primoFind.py find(directory, nomefile, soloDir,
è che il primo accetta due opzioni da riga di comando soloFile)
(conosciuti anche come switch). L’opzione -d dice a mioFind. else:
py di cercare soltanto cartelle, mentre lo switch -f indica a print('La cartella ', directory, ' non
mioFind.py di cercare soltanto file. Utilizzando entrambi gli esiste!')
switch, o nessuno di essi, mioFind.py cercherà entrambi i tipi!
È obbligatorio che il primo argomento da riga di comando sia il if __name__ == '__main__':
nome della cartella e che il secondo sia il nome del file o della main()
cartella che si sta cercando. Quindi, i due switch arriveranno else:
alla fine del comando senza un ordine particolare. Il codice print("Questo è un programma standalone, non un
di mioFind.py è il seguente: modulo!")

70 RASPBERRY PI
Un find personalizzato

La variabile __name__ viene spesso utilizzata insieme


alla funzione main(); se doveste decidere di utilizzare “Quando si lavora con file
mioFind.py come modulo, la presenza della funzione
main() vi permetterà di utilizzare le capacità di mioFind.
e directory, testare a fondo gli
py da altri programmi. Come potete vedere, una grande
parte di main() si occupa di gestire le opzioni da riga
script è davvero fondamentale”
di comando. Anche se esistono dei moduli che possono
aiutarvi a gestire gli argomenti e gli switch con molto os.walk() contro os.scandir()
meno codice, riteniamo che in questo modo il codice Se state utilizzando Python nella versione 3.5
sia più semplice da capire. La funzionalità chiave del o più recente, potete assolutamentye utilizzare
programma è implementata all’interno della funzione la funzione os.scandir()al posto di os.walk() perché
find(), che è molto simile al codice di primoFind.py. la prima è molto più veloce della seconda,
La funzione find() si assicura anche che soltanto per il semplicissimo motivo che non chiama os.stat().
i corretti tipi di output vengano prodotti. Le chiamate La buona notizia è che dalla versione 3.5 di Python
ai metodi os.path.basename() e os.path.normpath() os.walk() chiama automaticamente os.scandir()
servono a estrarre l’ultima parte del path, cioè il nome all’interno della sua implementazione quindi tutto
della cartella, e confrontarlo con il nome che stiamo sommato non dovete necessariamente modificare
cercando. Sono necessari perché altrimenti mioFind.py il vostro codice. In questa ultima parte del nostro
non riuscirebbe a trovare una stringa come “codice” tutorial andremo quindi a testare la differenza
in un percorso completo come /home/light/codice. di velocità tra os.walk() e os.scandir() utilizzando
In un altro tutorial di questa serie parleremo in modo il comando time. Nel test utilizzeremo la versione
approfondito di come processare gli argomenti 3.5.2 di Python, che utilizza os.scandir()
e le opzioni da riga di comando in Python 3. e la versione 2.7.10 che invece non lo utilizza.
Per rendere i test più affidabili possibile, dovete
Testare il codice effettuare le ricerche su alberi di cartelle più grandi
Fare questa azione è molto importante qualsiasi cosa si possibili, come per esempio sulle directory /usr o /var.
stia sviluppando, specialmente se si tratta di script che In questa sezione utilizzeremo una versione modificata
lavorano con file e directory. Quindi, dovrete eseguire dello script imparareWalk.py chiamato testVelocita.
alcuni test per verificare che mioFind.py funzioni come py, che contiene questo codice:
ci si aspetta, senza un’adeguata fase di test nessun # Test di velocità
tool può essere utilizzato in un sistema in produzione
perché potrebbe comprometterne la sicurezza import os
e la stabilità dell’intero sistema. Il primo test consiste import sys
nel provare a cercare un file che non esiste, il secondo
test prevede di cercare un file o una cartella che esiste if len(sys.argv) >= 2:
in un’unica istanza, e il terzo dovrà cercare un nome directory = str(sys.argv[1])
presente diverse volte nella struttura di cartelle nella else:
quale state cercando. Siccome non potete avere print('Argomenti insufficienti!')
lo stesso nome di file nella stessa directory più volte, sys.exit(0)
nel terzo caso il nome del file dovrà essere presente
in cartelle diverse. Gli ultimi due test si occuperanno totale = 0
di verificare che mioFind.py sia in grado di differenziare
correttamente tra cartelle e file quando si utilizzano for root, dirs, files in os.walk(directory):
gli switch appropriati. L’immagine all’inizio della pagina for file in files:
precedente mostra mioFind.py mentre esegue i test totale = totale + 1
appena descritti. La cosa buona con i test è che
ci insegnano anche a utilizzare il codice mentre print('Visitati', totale, 'file!')
lo proviamo. Eseguire mioFind.py senza alcun Lo screenshot che potete vedere nel box L’utility
argomento ci ritorna questo utile messaggio: da riga di comando time mostra diverse esecuzioni di
$ ./mioFind.py questo codice: come potete vedere la versione Python
Utilizzo: ./mioFind.py cartella nomefile [-df] 3.5 è significativamente più veloce! LXP

Trovare documentazione su os.scandir()

D
ato che questo tutorial utilizza cercare informazioni, incluso il sito della volete utilizzare. Ci sono volte in cui una
dei metodi Python relativamente documentazione di Python 3, l’utility da riga piccola opzione può fare la differenza
complessi, è molto importante di comando pydoc3 e la shell di Python 3. tra un programma che funziona e uno
leggere con attenzione la documentazione La documentazione online solitamente che non funziona. Se volete avere maggiori
di ogni metodo prima di utilizzarlo, altrimenti è la più aggiornata ed è disponibile anche informazioni sul metodo os.scandir() potete
avrete maggiori difficoltà a comprendere in italiano. L’obiettivo principale è quello andare all’indirizzo https://docs.python.
il codice. Ci sono diversi posti dove potete di reperire informazioni utili sui metodi che org/3/library/os.html#os.scandir.

RASPBERRY PI 71
Raspberry Pi Python

Scrivere un
tool di sistema
Ecco come sviluppare un comodo strumento in Python 3 per reperire
velocemente alcune informazioni sui vostri file di testo

L’
I FILE PER SEGUIRE argomento di questo tutorial è sviluppare una versione f = open (nomefile, 'r')
IL TUTORIAL SONO
DISPONIBILI QUI
Python 3 della famosa utility da riga di comando wc. for parola in f.read().split():
Questo è un tool relativamente semplice che offre print(parola)
soltanto tre opzioni principali, che implementeremo a nostra Dato però che wc conta il numero di parole per riga senza
volta. In altre parole, quando si decide di realizzare un’utility elaborarle, possiamo utilizzare questo codice:
www.sprea.it/ come questa è facile scegliere le funzionalità da supportare, nParole = len(riga.split())
SP21_pythonwc senza perdere troppo tempo per decidere cosa deve fare Il metodo split() separa le parole di una riga e il metodo len()
il vostro programma. Wc (l’abbreviazione di word count, cioè ritorna il numero di parole calcolato da split(). Infine, un file
conteggio parole) è una delle utility Unix da riga di comando di testo può essere processato anche carattere per carattere
più datate e permette di recuperare velocemente informazioni utilizzando il codice Python 3 che segue:
su di un file di testo. L’utility wc svolge diversi compiti come f = open (nomefile, 'r')
contare le parole, le righe e i caratteri del suo input, che di solito for parola in f.read().split():
è costituito da uno o più file di testo. Prima che vi possiate for carattere in parola:
arrabbiare: sappiamo che la più recente utility wc di GNU offre print (carattere)
più opzioni dell’implementazione originale. Per contare quanti caratteri ci sono in una riga non abbiamo
bisogno di processare ogni riga carattere per carattere, sarebbe
Leggere un file di testo un metodo troppo lento, possiamo semplicemente contare
La cosa più importante per riuscire a implementare questo tool la lunghezza utilizzando la funzione len().
è la capacità di leggere un file di testo. Il modo più pratico
di farlo è scorrendolo riga per riga ed elaborando ogni riga Creare wc
individualmente. Il codice Python 3 che segue mostra come Sfruttando il codice visto fin qui, possiamo ottenere
aprire un file e processarlo riga dopo riga: un programma che implementa le funzionalità centrali
f = open(nomefile,'r') di wc, che sono il contare i caratteri, le parole e le righe.
for riga in f: Chiamiamo questo script conta3.py:
riga = riga.rstrip() #!/usr/bin/env python3
print(riga)
La funzione rstrip() viene invocata per rimuovere il carattere import os
indicatore di fine riga. Fin qui abbiamo visto come leggere un file import sys
di testo riga per riga, il che risolve il problema di contare le righe
di un file di testo. Il programma che segue, salvato come if len(sys.argv) >= 2:
contaRighe.py implementa questa funzionalità: nomefile = str(sys.argv[1])
#!/usr/bin/env python3 else:
print('Argomenti insufficienti!')
import os sys.exit(0)
import sys nRighe = 0
nParole = 0
nomefile=str(sys.argv[1]) nCaratteri = 0
nRighe = 0 f = open(nomefile,'r')
f = open(nomefile, ‘r’) for riga in f:
for riga in f: nRighe = nRighe + 1
nRighe = nRighe + 1 nCaratteri = nCaratteri + len(riga)
print(nRighe) nParole = nParole + len(riga.split())
Potete processare un file di testo anche scorrendolo parola
per parola utilizzando questa tecnica: print('Righe:', nRighe, 'Parole:', nParole, 'Caratteri:', nCaratteri)

72 RASPBERRY PI
Eseguendo il file conta3.py si ottiene un output simile a questo:
$ ./conta3.py conta3.py Standard input, output ed error
Righe: 20 Parole: 54 Caratteri: 397
$ wc conta3.py Unix utilizza un concetto di stream $ ./mioWc.py < conta3.py
20 54 397 conta3.py standard dei dati, il che significa che ogni 27 78 524
Nel secondo comando abbiamo utilizzato wc per verificare programma ha automaticamente
che lo script conta3.py funzioni correttamente, ricordatevi accesso a tre stream: input, output ed Nota Questo metodo non funziona
error. Ognuno di essi ha un file descriptor con più file, ma con questo approccio
di testare sempre il vostro codice! Compiere questa attività
associato, rispettivamente 0, 1 e 2. Un file potete sfruttare lo standard input,
mentre si sta imparando come programmare permette
descriptor è un numero utilizzato come output ed error così come reindirizzare
di capire più in profondità il funzionamento del codice stesso. riferimento a un file aperto. Il comando lo standard error sullo standard output
Se c’è un errore nel vostro programma (e diciamolo, prima che segue mostra come usare un singolo e ignorare interamente l’output dello
o poi ci sarà; soprattutto se siete agli inizi) è meglio che salti file come input di un altro: standard error con un reindirizzamento.
fuori il prima possibile. Nella prossima sezione vedremo come
migliorare il codice di conta3.py.
Poi utilizziamo sys.stdin per leggere dallo standard input
Leggere dallo standard input come se fosse un normale file. Ora possiamo utilizzare
L’utility wc può elaborare direttamente i dati forniti dallo conta3.py in due nuovi modi (il modo visto prima continua
standard input. Quindi dobbiamo imparare a farlo anche noi con comunque a funzionare):
Python 3. Lo script che segue leggerà i dati dallo standard input $ cat conta3.py | ./conta3.py
quando non viene passato il nome del file come argomento Righe: 27 Parole: 78 Caratteri: 524
da riga di comando. L’altra opzione, cioè se viene passato $ ./conta3.py
il nome del file allo script, continuerà a funzionare esattamente 1234
come prima. Il modo più semplice per creare una pipe e passare Righe: 1 Parole: 1 Caratteri: 5
l’output di un programma a wc è utilizzare la sintassi seguente: $ ./conta3.py conta3.py
$ cat unFileDiTesto | wc Righe: 27 Parole: 78 Caratteri: 524
$ ls | wc $ cat conta3.py conta3.py | ./conta3.py
Attualmente, se proviamo a utilizzare questa tecnica Righe: 54 Parole: 156 Caratteri: 1048
con il nostro script otterremo un messaggio di errore: Come possiamo vedere dall’ultimo comando eseguito, il nostro
$ cat conta3.py | ./conta3.py script conta3.py accetta anche file multipli dallo standard input.
Argomenti insufficienti! Comunque, conta3.py non legge dallo standard input se
Ci serve quindi una versione migliorata di conta3.py ha un file da processare, anche se il file non dovesse esistere:
che implementi la funzionalità richiesta: $ cat mioWc.py | ./conta3.py conta3.py
#!/usr/bin/env python3 Righe: 27 Parole: 78 Caratteri: 524
$ wc mioWc.py
import os 79 310 2527 mioWc.py
import sys $ cat mioWc.py | ./conta3.py conta3
Traceback (most recent call last):
if len(sys.argv) >= 2: File "./conta3.py", line 21, in <module>
nomefile = str(sys.argv[1]) f = open(nomefile,’r’)
else: FileNotFoundError: [Errno 2] No such file or directory: 'conta3'
nomefile = None
Argomenti da riga di comando
nRighe = 0 L’utility wc originale supporta tre switch principali: -m Tip
nParole = 0 per contare soltanto i caratteri, -l per contare soltanto
nCaratteri = 0 le righe e -w per contare soltanto le parole. Anche la nostra Un programma
che viene eseguito
implementazione dovrà supportare questi tre switch. Lavorare
senza bisogno di
if nomefile == None: con più di due opzioni da riga di comando senza un modulo essere compilato
for riga in sys.stdin: che ci aiuti è stupido. Il codice Python 3 che segue, salvato di solito viene
nRighe = nRighe + 1 come rigaCom.py, mostra come lavorare sia con le opzioni chiamato script.
nCaratteri = nCaratteri + len(riga) da riga di comando sia con gli switch, grazie all’aiuto Invece, il codice che
ha bisogno di essere
nParole = nParole + len(riga.split()) di un utilissimo modulo chiamato argparse:
compilato prima
else: #!/usr/bin/env python3 dell’esecuzione
f = open(nomefile,'r') genera un
for riga in f: import os programma. Giusto
per confondere un
nRighe = nRighe + 1 import sys
po’ le cose, al giorno
nCaratteri = nCaratteri + len(riga) import argparse d’oggi potete fare
nParole = nParole + len(riga.split()) riferimento a un file
parser = argparse.ArgumentParser() di testo contenente
print('Righe:', nRighe, 'Parole:', nParole, 'Caratteri', nCaratteri) parser.add_argument("-m", default = False, action="store_true", codice Python
chiamandolo
In questo caso, tutto il lavoro viene svolto impostando il nome help="Conteggio caratteri", required=False)
indistintamente
del file a None, che è un valore speciale nel linguaggio Python parser.add_argument("-l", default = False, action="store_true", script o programma.
che significa che la variabile nomefile non ha alcun valore. help="Conteggio righe", required=False)

RASPBERRY PI 73
Raspberry Pi Python

“Se c’è un errore nel vostro $ ./rigaCom.py 1 2 3 4 -l 12


usage: rigaCom.py [-h] [-m] [-l] [-w] [nomifiles [nomifiles ...]]
programma è meglio che salti rigaCom.py: error: unrecognized arguments: 12
In generale è meglio inserire prima gli switch e poi i nomi dei file.
fuori il prima possibile!” Potete vedere l’help con:
$ ./rigaCom.py -h
parser.add_argument("-w", default = False, action="store_true", usage: rigaCom.py [-h] [-m] [-l] [-w] [nomifiles [nomifiles ...]]
help="Conteggio parole", required=False)
parser.add_argument("nomifiles", default = None, help="Nomi positional arguments:
dei files", nargs=’*’) nomifiles Nomi dei files
args = parser.parse_args()
if args.nomifiles == []: optional arguments:
print('Nessun file assegnato!') -h, --help show this help message and exit
else: -m Conteggio caratteri
for f in args.nomifiles: -l Conteggio righe
print(f) -w Conteggio parole
Come potete vedere, lo script rigaCom.py funziona abbastanza
if args.m == True: bene, quindi possiamo continuare con la nostra faticosa
print('-m attivato!') ma divertente implementazione di wc in Python 3.
else:
print('-m disattivato!') La versione finale
Una volta imparato quanto visto finora, la nostra impresa
if args.l == True: dovrebbe essere un processo abbastanza semplice.
print('-l attivato!') Di seguito troviamo il codice Python 3 della nostra versione
Tip else:
print('-l disattivato!')
di wc chiamata mioWc.py:
#!/usr/bin/env python3
Un libro molto
valido su Python if args.w == True: import os
3 è Dive Into print('-w attivato!') import sys
Python 3 (in else: import argparse
italiano Immersione print('-w disattivato!')
in Python 3)
che potete
Il metodo parser.add_argument() aggiunge un nuovo switch, def conta(nomefile):
trovare online mentre la variabile args contiene i valori definiti nRighe = 0
all’indirizzo http:// per gli switch. Eseguendo rigaCom.py si ottiene nParole = 0
gpiancastelli. un output simile a questo: nCaratteri = 0
altervista.org/
$ ./rigaCom.py -l 1 if nomefile == None:
dip3-it/. Altri
due libri utili 1 mioTesto = sys.stdin.read()
per sviluppatori -m disattivato! caratteri = len(mioTesto)
esperti sono -l attivato! parole = len(mioTesto.split())
Fluent Python di -w disattivato! righe = len(mioTesto.split('\n'))
Luciano Ramalho
ed Effective
$ ./rigaCom.py -l -w return (righe-1, parole, caratteri)
Python di Brett Nessun file assegnato! else:
Slatkin (entrambi -m disattivato! f = open(nomefile,'r')
in inglese). Leggere -l attivato! for riga in f:
libri è molto utile,
-w attivato! nRighe = nRighe + 1
ma mai quanto la
pratica! Purtroppo, la forma seguente darà errore perché include uno nCaratteri = nCaratteri +
switch in mezzo a nomi di file: len(riga)

Processare argomenti da riga di comando


Quando si esegue un comando Linux o uno script #!/usr/bin/env python3 $ ./scriptConUnNomeStrano.py 1 2 -w
di solito si aggiunge del testo dopo il nome Tutti gli argomenti: ['./scriptConUnNomeStrano.
del programma, questo testo viene definito import os py', '1', '2', '-w']
argomento da riga di comando, vi si può accedere import sys 1
da qualsiasi linguaggio di programmazione print('Tutti gli argomenti:', str(sys.argv)) 2
e Python 3 non fa eccezione. Tradizionalmente, gli for i in sys.argv[1:]: -w
argomenti da riga di comando in un sistema UNIX print (i) Il primo comando print() mostra tutti gli
sono salvati in un array o in una struttura dati A questo punto possiamo semplicemente argomenti, mentre il ciclo for li processa uno per
simile, il primo elemento dell’array che ha come salvare il codice Python qui sopra con nome uno ignorando il primo, che è il nome dello script.
numero di indice lo 0, di solito è il nome del file scriptConUnNomeStrano.py, rendendolo Comunque, come potete vedere nel file mioWc.py
programma stesso! Si possono processare quindi eseguibile da terminale e avviandolo del tutorial principale, utilizzare un modulo come
gli argomenti da riga di comando in Python 3 così: per ottenere il seguente output: argparse può rendere la vita molto più semplice!

74 RASPBERRY PI
Leggere i file

nParole = nParole + len(riga.split()) daStampare + ''+'{:15}'.format(f)


return (nRighe, nParole, nCaratteri) print(daStampare)
daStampare = ''
Tip
def main(): # Stampa i totali
Una pipe è un
caratteri = 0 if nFiles > 1: modo veloce per
parole = 0 print('{:>10}'.format(totaleR) + far comunicare
righe = 0 '{:>10}'.format(totaleP) + '{:>10}'.format(totaleC) + '' + '{:15}'. due processi Unix.
Quando si utilizza
totaleC = 0 format('totale'))
una pipe l’output
totaleP = 0 di un programma
totaleR = 0 if __name__ == '__main__': diventa l’input di un
nFiles = 0 main() altro programma.
daStampare = '' else: Per creare una pipe
vi basta inserire una
parser = argparse.ArgumentParser() print("Questo è un programma stand alone non un
barra verticale (|)
parser.add_argument("-m", default = False, modulo!") tra due comandi.
action="store_true", help="Conteggio caratteri", required=False) Il codice è abbastanza semplice, la maggior parte di esso ha a
parser.add_argument("-l", default = False, che fare con lo stampare l’informazione corretta in funzione
action="store_true", help="Conteggio righe", required=False) degli switch passati. La funzionalità principale di mioWc.py che
parser.add_argument("-w", default = False, è il contare i caratteri, le parole e le righe richiede meno codice
action="store_true", help="Conteggio parole", required=False) di quanto ci si aspetterebbe e viene implementato in modo
parser.add_argument("nomifiles", default = None, abbastanza semplice all’interno della funzione conta() che
help="Nomi dei files", nargs='*') ritorna tre valori: il numero dei caratteri, il numero delle parole e
args = parser.parse_args() il numero delle righe. Il resto della nostra utility wc è gestita
if args.nomifiles == []: all’interno della funzione main().
(righe, parole, caratteri) = conta(None)
if args.l == True: Test e benchmark
daStampare = '{:>10}'.format(righe) I test che seguono si occupano di garantirci che mioWc.py
if args.w == True: funzioni come ci si aspetta:
daStampare = daStampare + $ ./mioWc.py mioWc.py
'{:>10}'.format(parole) $ ./mioWc.py mioWc.py mioWc.py
if args.m == True: $ ./mioWc.py mioWc.py mioWc.py | ./mioWc.py
daStampare = daStampare + $ cat mioWc.py | ./mioWc.py -m -l
'{:>10}'.format(caratteri) $ cat mioWc.py mioWc.py | ./mioWc.py -l
if args.m == False and args.w == False and $ ls | ./mioWc.py
args.l == False: In genere gli esempi sono utili anche per capire come funziona
daStampare = '{:>10}'.format(righe) un nuovo comando. Ora vedremo come creare un nuovo posto
+ '{:>10}'.format(parole) + '{:>8}'.format(caratteri) nel quale inserire i propri script Python 3 e renderli disponibili da
if daStampare != '': qualsiasi punto del sistema Linux. Dato che la shell di default
print(daStampare) nelle macchine Linux è Bash, in questa sezione vedremo come
daStampare = '' cambiare la variabile PATH di questa shell. Per prima cosa
else: dobbiamo controllare il valore corrente della variabile PATH:
for f in args.nomifiles: $ echo $PATH
nFiles = nFiles + 1 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/
(righe, parole, caratteri) = conta(f) games:/usr/local/games
totaleC = totaleC + caratteri Quindi, creiamo una directory chiamata bin all’interno della
totaleP = totaleP + parole nostra directory home e aggiungiamo il suo percorso completo
totaleR = totaleR + righe all’interno della variabile PATH:
if args.l == True: $ mkdir ~/bin
daStampare = $ export PATH="$HOME/bin:$PATH"
'{:>10}'.format(righe) $ echo $PATH
if args.w == True: /home/light/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/
daStampare = sbin:/bin:/usr/games:/usr/local/games
daStampare + '{:>10}'.format(parole) Da notare che l’alias dato dal carattere tilde (~) corrisponde alla
if args.m == True: propria directory home. Poi, inseriamo unoScript.py all’interno
daStampare = della directory bin e utilizziamo il comando which per trovarlo:
daStampare + '{:>10}'.format(caratteri) $ mv unoScript.py ~/bin/.
if args.m == False and args.w $ which unoScript.py
== False and args.l == False: /home/light/bin/unoScript.py
daStampare = $ unoScript.py
'{:>10}'.format(righe) + '{:>10}'.format(parole) + '{:>10}'. Se volete modificare la vostra variabile PATH in modo
format(caratteri) permanente dovrete modificare il file ~/.profile o ~./.bashrc.
if daStampare != '': Se non sapete come farlo dovreste contattare il vostro
daStampare = amministratore locale per chiedere aiuto. LXP

RASPBERRY PI 75
Raspberry Pi Python

Django: il Web
per chi ha fretta
Tuffatevi nel mondo di questo framework che cambierà il modo
in cui sviluppate le vostre applicazioni per Internet
un’ingegneria brillante oltre a moltissime funzionalità
da utilizzare. Coprire tutto ciò che può fare Django
in un unico articolo sarebbe impossibile (per questo
c’è la documentazione), cerchiamo comunque di vedere
tecnicamente da cos’è composto il cuore di Django,
che si divide in cinque componenti principali.

App, Modelli e View


Utilizzare funzionalità in Django solitamente significa sfruttare
un’app, progettata per svolgere una singola funzione e farlo
bene. Un’app in Django è una struttura codice autoconclusiva
creata da diversi file che normalmente contengono tutto il
necessario per fare qualcosa, può contenere anche referenze
ad altre app se avete bisogno di condividere i dati tra di esse.
Un’app è formata da diversi file base. Potete crearne di nuove
e importarle dove pensate vi possano servire, per costruire
semplici applicazioni la struttura di base è più che sufficiente.
I model in Django sono invece meccanismi che permettono
agli sviluppatori di interagire con un database (facendo cose
come creare, leggere, aggiornare e cancellare dati) senza
accedere direttamente al livello database della stack
con il proprio codice. I model sono quello che nel mondo
software viene chiamato livello di astrazione tra il database
e l’applicazione, e nell’implementazione specifica di Django
questo significa che non avrete praticamente mai bisogno

D
jango è un framework Web Python progettato per di scrivere in SQL, perché i model sono una rappresentazione
permettere agli sviluppatori di applicazioni e di siti Python completamente accessibile delle tabelle del database.
di costruire e distribuire progetti complessi in modo Questo significa che invece di scrivere una query possiamo
rapido, sicuro e con uno stile ‘pulito’. Offre diversi tool che semplicemente importare e chiamare elementi dai nostri
permettono agli sviluppatori di spendere più tempo scrivendo model Python, senza dover scendere al di sotto del livello
cose importanti, come per esempio le funzionalità, mentre dell’applicazione. Questo approccio rappresenta un modo

Tip molti dei compiti generici che vengono svolti in background


sono gestiti automaticamente. Per capirne l'importanza
brillante per mantenere il codice pulito, ben strutturato
e riutilizzabile, limitando tutte le interazioni che potrebbero
basti sapere che Pinterest, il famoso sito Web per la gestione essere pericolose o inconsistenti. Significa anche che molte
Utilizzando gli
delle immagini, è basato interamente su Django. Anche delle cose specifiche di SQL (come la validazione) possono
ambienti virtuali
possiamo isolare il Washington Post, The Onion e la NASA utilizzano Django. essere lasciate ai model; è molto facile guardando un file
le dipendenze dei Come avrete notato, tutti questi sistemi sono complicati, capire in che modo si relaziona alle tabelle del nostro
nostri progetti. molto trafficati e su larga scala, e tutti sono gestiti in modo

“Django vi fa risparmiare
Per iniziare basta impeccabile (o almeno così sembra). Anche Bitbucket
lanciare pip
e EventBrite utilizzano Django (in effetti il team di sviluppo
install virtualenv
virtualenv .venv .
di EventBrite ha un buon numero di sviluppatori del core
di Django). Quindi, cosa offre dal punto di vista tecnico?
tempo semplificando
.venv/bin/activate.
Questo linguaggio offre moltissimo, sotto al cofano troviamo operazioni difficili”
76 RASPBERRY PI
Cosa fa ognuno di questi file?
Ci sono quattro file che vengono generati per esempio creare un utente amministratore. Il file urls.py è il file di routing per le richieste
quando si lancia il comando startproject Difficilmente dovrete modificare questo file. che arrivano a Django. Si occupa di mappare
e sono: manage.py, settings.py, urls.py Il file settings.py contiene tutte le i vari URL con le view corrispondenti. Il file
e wsgi.py. Il file manage.py è un rimpiazzo impostazioni necessarie al vostro progetto, wsgi.py viene utilizzato quando si distribuisce
per il comando django-admin che abbiamo come il nome del progetto stesso, l’URL il proprio progetto su di un server. Abilita
utilizzato prima, è il punto di accesso al quale trovarlo e così via. Non lo abbiamo un server WSGI HTTP come Gunicorn
principale dell’applicazione e serve per modificato nel nostro tutorial, ma vale la pena per caricare la vostra applicazione e inviare
lanciare i comandi collegati al vostro progetto, dargli un’occhiata per vedere cosa contiene. le richieste HTTP.

database, grazie al lavoro svolto dal team di Django. Dopo risparmiare. Funziona in questo modo: ogni app che costruite
aver creato un model, il proprio database e aver inserito
alcuni dati, probabilmente vorrete farci qualcosa. Passare
ha il proprio file di amministrazione. Importare tutti i model
database rilevanti in quel file e determinare in che modo si Tip
i dati a un template HTML per poterli vedere richiede quello vuole che siano visibili è tutto ciò che bisogna fare per creare
Python arriva con
che si chiama una “View”, che altro non è che un file un sistema di amministrazione, Django prenderà questi
un utile programma
progettato per processare e fornire dati ad altre parti componenti e li renderà accessibili agli amministratori per installare
dell’applicazione Web. Le views sono potenti perché sono (di default, all’URL /admin). Il bello di questo sistema le dipendenze,
semplicemente dei file Python, ogni cosa che potete fare è che a meno che non vogliate qualcosa di avanzato, il suo nome è pip.
Potete installare
in Python potete farla in una view, quindi potete accedere con funzionalità personalizzate, non dovrete fare niente altro.
Django lanciando
e gestire i dati nel modo che preferite. Django offre moltissimi Create un piccolo file di admin e vi ritrovate con un sistema
il comando pip
tool per aiutare gli sviluppatori in questo. Sottolineiamo, di amministrazione. Quanto tempo avreste perso install Django. Se
Django’s Generic Class Based View un potente salva- per scriverne uno vostro? volete condividere
tempo progettato per evitare di riscrivere le stesse view i vostri requisiti
ancora e ancora in progetti diversi. Primi passi potete lanciare
La comunità di Django è molto attiva e ricca di sviluppatori pip freeze >
URL giusto molto capaci ed esistono moltissime risorse disponibili
requirements.txt e
negli altri ambienti
Un buono schema di URL è alla base di una buona da cui partire. Per mostrarvi la semplicità di Django andremo basterà eseguire
architettura Web, e Django è progettato per aiutare a creare una semplice app di blogging. Per cominciare pip install -r
a costruire un sistema di URL dinamici con facilità. vi servirà Python. È preinstallato nei sistemi OS X e Linux, requirements.txt.
Ogni app di solito ha un file urls.py associato progettato quindi se state utilizzando uno di questi sistemi dovreste
per permetterci di definire una collezione di route essere a posto. Se siete su di un sistema Windows dovrete
che Django andrà a utilizzare per instradare i visitatori del sito andare sul sito Web di Python e installarlo. Prima di
Web. Se trova una corrispondenza, Django andrà a chiamare installare Django, andremo a creare una cosa chiamata
la view associata all’URL ed eseguirà tutta la logica in essa “ambiente virtuale”. Un ambiente virtuale ci permette di
contenuta, ritornando il risultato nel template appropriato, isolare le dipendenze del progetto dal resto del sistema in
e mandando l’utente all’URL corretto. Questa gestione modo da non finire con diverse versioni delle stesse librerie
degli URL è un modo estremamente potente di gestire che cercano di caricarsi allo stesso tempo. Per iniziare a
grandi architetture, dotate di schemi di URL dinamici, utilizzare un ambiente virtuale in Python 2 dovrete per
con pochissimo lavoro. prima cosa installare l’apposito pacchetto: pip install
virtualenv. Se state utilizzando Python 3, non dovrete
Template installare nulla perché gestisce gli ambienti virtuali
I template sono la parte di un sito Web o di un’applicazione nativamente. Per creare l’ambiente virtuale in Python 2
Web che viene inviata ai visitatori come pagine HTML singole, eseguite virtualenv .venv, per crearne invece uno
o come componenti di altre pagine HTML. Sono scritti in Python 3 potete usare python3 -m venv .venv.
in HTML e il loro stile è gestito tramite CSS, ma Django offre Una volta creato l’ambiente deve essere attivato prima
un linguaggio per i template che permette di accedere agli
oggetti database con semplicità. Possono essere alimentati
da una view corrispondente, oppure possono alimentare
a loro volta una view, inviando i dati tramite una form.
Il linguaggio per i template di Django è semplice e funzionale,
ma è buona norma mantenere la ‘logica’ il più possibile fuori
dai template, per mantenere il codice pulito e leggibile. Tutti
i processi complessi o i sistemi di filtraggio dovrebbero essere
fatti nei model o nelle view (o in un tag template), in questo
modo quando arrivano nei template, il processo è già
completato e il front end lavora nel modo più semplice
possibile. Django offre moltissimi tool precotti per il filtraggio
che aiutano nella gestione dei propri dati. Il sistema
automatico di amministrazione di Django è molto utile, La struttura di default di un progetto Django, contiene i template forniti
principalmente per tutto il tempo che ci permette di da Django. Un ottimo punto di partenza

RASPBERRY PI 77
Raspberry Pi Python

“Con il sistema di modelli from django.core.urlresolvers import reverse


from django.views.generic import CreateView, DeleteView,
e viste darete ai vostri progetti DetailView, ListView, UpdateView
from .models import Post
una struttura professionale” class elencoPost(ListView):
model = Post
di poterlo utilizzare, potete farlo lanciando . .venv/bin/activate. class creaPost(CreateView):
Ora siamo pronti per installare Django senza che impatti model = Post
sul nostro sistema, lanciamo semplicemente il comando pip success_url = '/'
install Django. L’ultima versione verrà scaricata e installata. fields = ['titolo','contenuto']
Per iniziare a utilizzarlo dobbiamo prima creare un progetto. class dettaglioPost(DetailView):
Django offre un template base, quindi useremo quello. model = Post
Lanciamo django-admin startproject blog. Ora dovreste avere class aggiornaPost(UpdateView):
una nuova directory con al suo interno un po’ di file, che model = Post
formano la base del nostro progetto. Ora che abbiamo i primi fields = ['titolo','contenuto']
file per il nostro progetto, iniziamo a metterci del nostro.
Per mantenere il nostro spazio di lavoro pulito andremo def get_success_url(self):
a creare i file per la nostra applicazione dentro una directory return reverse('blog:dettaglio', kwargs={
del nostro progetto, quindi creiamo una directory blog 'pk': self.object.pk,
all’interno della directory con il nome del progetto (nel nostro })
caso ancora blog). Inoltre dobbiamo creare un file vuoto al class cancellaPost(DeleteView):
suo interno chiamato __init__.py in modo che Python sappia model = Post

Tip che è un modulo caricabile. Ora che abbiamo la cartella


pronta dobbiamo creare un file models.py al suo interno che
success_url = '/'
L’ultimo file che dobbiamo creare nella nostra cartella è urls.
conterrà la rappresentazione dei nostri post. Per mantenerlo py. Questo file si occuperà di mappare gli URL visitati con
I progetti Django
lavorano meglio semplice per ora inseriamo soltanto il titolo e il contenuto. il browser con le view del file views.py. Utilizzeremo alcune
quando sono from django.db import models espressioni regolari per trovare le corrispondenze negli URL,
suddivisi in parti più class Post(models.Model): ma tutto ciò che faranno sarà cercare un numero e passarlo
gestibili, prendete titolo = models.CharField( all’interno della view come valore di ‘pk’, che starebbe per
in considerazione
l’ipotesi di
max_length=100, primary key (chiave primaria), necessaria per recuperare
suddividere ) il post dal database.
in diverse app contenuto = models.TextField() from django.conf.urls import url
il vostro progetto, A questo punto ci serve la view che si occuperà di ricevere from .views import creaPost, cancellaPost, dettaglioPost,
poi suddividere
le richieste, producendo ciò che serve per creare la pagina elencoPost, aggiornaPost
i vari componenti
dell’app in diversi Web. Per farlo utilizzeremo la Django Generic Class Based urlpatterns = [
file. Così sarà Views che offre un modo semplice di svolgere i compiti più url(r'^$', elencoPost.as_view(), name='elenco'),
più facile da comuni. Creiamo un file views.py nella nostra cartella blog url(r'^crea/$', creaPost.as_view(), name='crea'),
mantenere. con questo contenuto: url(r'^(?P<pk>\d+)/$', dettaglioPost.as_view(),

Quando si avvia un server di sviluppo per la prima volta e si naviga all’indirizzo http://127.0.0.1:8000 si viene accolti da questa schermata

Un codice più esteso significa facilità d’uso


Il codice di esempio di queste pagine ci mostra di Django per creare una collezione di view si applica a tutto lo spettro delle funzionalità
quanto Django semplifichi lo sviluppo di generiche che sono molto utili. Distribuiscono di Django, ponendo la semplicità e la sicurezza
applicazioni. Con meno di 30 righe di codice della tutte le funzionalità che ci servono senza al centro. Sapere che il framework sta svolgendo
view, possiamo occuparci di elencare i post, intralciarci nello sviluppo, e se non vi piace tutto il lavoro pesante per noi ci lascia spazio
creare nuovi post, vederli nel dettaglio, modificarli il modo in cui gestiscono qualcosa, potete per concentrarci sulla logica rendendoci
e cancellarli. Questo è reso possibile grazie sempre sovrascriverlo o estenderlo con i vostri più produttivi e in grado di produrre progetti
alla quantità di tempo speso dagli sviluppatori metodi personalizzati. Questo tipo di mentalità in maniera tempestiva.

78 RASPBERRY PI
Django

name='dettaglio'),
url(r'^(?P<pk>\d+)/aggiorna/$', aggiornaPost.
s_view(), name='aggiorna'),
Onespacemedia.com
url(r'^(?P<pk>\d+)/cancella/$', cancellaPost.as_ Onespacemedia è un’agenzia delle app. Tra i progetti troviamo un’app
iew(), name='cancella'), specializzata nello sviluppo e design Web per MoneyMover che ha permesso agli
] in Python e lavora con alcune delle utenti di mobilitare oltre 100 milioni di
compagnie più innovative del settore euro, una piattaforma per studiare online
Ci sono un po’ di cose da fare prima che la nostra app venga
scientifico e tecnologico. Utilizza Django chiamata COSMOS per l’educazione dei
integrata nel nostro progetto. Per prima cosa dobbiamo
per costruire la maggior parte dei siti e bambini e molti altri progetti innovativi.
aggiungere l’app alla lista delle app installate nelle
impostazioni. Quindi apriamo il file settings.py nella cartella
superiore e cerchiamo INSTALLED_APPS. Aggiungiamo di mantenerli il più semplice possibile per il momento,
il valore blog.blog in una nuova riga (“blog” è il nome della avanti tutta e creiamo questi file:
cartella del progetto e anche il nome della cartella dell’app). templates/blog/post_confirm_delete.html
<form action="" method="post">
Aggiungere l’indirizzo {% csrf_token %}
L’ultima cosa che dobbiamo fare è aggiungere gli URL <input type="submit">
del blog agli URL del progetto. Apriamo il file urls.py della </form>
root del progetto e aggiungiamo questa riga sotto alla riga templates/blog/post_detail.html
dell’amministrazione: <h1>{{ post.titolo }}</h1>
url(r'^', include('blog.blog.urls' namespace="blog")) <p>{{ post.contenuto }}</p>
Dovremo anche aggiungere un include alla lista degli import templates/blog/post_form.html
da django.conf.urls <form action="" method="post">
from django.conf.urls import include, url {% csrf_token %}
A questo punto dobbiamo semplicemente far sapere a {{ form.as_p }}
Django dove si trova il nostro model in modo che sappia <input type="submit">
che deve creare la relativa tabella sul database. Torniamo </form>
nel terminale e lanciamo python manage.py templates/blog/post_list.html
makemigrations blog. Se tutto va come dovrebbe verrà <ul>
creato un nuovo file. A questo punto lanciamo python {% for post in post_list %}
manage.py migrate, questo comando trasformerà tutti i <li><a href='{% url "blog:dettaglio"
model del nostro progetto in tabelle di database. Ora post.pk %}'>{{ post.titolo}}</a></li>
dovremmo avere tutto ciò che ci serve per poter avviare {% endfor %}
un server di sviluppo, quindi lanciamo python manage.py </ul>
runserver. Il comando ci avviserà di aver avviato il server e La struttura finale dovrebbe essere simile a questa:
che possiamo vedere il tutto andando all’indirizzo __init__.py
http://127.0.0.1:8000. Apriamo un browser e andiamo models.py
all’indirizzo indicato, a questo punto dovremmo vedere un urls.py
errore che ci avvisa che non esiste il template, questa è views.py Django offre un
server built-in per
una buona cosa perché significa che sta utilizzando la templates/blog/post_confirm_delete.html
lo sviluppo delle
view corretta (in questo caso la view da selezionare è templates/blog/post_list.html
applicazioni.
elencoPost). La prossima cosa da fare è aggiungere tutti i templates/blog/post_detail.html
Rendendo
template di cui abbiamo bisogno. Avremo bisogno di templates/blog/post_form.html semplicissima
quattro template in totale: l’elenco dei post, il dettaglio del Aggiornando possiamo vedere il nostro sito funzionante. l’esecuzione del
post, le form per la creazione e l’eliminazione. Cercheremo Ci siamo, il nostro primo sito Django è online! LXP proprio progetto

RASPBERRY PI 79
TutorialRaspberry Pi Python

MicroPython:
robot in pista
Sfruttate le vostre competenze Pi e applicatele al micro:bit: create vere
e proprie macchine radiocomandate subito pronte a epiche gare!

U
I FILE PER SEGUIRE na delle prime cose che tutti i nuovi maker vogliono 4 Stabilire la comunicazione radio tra il controller e il robot.
IL TUTORIAL SONO provare è realizzare un robot. Ne abbiamo visto 5 Configurare la “mente” del robot per ricevere i segnali radio
DISPONIBILI QUI
moltissime versioni, tipicamente con uno dei vari e reagire di conseguenza.
modelli di Raspberry Pi come mente del robot, collegato
a diverse schede di controllo dei motori e uno chassis. Preparazione
www.sprea.it/ Dall’uscita del micro:bit, poi, la presenza sul mercato di kit Per questo tutorial, vi serviranno due micro:bit (dopotutto,
SP21_micropython e accessori per la costruzione dei robot è aumentata ci vogliono due avversari per poter fare una sfida), una batteria
e si possono fare dei progetti bellissimi. Dato che il micro:bit esterna USB, due adattatori da USB a micro USB, una scheda
non ha il Wi-Fi e MicroPython non ha il supporto per driver motori Kitronik e un kit per robot. Potete trovare kit
il Bluetooth, però, come potremo controllare robot? economici per la costruzione di robot su eBay e ve ne serve uno
Semplice: nel micro:bit di BBC c’è un sistema radio di base che includa due motori, uno chassis, un pack da 4 batterie AA
che si può usare per trasmettere brevi messaggi o dati. e due ruote con relativo sistema di trasmissione. Il nostro robot
In questo tutorial vedremo i seguenti passaggi della costruzione sarà controllato da un volante micro:bit che leggerà i dati
e programmazione di un robot: da un accelerometro integrato e li comunicherà a un altro
1 Costruire lo chassis di un robot da un kit. micro:bit montato sul nostro robot. Scriveremo tutto il codice
2 Controllare i motori usando una scheda driver motori. di questo progetto in MicroPython, usando l’applicazione Mu.
3 Creare un’unità di controllo che rilevi gli input dell’utente Pubblicato dalla Python Software Foundation per permettere
e li interpreti come movimenti. a chiunque di usare un’implementazione più snella di Python 3,
MicroPython è stato originariamente creato da Damien
George. Usando MicroPython, due micro:bit, una scheda driver
motori e uno chassis economico faremo i primi passi nella
robotica con MicroPython. Installare Mu su una macchina
con Linux è facile: dovete solo scaricare l’applicazione
da https://s3-us-west-2.amazonaws.com/ardublockly-
builds/microbit/linux/mu-2016-11-06_11_36_15 e andare
alla vostra cartella di Download. Fate click con il tasto destro
sull’applicazione, selezionatene le proprietà e andate
ai permessi modificandoli in modo che il file possa essere
eseguito come applicazione. Ora cliccando due volte
sull’applicazione farete aprire l’editor di Mu. Abbiamo diviso
il tutorial in sezioni per rendere l’intero processo più facile
da seguire e ora non ci resta che iniziare a costruire il nostro
robot. Come abbiamo visto, il nostro progetto usa un’unità
di controllo per mandare i comandi da un micro:bit all’altro
attraverso una connessione radio. Cominceremo con

Il robot
radiocomandato
è molto facile
da realizzare
grazie al kit
per lo chassis
e al driver motori Mu è l’editor Micro Python del micro:bit.
inclusi nel Offre un’interfaccia semplice da usare che gestisce
micro:bit le indentazioni del codice e i suggerimenti

80 RASPBERRY PI
Il micro:bit e i controlli radio
In questo tutorial abbiamo usato un import radio radio.config(power=7)
collegamento radio per connettere due micro:bit radio.config(channel=99) La potenza di trasmissione può essere di -30,
mandando stringhe di dati da un dispositivo radio.on() -20, -16, -12, -8, -4, 0 o 4dBm e ognuno di questi
all’altro. Per praticità abbiamo utilizzato Ora possiamo impostare il canale da 0 a 100. sette valori è correlato da un valore
le impostazioni predefinite. Se però volessimo Dovete farlo per tutti i micro:bit che volete di configurazione da 0 a 7 rispettivamente.
creare una serie di macchine per farle sfidare su un dato canale. Se desiderate che il vostro Se volete approfondire l’invio di segnali radio
in un’arena? In questo caso dovremmo usare segnale radio vada più lontano, dovrete con MicroPython potete trovare un’ottima
i canali. La classe Radio offre diverse opzioni aumentare la potenza della trasmissione. guida ufficiale a questo indirizzo: https://
di configurazione, ma channel è la più semplice. Anche questa è un’opzione di configurazione microbit-micropython.readthedocs.io/en/
Per cambiare il canale radio dobbiamo usare: che viene gestita con il comando: latest/radio.html.

la codifica del controller. In Mu fate click su New per iniziare display.show(Image.ARROW_W)


da un documento vuoto. Ricordatevi anche di salvare spesso:
from microbit import *
radio.send('left')
Qui abbiamo aggiornato la matrice LED sul controller micro:bit Tip
import radio per mostrare la direzione del movimento. La classe display
contiene molte immagini che possiamo mostrare e per indicare L’alimentazione
Il codice del controller che stiamo girando a sinistra aggiorniamo il display facendogli
del micro:bit
non è sempre
Per prima cosa importiamo due librerie: quella completa mostrare una freccia che punta a ovest (west) che è il lato facile. Idealmente
di micro:bit che ci dà accesso ai sensori e al display presente sinistro del micro:bit. La funzione radio gestisce con la mente è alimentato
sulla scheda, e la libreria import radio che permette del nostro robot la comunicazione e gli manda una stringa attraverso
i connettori JST
la comunicazione audio a corto raggio tra due micro:bit. di dati via radio. La stringa è la direzione in cui vogliamo che
e una fonte
Per usare la radio dobbiamo prima accenderla e dobbiamo si muova la macchina. E se la gesture è a destra? In questo da 3V ma è
farlo per tutti i micro:bit che vogliamo usare nel progetto caso usiamo un else if, noto come elif in Python. Elif entra accettabile anche
(leggete il box Il micro:bit e i controlli radio, sopra, in azione se la prima condizione risulta falsa o le precedenti un caricabatterie
per entrare più nel dettaglio): condizioni elif sono anch’esse risultate false. Continuiamo con USB da 5V. Noi
abbiamo usato
radio.on() gli elif finché uno non risulta True. Quindi se abbiamo mosso
un alimentatore
Ora faremo scorrere un messaggio sulla matrice LED del nostro il volante per andare a destra viene eseguito il seguente codice: esterno economico
controller micro:bit. Il messaggio indica all’utente come elif gesture == "right": di seconda mano.
controllare il robot. Imposteremo anche la velocità display.show(Image.ARROW_E)
di scorrimento usando un delay. Questo controllerà la velocità radio.send('right')
di aggiornamento della matrice. Il valore predefinito è di 150 ms, Ripetiamolo per inclinare il micro:bit verso l’alto e verso il basso:
ma lo abbiamo ridotto a 50 ms perché era troppo lento. elif gesture == "up":
display.scroll("Gira il volante per guidare il robot",delay=50) display.show(Image.ARROW_N)
Per controllare continuamente l’input del pilota, dobbiamo radio.send('forward')
usare un ciclo infinito che in MicroPython è elif gesture == "down":
while True: display.show(Image.ARROW_S)
All’interno del ciclo dobbiamo identificare l’input del pilota, radio.send('reverse')
che viene determinato controllando lo stato dell’accelerometro. Il nostro ultimo controllo condizionale elif è quello del freno
In altri casi dovremmo usare le coordinate X,Y e Z generate d’emergenza. Nel caso dovesse servirci possiamo premere
dal movimento del micro:bit ma per questo progetto possiamo il tasto B sul nostro micro:bit per arrestare il robot. Funziona
semplificare i dati dell’accelerometro usando le gesture solo se la scheda è tenuta in orizzontale!
o movimenti. Il micro:bit può gestire 11 gesture, come su, giù, elif button_b.was_pressed():
a destra, a sinistra, scuotimento, ecc. Può anche misurare display.show(Image.SURPRISED)
l’accelerazione gravitazionale, indicata in G: radio.send('brakes')
gesture = accelerometer.current_gesture()
print(gesture)
Qui creiamo una variabile chiamata gesture e ci salviamo
la gesture corrente. Stampiamo anche i contenuti della nostra
variabile gesture nella shell di Python, REPL, per il debugging.
Abbiamo la gesture salvata in una variabile e ora dobbiamo fare Il nostro
un test per vedere se la gesture corrisponde a una di quelle controller
richieste per controllare il nostro robot. A questo scopo è un micro:bit
fissato a un
useremo un controllo if...elseif:
volante creato
if gesture == "left":
con materiale
Il primo controllo verifica che se il controller è stato girato
di recupero.
a sinistra. Così confrontiamo i valori della nostra variabile Girando
gesture con il valore predefinito "left". Se la gesture il volante potete
corrisponde a left, dobbiamo dare al pilota un feedback controllare
per dirgli che è stata riconosciuta: la macchina

RASPBERRY PI 81
TutorialRaspberry Pi Python

Abbiamo usato per il controller, microbit e radio. Assicuriamoci anche


un alimentatore che la radio sia accesa e pronta a ricevere un segnale:
USB per il nostro from microbit import *
micro:bit ma import radio
potete adottare radio.on()
anche quello Per comunicare che il robot si sta caricando e preparando
ufficiale da 3V
all’uso creeremo una breve animazione usando un ciclo For.
con batterie AAA
I cicli For si usano per ripetere un’azione (ossia iterare)
un numero determinato di volte, per esempio in questo caso
imposteremo un range 3 che causerà tre iterazioni del ciclo:
for i in range(3):
Con il ciclo mostreremo un cuoricino sulla matrice LED
e aspetteremo mezzo secondo, o 500 ms usando la funzione
sleep di MicroPython, per assicurarci che l’immagine
sia visibile all’utente:
display.show(Image.HEART_SMALL)
Si conclude così il codice del nostro controller. Assicuratevi sleep(500)
di salvarlo nel vostro computer. Connettete poi il micro:bit Poi sostituiremo l’immagine con quella di un cuore più grande
e cliccate su Flash per caricare il codice sulla scheda. Dopo e ripeteremo la stessa funzione sleep per creare un effetto
qualche secondo vedrete le istruzioni scorrere sulla matrice di “battito” sulla matrice LED.
LED. Ora tenete il micro:bit come se fosse un volante e vedrete display.show(Image.HEART)
comparire una freccia rivolta verso l’alto che indica che l’unità sleep(500)
radio sta mandando il comando di avanzare al robot. Girate
il micro:bit a sinistra e a destra poi mettetelo a testa in giù Il codice del robot
per fare retromarcia. Infine, tenete il micro:bit in orizzontale Finito il codice dell’avvio, passiamo al ciclo principale
e premete B per frenare. Per creare una maggior sensazione responsabile di controllare continuamente se ci sono segnali
di realismo nella guida abbiamo usato un vecchio supporto radio. Ancora una volta, useremo un ciclo infinito per contenere
circolare, nella cui struttura si potevano anche far passare i cavi, il codice necessario:
per creare un volante “fai da te”. Con qualche fascetta per while True:
tenere il micro:bit e il nostro alimentatore USB ben fissi al loro All’interno del ciclo, creeremo una nuova variabile chiamata
posto eravamo pronti per andare a fare un giro in macchina. incoming che salverà i messaggi radio in arrivo dal micro:bit
del nostro controller.
Costruire la macchina incoming = radio.receive()
Con il controller completato, passiamo ora a creare il nostro Per interpretare e processare i comandi ricevuti via radio,
robot e il primo compito è costruirgli un corpo. Allo scopo il nostro robot deve prima capire cosa fare per un comando
abbiamo usato uno chassis standard per robot comprato specifico e qui useremo ancora un costrutto condizionale if...
su un sito di aste online per circa 12 €. Abbiamo dovuto lavorare elif. Controlleremo che il valore della nostra variabile in ingresso
un minimo con il saldatore, specificamente per saldare corrisponda a un valore fissato, per esempio 'left':
i collegamenti dei morsetti terminali di ogni motore. Si tratta if incoming == 'left':
di un compito semplice ma se non sapete saldare o non avete Se l’istruzione è di andare a sinistra, quindi, aggiorniamo
un saldatore potete cercare un gruppo di maker o appassionati la matrice LED del micro:bit del robot per mostrare la direzione
di elettronica nella vostra zona che possa darvi una mano. I cavi del movimento, in questo caso una freccia che punta a est,
dei motori si collegano a una scheda driver motori Kitronik. perché se guardiamo frontalmente il robot la freccia che punta
Ogni motore è collegato al suo terminale. Guardando il robot a est punta anche alla sinistra.
da davanti, il Motore 1 è sulla sinistra dello chassis e il Motore 2 display.show(Image.ARROW_E)
è sulla destra. Entrambi i cavi del primo motore sono collegati Per controllare i motori, dobbiamo controllare i pin GPIO a cui
ai due morsetti per il Motore 1 sulla scheda driver. Fate lo stesso
per il secondo motore, assicurandovi che si connetta a Motore
2. Assicuratevi anche che i morsetti abbiano una solida presa
del cavo. Ora collegate l’alloggiamento delle batterie AA

Tip al morsetto di potenza e controllate che la polarità sia giusta.


Tipicamente l’alloggiamento delle batterie AA ha cavi rossi
Ci sono diversi tipi e neri, con quelli rossi che corrispondono a + e quelli neri a -.
di motori. Abbiamo Non inserite ancora le batterie. Ora assicurate l’alloggiamento
usato motori delle batterie, i motori e la scheda driver allo chassis usando
standard
le viti del kit o, se avete fretta, delle fascette fermacavo. Per ora
in corrente continua
ma potete trovare tenete il micro:bit che sarà la mente del robot separato dallo
motori micro gear chassis perché dobbiamo programmarlo. Non usate il micro:bit
economici che del controller che abbiamo flashato prima. Collegate il micro:bit
consentono al vostro computer e caricate l’applicazione Mu. Create un
di crearer robot
più piccoli.
nuovo file e ricordatevi di salvare spesso. Cominceremo il codice La nostra macchina ha un cervello e un cuore!
del robot importando le stesse librerie che abbiamo usato L’animazione del cuore indica che è pronta all’azione

82 RASPBERRY PI
MicroPython
MicroPython

sono connessi attraverso la scheda driver motori. Accanto Il nostro


ai morsetti terminali sulla scheda driver motori ci sono dei chassis ha
numeri con una ‘P’ che indicano i pin GPIO usati per i morsetti. moltissimi fori
Per far andare il motore in una direzione un pin deve essere alto per fissare
e l’altro basso, ossia solo uno può essere attivo. Per invertire i componenti
la direzione del motore dobbiamo invertire questa polarità: ma i piloni dei
pin8.write_digital(0) motori possono
andare solo in
pin12.write_digital(1)
questa posizione
pin16.write_digital(0)
per mantenere
pin0.write_digital(1) bilanciata la
nostra macchina
Controllo dei motori
Per far girare il robot a sinistra dobbiamo dire a un motore
di andare avanti e all’altro di andare indietro. Nel nostro
esempio, il motore 1 è quello di sinistra (guardando dalla parte
frontale della macchina) ed è connesso ai pin 12 e 8. Il motore
destro è il 2 ed è controllato dai pin 16 e 0. Per andare a sinistra,
il Motore 1 deve andare avanti mentre il 2 deve andare indietro.
Per farlo mandiamo potenza ai rispettivi pin GPIO con write_
digital. Il codice per andare a destra è l’inverso, mostrando
che il circuito può facilmente cambiare polarità al volo:
elif incoming == 'right':
display.show(Image.ARROW_W)
pin8.write_digital(1)
pin12.write_digital(0)
pin16.write_digital(1)
pin0.write_digital(0) pin0.write_digital(0)
Ecco il codice per mandare il robot in avanti: E quello per farlo andare a marcia indietro:
elif incoming == 'forward': elif incoming == 'reverse':
display.show(Image.ARROW_N) display.show(Image.ARROW_S)
pin12.write_digital(1) pin12.write_digital(0)
pin8.write_digital(0) pin8.write_digital(1)
pin16.write_digital(1) pin16.write_digital(0)
pin0.write_digital(1)
C’è poi il freno di emergenza, che disattiva tutti i pin GPIO
collegati ai motori:
elif incoming == 'brakes':
display.show(Image.SURPRISED)
pin12.write_digital(0)
pin8.write_digital(0)
pin16.write_digital(0)
pin0.write_digital(0)
Salvate il codice e cliccate su Flash per caricarlo sul micro:bit,
poi toglietelo dal computer e posizionatelo nell’alloggiamento
della scheda driver motori. Quando inserirete le batterie
dovreste vedere l’animazione del cuore che batte.
Ora alimentate il vostro controller; noi abbiamo usato una
Il Motore 1 è quello sulla sinistra in questa immagine batteria USB per cellulare. Dopo lo scorrimento delle istruzioni
mentre il Motore 2 è sulla destra. Potete vedere anche i cavi potrete pilotare il robot. Se non si comporta correttamente
che passano attraverso lo chassis per andare ai motori invertite i cavi da ogni motore ai suoi morsetti terminali. LXP

Perché vi serve un controller


In questo tutorial abbiamo usato una scheda nucleo un controllo motori DRV8833 che usa il micro:bit ma dovrete avere più pin GPIO
driver motori per interfacciare il nostro un ponte ad H per controllare la direzione in uscita dal micro:bit perché i tre presenti
micro:bit con due motori: ma perché ci serve della corrente. Vi ricordate che nel tutorial non bastano. Potete prendere degli adattatori
questo controller? Fa semplicemente da buffer abbiamo invertito la polarità dei motori per che consentono di usare il connettore
per il micro:bit dato che i motori richiedono cambiare la direzione? Lo abbiamo fatto sul bordo del micro:bit con breadboard
molta corrente per iniziare a muoversi con il ponte ad H. Invece di comprare il kit ed elementi elettronici di uso comune.
e il micro:bit non è in grado di fornirla senza di Kitronik potete prendere una scheda Procedendo in questo modo ridurrete il costo
potenzialmente danneggiarsi. Abbiamo usato di controllo motori come la DRV8833, la L293D di realizzazione della vostra macchina
una scheda driver motori Kitronik che ha come o la L9110S, che sono tutte compatibili con e potrete farne di più!

RASPBERRY PI 83
Raspberry Pi Python

Elaborare il testo
con Python
Riuscire a manipolare in automatico l’input dell’utente e i file di
configurazione è uno skill fondamentale per programmatori e sysadmin
I FILE PER SEGUIRE
IL TUTORIAL SONO
DISPONIBILI QUI

www.sprea.it/
SP21_testo

Qui possiamo vedere diversi script Python in azione


(lBl.py, caratteri.py, parole.py, righe.py e wcPython.py)
e confrontare i loro risultati con l’output dell’utility da riga
di comando wc

except IOError:
print “Impossibile aprire il file %s!” % nomefile
raise SystemExit

E
ssere in grado di elaborare automaticamente del testo for riga in f:
può far risparmiare moltissimo tempo ed energie. print riga.rstrip()
Per questo vedremo come lavorare efficientemente
sui file di testo sfruttando le capacità di text processing f.close()
di Python, nello specifico vedremo le funzioni di ricerca Il codice Python che segue, salvato come righe.py, conta
e sostituzione tramite espressioni regolari (regex in breve), il numero di righe presenti nel file di testo modificando il ciclo for
come convertire date da un formato a un altro e come visto prima e aggiungendo una nuova variabile prima del ciclo:
sviluppare un’interfaccia grafica per semplificarci la vita. Come numeroDiRighe = 0
forse saprete in questo momento sono disponibili due versioni for riga in f:
di Python. In questo tutorial utilizzeremo quella ‘vecchia’ numeroDiRighe = numeroDiRighe + 1
(Python 2.7.x) ma non avrete difficoltà a fare le stesse cose print “Numero di righe: %d” % numeroDiRighe
anche se state utilizzando la versione 3. Il codice Python che
segue, salvato come lBl.py, mostra come trattare con Python Un semplice esempio
un file di testo scorrendo riga dopo riga, questo approccio è alla Il codice Python che segue, salvato come parole.py, legge
base di quasi tutte le operazioni di manipolazione dei testi: un file di testo riga dopo riga e conta il numero totale di parole
try: presenti nel file stesso:
f = open(nomefile, ‘r’) numeroDiParole = 0

84 RASPBERRY PI
for riga in f: un’occorrenza di un’espressione regolare;


parole = len(riga.split())
numeroDiParole = numeroDiParole + parole
‘?’ Utilizzato per specificare che si desidera trovare 0 o 1
ripetizione di un’espressione regolare; Tip
print “Numero di parole: %d” % numeroDiParole ‘[]’ Definisce un set di caratteri che si vuole trovare.
Arch Linux
Ancora una volta, ci è bastato modificare i comandi all’interno Esistono moltissimi altri caratteri speciali ma questi sono è una delle poche
del ciclo for. Contare il numero totale di parole può essere i principali. Per far sì che un carattere speciale lavori come distribuzioni
più difficile di contare il numero di righe ma rimane comunque se fosse un normale carattere dovete utilizzare il simbolo \. a utilizzare Python
un’operazione molto semplice. Il punto sta nel separare Quindi se volete cercare il carattere ‘.’ nel vostro testo 3 di default,
che comunque
una parola dall’altra. L’unica cosa che potrebbe richiedere dovrete scrivere “\.”. Il codice che segue mostra alcuni
può convivere
spiegazioni è la funzione riga.split() che ci permette di definire semplici esempi d’uso di re: serenamente con
quali caratteri separano una parola dall’altra; se viene invocato import re il suo predecessore
senza argomenti, viene utilizzato il separatore di default (lo >>> testo = “12343” (disponibile come
pacchetto chiamato
spazio). Dopo aver separato le parole di ogni riga e averle messe >>> m = re.search(“3”, testo)
python2).
in una lista, contiamo gli elementi della lista utilizzando la >>> print m.group(0)
funzione len(). Infine, vediamo come contare il numero di 3
caratteri presenti in un file di testo, l’approccio è leggermente >>> m = re.search(“7”, testo)
diverso perché dobbiamo leggere il file carattere dopo carattere. >>> print m.group(0)
La parte rilevante del codice Python, salvato nel file caratteri. Traceback (most recent call last):
py, utilizza un ciclo while invece del ciclo for visto in precedenza: File “<stdin>”, line 1, in <module>
numeroDiCaratteri = 0 AttributeError: ‘NoneType’ object has no attribute ‘group’
while f.read(1): Il comando import re serve a caricare il modulo re.
numeroDiCaratteri = numeroDiCaratteri + 1 Poi, ricerchiamo nel testo utilizzando la funzione re.search().
print “Numero di caratteri: %d” % numeroDiCaratteri Esiste anche la funzione re.match() ma cerca le corrispondenze
soltanto all’inizio della stringa; la funzione

“La ricerca e la sostituzione re.search() che abbiamo utilizzato cerca una


corrispondenza in qualunque punto del testo.

con le espressioni regolari sono Quando trova una corrispondenza la funzione


re.search() ritorna quello che ha trovato.
davvero potenti in Python” Dato che stiamo utilizzando un’espressione
regolare statica, la corrispondenza sarà
Anche se possiamo trovare la lunghezza di una riga utilizzando esattamente quello che stiamo cercando; nel nostro caso
la funzione len(), in questo script abbiamo preferito elaborare il carattere 3. Se non trova alcuna corrispondenza, re.search()
ogni carattere per permettervi di vedere anche in che modo non ritorna nulla. Più avanti nel tutorial vedremo cosa fare nel
accedere a tutti i caratteri del file, nel caso voleste creare uno caso in cui l’espressione regolare ricercata sia presente più volte
script per manipolarli. Tutti e tre i programmi hanno lo stesso all’interno del testo. La funzione re.group() ritorna la parte
scheletro e differiscono soltanto nella funzionalità principale, di stringa che soddisfa l’espressione regolare. Il codice Python
il che è perfettamente logico dato che fanno cose diverse.
La versione finale, chiamata wcPython.py, conta le righe,
le parole e i caratteri presenti combinando i tre programmi
appena visti. Congratulazioni! Avete appena sviluppato una
versione semplificata dell’utility da riga di comando wc di Linux!
Nella pagina precedente potete vedere uno screenshot
che mostra gli script caratteri.py, parole.py, righe.py
e wcPython.py in azione. Come intuite anche dall’output dei
nostri script, l’utility lBl.py implementa le funzionalità base
dell’utility cat. Fin qui abbiamo imparato come elaborare
un file di testo riga per riga, parola per parola e carattere
per carattere. Nella prossima sezione vedremo come farlo
utilizzando le espressioni regolari. Vedremo inoltre come
eseguire delle operazioni di ricerca e di sostituzione grazie
all’aiuto dell’utilissimo modulo re di Python.

Le espressioni regolari
Python utilizza il modulo re per supportare le espressioni
regolari. Quando si definisce un’espressione regolare, abbiamo
a nostra disposizione diversi caratteri speciali, eccone alcuni:
‘.’ Corrisponde a qualsiasi carattere singolo eccetto gli a capo;
‘^’ Corrisponde all’inizio della riga;
‘$’ Corrisponde alla fine della riga;
‘*’ Viene utilizzato per specificare che si desidera trovare 0
o più occorrenze di un’espressione regolare; Qui vedete diverse ricerche e sostituzioni effettuate all’interno della shell Python,
‘+’ Utilizzato per specificare che si vuole trovare almeno che è il posto perfetto nel quale fare esperimenti con le espressioni regolari

RASPBERRY PI 85
Raspberry Pi Python

che segue mostra come trovare le righe vuote: e Michele con Matteo ovunque nella stringa. Il carattere
>>> print re.match(r'^$', 'a') | significa oppure (OR). Il carattere \b cerca la stringa vuota
None ma soltanto all’inizio o alla fine della parola in questo modo solo
>>> print re.match(r'^$', '') le parole esatte vengono sostituite! La r utilizzata quando
<_sre.SRE_Match object at 0x7f94844f0578> abbiamo definito l’espressione regolare dice a Python di gestire
Una riga vuota è una riga che comincia con ^ e finisce con $ l’espressione regolare usando la notazione ‘raw string’. Come
senza avere niente altro in mezzo. Praticamente tutti i linguaggi vedremo, l’utilizzo di r è abbastanza comune. La funzione
di programmazione hanno un modo simile per trovare le righe re.sub() trova tutte le corrispondenze e le sostituisce con il testo
vuote. Potete trovare maggiori informazioni sul modulo re scelto. Lo script sEr.py modifica la stringa "Linux Pro"
all’indirizzo http://docs.python.it/html/lib/module-re. in "LINUX Pro". Il codice Python interessante all’interno dello
html. Il programma che andremo a sviluppare in questa sezione script sEr.py è il seguente:
sarà il proseguimento di quello precedente e ci mostrerà come for riga in f:
ricercare un testo all’interno di un file. La parte cruciale dello if re.search("Linux Pro", riga):
script Python ricercaBase.py è: nuovaRiga = re.sub("Linux Pro","LINUX
numeroDiRighe = 0 Pro", riga)
for riga in f: print nuovaRiga.rstrip()
if re.search(“Linux Pro”, riga): Il codice è abbastanza chiaro e non dovreste avere grossi
numeroDiRighe = numeroDiRighe +1 problemi a intuirne il funzionamento, come sempre processa
print riga.rstrip() il file riga per riga. Il punto chiave è che la sostituzione viene
L’idea generale è di ricercare nel file riga dopo riga e cercare eseguita soltanto quando c’è una corrispondenza,
di trovare la stringa che vogliamo trovare all’interno di ogni riga. che è lo scopo della struttura condizionale. Soltanto le righe
Se c’è una corrispondenza, stampiamo quella che la contiene che vengono modificate sono mostrate a video. In fondo alla
e proseguiamo la ricerca nel resto del file finché non arriviamo pagina precedente potete vedere uno screenshot con diverse
alla fine dello stesso. operazioni di sostituzione effettuate utilizzando la shell
di Python. Vi raccomandiamo di spendere un po’ di tempo
Cercare e sostituire testo sperimentando con il modulo re per imparare come utilizzarlo
La funzione re.search() è sufficiente per questo esempio dato al meglio prima di proseguire con il resto del tutorial.
che una singola occorrenza di una stringa statica ci basta Tenete presente che le espressioni regolari sono spesso
per stampare la riga che la contiene. Da notare che la funzione causa di brutti bug quindi controllate sempre il funzionamento
re.findall() può trovare tutte le occorrenze di un pattern e quindi delle vostre regex utilizzando la shell di Python prima
vi permette di effettuare una ricerca globale. Ora andremo di utilizzarle nei vostri script.
a vedere come sostituire la parte di stringa che corrisponde
alla nostra ricerca. Ancora una volta, l’idea generale è quella Manipolare le date
di cercare nel nostro file di testo una riga alla volta e provare Il codice Python che vedremo ora, salvato nel file formatoDate.
a trovare una corrispondenza con il nostro pattern all’interno py e basato su sEr.py, legge il testo all’interno di un file riga per
di ogni riga. La funzione re.sub() ci aiuta a effettuare ricerche riga, cerca le date in uno specifico formato utilizzando
globali e operazioni di sostituzione con le espressioni regolari. un’espressione regolare e modifica la struttura della data:
Il codice Python che segue ci mostra due ricerche globali numeroDiRighe = 0
e un’operazione di sostituzione eseguite tramite la shell Python: for riga in f:
>>> testo = ""; if re.search(r'(\d{2})/(\d{2})/(\d{4})', riga):
>>> out = re.sub("^$","Riga vuota", testo); nuovariga = re.sub(r'(\d{2})/(\d{2})/(\d{4})',
>>> print out r'\2-\1-\3', riga)
Riga vuota numeroDiRighe = numeroDiRighe + 1
>>> nomi = "Matteo Marco Michele Massimo MarcoB" print nuovariga.rstrip()
>>> nuoviNomi = re.sub(r"\b(Marco|Michele)\b","Matteo",nomi) Il formato ricercato è GG/MM/AAAA mentre il nuovo formato
>>> print nuoviNomi sarà MM-GG-AAAA. La stringa \d{4} significa che stiamo
Matteo Matteo Matteo Massimo MarcoB cercando quattro ({4}) cifre (\d). Qui potete vedere anche
La prima operazione sostituisce le righe vuote con la stringa che con l’aiuto delle parentesi possiamo fare riferimento alle
“Riga vuota” mentre la seconda sostituisce le parole Marco varie parti delle corrispondenze trovate da re.sub(). Eseguendo
il file formatoDate.py otterremo un output simile a questo:
La nostra $ cat alcuneDate
applicazione 13/12/1960 01/02/2000
tkinter in tutto La data di oggi è: 05/04/2017 o forse è: 04/05/2017
il suo splendore. 12/21/10
A sinistra $ ./formatoDate.py alcuneDate
possiamo vedere
12-13-1960 02-01-2000
il testo originale
La data di oggi è: 04-05-2017 o forse è: 05-04-2017
inserito dall’utente
e a destra
Numero di righe trovate: 2
il risultato
ottenuto Creare una GUI
premendo In questa sezione vedremo come semplificarci le operazioni
il pulsante Vai di ricerca e sostituzione. La GUI avrà un’area principale nella

86 RASPBERRY PI
Testo

quale scrivere il proprio testo e due altre aree per definire le due
stringhe da utilizzare per l’operazione di ricerca e sostituzione.
Il tool standard per sviluppare una GUI in Python è Tkinter.
Dovremo includere il comando import Tkinter o from Tkinter
import * nel nostro script Python. Entrambi i comandi
importano i due moduli tkinter principali chiamati Tkinter
e Tkconstants. Il primo importa da solo il modulo Tkconstants.
Il codice Python che segue, salvato in semplice.py,
è un semplice esempio di utilizzo del modulo Tkinter, eseguitelo
per assicurarvi che tutto funzioni correttamente
nella vostra installazione:
#!/usr/bin/python

from Tkinter import *


radice = Tk()
messaggio = Label(radice, text="Ciao, mondo!")
messaggio.pack()
radice.mainloop()
Il widget radice Tk inizializza Tkinter, ogni oggetto Tkinter
dovrebbe avere un unico widget radice che deve essere creato
prima di tutti gli altri widget. Il widget Label() è figlio del widget Semplici operazioni di ricerca e sostituzione utilizzando il modulo re di Python.
radice e contiene il messaggio che vogliamo mostrare. Più tempo passerete a sperimentare con le espressioni regolari meglio le capirete.
Il metodo pack() fa sì che il widget Label si dimensioni Un po’ alla volta non potrete più farne a meno
correttamente per venire visualizzato in modo corretto. Il widget
non verrà mostrato finché non avvieremo il ciclo di eventi non succede nulla di interessante. Nella prossima sezione
di Tkinter, utilizzando il metodo radice.mainloop(), fino ad allora vedremo come implementare le funzionalità di quest'ultimo.
non si vedrà alcun output a schermo. Ora che conosciamo
le basi di Tkinter, è giunto il momento di creare l’interfaccia L'interfaccia funzionante
utente per l’applicazione. Per aggiungere gli elementi richiesti Ora è giunto il momento di aggiungere le funzionalità richieste
su schermo, dovrete utilizzare il codice Python che segue dalla nostra applicazione. Questo significa che quando viene
(nel file GUIVuota.py) premuto il pulsante Vai dovremo andare a leggere i due box
#!/usr/bin/python in alto oltre all’area di testo centrale ed eseguire la sostituzione.
Tutte le funzionalità richieste saranno inserite nella funzione
from Tkinter import * callback() che viene invocata alla pressione del pulsante Vai.
from ScrolledText import * Il resto del codice Python è identico a quello del file GUIVuota.py.
# Il pulsante vai
# Il widget radice per la nostra applicazione def callback():
radice = Tk(className="Trova e sostituisci") miaRicerca = cerca.get() or "null"
miaSostituzione = sostituisci.get() or "null"
# Due widget per trova e sostituisci mioTesto = testo.get('1.0', END)
cerca = Entry(radice, text="cerca") testo.delete('1.0', END)
cerca.pack() # Stampiamo il nuovo testo dopo ricerca e
sostituzione
sostituisci = Entry(radice, text="sostituisci") testo.insert('insert', re.sub(miaRicerca,
sostituisci.pack() miaSostituzione, mioTesto))
Per ottenere il testo da un widget di tipo Entry() dobbiamo
testo = ScrolledText(radice, width=50, height=30, borderwidth=1) utilizzare il metodo get(). Allo stesso modo, possiamo ottenere
testo.pack() il testo di un widget di tipo ScrolledText() utilizzando il metodo
get() e cancellare il suo contenuto con il metodo delete().
testo.insert('insert', "...") Nonostante il fatto che gui.py supporti soltanto ricerche
di testo statico, l’applicazione è perfettamente funzionante
# Il pulsante vai e abbastanza utile. In basso nella pagina precedente potete
def callback(): vedere uno screenshot dello script gui.py in azione. Quando
print "Pulsante vai premuto!" si preme il pulsante Vai, il programma invoca la funzione
callback() e fa tutto il lavoro per noi! Esistono molti libri
b = Button(radice, text="Vai", command=callback) che possono aiutarvi nell’apprendimento di Python tra i quali
b.pack() Python Cookbook, 3rd Edition, di David Beazley e Brian K.
Jones (in inglese) e Imparare Python di Mark Lutz e G. Bonelli.
radice.mainloop() Esiste anche it.diveintopython.net che è un libro su Python
La prima versione della GUI è semplicemente dimostrativa: gratuito per programmatori esperti. Potete trovare maggiori
abbiamo due caselle di input, l’area nella quale scrivere informazioni su Tkinter su www.pythonware.com/library/
il proprio testo e il pulsante Vai ma quando si preme su di esso e docs.python.it/html/lib/module-Tkinter.html. LXP

RASPBERRY PI 87
Raspberry Pi Python

Configurare
un DB SQLite 3
Impostare un database per lavorare con dati preziosi è davvero facile se si
utilizza il linguaggio di programmazione Python: ecco come fare

L
I FILE PER SEGUIRE a ricchezza del mondo del terzo millennio sono macchina Linux lanciando il comando sqlite3 nel prompt
IL TUTORIAL SONO
i dati, perché allora non dedicarvi la giusta attenzione della shell. Se non avete ancora installato questo database
DISPONIBILI QUI
in termini di sicurezza e affidabilità? In questo articolo potete farlo utilizzando il vostro gestore di pacchetti
utilizziamo sia Python 3.4.x sia Python 3.5.x ma il tutto può preferito. Se in un qualunque momento avete bisogno di
funzionare anche con la versione 2.7.x apportando qualche avere più informazioni sul vostro database SQLite 3, potete
piccola modifica. Il percorso completo dell’eseguibile di Python guardare la tabella sqlite_master:
www.sprea.it/
3 utilizzato in questo tutorial è /usr/local/bin/python3 sqlite> .schema sqlite_master
SP21_pythonsql
o /usr/bin/python3. Se il vostro sistema Linux utilizza CREATE TABLE sqlite_master (
dei percorsi diversi dovrete modificare gli script di conseguenza type text,
per farli funzionare. Vi servirà poi un database, SQLite, che offre name text,
un paio di vantaggi davvero non da poco: non necessita tbl_name text,
di un processo server per funzionare e lavora con un singolo rootpage integer,
file che contiene tutte i dati necessari all’archivio elettronico. sql text
È molto performante, affidabile, portabile, semplice da utilizzare, );
utilizza poca memoria, può essere incorporato in moltissimi sqlite> PRAGMA TABLE_INFO(sqlite_master);
dispositivi compresi gli smartphone e ci si può accedere 0|type|text|0||0
utilizzando il linguaggio SQL. SQLite non offre autenticazioni 1|name|text|0||0
o autorizzazioni. I normali permessi di UNIX (definiti tramite 2|tbl_name|text|0||0
il comando chmod) vengono utilizzati per determinare i livelli 3|rootpage|integer|0||0
di accesso di SQLite: lettura e scrittura, sola lettura e nessun 4|sql|text|0||0
accesso. Bisogna però notare che SQLite non è molto adatto Il primo comando mostra lo schema di sqlite_master mentre
a gestire set di dati molto grandi nonostante i filesystem il secondo visualizza le stesse informazioni in formato differente.
moderni supportino file di grandissime dimensioni. Lo schema di una tabella definisce le colonne della tabella
Per concludere, SQLite non supporta le repliche, ma potete fare stessa e i loro attributi. Lo schema del database definisce
il backup del database copiando semplicemente il file che le tabelle e le loro relazioni.
lo contiene! Potete eseguire SQLite 3 nella vostra
Connettersi a un archivio
Il codice Python che segue mostra come connettersi
a un database SQLite 3 e come eseguire una query SELECT:
#!/usr/local/bin/python3

import sqlite3
conn = sqlite3.connect('LXP.sqlite')
c = conn.execute("SELECT count(*) from sqlite_master")

Questo for riga in c:


screenshot print (riga)
mostra qualche
esempio delle
conn.close()
operazioni CRUD
di base, eseguite Come potete vedere dalla query presente qui sopra,
sul nostro stiamo accedendo alla tabella sqlite_master.
database L’output che otterrete eseguendo questo codice dovrebbe
LXP.sqlite essere simile al seguente:

88 RASPBERRY PI
Tipi di dati supportati
SQLite 3 supporta i tipi di dati INTEGER, REAL, del database. Solitamente in UTF-8. potete utilizzare il tipo INTEGER al suo posto.
TEXT, BLOB e il valore NULL: Binary Large Object (BLOB) Questo tipo Inoltre, SQLite 3 utilizza INTEGER, REAL o TEXT
INTEGER Contiene valori interi e occupa fino di dato viene utilizzato per salvare dati binari per salvare i valori di tipo data od ora: per esempio
a un massimo di 8 byte a seconda del valore. come immagini o file compressi. il formato UNIX per l’ora viene salvato come tipo
REAL Ha numeri a virgola mobile e utilizza 8 byte. NULL viene utilizzato per rappresentare il valore di dato INTEGER. Le funzioni built-in per la
TEXT Il tipo di dati TEXT contiene stringhe di nullo o la cella vuota. manipolazione delle date si occupano di convertire
testo che vengono salvate utilizzando l’encoding Dato che non esiste alcun tipo di dato Boolean, automaticamente tra i vari formati.

$ ./connetti.py Aggiungere una chiave primaria è molto importante per motivi


(0,) di performance quindi sceglietela con attenzione. La keyword
Utilizziamo il modulo sqlite3 per comunicare con il database AUTOINCREMENT può essere molto utile, specialmente
SQLite 3. Poi, definiamo il nome del file database al quale quando volete creare un campo che contenga ID univoci. Come
vogliamo accedere. Per poter eseguire query SQL dobbiamo potrete immaginare, non dovete fornire un valore a un campo
creare un cursore, la query appena vista legge da una tabella impostato come AUTOINCREMENT perché se ne occupa
del database e ritorna il numero di record presenti nella tabella SQLite 3. L’utilizzo di AUTOINCREMENT è permesso soltanto
stessa. Da notare che se il file database LXP.sqlite non esiste, nei campi INTEGER PRIMARY KEY. La differenza principale
verrà creato automaticamente; quindi errori tipografici possono tra LXPPUBBLICAZIONI e PUBBLICAZIONI sta nel fatto
generare risultati strani. Inoltre, se il file database al quale volete che quando si inserisce un record nella tabella
accedere non si trova nella directory corrente, dovrete utilizzare LXPPUBBLICAZIONI bisogna fornire quattro valori mentre
il percorso completo. Il codice appena visto verrà utilizzato per la tabella PUBBLICAZIONI ne sono richiesti soltanto tre
molto durante questo tutorial quindi provatelo e assicuratevi dato che il campo ID viene gestito in autonomia dal database
che funzioni correttamente prima di proseguire con la lettura. server. Un altro comando SQL molto comodo è ALTER TABLE
L’output che segue mostra il comportamento della shell Python che ci permette di aggiungere nuove colonne a una tabella
quando il comando produce un messaggio di errore: del database esistente:
>>> c = conn.execute("SELECT count(*) from sqlite") sqlite> ALTER TABLE LXPPUBBLICAZIONI ADD COLUMN
Traceback (most recent call last): EDITORE CHAR(100);
File "<stdin>", line 1, in <module> sqlite> .schema LXPPUBBLICAZIONI
sqlite3.OperationalError: no such table: sqlite CREATE TABLE LXPPUBBLICAZIONI (
>>> conn.close() ID INT PRIMARY KEY NOT NULL,
>>> c = conn.execute("SELECT count(*) from sqlite_master") NUMERO INT NOT NULL,
Traceback (most recent call last): ANNO INT NOT NULL,
File "<stdin>", line 1, in <module> COMMENTI CHAR(50),
sqlite3.ProgrammingError: Cannot operate on a closed database. EDITORE CHAR(100));
Il primo comando ci mostra che se la tabella che state Lo script creatabelle.py mostra come eseguire la stessa
interrogando non esiste, il programma fallisce. L’ultimo operazione utilizzando il modulo sqlite3 di Python:
comando ci fa vedere che se per errore chiudiamo conn.execute(‘DROP TABLE LXPPUBBLICAZIONI;’)
la connessione al database prima del tempo e poi cerchiamo conn.execute(‘DROP TABLE PUBBLICAZIONI;’)
di accederci, il programma fallisce ancora una volta.
conn.execute(‘CREATE TABLE LXPPUBBLICAZIONI (ID INT
Creare una tabella PRIMARY KEY NOT NULL, NUMERO INT NOT NULL,
Dato che probabilmente la prima azione che vorrete fare sarà ANNO INT NOT NULL, COMMENTI CHAR(50));’)
creare una tabella, in questa sezione vedremo diversi modi conn.execute('CREATE TABLE PUBBLICAZIONI (ID
per creare tabelle in SQLite 3:
sqlite3 LXP.sqlite
SQLite version 3.8.11.1 2015-07-29 20:00:57
Enter ".help" for usage hints.
sqlite> CREATE TABLE LXPPUBBLICAZIONI (
ID INT PRIMARY KEY NOT NULL,
NUMERO INT NOT NULL,
ANNO INT NOT NULL,
COMMENTI CHAR(50) Qui possiamo
vedere i comandi
);
di SQLite 3
sqlite> CREATE TABLE PUBBLICAZIONI (
per la creazione
ID INTEGER PRIMARY KEY AUTOINCREMENT,
di tabelle
NUMERO INT NOT NULL, e per modificare
ANNO INT NOT NULL, una tabella
COMMENTI CHAR(50) aggiungendo
); una colonna

RASPBERRY PI 89
Raspberry Pi Python

INTEGER PRIMARY KEY AUTOINCREMENT, NUMERO il campo ID è chiave primaria e deve essere univoca. Questo
INT NOT NULL, ANNO INT NOT NULL, COMMENTI non vale per la tabella PUBBLICAZIONI perché ha la colonna
CHAR(50));') impostata come AUTOINCREMENT. Il comando conn.commit()
è necessario affinché i record vengano realmente salvati
conn.execute('ALTER TABLE LXPPUBBLICAZIONI ADD nel database. Il codice Python dello script fetch.py,
COLUMN EDITORE CHAR(100);'); ci mostra l’utilizzo del comando SELECT:
Come potete vedere, abbiamo utilizzato gli stessi comandi c = conn.execute("SELECT * from PUBBLICAZIONI;")
ma passandoli come argomento della funzione conn.execute(). for record in c:
La funzione execute() utilizzata per creare e modificare le tabelle print(record)
non richiede l’uso di cursori dato che non ritorna alcun indice. Come potrete immaginare, non si può sapere a priori il numero
In questo script abbiamo utilizzato il comando DROP per di record che lo statement SELECT ritornerà, per questo per
cancellare una tabella prima di provare a crearla; purtroppo, ottenere tutti i risultati bisogna scorrere un cursore. Il codice
se la tabella non dovesse esistere DROP darà un errore. Python dello script eliminazione.py è il seguente:
Nella pagina precedente potete vedere uno screenshot conn.execute("DELETE FROM PUBBLICAZIONI where
dell’esecuzione di diverse operazioni di manipolazione di tabelle ID='2'")
eseguite dalla shell di SQLite 3. conn.commit()
print ("Numero totale di righe eliminate:", conn.total_changes)
Utilizzare il driver Python Ancora una volta, il comando conn.commit() è obbligatorio.
Ora che sappiamo come connetterci a un database SQLite 3 Se il comando di DELETE non corrisponde a nessun record,
e come creare una tabella utilizzando Python, è giunto non otterrete alcun avviso o errore. Comunque potete
il momento di scoprire come eseguire operazioni basilari, utilizzare la property conn.total_changes per capire
insert (inserimento), select (interrogazione), update cos’è successo. Nel codice che segue, salvato come
(aggiornamento) e delete (cancellazione) grazie all’aiuto aggiornamento.py, vediamo come eseguire un
del modulo sqlite3. Come avete potuto vedere nello script aggiornamento di SQLite 3 utilizzando Python:
connetti.py, per poter leggere i risultati di una query conn.execute("UPDATE PUBBLICAZIONI set ANNO = '2016'
di SELECT dobbiamo scorrere un cursore. Il codice Python where ANNO='2015'")
di inserimento.py è il seguente: conn.commit()
conn.execute("INSERT INTO PUBBLICAZIONI (NUMERO, print ("Numero totale di righe modificate:", conn.total_changes)
ANNO, COMMENTI) VALUES (202, 2015, 'Il miglior numero di Potete vedere i quattro script Python in esecuzione in uno
sempre!') ") screenshot di queste pagine. Il codice Python che segue,
conn.execute("INSERT INTO PUBBLICAZIONI (NUMERO, nel file nomiColonne.py, mostra come recuperare i nomi delle
ANNO, COMMENTI) VALUES (203, 2015, 'La miglior uscita di colonne di una data tabella:
Linux Pro in assoluto!')") import sys
conn.commit()
conn.execute("INSERT INTO LXPPUBBLICAZIONI (ID, # Il primo argomento è il nome del database
NUMERO, ANNO, COMMENTI) VALUES (0, 202, 2015, 'Il database = sys.argv[1]
miglior numero di sempre!') ") # Il secondo argomento è il nome della tabella
conn.execute("INSERT INTO LXPPUBBLICAZIONI (ID, tabella = sys.argv[2]
NUMERO, ANNO, COMMENTI) VALUES (1, 203, 2015, 'La
miglior uscita di Linux Pro in assoluto!')") conn = sqlite3.connect(database)
conn.commit() c = conn.cursor()
Lanciando più volte lo script inserimento.py si otterrà un errore query = "select * from " + tabella + " where 1=0"
a causa del tentativo di violazione dei constraint della tabella, c.execute(query)
non è cioè consentito l’inserimento di un ID già presente, perché rs = c.fetchall()
nomi_campi = [r[0] for r in c.description]

for f in nomi_campi:
print("*", f)
Ricordatevi bene questo codice, ne userete uno molto simile
nell’applicazione GUI che state per creare. Il nome della tabella
della quale volete sapere le colonne va passato come
In questa argomento da riga di comando. Eseguire lo script
immagine nomiColonne.py produrrà un risultato simile a questo:
vediamo in $ ./nomiColonne.py LXP.sqlite PUBBLICAZIONI
azione alcuni * ID
script Python
* NUMERO
scritti per questo
* ANNO
tutorial. Alcuni
* COMMENTI
di essi possono
generare L’applicazione che fa da GUI che andremo a creare avrà
dei messaggi un menu per visualizzare le tabelle disponibili sul database.
d’errore se Una scelta ragionevole potrebbe essere quella di utilizzare
eseguiti più volte la classe OptionMenu per creare un menu popup e un

90 RASPBERRY PI
Database

pulsante per visualizzarli. Possiamo inserire una lista


di tabelle disponibili all’interno di una struttura dizionario
e passarla come parametro alla classe OptionMenu.
Per ottenere il valore corrente di un OptionMenu possiamo
utilizzare il metodo get() disponibile nella variabile utilizzata
per definire la classe OptionMenu.

Tkinter per interagire meglio


Per mostrare il testo utilizzeremo la comoda classe
ScrolledText. Con il metodo delete() rimuoveremo i dati
correnti dalla classe ScrolledText e con il metodo insert()
aggiungeremo nuovi dati. Come vedrete, il funzionamento
dell’applicazione sarà molto semplice, anche se efficace.
Il programma che vediamo ora leggerà da un file database
e recupererà tutti i nomi delle tabelle presenti
in esso. Poi, permetterà di scegliere una tabella
da una lista e visualizzarne i campi. Il file database
verrà passato come argomento da riga di comando
allo script Python. La versione iniziale dell’applicazione
si trova all’interno del file gui.py: La nostra
#!/usr/bin/python3 anchor=SE) applicazione
mainloop() (collegata al
import sqlite3 conn.close() database LXP.
import tkinter sqlite) in tutto
from tkinter import * La GUI completa il suo splendore

import tkinter.scrolledtext as ST La versione funzionante dell’applicazione si trova nel file


import sys guiDefinitiva.py. Il codice che segue, mostra
l’implementazione della funzione callBack() perché
def callBack(): è qui che accade la magia:
print ("il valore è", variable.get()) def callBack():
testo.delete('1.0', END) print ("il valore è", variable.get())
mioTesto = "Nome tabella: " + variable.get() testo.delete('1.0', END)
testo.insert('insert', mioTesto) nomeTabella = variable.get()
mioTesto = "Nome tabella: " + nomeTabella
# Il primo argomento è il nome del database testo.insert('insert', mioTesto + '\n')
database = sys.argv[1] testo.insert('insert', "** Nome dei campi **\n")
# Prendiamo i dati che ci interessano
conn = sqlite3.connect(database) query = "select * from " + nomeTabella + " where 1=0"
c = conn.cursor() c.execute(query)
rs = c.fetchall()
root=Tk() nome_campi = [r[0] for r in c.description]
canvas=Canvas(root,width=810,height=600) for f in nome_campi:
canvas.pack() testo.insert('insert', '\t' + f + '\n')
Per accedere ai nomi delle tabelle di un database SQLite 3
testo = ST.ScrolledText(canvas, width=35, height=20, sfruttando la tabella sqlite_master dobbiamo utilizzare
borderwidth=0) il comando che segue:
testo.pack() SELECT name FROM sqlite_master WHERE type='table';
Il codice Python che segue mostra come popolare la variabile
# Lista finta di tabelle listaDiTabelle utilizzando il comando SELECT appena visto:
listaDiTabelle = {"sqlite_master", listaDiTabelle = {}
"uno", listaDiTabelle['sqlite_master'] = 0
"due", c.execute("SELECT name FROM sqlite_master WHERE
"tre"} type='table';")
for record in c:
variable = StringVar(root) # print(record[0])
variable.set("sqlite_master") # valore di default listaDiTabelle[record[0]] = 0
w = OptionMenu(root, variable, *listaDiTabelle) Potete vedere uno screenshot in questa pagina dello script
w.pack() guiDefinitiva.py in azione. Se volete continuare lo sviluppo
di questa applicazione potete ottenere informazioni sul
Button(root, text='Chiudi', command=root.quit). modulo sqlite3 all’indirizzo https://docs.python.org/3/
pack(side=BOTTOM, anchor=SE) library/sqlite3.html (in inglese). All’URL http://www.
Button(root, text='OK', command=callBack).pack(side=TOP, sqlite.org/ trovate invece il sito ufficiale di SQLite 3. LXP

RASPBERRY PI 91
Raspberry Pi Sicurezza & Gestione

PROTEGGI LA
raspberry!
Ecco come usare la Pi
per migliorare la sicurezza
della tua rete locale

L
a Raspberry Pi è molto più tra il computer e il potenziale malware. la Pi funzionerà come un server Web
versatile di qualsiasi computer. Infatti, per tale motivo, scoprirete come completo di file fittizi. Così facendo, tutte
Infatti può essere utilizzata utilizzarla con funzionalità di Ad-Blocking le attività dei cracker verranno registrate
per molteplici scopi, e server DNS con il tool Pi-hole. e le modifiche malevole apportate
tra cui migliorare la sicurezza Inoltre, vedrete come servirvene per non influenzeranno gli altri dispositivi
dell’infrastruttura di rete domestica “disinfettare” le chiavi USB da potenziali connessi alla rete. Avrete così una serie
o dell’ufficio. Nelle pagine che seguono virus prima di collegarle al PC. Gli utenti di importanti informazioni da utilizzare
imparerete a trasformare la vostra più esperti potranno poi sfruttare la nostra per scovare chi sta cercando di accedere
Raspberry Pi in una piattaforma guida per trasformare la Raspberry Pi alla vostra infrastruttura e per capire come
di attacco wireless. Per farlo, in una honeypot di rete. In questo modo, agisce di solito. Cominciamo quindi con
sarà necessario sfruttare la tecnica del wardriving, vale
la famosa distro Kali Linux,
capace di eseguire qualsiasi
“I Wardriver non vanno in giro a dire guidare un veicolo in giro
per la città, alla ricerca di reti
tipo di hacking.
La Pi, tuttavia, può anche
con un furgoncino tipo FBI, ma vulnerabili da attaccare.
Le piccole piattaforme
funzionare come buffer si muovono anche in bicicletta” come la Raspberry sono

92 RASPBERRY PI
Sicurezza

perfette per questo scopo, in quanto hanno dimensioni ridotte I Wardriver


e possono essere usate in mobilità con il massimo comfort. utilizzano una
Prima di procedere è però importante fare qualche serie di segnali
precisazione. La guida che segue è destinata a chi vuole in codice
mettere in atto un hacking etico, vale a dire senza alcun per indicare
fine illegale. Ciò su cui ci concentreremo, infatti, riguarda le attività
presenti in una
la possibilità di eseguire test di penetrazione su router
determinata
e dispositivi IoT, per assicurarsi che siano meno vulnerabili
zona
a determinati generi di attacchi. A tal proposito, riproponiamo
il solito avvertimento del caso: assicuratevi di fare prove solo
su reti di cui siete i proprietari o, in alternativa, in cui avete
ricevuto il permesso dal possessore. Tuttavia, consigliamo
di essere in due: un pen-tester e una vittima. Il gioco sarà
molto più coinvolgente e appagante.

Gambe in spalla
Per iniziare la attività di wardriver, è necessario procurarsi aprite il file di configurazione di kismet con il comando
una Raspberry Pi che supporti il Wi-Fi, come la Pi 3 o la Pi Zero nano /etc/kismet/kismet.conf e decommentate le righe Tip
W. Avrete poi bisogno di una scheda microSD da almeno 16 GB gpstype=serial e gpsdevice=/dev/rfcomm0, rimuovendo
in cui installare Kali. Tutti i passaggi descritti di seguito possono il cancelletto (#) all’inizio della riga. Sostituite rfcomm0 con Per un elenco
essere eseguiti dalla riga di comando. In alternativa, niente vieta l’attuale percorso del GPS, per esempio ttyUSB0, quindi completo delle
di connettersi tramite SSH da un altro PC alla Pi. Tuttavia, premete Ctrl+X e Y per salvare e uscire. Lanciate il GPS con schede Wi-Fi
compatibili con
considerando l’attività per cui la Raspberry deve essere gpsd /dev/ttyUSB0 e poi eseguite kismet -l. Ora vedrete i dati aircrack-ng,
utilizzata, consigliamo di sfruttare il display touch ufficiale del GPS mostrati nella finestra di kismet, che vengono salvati consultate
da 7 pollici. Potrete così risparmiare ulteriore spazio, evitando automaticamente in un file .netxml nella /home. Potete poi http://bit.
la necessità di portarvi dietro una tastiera. Se prevedete l’uso usare il programma giskismet per trasformare il documento ly/2gsD7Hl.
della Pi in macchina, un altro accessorio importante è un in .kml, compatibile con software come Google Earth. Per
battery pack portatile o, ancora meglio, un cavo per collegarsi procedere all’installazione del programma, usate apt-get install
all’accendisigari. Qualunque sia la fonte di energia utilizzata, giskismet, quindi sfruttate la seguente istruzione seguita dal file
assicuratevi che corrisponda ai requisiti della Raspberry (5V, .netxml: giskismet -x capture1-01.kismet.netxml. Impiegate poi
2,5A). C’è poi bisogno di una scheda wireless, che può essere il comando giskismet -q “select * from wireless” -o <nomefile>.
collegata tramite USB e compatibile con la suite aircrack-ng, kml per creare il file .kml risultante. A questo punto bisogna fare
così da sfruttare il monitoraggio e il packet injection. Per questo un’ulteriore precisazione. Molte persone pensano che non sia
Tip
articolo, abbiamo usato il Racksoy Professional Ralink 5370. possibile attaccare ciò che non si vede. Nascondono quindi
Se, nel tentativo
Se vi state avventurando su una rete di un amico, di sicuro non le proprie Wi-Fi, nella speranza che i wardriver non vengano
di disautorizzare
avrete bisogno di alcun dispositivo per la geolocalizzazione. a conoscenza della loro esistenza. Purtroppo ci dispiace i dispositivi,
Al contrario, i Wardriver utilizzano spesso apparecchi GPS che deludervi, ma non è così. Rilevare una rete con SSID nascosto aireplay-ng
sfruttano kismet, il quale aiuta nell’individuazione delle reti è davvero un gioco da ragazzi. In Kali, basta utilizzare il vi informa che
state utilizzando
in una specifica zona. Se non volete farvi mancare nulla, c’è un terminale lanciando l’istruzione airodump-ng <interfaccia>.
un canale
buon numero di apparecchi GPS compatibili. In questo articolo, Il comando airodump-ng wlan1mon, per esempio, mostra le reti sbagliato, usate
per esempio, abbiamo utilizzato l’USB GlobalSat BU-353-S4. nascoste nelle vicinanze. Infatti, non c’è infrastruttura che possa iwconfig
Se poi volete tracciare le reti Wi-Fi, aprite il Terminale su Kali scappare, perché alla fine è il solo nome della rete (SSID) a <interfaccia>
e usate apt-get install gpsd gpsd-clients, così da installare essere nascosto. Adesso usate ancora una volta airodump-ng channel
il software GPS di base. Connettete il dispositivo satellitare per focalizzare l’attenzione sulla rete trovata tramite <canale> per
alla porta USB e lanciate dmesg | tail -n 5 per scoprire dov’è il suo MAC address: per esempio airodump-ng -c 1 --bssid modificarlo.
montato, per esempio /dev/ttyUSB0. Ora lanciate GPS Daemon CC:61:E5:CE:90:92 wlan1mon. Vedrete quindi comparire la lista
in questa posizione con gpsd /dev/ttyUSB0. Adesso, invece, di tutti i dispositivi collegati a quella specifica rete.

Create una Cantenna!

L
a maggior parte dei wardriver impiega In questo modo, potrete sostituirla con quella
spesso antenne a lungo raggio, così da che volete progettare. C’è poi bisogno di un cavo
essere facilitati nell’acquisizione delle reti da N-maschio a RP-SMA-maschio e di un
Wi-Fi a grandi distanze. La NextG TurboTenna connettore N-femmina e di un cavo di rame da
può rilevare infrastrutture perfino a centinaia 12. Le dimensioni della lattina devono poi essere
di metri. Se però siete degli smanettoni e sapete di circa 7-10 cm per 12,7. Anche la lunghezza è un
utilizzare un saldatore, potete prendere parametro fondamentale. Qui (www.changpuak.
in considerazione l’idea di costruirsi una ch/electronics/cantenna.php) trovate una
“cantenna”. In primo luogo, dovrete munirvi di pratica calcolatrice per iniziare. Per le istruzioni, Con un po’ di manodopera e materiali
un dongle Wi-Fi USB con un’antenna staccabile. invece: http://bit.ly/LXP183_cantenna riciclati, costruite un’ottima cantenna!

RASPBERRY PI 93
Raspberry
Protezione Pi Sicurezza & Gestione
Raspberry

Infine, seguite i passaggi della guida per aprire una nuova vedere dal tutorial nella pagina a fianco, è facile registrare
scheda del terminale, provando poi a disautorizzare i pacchetti dati da una rete wireless e acquisire l’handshake.
diversi apparecchi aggiungendo l’opzione -c per lo Tuttavia, potete aumentare la sicurezza utilizzando password
Tip specifico target. Per esempio: di accesso complesse e cambiandole regolarmente.
aireplay-ng -0 5 -a C:61:E5:CE:90:92 -c 10:9A:DD:B3:48:0B
ATTENZIONE!
Questo articolo wlan1mon Password cracking
è stato scritto Se avrete successo, quando tornerete nella finestra del Se seguite i passaggi della guida per catturare i dati
prima che terminale di airodump-ng , vedrete che il nome della rete Wi-Fi utilizzando airodump-ng, troverete un file con estensione .cap
fosse rivelato nascosta è ora comparso sotto ESSID. nella cartella home in root/kali. Di solito prende il nome di
l’attacco KRACK
(https://www.
capture-01.cap. Se i dati acquisiti contengono un handshake
krackattacks. L’importanza dell’handshake tra i client e l’AP bersaglio, è possibile eseguire un attacco
com/). Le Quando un client si connette a un AP (Access Point) protetto in modalità dizionario sulle password tramite aircrack-ng.
considerazioni dallo standard WPA, sfrutta un handshake a quattro vie. L’ AP, Questa utility, infatti, funziona utilizzando un elenco di chiavi
sulla sicurezza
inizialmente, invia un valore non criptato al client. Quest’ultimo di accesso comuni, determinate da parole di senso compiuto.
di WPA2 quindi
sono da valutare genera poi la propria chiave crittografica e il nonce, creando In Rete potete trovare un certo numero di elenchi pronti
con attenzione. una chiave transitoria tramite il proprio nome e quello dell’AP. all’uso, incluso quello sfruttato dal popolare John the Ripper
A questo punto invia un messaggio non crittografato sempre già preinstallato in Kali. Per scaricare la lista delle password
all’Access Point, contenente la suddetta chiave. L’AP estrae di quest’ultimo software, aprite il Terminale e lanciate:
Tip quindi il nonce del client e crea le chiavi crittografiche. A questo wget http://downloads.skullsecurity.org/passwords/john.txt.bz2
punto, invia poi un messaggio al client stesso per verificare che Estraete il file con bzip2 -d john.txt.bz2, quindi iniziate il
Controllate se sia il medesimo dispositivo, chiedendo se è pronto a scambiare cracking della password Wi-Fi con aircrack-ng -w john.txt
avete rilevato
le chiavi. Il client risponde e la connessione tra quest’ultimo <nome-file-capture>, per esempio aircrack-ng -w mario.txt
un handshake,
verificando la e l’AP viene protetta. Quello che abbiamo descritto è per sommi capture-01.cap. La Raspberry Pi 3 può controllare circa 500
parte superiore capi il modo in cui funziona una connessione Wi-Fi criptata. password per volta. Il numero sembra impressionante, ma
destra della Si tratta di un passaggio importante, soprattutto per capire dovete considerare che gli elenchi da utilizzare ne possono
finestra di
quanto sia fondamentale la cattura dei pacchetti al momento contenere diversi milioni. Visto che aircrack-ng può essere
airodump-ng.
dell’handshake nel crack della rete in questione. Come potrete eseguito in modalità offline, consigliamo di trasferire il file
capture su una macchina desktop, oppure utilizzare il cloud
computing per avere maggior potenza di elaborazione.
Ricordate poi che la velocità con cui l’operazione viene
svolta dipende dalla qualità della lista di password utilizzata.
Consultate https://github.com/danielmiessler/
SecLists/tree/master/Passwords per un elenco
completo. Se l’AP di destinazione impiega WPS, potrebbe
essere possibile interrompere l’uso della sola Raspberry Pi
senza acquisire i dati dell’handshake. A tal proposito,
leggete il box riportato qui sotto. Ricordate poi che
il wardriving funziona meglio se vi trovate vicino
al bersaglio, così da limitare al minimo le interferenze.
Per migliorare la ricezione, potrebbe essere utile dotarvi
di una cantenna (consultate il box nella pagina precedente).
Considerate infine che anche i dispositivi pubblicizzati
come compatibili con Kali Linux su una macchina desktop,
Potete utilizzare un software come Google Earth, per visualizzare il file potrebbero avere qualche problema a funzionare con
.kml generato dal tool giskismet la versione del kernel Linux utilizzata nella Pi. Se tentate

Il crack del WPS con Reaver

M
olti router e dispositivi IoT supportano il terminale e lanciate apt-get install reaver.
WPS, che presumibilmente è il modo Se non lo avete già fatto, abilitate la modalità
più semplice e rapido per connettersi. di monitoraggio nella vostra scheda Wi-Fi con
Tuttavia, in termini di sicurezza, questa è una airmon-ng start <interfaccia>, quindi usate wash
vera spina nel fianco. Infatti, per l’autenticazione -i <interfaccia> per visualizzare tutti i dispositivi
viene spesso usato un PIN da 8 cifre che talvolta in cui è attivo WPS. Ora usate reaver -i
può essere trovato perfino online. Il modo <interfaccia> -b <bssid> -c <canale> -vv,
migliore per rimanere abbastanza al sicuro è per esempio reaver -i wlan1mon -b
quindi disabilitare questa funzione. Se non fosse 00:19:70:70:15:2C -c 6 -vv e iniziate il cracking
possibile (alcuni router non lo permettono), del PIN. A meno che il dispositivo non limiti
potete almeno considerare quanto sia semplice i tentativi, non dovrebbero volerci più di 24 ore Reaver esegue un attacco brute-force
far cedere il WPS di fronte a un attacco brute- perché l’operazione termini. Potete comunque sui client che usano WPS. In media,
force. Per l’occasione, usate Reaver. Aprite premere Ctrl+C per arrestare il processo. l’operazione richiede circa 10 ore

94 RASPBERRY PI
Sicurezza
Proteggi la Pi

di intercettare tutti i dispositivi connessi a una rete, ma quello fornito da Amazon Linux AMI. Quest’ultimo, infatti,
non riuscite ancora a rilevare l’handshake, potrebbe essere consente di portare attacchi brute-force sfruttando
meglio puntare su uno specifico client. Infine, valutate la potenza delle GPU che accelerano notevolmente
la possibilità che sulla Pi l’esecuzione di un attacco a forza l’esecuzione. Se giustamente siete impensieriti da ciò
bruta possa richiedere parecchio tempo. Salvate quindi che avete letto, per migliorare la sicurezza della vostra rete,
il file di cattura su un PC desktop potente e lanciate la assicuratevi di sfruttare sempre una crittografia WPA2-AES
procedura da lì. Se avete qualche euro da investire, sarebbe cambiando di frequente la password. Inoltre, disabilitate
ancora meglio fare affidamento sul cloud computing come il WPS su tutti i dispositivi.

Cerca, individua e disautentica!

1 Installate Kali 2 Configurate Kali e installate kismet


Scaricate l’immagine ARM per la Pi da www.offensive-security. Inserite la scheda microSD e alimentate la Pi. Una volta che compare
com/kali-linux-arm-images. Spostatevi nella cartella dei download la schermata di login, utilizzate root come nome utente e toor come
con cd Scaricati . Inserite quindi la vostra microSD, assicurandovi password. Scegliete la configurazione predefinita per visualizzare
che non sia ancora montata. Adesso usate dd per scrivere: sudo dd il desktop, quindi connettetevi alla vostra rete Wi-Fi. Aprite il
bs=4M if=kali-2017.01-rpi2.img of=/dev/sdb status=progress . Terminale, lanciate apt-get update e poi apt-get install kismet .

3 Configurate Kismet 4 Lanciate Kismet


Usate Tab per tornare indietro e selezionate OK dopo i vari avvisi Selezionate Start e poi premete Invio. Da qui potete poi aggiungere
che compaiono. Solo quando viene richiesto il root di setuid dovete il nome della vostra interfaccia, per esempio wlan1. Se non siete
rispondere di NO. Collegate la scheda Wi-Fi per il wardriving e la sicuri, aprite una nuova scheda nel terminale e lanciate ip a.
cantenna se disponibile. Lanciate Kismet dal terminale con kismet. Impostate il nome che volete, quindi scegliete Add. Premete Invio
Infine premete Invio per avviare il server. per chiudere la console e visualizzare la finestra principale di Kismet.

5 Catturate i dati 6 Disautenticate i dispositivi


Annotate il nome, il BSSID, il canale del vostro bersaglio e poi usate: Aprite una nuova scheda nel terminale ed eseguite aireplay-ng -0 5
airodump-ng -w <logfile> -c <canale> --bssid <bssid> -o pcap -a <BSSID> <Nome Interfaccia> , per esempio aireplay-ng --deauth 5
<interfaccia> per iniziare a catturare i dati in un file, per esempio -a CC:61:E5:CE:90:92 wlan1mon per cercare di avviare tutti i device
airodump-ng -w capture1 -c 1 --bssid CC:61:E5:CE:90:92 -o pcap e catturare un handshake. In alternativa, usate besside-ng -b <mac
wlan1mon . Il sistema, quindi, preleva e salva le informazioni. address> <interfaccia> per proseguire fino a che non riuscite.

RASPBERRY PI 95
Raspberry
Protezione Pi Sicurezza & Gestione
Raspberry

Basta pubblicità
Usate Pi-hole per trasformare la Raspberry Pi in un ad-blocker

N
on ci sono effettivamente molti progetti di Pi, ma se volete collegarlo al router via Ethernet
riguardanti la Pi che possono essere installati (consigliato), dovrete utilizzare una Raspberry Pi 3 o una Pi
con poche righe di codice. Tuttavia, i creatori Zero/Pi Zero W con adattatore Ethernet OTG USB. Il termine
di Pi-hole hanno realizzato un installer molto semplice “server DNS” è comunemente usato per far riferimento a
che, una volta scaricato, imposta la Raspberry Pi computer accessibili al pubblico, che contengono hostname
come ad-blocker in un batter d’occhio. come www.sprea.it e il relativo indirizzo IP. Questo consente
Il progetto non deve essere scambiato per qualcosa di simile ai siti Web di avere nomi riconoscibili, piuttosto che stringhe
ai vari AdBlock Plus. Queste utility, infatti, servono solo per numeriche. Tutti i dispositivi abilitati all’uso di Internet
Tip bloccare gli annunci delle pagine Web già caricate. Pi-hole, utilizzano una query di un server DNS, ogni qualvolta
invece, arresta i siti Web pubblicitari direttamente a livello tentano di accedere a una pagina. Pi-hole funziona da server
Visitate di DNS. Non c’è bisogno di alcun software client e in genere DNS connesso alla rete locale. Pertanto, le richieste fatte
https://goo. è il modo migliore per mantenere la vostra rete al sicuro dai device possono essere instradate attraverso
gl/fcERhV
per trovare
da questo genere di fastidi. quest’ultimo e controllate da un elenco costantemente
suggerimenti aggiornato che si chiama Gravity. Esso contiene milioni
su come Mettete in campo il Pi-hole di domini che offrono solo pubblicità e spam. Se pertanto
configurare Per iniziare, dovrete procurarvi la versione più recente il sistema rileva la connessione a uno di questi, la instraderà
i DNS nei
di Raspbian. Assicuratevi di lanciare sudo apt-get update in un black-hole. In termini ancora meno poetici, Pi-hole
dispositivi
più comuni. e sudo apt-get upgrade sulla Pi prima di proseguire con farà in modo di non caricare il dominio in questione.
i passi del tutorial. Il Pi-hole è compatibile con tutti i modelli Per quelli consentiti, invece, accede a un server DNS
a monte come OpenDNS, che caricherà la pagina senza
problemi. Seguite i passaggi della guida che proponiamo
per impostare il vostro Pi-hole come server DNS, quindi
consultate il box qui sotto per ulteriori spiegazioni.

L’interfaccia di amministrazione
Se la prospettiva di bloccare a monte milioni di siti Web
dedicati allo spam non è sufficiente per invogliarvi
a utilizzare Pi-hole, dovreste considerare le potenzialità
della sua interfaccia di amministrazione. Potete accedervi
dall’URL http://pi.hole/admin o http://indirizzo-IP-del-
Pi-hole/admin. L’accesso è protetto da una password che
viene generata durante l’installazione. Potete cambiarla dal
terminale eseguendo pihole -a -p. All’interno dell’ambiente
di lavoro, per visualizzare tutti i domini a cui hanno avuto
Con Pi-hole potete bloccare qualsiasi dominio mettendolo nella relativa accesso i dispositivi, fate click su Qery Log nel menu
Blacklist. Bastano solo pochi click del mouse di sinistra. Scegliete poi le funzioni Whitelist o Blacklist

Occhio ai DNS

U
na volta completata l’installazione dei singoli apparecchi. Per le macchine che
del Pi-hole nella vostra Raspberry Pi, eseguono Windows, seguite i passaggi elencati
è necessario configurare i vari dispositivi a questa pagina: https://support.microsoft.
affinché si adattino all’utility. Il modo più com/en-us/help/15089/windows-change-
semplice per farlo è agire direttamente dalle tcp-ip-settings. Per i Mac, invece, consultate
impostazioni dei DNS nel router. Questo https://support.apple.com/en-us/
significa che tutti i device che si collegheranno HT203244. Chi usa Linux può gestire il tutto
a Internet tramite questo apparecchio, dal pannello delle impostazioni di rete,
beneficeranno delle funzioni di ad-blocking scegliendo di modificare l’interfaccia desiderata.
del Pi-hole. Se il vostro router supporta questa Fate click su IPv4 o IPv6 e scegliete Automatic
funzione, inserite l’indirizzo IP del Pi-hole nel (DHCP) address dal menu a discesa. Adesso
primo server DNS, lasciando vuoto il secondo. potrete inserire l’IP del Pi-hole nella scheda Dopo l’installazione, assicuratevi
Se l’apparecchio non dispone di questa opzione, Server DNS. Infine, per rendere effettive le che il router assegni un IP statico
potete modificare le impostazioni dei DNS modifiche, non resta che salvare e chiudere. alla Raspberry Pi tramite il suo MAC

96 RASPBERRY PI
Sicurezza
Proteggi la Pi

Operativi in sole tre mosse

1 Lanciate l’installer 2 Impostazioni di rete 3 Configurate i DNS


Aprite il terminale sulla Pi o connettetevi L’ultima versione di Pi-hole, per Una volta completata l’installazione, dovrete
tramite SSH, quindi lanciate wget -O basic- l’assegnazione di un IP statico, può utilizzare configurare il router o i singoli dispositivi per
install.sh https://install.Pi-hole.net. Adesso l’indirizzo e il Gateway della Raspberry Pi. utilizzare il DNS del Pi-hole come server DNS
proseguite con sudo bash basic-install.sh Usate la barra spaziatrice per selezionare principale. Potete usare la nuova password
per attivare l’installer. Il programma verifica l’interfaccia di rete, per esempio Ethernet, per accedere all’interfaccia di
automaticamente i pacchetti installati quindi scegliete un provider DNS a monte amministrazione raggiungibile da http://pi.
e chiede la conferma per l’installazione. come OpenDNS. L’installer vi chiede se volete hole/admin. Da qui siete in grado
Premete Invio per dare l’assenso e passare mantenere le impostazioni di rete per di analizzare gli elenchi che fanno riferimento
alla prossima schermata. l’indirizzo IP del Pi-hole. Confermate con Yes. alle White e Blacklist.

accanto a ciascuno per consentirne o meno l’uso. Se che alcuni dispositivi per lo streaming multimediale come
desiderate perfezionare ulteriormente i filtri, premete Google Chromecast non supportano la modifica manuale Tip
Blacklist sul lato sinistro e inserite il dominio da bloccare. delle impostazioni dei DNS. Potete comunque risolvere
Consigliamo di dedicare un po’ di tempo all’esplorazione questo problema abilitando il DHCP dall’interfaccia di Potete
di queste funzioni, perché sono il cuore pulsante di Pi-hole. amministrazione di Pi-hole. Assicuratevi però di disattivare bloccare tutti
lo stesso servizio dal router. Se poi state impostando i sottodomini di
Il blocco degli annunci è legale? il Pi-hole per proteggere la vostra famiglia da siti dannosi,
un dominio come
888casino.com,
Eyeo GmbH, società tedesca produttrice di AdBlock Plus, ricordate che chiunque abbia accesso a un dispositivo può facendo click su
ha sostenuto circa sei cause giudiziarie contro editor che modificare la propria configurazione per l’uso di un DNS Add (Wildcard)
affermavano come il blocco dei loro annunci fosse illegale. pubblico. Ciò bypassa il controllo a monte, permettendo nella sezione
A oggi, tuttavia, i Tribunali hanno sempre dato ragione così di visitare qualsiasi sito. Se le impostazioni dovessero Blacklist
del Pi-hole.
a Eyeo. Nel caso di AdBlock Plus, i siti Web sono tenuti risultare troppo restrittive, niente vieta di consentire
a pagare per visualizzare pubblicità accettate su whitelist l’accesso a determinati domini tramite l’uso di una
pre-approvate. Pi-hole, dall’altra parte, è un progetto che password o, in alternativa, disattivare il Pi-hole per un certo
si basa sul no-profit, che talvolta riceve donazioni tali da periodo (magari solo per cinque minuti). Tutto questo è
permettergli di rimanere operativo. Questo per farvi capire sempre possibile tramite l’interfaccia di amministrazione.
come non sia assolutamente in grado di sostenere cause
milionarie con eventuali aziende che decidono di opporsi
ai suoi blocchi. Infatti, l’argomento che più di ogni altro può
valere per dare ragione a un ad-blocker è l’analisi dei cookie.
Da qui si possono rilevare eventuali abitudini nella raccolta
dei dati di navigazione, senza poi contare la possibilità
di installare yunkware dannosi.

Installate e lanciate Pi-hole


Durante l’installazione, il programma vi informerà
che Pi-hole ha bisogno di un IP statico per funzionare
correttamente. Se non avete niente in contrario, è l’installer
stesso che si occupa di configurare tutto per voi. Così
facendo, anche se il dispositivo dovesse riavviarsi, non gli
verrà assegnato un nuovo indirizzo. Tuttavia, per essere
sicuri che ciò avvenga, consigliamo di configurare
manualmente il router, affinché dia un IP fisso al MAC
Address del Pi-hole. Se il modem non supporta la modifica
delle impostazioni DNS, potete gestire a mano ogni Nella finestra Query log vengono visualizzati i domini a cui si accede dai
apparecchio per l’utilizzo di Pi-hole. Tenete presente diversi dispositivi. Fate click su Blacklist per inserirne uno nella lista di blocco

RASPBERRY PI 97
Raspberry
Protezione Pi Sicurezza & Gestione
Raspberry

Vaccinate le chiavi USB


Usate la Raspberry Pi per rendere sicure le pendrive

S
e state leggendo questo articolo, probabilmente simili a una tradizionale chiave USB, ma una volta inseriti
vuol dire che il vostro sistema operativo i guai sono subito dietro l’angolo. L’unico requisito
preferito è Linux. Stringetevi la mano e fatevi che un aggressore deve avere è l’accesso fisico al PC
le congratulazioni, perché avete scelto una delle o, in alternativa, convincervi a inserire il suo apparecchio
piattaforme più sicure che ci siano in circolazione. in una porta del computer. Uno studio fatto da Sophos
Infatti, il sistema è immune alla maggior parte dei nel 2011 hai poi sancito che circa il 66% delle chiavi USB
malware in circolazione progettati soprattutto per in giro per il mondo sono infettate da malware.
Windows. Gli sviluppatori Linux sono generalmente
molto attenti al comparto della sicurezza e, quando Il progetto CIRCLean
vengono individuate le vulnerabilità, corrono subito Nel 2014, l’esperto di sicurezza Maya Bonkowski
Tip ai ripari. Questo, in parte, è uno dei motivi per cui ha iniziato a lavorare con giornalisti investigativi e hacker
potete stare abbastanza tranquilli. Tuttavia, prima su uno speciale progetto. L’obiettivo era vaccinare
Per essere
di compiacervi troppo, è importante ricordare che nella le pendrive dai malware, trasformando così le informazioni
oltremodo sicuri
del progetto maggior parte dei PC in giro per il mondo è installato in dati puliti e leggibili. La versione di questo programma
CIRCLean, Windows. Linux, inoltre, non è esente dagli attacchi su cui ci concentriamo è chiamata CIRCLean e viene
controllatene provenienti da un HID (Human Interface Devices). Basta mantenuta dal Computer Response Center Luxembourg
la firma GPG su
pensare a quello che si può ottenere con la famosa USB (CIRCL). Maya, in origine, ha immaginato che il progetto
http://circl.lu/
verify. Rubber Ducky di cui parliamo proprio in questo numero. fosse dedicato solo ad attivisti e giornalisti che potrebbero
Questi dispositivi, all’apparenza, possono essere molto aver bisogno di scambiare documenti con i propri contatti
tramite una chiave USB. CIRCLean è comunque
disponibile come immagine e può essere scritto su una
scheda SD da montare poi nella Raspberry Pi. Una volta
fatto, vaccinare le pendrive è un gioco da ragazzi. A Pi
spento, è sufficiente collegare la chiave USB non sicura
alla porta superiore sinistra. Connettete poi la pendrive
sicura nella porta in basso. Accendendo la Raspberry,
CIRCLean inizia il processo di accoppiamento dei dati
dalla USB insicura a quella sicura. Questo flusso di lavoro
viene svolto secondo criteri ben specifici. I file di testo,
audio e video vengono semplicemente copiati. Quelli XML
sono convertiti in testo normale e poi copiati. I file
immagine e di archivio, per esempio JPG e ZIP, vengono
copiati dopo che CIRCLean ne verifica l’affidabilità. A tal
proposito, il progetto estrae solo due livelli di archivio.
Ciò può comportare che i dati complessivi sicuri siano
CIRCL mette a disposizione questa utile infografica per farvi capire più grandi di quelli presenti nella USB insicura. I file di
al volo come funziona CIRCLean Microsoft Office vengono invece analizzati con gli oletools.

Chiavi USB in sola lettura

T
ra di voi potrebbe esserci qualche lettore un’unità USB sia impostata in sola lettura, ma
che solleva un dubbio importante: se la niente che sia così facile come la semplice
macchina di destinazione a cui si collega azione su una levetta. Tra le pendrive che
la chiave USB sicura è compromessa, come utilizzando questa funzione, possiamo
si può evitare che i file inclusi nella pendrive consigliarvi la Kanguru ALK-FB30
vengano infettati da un malware? Il modo che vedete nell’immagine qui
migliore per prevenire questo problema, è usare a fianco. La versione da 8 GB
una chiave USB con un interruttore fisico che la trovate per circa 44 euro su
blocca la scrittura. Una volta attivata la modalità Amazon.it. Tenete comunque La Kanguru ALK-FB30
sola lettura, a meno di non agire sullo switch, presente che se la pendrive integra uno switch che abilita la
nessun sistema potrà apportare modifiche contiene già di per sé un malware, l’opzione modalità sola lettura, impedendo
ai documenti archiviati. Certo, ci sono alcuni di sola lettura non gli impedirà di infettare a qualsiasi applicazione
stratagemmi software per fare in modo che il sistema di destinazione. di scrivere al suo interno

98 RASPBERRY PI
Sicurezza
Proteggi la Pi

Si tratta di un pratico set di applicazioni Python che


viene utilizzato per individuare malware all’interno dei
documenti di Office, contrassegnandoli come pericolosi
qualora l’analisi non dovesse riuscire. I file ritenuti
potenzialmente dannosi come gli eseguibili o i PDF
sospetti vengono contrassegnati con le sigle
DANGEROUS_<nomefile>_DANGEROUS. CIRCLean,
infine, può essere gestito in modalità headlessly.
Per sapere quando il processo di copia è terminato,
collegate alla Pi un altoparlante o delle cuffie
e attendete che la musica si arresti. In alternativa,
aspettate che la spia verde smetta di lampeggiare.
A questo punto, spegnete la Raspberry Pi e inserite
la chiave USB sicura nel vostro computer.

Immunizzazione totale
La vaccinazione di una chiave USB è progettata per
proteggervi da un tipo di attacco specifico, per cui
il malware si inocula quando c’è uno scambio di dati tra
la pendrive e il PC bersaglio. Per ridurre il più possibile
questo rischio, assicuratevi di avere una Pi dedicata CIRCLean contrassegna automaticamente i file eseguibili (.exe, .com) come
pericolosi. Quelli di Office, invece, vengono scansionati con gli oletools
al compito di sanificazione. Non collegate la Raspberry
a Internet, né a un cavo Ethernet che possa in qualche si basa inoltre sul giusto collegamento delle chiavi USB
modo far sfuggire il potenziale malware. Se si rende alle rispettive porte. La pendrive potenzialmente Tip
necessario aggiornare il software, eseguite l’operazione pericolosa deve trovarsi sempre nello slot superiore.
Se connettete i device nell’ordine Assicuratevi

“CIRCLean è uno dei sistemi più sbagliato, l’utility li formatta entrambi.


Attualmente, CIRCLean supporta lettura
che la vostra
Pi abbia

pratici per vaccinare le chiavi e scrittura delle sole pendrive formattate


in FAT32 o NTFS. Essendo i filesystem
abbastanza
potenza per

USB potenzialmente pericolose” più diffusi, non dovreste quindi avere


trasferire i dati
tra due chiavi
problemi. Tuttavia, per una maggiore USB. Utilizzate
rimuovendo la microSD e seguendo i passaggi che sicurezza, dovreste tenere in considerazione l’uso di l’alimentatore
ufficiale da 5V.
riportiamo nel box qui sotto. Tenete presente che se un Qubes OS. Questa piattaforma suddivide le vostre attività
attaccante ottiene l’accesso fisico al sanitizer, potrebbe in vari “qubes” (macchine virtuali), tra cui una dedicata
modificarne il codice sorgente. Il processo di vaccinazione alla sola lettura delle chiavi USB.

Sicurezza al massimo con CIRCLean

1 Estraete l’immagine 2 Scrivete sulla SD 3 Copiate i dati


Collegatevi a http://circl.lu/projects/ Inserite la scheda SD nel lettore collegato Smontate la scheda SD in modo sicuro
CIRCLean. Scaricate quindi l’immagine più al computer. Assicuratevi che sia smontato per evitare errori di scrittura. Scollegate
recente (2017-04-18_CIRCLean.img.gz). utilizzando il programma Dischi. Ora passate l’alimentazione della Pi e inserite la microSD.
Una volta fatto, lanciate il comando al terminale e usate cd per spostarvi nella Ora collegate la chiave USB non sicura nella
sha256sum, per esempio sha256sum 2017- cartella dei file scaricati, per esempio cd porta USB superiore sinistra della Raspberry
04-18_CIRCLean.img.gz, in modo da /home/mario/Scaricati e impiegate dd (quella più vicina alla scheda Ethernet nella
verificare l’integrità del download. Adesso per scrivere l’immagine sulla scheda SD, per Raspberry Pi 3). Inserite ora la pendrive
usate gunzip sul file per estrarlo: sha256sum esempio dd bs=1M if=2017-04-18_CIRCLean. sicura nella porta sotto. Ricollegate
2017-04-18_CIRCLean.img.gz. img of=/dev/sdb. l’alimentazione della Pi e il gioco è fatto.

RASPBERRY PI 99
Raspberry
Protezione Pi Sicurezza & Gestione
Raspberry

Un vasetto di HoneyPi
Evitate un attacco dirottando gli hacker su un server fittizio

C
on il termine honeypot, che in italiano possiamo Un hacker accederà quindi al solo filesystem creato
tradurre con barattolo del miele, si intende una da Kippo e progettato per assomigliare a un server
Tip particolare trappola per hacker. In sostanza, viene Debian. Le modifiche apportate verranno registrate,
creato un computer che sembra contenere informazioni in modo da poterle visualizzare in un secondo momento.
Controllate
di un certo valore, ma che in realtà non ha alcun contenuto La cosa più importante, però, consiste nel fatto che
che Kippo sia
in ascolto sulla sensibile ed è ben isolato dal resto della rete. La parola nessun dispositivo di rete sarà compromesso.
porta 2222, e la sua accezione deriva dal periodo della guerra fredda
eseguendo e indica la tecnica usata dalle spie russe per sedurre I primi passi
sudo netstat e ricattare le controparti americane. Per installare Kippo, seguite i passi mostrati nel tutorial qui
-antp | grep
In questa guida scoprirete come installare e configurare a fianco. Per motivi di sicurezza, consigliamo di utilizzare
2222 . Questo
mostra perfino il software per honeypot Kippo sulla vostra Raspberry Pi, così una Raspberry Pi dedicata al solo progetto, con un’installazione
la presenza da indurre un potenziale hacker ad attaccarlo per rimanere pulita dell’ultima versione di Raspbian. Dovrete poi eseguire
di eventuali altre con un pugno di mosche in mano. La premessa fondamentale un port forwarding sul vostro router. Se non sapete come fare,
connessioni
consiste nella necessità di configurare la porta 22 del router nella pagina www.portforward.com sono indicate le istruzioni
su SSH.
affinché inoltri automaticamente il traffico alla 2222 della Pi. per i modelli più comuni. Una volta che Kippo è in esecuzione,
è possibile visualizzarne i registri in qualsiasi momento.
Basta consultare /home/pi/kippo/log/kippo.log. Tenete
presente che con il passare del tempo, i dati aumenteranno.
In alternativa, se volete un’installazione che preveda l’uso di una
GUI, usate Kippo-Graph. Una volta completata la procedura,
per visualizzare tutti i dati registrati, collegatevi all’URL http://
ipaddressofyourpi/kippo-graph. La scheda Kippo-Graph
visualizzerà l’attività complessiva dell’honeypot, come il numero
totale di tentativi di accesso con le password utilizzate. Fate
click su Kippo Input per elencare i comandi che sono stati
lanciati. La selezione di Kippo Pla-Log riproduce un video nel
browser di tutti gli accessi e le istruzioni sfruttate. Utilizzate poi
l’opzione Kippo-Geo per elencare le connessioni in entrata per
paese. Da qui è poi possibile tracciare l’indirizzo dei vari tentativi
di collegamento e visualizzare i 10 IP su una mappa interattiva.

Honeypot sì, ma non per tutti...


È importante sottolineare che questo progetto non è destinato
Per capire da dove provengono gli attacchi, fate click sulla scheda Geo ai novizi. Se non vi sentite a vostro agio con la gestione
di Kippo-Graph. Vedrete quindi comparire una mappa dettagliata di router, server e firewall, c’è il rischio che l’uso di una

Installate Kippo-Graph

S
e siete interessati a monitorare i Graph (nel momento in cui stiamo seguente: # MySQL server configuration.
tentativi di connessione alla rete, il scrivendo è la 1.5.1) e lanciate sudo wget Cambiate i valori come segue:
programma Kippo-Graph è quello http://bruteforcelab.com/wp-content/ define(‘DB_HOST’, ‘127.0.0.1’);
che fa per voi. Infatti, è in grado di riepilogare uploads/kippo-graph-1.5.1.tar.gz, quindi define(‘DB_USER’, ‘kippo’);
il tutto tramite una serie di comodi grafici. proseguite con l’estrazione: sudo tar define(‘DB_PASS’, ‘password123’);
Per iniziare, aprite il Terminale nella vostra zxvfkippo-graph-1.5.1.tar.gz –no-same- define(‘DB_NAME’, ‘kippo’);
Raspberry Pi o connettetevi tramite SSH, permissions . Rinominate la directory Kippo define(‘DB_PORT’, ‘3306’);
quindi installate i prerequisiti per il software: Graph in kippo-graph – per esempio sudo Premete Ctrl+X e Y per salvare e chiudere.
sudo apt-get install libapache2-mod-php5 mv kippo-graph-1.5.1 kippo-graph – e poi Adesso collegatevi all’indirizzo http://
php5-cli php5-common php5-cgi php5- passate a /cd kippo-graph. Lanciate sudo IP-della-Raspberry/kippo-graph, per
mysql php5-gd. chmod -R 777 generated-graphs per esempio http://192.168.1.17/kippo-
Adesso riavviate il servizio di Apache con sistemare i permessi, quindi generate il file graph. Nel qual caso la pagina non dovesse
sudo /etc/init.d/apache2 restart e passate di configurazione con sudo cp config.php. caricarsi, dovrete modificare i permessi
alla directory di Apache con cd /var/www/ dist config.php. Aprite il file in questione con della directory kippo-graph con sudo
html. Scaricate l’ultima versione di Kippo- sudo nano config.php e trovate la sezione chmod -R 777 kippo-graph.

100 RASPBERRY PI
Sicurezza
Proteggi la Pi

honeypot renda ancora più vulnerabile la vostra rete locale. Chiunque


Fortunatamente è possibile ridurre il rischio, modificando si connetta
la porta SSH predefinita della Raspberry Pi come descritto via SSH, vedrà
nella guida. La pagina ufficiale di Kippo su Github un filesystem
(https://github.com/desaster/kippo/wiki/Running- fittizio
Kippo) raccomanda inoltre di creare un ambiente virtuale
dedicato a Kippo stesso. Il software è progettato
per assomigliare in modo incredibile a un server Debian 5
(Lenny). Visto che adesso è in voga la versione 9, questo
aspetto potrebbe in qualche modo insospettire un hacker.
Una possibile soluzione consiste nel provare a modificare
i file di configurazione per alterare il nome del server e altri micheloosterhof/cowrie). Come Kippo, anche Cowrie
dati predefiniti. Ricordate che Kippo è progettato per somiglia a un server Debian 5, ma supporta diverse funzioni
proteggervi da attacchi tramite SSH. Se volete una honeypot aggiuntive come la registrazione di tentativi tramite SSH
più completa, conviene utilizzare Cowrie, una recente fork proxy, l’inoltro di connessioni SMTP verso un honeypot,
di Kippo prodotta da Michel Oosterhof (per ulteriori SMTP separato come mailoney e la memorizzazione di file
informazioni, consultate https://github.com/ di registro nel formato universale JSON. LXP

Kippo pronto all’uso! Tip


La password di
root predefinita
per la vostra
honeypot
è 123456.
Modificatela
da /home/pi/
kippo/data/
userdb.txt. Per
alterare gli altri
valori, accedete
al file kippo.cfg.

1 Installate i prerequisiti 2 Configurate il database di Kippo


Aprite il Terminale nella vostra Raspberry Pi Collegatevi a MySQL con mysql -h localhost -u root -p
o connettetevi tramite SSH, quindi lanciate sudo apt-get e usate la password di root. Inserite create database kippo;.
install subversion python-twisted python-mysqldb Assegnate i diritti utente a “kippo”con la relativa password
mysql-server apache2. Quando il MySQL si apre, dovrete tipo “password123”con GRANT ALL ON kippo.* TO
configurare una password di root per il database. ‘kippo’@’localhost’ IDENTIFIED BY ‘password123’;.
Alla fine, scaricare i file di Kippo con il comando git clone Lanciate exit e poi cd kippo/doc/sql. Caricate infine mysql.
https://github.com/desaster/kippo. sql con mysql -u kippo -p. e utilizzate la pass del database.

3 Configurazione fase due 4 Lanciate Kippo


In MySQL, usate use kippo; quindi source mysql.sql. Assicuratevi che il router sia configurato per inoltrare
Lanciate show tables; che permetterà di verificare il traffico dalla porta 22 alla 2222 della Raspberry Pi.
che i campi del database come “ttylog” siano presenti. Adesso modificate la porta SSH della Pi con un numero
Scrivete exit e spostatevi nella directory di Kippo con cd più alto, per esempio 65534. Per farlo, basta lanciare
/home/pi/kippo. Adesso lanciate cp kippo.cfg.dist kippo.cfg sudo sed -i ‘s:Port 22:Port 65534:g’ /etc/ssh/sshd_config.
e poi sudo nano kippo.cfg. Scorrete fino a trovare Infine, avviate lo script ./start.sh all’interno della
la sezione “[database_mysql]”, quindi commentate directory di Kippo. A questo punto, se lo desiderate,
le righe e modificate le informazioni pertinenti. potete installare Kippo-Graph.

RASPBERRY PI 101
TutorialRaspberry Pi Sicurezza & Gestione

IoT: proteggete
i vostri dati
Imparate con noi a blindare un sistema di telecamere di sicurezza e avrete
un arsenale per tutelare tutti i vostri dispositivi connessi a Internet

Confidenzialità

Informazione
protetta
Availability Integrità
(disponibilità)

cia_triad.png<<<< Relationship Between Confidentiality,


Integrity, and Availability is called CIA triad.

La relazione tra Confidenzialità, Integrità e Availability


(disponibilità) è detta la triade CIA

a un compagno di scuola da ragazzini, è un metodo


per proteggere la confidenzialità. Solo chi ha le chiavi
per decodificare il messaggio ha accesso ai dati. Tutelare
l’integrità delle informazioni significa impedirne la modifica
a persone non autorizzate. Cambiare dei dati può causare
gravi perdite. pensate semplicemente a cosa succede
se si sposta a sinistra la virgola dei decimali in un elenco

C
IA: no, non è l’agenzia governativa statunitense di numeri per la contabilità. L’ hashing dei dati è un metodo
ma un concetto sempre più importante di criptazione usato per garantirne l’integrità.
per i professionisti della sicurezza. La sigla Un hash o message digest è un numero generato
sta per Confidenzialità, Integrità e Availability applicando un algoritmo a una stringa di testo. Il valore
(disponibilità) delle informazioni. Tendiamo a usare di hash è più piccolo del testo ed è unico per quel testo.
indifferenziatamente la parole “informazioni” e “dati” ma Gli algoritmi usati per generarlo sono costantemente sotto
rispondono in realtà a concetti diversi: le informazioni sono scrutinio per verificare che non generino collisioni (cioè
dati in un contesto specifico. Prendiamo per esempio ottenere lo stesso valore di hash per due stringhe diverse).
Tip le telecamere di sicurezza, uno degli aspetti dell’Internet L’hash viene poi spedito insieme al messaggio di testo
delle Cose (IoT) che sta trovando maggior diffusione. e, se i dati non sono stati modificati, il valore di hash generato
Il port forwarding
In questo caso le informazioni sono i dati video. La triade da chi riceve corrisponde a quello spedito (nel caso
è un metodo
semplice CIA non si applica solo ai dati ma anche alla videocamera ve lo stiate chiedendo, non è possibile rigenerare il testo
per rendere stessa. Se qualcuno riesce a violare una serie di telecamere applicando tecniche di reverse engineering all’hash).
un dispositivo e a trasformarle in un esercito di bot per un attacco denial Tutelare la disponibilità (Availability) delle informazioni
disponibile su of service le informazioni non sono più disponibili. significa assicurarsi che siano accessibili agli utenti
Internet, ma rende
La confidenzialità delle informazioni le protegge dalla autorizzati quando servono. Avere dei backup off site
anche facile la sua
violazione da parte divulgazione a persone non autorizzate. Aziende e privati delle informazioni ne favorisce la disponibilità.
di malintenzionati. hanno informazioni che vogliono mantenere riservate, Nel caso specifico, se ci fosse un guasto dell’hard disk,
La criptazione, come un messaggio in codice scritto i dati si potrebbero ripristinare.

102 RASPBERRY PI
Dati in movimento Sicurezza in punti
Input Output
Non distribuite qualcosa se non volete renderlo pubblico
Analizzate vulnerabilità e supporto dei dispositivi

Dati a riposo Fate spesso upgrade e update


Cambiate account e password predefiniti
Adottate la criptazione WPA2 per le connessioni wireless
HTTPS >= TLS 1.2
Non usate il port forwarding
Utilizzate uno o più firewall
Dati in uso Mettete i vostri dispositivi su reti separate
Adattate le regole del firewall alle esigenze della rete
Le tre tipologie di dati possibili per ogni sistema

La ridondanza, come per esempio avere un server principale al Web, oltra a fornire supporto per la rete locale (Local Area
e uno di backup, è un altro metodo per garantire
la disponibilità dei dati anche in caso di guasto
Network o LAN) per i computer di casa. Potete vedere
uno schema d’esempio (il vostro potrebbe essere diverso)
Tip
di una macchina. Per mettere in sicurezza i dati della nella prossima pagina. Se la destinazione finale dei dati della Ricordatevi
videocamera, bisogna determinarne i data point. videocamera è un punto di monitoraggio al di fuori della rete che è importante
In un qualsiasi sistema, ci possono essere dati locale, gli anelli che rappresentano il sistema devono cambiare
le impostazioni
in movimento, a riposo e/o in uso. I primi sono quelli estendersi dalla videocamera ad altri componenti.
predefinite.
che stanno entrando o uscendo dal sistema. I dati a riposo Per proteggere i dati da occhi indiscreti bisogna inserire Una regola
sono quelli che risiedono sul sistema o vi sono salvati. una serie di controlli di compensazione dalla fonte “any/any” per
Gli ultimi sono i dati richiamati dal sistema, per esempio alla destinazione. Un metodo veloce e facile per rendere il firewall significa
da un browser, per rispondere a un’esigenza lavorativa. i dati disponibili su Internet è abilitare il port forwarding che qualsiasi
indirizzo IP da un
Identificare tutti i data point in un sistema è il primo passo sul dispositivo di rete. Questa procedura prende lato del firewall
verso la sicurezza. I dati rilevanti nel caso della videocamera una o più porte di un dispositivo con IP privato dal lato ha accesso a tutti
sono i video. Sono raccolte immagini di siti monitorati della rete LAN e lo rende disponibile su Internet attraverso gli IP dall’altro.
(in movimento, input), processati (a riposo), in streaming l’IP pubblico assegnato al dispositivo di rete. Il numero
(in uso) e salvati su una rete (in movimento, output) delle porte dipende da come è progettata la videocamera
attraverso la connessione Wi-Fi. Ora che conosciamo i data o il dispositivo di rete. Ricordatevi che all’interno dell’anello
point possiamo valutare i controlli da inserire per la sicurezza della videocamera ci sono delle vulnerabilità e che il port
delle informazioni. I controlli di compensazione bilanciano forwarding potrebbe esporle a Internet. Per farvi un’idea
le debolezze che mettono in pericolo la sicurezza dei dati. dei rischi andate su www.shodan.io e cercate una marca
di videocamere. Dovreste ottenere le sue vulnerabilità
Anatomia di una videocamera note. Non vogliamo citare prodotti specifici nell’articolo
Prendete in considerazione lo schema di una videocamera ma per il modello che abbiamo usato per questo test
(in basso a destra). Il grafico mostra tre anelli: il più interno abbiamo trovato, tra Europa e Nord America, cinque casi
rappresenta l’hardware, i componenti fisici coinvolti. che mostravano vulnerabilità esposte pronte a essere
Il successivo è il sistema operativo (OS), che può essere sfruttate. Ora che avete una teoria su come proteggere
codice proprietario sviluppato dal produttore o una versione un dispositivo e i suoi dati, valutate con attenzione cosa
di un sistema operativo completo come Linux adattata alle potreste fare per rendere il lavoro più difficile a ogni
esigenze del caso. L’anello esterno sono le interfacce utente, potenziale hacker. Prima di iniziare a usare un dispositivo,
che includono servizi come il Web, interfacce grafiche è buona pratica controllare se il produttore ha reso disponibili
e/o app di gestione della videocamera. Tutti e tre gli anelli
possono avere delle vulnerabilità che espongono i dati
a vettori di attacco, ossia i punti da cui si può essere colpiti.
Hardware
(videocamera,
Se le vulnerabilità vengono sfruttate da un hacker, i dati della Wi-Fi, rete)
videocamera che volete proteggere possono essere esposti
al pubblico. Quando i dati vengono resi disponibili a persone
diverse dai loro destinatari, si dice che sono compromessi.
Considerando che una videocamera in rete è un dispositivo Sistema operativo
IoT potete usare lo stesso approccio di identificare i data nel firmware
point e le loro vulnerabilità anche per tutti gli altri. Analizzateli
per determinare quali controlli di compensazione servono. Applicazioni,
Per evidenziare quali sono i problemi di sicurezza interfaccia utente
in un’installazione comune, pensate a una videocamera (GUI), console,
in una tipica rete casalinga. La videocamera wireless passa software della
videocamera
i dati via Wi-Fi al modem e router/gateway domestico
del fornitore di servizi (l’azienda o ISP da cui comprate
l’accesso a Internet). Il dispositivo di rete dà accesso Schema ad anelli della videocamera

RASPBERRY PI 103
TutorialRaspberry Pi Sicurezza & Gestione

degli upgrade, che potrebbero riguardare il sistema operativo dispositivi con il WEP abilitato e dare accesso a un intruso.
o le applicazioni supportate. Assicurarsi di usare la versione Se la videocamera è wireless, attivate la criptazione WPA2.
più recente del software può già risolvere dei problemi, Per proteggere un qualsiasi dispositivo su una rete Wi-Fi,
perché il produttore della videocamera potrebbe aver la criptazione WPA è una buona scelta. Sui dispositivi
già scoperto delle vulnerabilità. è importante capire di rete offerti dai fornitori di servizi Internet è comune
che alcune vulnerabilità note non saranno mai sistemate. anche la presenza di un firewall. Si tratta di dispositivi
che separano due reti tra di loro usando

“All’interno della DMZ, usate


dei controlli, che possono essere
indirizzi IP o porte. Configurare il firewall

un server proxy inverso per fare con una lista di controllo degli accessi
che sia pensata in funzione dei requisiti
da ponte tra reti interne ed esterne” per esporre la telecamera, oltre che
degli altri componenti della LAN. Potete
Gli aggiornamenti forniti da un produttore sono gratuiti configurare il firewall in modo che consenta l’accesso solo
per l’utente ma hanno un costo per l’azienda. Il produttore a specifici indirizzi IP, che nell’esempio della videocamera
del dispositivo può scegliere di ignorare un rischio sanno quelli dei dispositivi che controlleranno in remoto
per gli utenti per non intaccare il proprio margine di guadagno. le videocamere connesse alla rete.
è inoltre raro che un produttore sia felice di dare agli utenti
accesso al codice sorgente. Uno dei benefici di avere Controlli multipli
una videocamera connessa a un sistema operativo è il fatto Adottare una DMZ (letteralmente “zona demilitarizzata”)
che avete il pieno controllo sulla sua sicurezza. Pensate usando più firewall crea un’architettura di difesa su più livelli
a una videocamera su una Raspberry Pi: potete adattare per la rete, ponendo più ostacoli da superare sul percorso
il sistema operativo alle vostre esigenze invece di subire di eventuali hacker. La DMZ ha il compito di isolare la rete
le scelte fatte dal produttore. è uno dei motivi per cui l’Open untrusted (non fidata, ossia Internet) da quella trusted
Source è così importante e positivo. Ora che la videocamera (LAN). Il firewall perimetrale è configurato per controllare
è aggiornata, verificate le configurazioni predefinite l’accesso alla DMZ, mentre l’altro firewall della DMZ
del dispositivo. I nomi utente e le password di default si occupa degli accessi alla rete locale. Bisognerebbe evitare
dei prodotti elettronici sono ben note. Se non cambiate di stabilire una regola firewall che permetta a un indirizzo
la password del superuser standard e mettete il dispositivo IP pubblico su Internet di passare entrambi i firewall.
su una rete, offrite una facile via d’entrata ai malintenzionati, Una configurazione del genere susciterebbe le ire di qualsiasi
che sono molto attenti a cercare questo tipo di debolezza. amministratore di rete esperto, perché crea un anello debole
Quando i video registrati sono sulla rete, sono in fase nella catena della sicurezza della rete. All’interno della
di movimento. Se usate il protocollo HTTP per trasmettere DMZ, potete usare un server proxy inverso per fare

Tip le informazioni, non sono solo i dati della videocamera


a essere disponibili pubblicamente, ma anche le credenziali
da ponte tra le reti interne e quelle esterne. Il server proxy
inverso prende le richieste dalle reti non fidate e poi le inoltra
usate per accedervi. I dati nel protocollo HTTP sono inviati ai dispositivi sulla rete trusted. Anche la risposta viene
Pensate a quali
video volete
sotto forma di testo non protetto, inclusi nome utente poi inviata attraverso il proxy. La separazione fornita
rendere disponibili e password usati per collegarvi alla telecamera. Se invece dal server proxy inverso evita che la rete untrusted
in Rete. Forse i file usate il protocollo HTTPS, i dati in movimento sono criptati acquisisca alcuna conoscenza di quella trusted.
della videocamera o protetti. è importante anche il metodo di criptazione Quando un componente della rete fidata ha una vulnerabilità
nella vostra camera
abilitato per la connessione Wi-Fi. Non usate lo standard che viene sfruttata e crea una compromissione dei dati,
da letto non devono
andare in streaming WEP (Wired Equivalent Privacy). Se provate a fare tutti i dispositivi sulla rete trusted risultano esposti.
su Internet. una ricerca sulle sue vulnerabilità scoprirete tecniche Se il rischio principale sulla rete è rappresentato dalle
che richiedono meno di un minuto per compromettere videocamere, isolarle in una loro rete separata tramite

Modem e router
Dispositivi di controllo Internet Videocamera Sito
o gateway domestico

LAN

Esempio
di sistema
di connessione
a Internet

104 RASPBERRY PI
TutelareIoT e sicurezza
i dati

Attenzione al procollo usato da HTTPS

L’
HTTPS è più o meno sicuro il protocollo TLS e non usate versioni I server Web che usavano protocolli
in base allo standard adottato. precedenti alla TLS 1.2, anch’essa sotto degradati potevano essere
Evitate di usare standard SSL analisi per delle possibili vulnerabilità compromessi a causa del TLS 1.0.
referenced. L’SSL è un protocollo storico al momento della stesura dell’articolo. Un dispositivo con TLS 1.2 o successivo
e ha le sue vulnerabilità. Adottate solo Ricorderete la vulnerabilità heartbleed. è meno esposto ad attacchi.

Può non
Modem/gateway sembrarlo
a prima vista,
WAN LAN
ma questo
g
rwardin è lo schema
Port fo di base

22

Porta
22

DHCP
Internet

Firewall

NAN

i firewall aumenta il livello di protezione attraverso a un indirizzo IP sconosciuto non fa parte della
la separazione. Se le videocamere vengono compromesse configurazione, è importante che il proprietario della rete
sulla rete isolata, il firewall impedisce che gli hacker lo sappia. Adattare le regole del firewall alle effettive
abbiano accesso al resto della LAN. Create così vari livelli esigenze della rete è uno dei controlli di compensazione
sovrapposti di protezione. I firewall fisici offrono diverse che ne garantiscono la protezione. Queste, in breve, sono
opzioni in base al modello. Quelli commerciali hanno la le norme da seguire per avere un sistema di telecamere
capacità di fare il throttling del traffico su una rete. Potete di sicurezza protetto. Può sembrare un lungo elenco ma,
pensare a questa funzione come a una valvola su una se sapete quali dati volete tutelare e quali sono i vettori
canna dell’acqua: la valvola controlla il flusso dell’acqua di rischio che vanno difesi, dovete solo inserire dei controlli
mentre il firewall quello dei dati. Chi possiede una rete di compensazione per evitare che le vulnerabilità vengano
deve conoscere le sue tipologie di traffico quotidiano. esposte. Una volta chiare queste procedure, potrete
Se trasferimenti di file con grandi moli di dati su FTP non applicarle a qualsiasi altro dispositivo dell’Internet
sono la norma o se inviare contenuti dalla videocamera delle Cose e avere dei sistemi di rete più sicuri. LXP

Firewall Proxy Firewall Modem e router Videocamera Sito


Internet
inverso o gateway domestico

Adottare
una DMZ usando
DMZ più firewall crea
un’architettura
mycamera.ca mycamera.ca di difesa
su più livelli

RASPBERRY PI 105
TutorialRaspberry Pi Sicurezza & Gestione

Scopri se la tua
rete è sicura
Uno scan al giorno leva il criminale informatico di torno: ecco come
mettere in azione Nmap per trovare le falle nella tua LAN

C
on questo tutorial, che si ispira al manuale Se non è già installato, dovrebbe essere disponibile nei
Practical Linux Security Cookbook di Tajinder repository della vostra distro, installabile con l’analogo di
Kalsi, vedrete come usare Nmap per scansionare sudo apt install nmap
degli host e come ottenere accesso di root in un sistema o scaricabile da https://nmap.org/download.html.
Linux che presenta un servizio vulnerabile. Nmap è uno
strumento veramente utile per effettuare scansioni Tempi cupi
di rete. È disponibile da diverso tempo e probabilmente Nmap controlla i servizi in ascolto verificando le porte
è uno dei tool più popolari per questo genere di utilizzi. di comunicazione più comuni. Tali informazioni aiutano
Se state facendo controllo di vulnerabilità, è uno tool l’amministratore di rete a chiudere qualsiasi servizio
che realmente non dovrebbe mai mancarvi. non voluto o non utilizzato. Nmap può essere usato
La maggior parte delle distribuzioni Linux hanno già Nmap per la scansione delle porte e ha diversi potenti strumenti
installato di default. Per controllare se è così anche nel per studiare la rete locale. Questo software ha anche
vostro sistema è sufficiente digitare questo comando: diverse caratteristiche che vi permettono di integrarne
nmap --version le funzionalità all’interno di script, così da automatizzarne
Se esiste, dovreste ottenere un output simile a questo: ed estenderne le potenzialità. Quando state imparando
Nmap version 6.00 ( https://nmap.org ) come scansionare e violare una macchina Linux,
Platform: x86_64-pc-linux-gnu la sfida più grossa è capire esattamente su quali
Compiled with... sistemi fare le prove in modo legale. Fortunatamente,

Scansione degli host

1 Esame base 2 Controllo rapido 3 Porte aperte


L’uso più comune di Nmap è di trovare tutti Provando a velocizzare il processo, potete usare La scansione delle porte usando Nmap vi aiuta
gli host online in un intervallo IP. Il comando lo switch n che indica a Nmap di non effettuare a scoprire servizi che sono online. Per farlo:
di default per questo richiede diverso tempo la risoluzione DNS degli indirizzi IP, $ sudo nmap -sS -vv -n -Pn -p21 --max-rtt-timeout
per la rete completa, il tempo totale dipende risparmiando del tempo. Lo switch T indica a 500ms 192.168.1.1/24 -T4 -oG - | grep ‘open’
dal numero di host presenti sulla rete stessa. Nmap a quale velocità operare: T1 è la più lenta Tale comando elenca tutti gli indirizzi IP con
Tuttavia potete ottimizzare il processo per e T5 la più veloce. L’opzione max-rtt-timeout la porta 21 aperta. Non solo FTP, altri servizi
scansire più velocemente l’intervallo. Il tempo specifica il tempo massimo richiesto per possono essere scoperti anche confrontando
richiesto per uno scan completo in ambiente attendere la risposta. Usando il comando i numeri di porta sui quali ascoltano.
di test è stato di 6.67 secondi per una scansione sottostante Nmap ha scansito l’intervallo Per esempio, MySQL gira sulla porta 3306.
di 100 host. Se fosse stato necessario scansire completo in 1.97 secondi. Piuttosto buono, no? Il comando ora assomiglierà a questo:
l’intero intervallo di rete, avrebbe richiesto molto $ nmap -v -n -sP --max-rtt-timeout 500ms $ sudo nmap -sS -vv -n -Pn -p3306 --max-rtt-
più tempo. $ nmap -vv -sP 103.46.192.2-100 103.46.192.2-100 -T4 timeout 500ms 192.168.1.1/24 -T4 -oG - | grep ‘open’

106 RASPBERRY PI
Un libro prezioso
Mano a mano che la popolarità di Linux cresce, quello che vi serve per creare sistemi Linux
gli amministratori lo utilizzano sempre più più sicuri, iniziando dall’introduzione di varie Tutto quello
per creare reti e server per scopi precisi. Tuttavia, minacce e guidandovi nella gestione che vi serve
questo implica anche un aumento degli attacchi dell’autenticazione degli utenti sia localmente sapere sulla
verso questo sistema. Pratical Linux Security sia remotamente, mitigando gli attacchi di rete sicurezza
Cookbook è pieno di ricette passo-passo, e imparando a tappare le vulnerabilità di bash dei vostri
screenshot e guide per portarvi attraverso tutto e controllando i registri di sistema per la sicurezza. sistemi Linux

il team Metasploit ha sviluppato una utile macchina di Samba è la 3.x. Ora dovreste provare a recuperare
virtuale chiamata Metasploitable. Questa VM è stata informazioni più specifiche riguardo il servizio. Per farlo,
resa intenzionalmente vulnerabile, con diversi servizi userete qualsiasi modulo ausiliario di Metasploit,
non patchati in esecuzione, così da risultare un’ottima come la sezione scanner, guardando il protocollo SMB.
piattaforma per fare pratica o sviluppare le vostre La scansione della versione di Samba vi permette
capacità nei penetration test. Innanzitutto dovrete di valutare possibili vettori di attacco. Potete vedere
scaricare Metasploitable 2 (https://sourceforge.net/ che la sezione scanner ha un detector di versione SMB.
projects/metasploitable/files/Metasploitable2) Ottenete dunque l’esatta versione di Samba usando
da Sourceforge. Per seguire questo tutorial dovete usare il programma SMB detector. Se cercate online tutte
anche Kali Linux (www.kali.org). Ma veniamo alla parte le vulnerabilità di una particolare versione di Samba,
“succosa”: i passi che dovete seguire per ottenere troverete lo username map script. Potete quindi
accesso di root in un sistema Linux. cercare nell’elenco di exploit disponibili
Per prima cosa, aprite la console di Metasploit nel sistema in Metasploit per controllare se esiste l’exploit
Kali seguendo il menu Applications D Exploitation Tools per username map script usando il comando
D Metasploit Framework (o tramite il link a lato). Dovete search samba, ottenendo questo output:
scansionare il target (in questo esempio 192.168.1.215) Matching Modules
con Nmap, usando:
$ nmap -sS -Pn -A 192.168.1.215 ..........................................
e dovreste vedere qualcosa di simile a questo:
msf > nmap -sS -Pn -A 192.168.1.215 Name Disclosure Date Rank Description
[*] exec: nmap -sS -Pn -A 192.168.1.215 …
Starting Nmap 7.25BETA2 ( https://nmap.org ) at 2017- exploit/multi/samba/nttrans 2003-04-07
02-27 09:54 EST average Samba 2.2.2 - 2.2.6 nttrans Buffer Overflow
Nmap scan report for 192.168.1.215 exploit/multi/samba/usermap_script 2007-05-
Host is up (0.00025s latency). 14 excellent Samba “username map script” Command
Not shown: 977 closed ports Execution
PORT STATE SERVICE VERSION exploit/osx/samba/lsa_transnames_heap 2007-
21/tcp open ftp vsftpd 2.3.4 05-14 average Samba lsa_io_trans_names
… Heap Overflow
139/tcp open netbios-ssn Samba smbd 3.X - 4.X ...
(workgroup: WORKGROUP) Notate che a ogni exploit è assegnato un voto: vi sentite
445/tcp open netbios-ssn Samba smbd un po’ giudici di X-Factor, vero? Avete trovato un
3.0.20-Debian (workgroup: WORKGROUP) exploit per lo username map script e la sua
... votazione è eccellente, che significa che potete
Nel comando precedente, l’opzione -sS vi permette usare questo exploit. Potete quindi usare lo username
di effettuare una scansione in modalità stealth, mentre map script per guadagnare una shell di root nel sistema.
l’opzione -A prova a scoprire le informazioni di versione Una volta scelto l’exploit e preparato il bersaglio, è facile
riguardo il sistema operativo e il servizio. Potete anche guadagnare accesso di root e controllo del sistema.
vedere che ci sono diversi servizi in esecuzione su porte Per ottenere accesso a livello di root al sistema,
diverse. Tra questi c’è Samba, che gira sulle porte 139 una volta scelto l’exploit e configurato con l’indirizzo IP
e 445. Se non conoscete Samba, è un servizio che fornisce corretto (in questo caso 192.168.1.215), eseguirete
i servizi di file e stampa SMB per sistemi Windows il comando per lanciare l’exploit. Facendolo creerete
(supportato anche da Mac OS e Linux). Una volta una sessione remota sul sistema bersaglio e aprirete
individuato il servizio Samba, concentratevi su questo. una shell di comando. Ora, lanciate il comando id nella
Dall’output precedente, potete vedere che la versione shell remota. Il risultato sarà questo:
uid=0(root)gid=0(root)

“Trovato l’exploit, è confermandovi l’accesso remoto al sistema bersaglio.


Si spera abbiate trovato utile questa introduzione
facile avere accesso root alla sicurezza. Per scoprire altre informazioni ed esempi
vi consigliamo di acquistare il volume Practical Linux
e controllo del sistema” Security Cookbook su www.packtpub.com. LXP

RASPBERRY PI 107
Raspberry Pi Sicurezza & Gestione

Internet delle
Cose a modo tuo
Siete alla ricerca del modo di integrare una Raspberry Pi in una casa
davvero smart? Con Wyliodrin è veloce e facilissimo!

A
h, cara vecchia Internet delle Cose. Sta cominciando e andate su www.wyliodrin.com cliccando su Sign up/in.
a diventare qualcosa di meno nerd e più utile, Potete registrarvi usando Facebook, Google o GitHub,
ma come potete cominciare a integrarla nei vostri cliccando il link relativo. Quando compare la schermata
progetti? Se pianificate di usare una Raspberry Pi, la risposta principale, fate click su Add a device per cominciare.
probabilmente richiederà di programmare qualcosa e, nella
maggior parte dei casi, quel qualcosa sarà scritto in Python. Impostare la Pi
È cosa buona e giusta, ma se siete novizi di programmazione A questo punto, confermate che la vostra Pi sia selezionata
o se la vostra Pi non ha monitor, tastiera e mouse, potreste come tipo Gadget, datele un nome riconoscibile e cliccate
volere un ambiente un po’ più semplice per interagire, Next. Se vi state connettendo via Ethernet, fate click
e qui entra in gioco Wyliodrin. È una piattaforma Web su Submit, o su Use Wireless per inserire l’SSID
Open Source specificatamente pensata per la e la password della vostra rete prima di procedere. Da qui
programmazione e il controllo di dispositivi integrati dovrete cliccare sul link per scaricare l’immagine (in formato
come Pi, Arduino e altri. È visuale e contiene il proprio ZIP) nella vostra cartella Scaricati. Se preferite aggiungere
linguaggio di programmazione, un’interfaccia drag’n’drop Wyliodrin alla vostra Raspbian esistente, leggete il box
che ricorda Scratch. In questo tutorial darete un’occhiata Installare manualmente Wyliodrin, in alto a destra.
a come impostare Wyliodrin: imparerete a connetterlo Mentre aspettate, scorrete in basso e cliccate sul link
alla vostra Raspberry Pi e a scrivere codice sia in Python sia following file per scaricare un file chiamato wyliodrin.json:
in programmazione visuale. Seppure Open Source, c’è un set per il momento salvatelo in Scaricati. Una volta recuperato,
di piani con vari prezzi. Gli account gratuiti vi limitano a due estraetene i contenuti e inserite nel computer una scheda
dispositivi e tre progetti, se usati tramite l’interfaccia Web- microSD pulita e formattata. Aprite Dischi, individuate
based, ma se usate la sua applicazione basata su Chromium, la scheda microSD e prendete nota del nome del dispositivo,
Wyliodrin STUDIO, vedrete che non c’è limite al numero di per esempio /dev/sdb. Aprite quindi una finestra
progetti che potete impostare offline: continuate a leggere di Terminale e inserite i comandi seguenti:
per vedere come fare. Per prima cosa dovrete registrarvi per $ cd Downloads
un account gratuito di Wyliodrin sul vostro PC principale (le $ sudo dd if=wyliodrin_raspberry_pi_2016_03_24.img of=/
istruzioni che seguono assumono che sia una Ubuntu 16.04). dev/sdb
Se non lo avete ancora fatto, installate Chromium, apritelo Sostituite wyliodrin_raspberry_pi_2016_03_24.img
con il nome dell’immagine nel caso sia diverso, e /dev/sdb
con il nome della scheda. Attendete mentre l’immagine
Raspbian viene copiata nella scheda. Al termine, aprite
Nautilus andando nella cartella Scaricati, quindi copiate
il file wyliodrin.json nel volume boot che dovrebbe essere
comparso nel pannello a sinistra, prima di cliccare
il pulsante Espelli per poter estrarre la vostra microSD.
A questo punto potete inserire la scheda nella Pi e
accenderla. Attendete circa due minuti e controllate il vostro
account in Chromium: se tutto è andato come doveva,
vedrete la Pi elencata come online. A questo punto dovete
aggiungere qualsiasi libreria richiesta la vostra Pi, operazione
che potete fare remotamente dal vostro browser. Cliccate il
pulsante Settings vicino all’indicatore Online e scegliete
Local Shell. Vedrete un pulsante indicato come eth0
Prima di cominciare a programmare il vostro primo progetto IoT, dovrete (192.168.x.y) dove 192.168.x.y sarà l’indirizzo IP della vostra
collegare il vostro dispositivo all’account Wyliodrin Raspberry Pi. Cliccatelo e vedrete aprirsi una nuova finestra

108 RASPBERRY PI
Installare manualmente Wyliodrin
Il modo più veloce per eseguire Wyliodrin raspberrypi.sh" i2c-dev
sulla vostra Raspberry Pi e di scaricare l’immagine Una volta scaricato, aprite raspi-config (sudo i2c-bcm2708
completa di Raspbian che include Wyliodrin. raspi-config) e assicuratevi che il filesystem Salvate e uscite, quindi lanciate lo script:
Gli utenti avanzati possono, tuttavia, aggiungerlo sia stato espanso. Dovete anche selezionare $ chmod +x ./install_raspberrypi.sh
a un’installazione esistente di Raspbian, ma c’è Advanced Options e scegliere A6 SPI - Enable/ $ ./install_raspberrypi.sh
una controindicazione: richiederà ore ed Disable automatic loading. Ripetete per A7 I2C - Una volta installato, aggiungete la Pi a Wyliodrin
è fortemente consigliato un backup preventivo. Enable/Disable automatic loading e A8 Serial - come spiegato nel testo, quindi scaricate il file
Per prima cosa, collegatevi in ssh alla vostra Pi Disable serial shell. Ora con sudo nano /boot/ wyliodrin.json generato, trasferitelo nella
e scaricate lo script d’installazione: config.txt aggiungete questa riga dtparam=i2c1=on. partizione di boot della vostra Pi. Riavviate la Pi
$ wget "https://raw.githubusercontent.com/ Salvate e uscite, quindi scrivete sudo nano /etc/ e, se tutto è andato bene, dovreste trovarla visibile
Wyliodrin/wyliodrin-server/master/scripts/install_ modules e aggiungete le seguenti due righe: in Wyliodrin, pronta per essere programmata.

con l’accesso già realizzato. Questa shell funziona come (Natural Language Toolkit). C’è anche un Task Manager
qualsiasi altra, quindi se volete aggiungere le librerie per
supportare, per esempio, la vostra Sense HAT, lanciate:
per terminare remotamente i processi, un network manager
per vedere le vostre attuali impostazioni di rete e un comodo
Tip
$ sudo apt-get update pulsante per sconnettervi.
Per una descrizione
$ sudo apt-get install sense-hat più dettagliata
$ sudo reboot Il vostro primo progetto del linguaggio
Una volta effettuato il reboot siete pronti a riportare In questo progetto userete la Sense HAT in abbinata di programmazione
l’attenzione al vostro computer principale. Potete al modulo camera della Pi per creare uno script che scatta visuale, controllate
https://github.
amministrare e lanciare progetti direttamente da questo delle fotografie ogni volta che spostate il joystick della Sense
com/google/
browser Web: fate il tour proposto così da familiarizzare HAT. Non è l’uso più pratico della Sense né della camera, blockly/wiki
velocemente con l’interfaccia. Comunque, per gli scopi ma è pensato per darvi un’idea di quello che potete fare. per la porzione
di questo tutorial vi concentrerete sull’applicazione Avete già aggiunto le librerie per Sense HAT, ora dovete aprire Google Blockly,
Wyliodrin STUDIO. È un’estensione per Chromium una shell in Wyliodrin STUDIO per installare le librerie Python più http://bit.ly/
WyliodrinVP per gli
che vi permette di gestire offline i vostri progetti: andate per Pi Camera e abilitare la camera stessa: elementi esclusivi
su http://wyliodrin.github.io/WyliodrinSTUDIO $ sudo apt-get update di Wyliodrin.
e installatelo tramite il Chrome store. Vi apparirà l’icona $ sudo apt-get install python-picamera
di un’app sotto chrome://apps, cliccatela per lanciare $ sudo raspi-config
Wyliodrin. Nel launcher apparirà un’icona come scorciatoia, Scrollate e scegliete 6. Enable camera, quindi Enable
che potete bloccare per accedervi rapidamente da qui in poi. seguito da Finish, quindi riavviate quando vi viene richiesto.
Vi verrà mostrato uno splash screen, cliccate Exit e quindi Dovrete ri-connettervi alla Pi una volta fatto. Scriverete
il pulsante Connect nell’angolo in alto a destra della finestra questo progetto in Python; non c’è supporto diretto per
di Wyliodrin. Dovrebbe apparire la vostra Pi come opzione, Sense HAT in Visual Programming, cercherete invece di
quindi cliccateci per connettervi. Inserite lo username (pi) e cannibalizzare codice da altre fonti. Per prima cosa, cliccate
la password (raspberry) e dovrebbe aprire il layout dello sul pulsante della cartella nella parte alta della finestra di
schermo della Pi con i collegamenti dell’header a 40-pin. Wyliodrin. Cliccate Create new Application, dategli un nome
Vedrete lo schermo principale diviso in cinque schede: sensato e lasciate selezionato Python come linguaggio,
Application, Dashboard, Schematics, Pin Layout e Shell. quindi cliccate Create. Il progetto apparirà nella finestra
Quest’ultima vi dà accesso remoto alla Pi. La scheda
Application vi mostra il codice del vostro progetto, mentre
Dashboard contiene elementi che potete usare per
controllare da remoto la vostra Pi. Schematics funziona
in congiunzione con un’applicazione chiamata Fritzing
(http://fritzing.org/home) per coloro che progettano
e costruiscono device basati sull’hardware. Potete vederlo
in azione lanciando alcuni degli script d’esempio,
per esempio il LED Blink vi mostra una Pi, una breadboard,
un LED, un resistore e due cavi jumper maschio/femmina
necessari per completare il progetto. Sopra questi vedrete
una serie di pulsanti. C’è un pulsante play/stop che lancia
i vostri script tramite la vostra Pi, e vicino a questo
c’è un pulsante File Explorer che vi permette di sfogliare
remotamente lo storage dell’SBC. Potete creare nuove
cartelle e caricare file dal vostro PC. Vicino a questo
c’è Package Manager, che di base elenca tutti i moduli
JavaScript e Python e fornisce un accesso facile a una
selezione di altre librerie non ancora installate: ognuna L’interfaccia principale di Wyliodrin STUDIO contiene diverse guide di riferimento,
ha una descrizione, esempi sono Django, MySQLdb e NTLK come questo utile diagramma dei collegamenti

RASPBERRY PI 109
Raspberry Pi Sicurezza & Gestione

Projects: cliccateci sopra per aprirlo. Vedrete che è già console di Wyliodrin Project exit with error 0, che indica che

Tip presente uno script di esempio. Cliccate il pulsante play e


vedrete apparire tre righe nella console:
lo script è stato completato con successo. Volete verificarlo?
Cliccate il pulsante File Manager e navigate nella cartella
Visitate la pagina python.main.py home/pi dove dovreste vedere ora presente un file test.jpg.
http://bit.ly/ Hello Cliccateci e vi verrà chiesto di scaricarlo sul vostro PC dove
RaspPiGetStarted Project exit with error 0 potete vederlo. Congratulazioni, avete appena completato
per ottenere un libro La riga finale indica che il progetto si è concluso con il vostro primo progetto. Per farlo sono state usate le API
online di 200 pagine
successo. Ora selezionate tutto il codice nella finestra di Sense (https://pythonhosted.org/sense-hat/api
che include un gran
numero di progetti del progetto e cliccate Delete per cancellarlo. Cominciate e http://picamera.readthedocs.io/respectively)
che riguardano Pi a scrivere il vostro progetto scrivendo le righe di codice per il codice che è stato poi adattato. E questa è la bellezza
e Arduino, purtroppo seguenti per chiamare le librerie Python richieste: di Python: il suo codice è sufficientemente logico da renderlo
però solo in inglese.
from sense_hat import SenseHat facile da programmare da zero. Se proseguirete nella lettura
Accoppiatelo con
il Sidekick Popular from time import sleep vedrete modi per migliorare o adattare ulteriormente
Component Kit import picamera lo script (per esempio, impostare una risoluzione specifica
(http.//bit.ly/ Le righe seguenti creano le variabili che userete: per la foto o per catturare video invece di una foto).
SidekickKitv2) per sense = SenseHat()
sfruttarlo a fondo.
event = sense.stick.wait_for_event() Programmazione visuale
camera = picamera.PiCamera() Wyliodrin rende la programmazione in Python facile e lineare,
La riga seguente attende fino a che non viene individuato ma esiste un modo ancora più semplice chiamato
il movimento del joystick: programmazione visuale (visual programming), che funziona
event = sense.stick.wait_for_event() trascinando una serie di blocchi di codice e modificandone
E queste ultime righe scattano la foto: le variabili per creare un’applicazione senza conoscere
camera.start_preview() comandi Python. Purtroppo il supporto per la Pi è limitato
sleep(2) all’interazione diretta con i pin GPIO (non funziona con
camera.capture('/home/pi/test.jpg') la Sense HAT perché questa comunica usando il protocollo
Mano a mano che scrivete, vedrete che Wyliodrin vi offre I2C, che non è supportato) e ai comandi di base per
dei suggerimenti per velocizzare l’inserimento dei dati: la camera. Ciononostante, la guida passo-passo
premete Tab quando appare un suggerimento appropriato (il box a destra Costruire un progetto con la
per selezionarlo. Una volta completato, verificate che il vostro programmazione visuale) vi mostra come funziona
Pi sia connesso e cliccate il pulsante play. Dovreste vedere la programmazione visuale creando un progetto semplice
il main.py di Python apparire in console, che indica che che sfrutterà la camera della Pi per scattare una serie di foto
lo script è in esecuzione. Se premete o muovete il joystick in successione. Per cominciare, cliccate sul pulsante Projects
nel retro della vostra Sense HAT, verrà attivata la camera: e fate click su Create new application. Date al vostro
se la vostra Pi è collegata a uno schermo vedrete apparire progetto un titolo, quindi cliccate il menu a discesa
l’anteprima della camera e due secondi più tardi verrà Language. Scrollate verso l’alto per vedere Visual in testa.
scattata la foto. A questo punto vedrete apparire nella Selezionatelo per usare la programmazione visuale nella
creazione del vostro nuovo progetto, quindi cliccate Create.
Apparirà nella finestra Projects, per cui cliccate la sua icona
per aprirlo nella scheda Application di Wyliodrin STUDIO.
Vedrete un paio di blocchi già impostati: cliccate Show code
Wyliodrin sulla destra e verrà visualizzato il codice Python
STUDIO offre rappresentato da tali blocchi. Cliccate ogni blocco e premete
un File Explorer
Delete per cancellarlo. Ora lo schermo è pulito: seguite
integrato,
la guida passo-passo nella pagina accanto per inserire
che vi permette
di sfogliare i blocchi per mettere in piedi la vostra idea. Una volta fatto,
e trasferire file lanciatelo e mettetevi in posa per le foto. Usate il File
da e verso Explorer di Wyliodrin STUDIO per scaricarle dalla vostra
la vostra Pi Pi al PC per visualizzarle. LXP

Esportare il codice
Per default, il vostro codice è archiviato nel vostro il File Explorer. Il problema è che dovrete installare $ python script.py
PC, il che significa che dovrete lanciarlo Wyliodrin STUDIO nella vostra Pi (vedete http:// Oppure potete rendere il file eseguibile
manualmente da Wyliodrin STUDIO. Durante wyliodrin.github.io/WyliodrinSTUDIO) per e lanciarlo direttamente:
il processo di testing va bene, ma se voleste essere eseguirlo: alla connessione scegliete Chrome $ chmod +x script.py
in grado di avviarlo direttamente dalla vostra Pi? (Local Computer) per farlo. Un’opzione più $ ./script.py
Una soluzione è aprire la finestra Projects, semplice, in particolare se avete completato Nota: non c’è un collegamento diretto tra
quindi fare click su Export vicino al progetto il progetto, è copiare e incollare semplicemente Wyliodrin nel vostro browser e Wyliodrin STUDIO:
che intendete esportare. Questo vi permette il codice Python nel vostro editor di testo, quindi se volete trasferire uno script Python tra questi,
di salvarlo come file standalone con estensione salvarlo con estensione .py. Potete poi trasferirlo la soluzione più semplice è ancora di copiare
.wylioapp, trasferibile in seguito tramite nella Pi ed eseguirlo con Python come segue: e incollare l’effettivo codice dall’uno all’altro.

110 RASPBERRY PI
Internet delle Cose

Costruire un progetto con la programmazione visuale

1 Aggiungete un blocco Pi Camera 2 Modificate il blocco di codice


I blocchi di “codice” della programmazione visuale sono organizzati Vedrete che il blocco si compone di due elementi: il comando e una
in sezione sulla sinistra: andate in Embedded seguito da Raspberry Pi parte di testo. Potreste essere tentati di cliccare Play, ma il codice non
e poi fate click su Pi Camera. Apparirà un menu pop-up che mostrerà funzionerà nella forma attuale; dovrete cliccare all’interno della stringa
tre blocchi disponibili. Scegliete il primo blocco trascinandolo definita photo e specificate un percorso, per esempio /home/pi/
nel mezzo dello schermo. Cliccate la scheda Show code sulla destra photo. Fatto questo, cliccate l’icona play, quindi usate File Explorer
per visualizzare il codice Python corrispondente. per verificare che la foto sia stata scattata.

3 Aggiungete un loop 4 Impostate le variabili


Ora aggiungerete un ciclo allo script, così da fargli scattare quattro foto Fate click su item e scegliete Rename variable. Modificate il nome
(photo1.jpg, photo2.jpg e così via), ognuna a cinque secondi in pic. Scegliete Programs D Numbers and Maths e trascinate
di distanza. Cominciate selezionando Program D Loops e trascinando il numero in alto così da farlo scattare alla destra di set pic to.
il blocco Repeat 10 times sopra il blocco originale per racchiuderlo, Modificatelo in 1. Ora trascinate un altro blocco variabile set item
cliccando dentro il numero 10 per ridurlo. Scegliete Programs D to così da porlo sopra Pi Camera takes snapshot all’interno della
Variables e trascinate set item to sopra il blocco Repeat. variabile repeat loop. Rinominate la variabile in photo.

5 Completate la variabile filename 6 Rifiniture


Espandete Program D Text e trascinate create text with per Usate Program D Screen and Keyboard per generare un feedback
attaccarlo al blocco set photo to. Ha due input: trascinate la stringa quando viene scattata una foto, quindi inserite un ritardo di cinque
da Pi Camera takes snapshot nel blocco in testa, quindi andate secondi da Program D Timing. Ora aggiungete set photo to
in Program D Variables e trascinate la variabile pic sotto la variabile da Program D Variables e attaccate il blocco + da Program D
stringa. Infine, trascinate la variabile photo da Program D Variables Numbers and Maths. Trascinate la variabile pic nell’input a sinistra
in Pi Camera takes snapshot. e il blocco numero nell’altro, impostandolo a 1.

RASPBERRY PI 111
Raspberry Pi CLI

Amministrazione:
comandi base
L’ABC della gestione di un server Web Linux in sole 4 pagine!

N
on tutti coloro che cominciano a usare Linux Non siete solo uno straniero in terra straniera,
lo fanno volontariamente. È probabile che probabilmente state provando a risolvere un problema
la maggior parte dei primi rapporti che le persone importante, a cui però non avevate prestato molta
hanno con questo sistema operativo avvenga attenzione finché non vi è stato segnalato. D’altra parte
inconsapevolmente. Fate click su un pulsante nella pagina siete amministratori per caso e pensavate che fosse tutto
del vostro account ISP per impostare un server Web compreso nella tariffa mensile che pagate al vostro ISP
privato o per lavoro, per un sito, un indirizzo email e ora è troppo tardi per tirarsi indietro. Dato che molti
o un’applicazione online, e all’improvviso diventate server Web funzionano con Ubuntu, questa guida si basa
un amministratore di Linux, anche se non lo sapevate. su quella specifica distribuzione e tutti i comandi
Quando iniziate a lavorare con il vostro server Web, che troverete funzionano sia in un desktop Linux
di solito le cose sono chiare. Quasi tutti i provider sia in un server Web.
vi forniranno un’interfaccia Web come Cpanel o Plesk
per gestire la macchina. Ci sono un sacco di programmi 1 sudo
che vi permettono un accesso facile e veloce ai log, La cosa più importante da sapere per un amministratore
ai servizi di posta elettronica e alle installazioni con è che ci sono due tipi di account che possono accreditarsi:
un click di applicazioni famose come Wordpress o forum. quello di un utente normale e quello di un amministratore,
Ma la prima volta che dovete fare qualcosa che non detto anche superuser. Al primo non è consentito
implichi l’uso del pannello di controllo grafico, vi ritrovate modificare i file o le cartelle di altri utenti e in particolare
fuori dal mondo delle icone e dagli strumenti classici questa regola si applica ai file del sistema operativo
per ritrovarvi in quello del testuale puro. A rendere tutto che appartengono a un amministratore chiamato root.
peggiore, per molti che hanno a che fare per la prima volta I privilegi di root o di amministratore possono essere
con il Terminale, è quando qualcosa non funziona e non anche momentaneamente concessi a utenti normali,
può essere sistemata tramite il Pannello di controllo. scrivendo sudo davanti a qualsiasi comando. Quindi
Oppure avete saputo che a causa di un’importante falla per modificare il file di configurazione che controlla quali
nella sicurezza che colpisce il Web, tutti i server Linux dischi sono montati, usando l’editor di testo nano, dovrete
devono essere aggiornati subito. Sono cose che scrivere sudo nano /etc/fstab, ma evitate di farlo se non
succedono e, se non ci credete, cercate Heartbleed siete esperti. Quando usate sudo, vi verrà richiesta
per saperne di più. Improvvisamente vi accorgete la vostra password cioè la stessa che usate per
che il vostro bel pannello di controllo non ha aggiornato accreditarvi. Tuttavia se state entrando nel vostro server
il sistema operativo con le patch di sicurezza e il vostro Web, ci sono ottime possibilità che siate già l’utente root,
piccolo blog potrebbe fare parte di una gigantesca botnet quindi non avrete bisogno della password per fare
internazionale usata per lanciare attacchi DDoS. modifiche importanti. Se non riuscite a eseguire i comandi
sudo, il vostro Web host vi ha ridotto il livello di accesso
e probabilmente non potrete farci niente. In Linux,
gli account utente possono far parte di gruppi e solo
i membri di quelli autorizzati possono usare il comando
sudo che garantisce loro temporaneamente i privilegi
di amministratore.

2 su
Anche se sudo vi dà molto potere, ha però dei limiti. Infatti
Non ricordate
quella cosa furba se avete un sacco di comandi da eseguire, è più comodo
fatta la scorsa non doverlo scrivere all’inizio di ogni riga (almeno
settimana? la password ha una durata di 5 minuti). Ecco quando torna
Usate history utile su, che vi dà i poteri del superuser finché non viene

112 RASPBERRY PI
Collegarsi al server
Come amministratore per caso, la prima sfida Quando appare la richiesta, scrivete ssh il prompt della password e usare chiavi
è collegarvi al vostro server. Nel pannello nomeutente@vostroserver.com (o sostituite crittografiche per accedere. Per seguire questa
di controllo nel Web dovreste vedere un’opzione vostroserver.com con un indirizzo IP). Il comando strada, dovrete creare nella vostra macchina
per aprire un Terminale o una console ssh aprirà una shell protetta sulla macchina un duplicato della chiave SSH publica/privata
nel programma di navigazione, ma di solito remota con il nome utente specificato. Prima (per esempio, gli utenti di Ubuntu possono
è un modo lento di fare le cose. È meglio aprire dell’accesso vi verrà chiesta la password scrivere ssh-keygen -t rsa -b 4096 -C “vostra_
una finestra di Terminale nella vostra macchina dopodiché apparirà un’interfaccia testuale email@esempio.com”) e copiare la parte
(se state usando Ubuntu premete Alt+Ctrl+T, che inizia nella cartella home del nomeutente. pubblica della chiave nella cartella .ssh nel
se siete in Windows avrete bisogno Se vi collegate regolarmente, c’è un modo server. Per maggiori informazioni: https://help.
di un’applicazione specifica come PuTTY). perfino più sicuro per usare ssh cioè scavalcare github.com/articles/generating-an-ssh-key.

rendere efficaci le modifiche. È possibile che siate abituati


ad avviare e ad arrestare i processi in sottofondo
in Windows tramite la schermata Gestione attività Tip
o Monitor di sistema. Invece con il Terminale le cose
Se cambiate
sono più complicate, ma non molto. La confusione nomi, permessi
aumenta perché molte distribuzioni Linux hanno cambiato o proprietà molti
il modo in cui gestiscono i servizi di avvio, passando a comandi hanno
systemd, quindi ci sono due modi per farlo. Quello l’opzione -R
o -r, che significa
vecchio, che funziona spessissimo, è scrivere service
“ricorsivo”.
mioservizio restart, preceduto da sudo, se serve. Quello Essenzialmente
nuovo è un po’ più lungo: systemctl restart mioservizio. cambia gli attributi
service. Per esempio, se volete riavviare Apache, il software di tutti i file di una
che trasforma un semplice computer in un server Web, cartella, invece
Anche se qualcuno copia la vostra chiave, avrà sempre
che solo quelli
bisogno della password per sbloccarla scrivete sudo systemctl restart apache2.service. della cartella.

chiusa la finestra del Terminale. Scrivete sudo su seguito 6 ls


dalla vostra password e vedrete che il prompt cambia La chiave per capire la console sta tutta nel percorso
da vostronome@vostroserver a root@vostroserver. (leggete il box Percorso a pag 68), che in qualunque
Non pensate che su significhi superuser, perché è un momento vi dice dove vi trovate all’interno della struttura
comando per qualsiasi utente nel sistema e si usa senza di una cartella. Ma come fate a sapere che altro c’è nella
scrivere il nome di un account dopo di esso. su significa vostra posizione attuale? Facile, usate ls. Questo comando
che volete essere root, ma se usate su mionome tornerete elenca tutti i file nella cartella che state visitando.
al vostro originale account di utente non privilegiato. Se ne contiene parecchi, usate ls | less per mettere
in pausa alla fine di ogni pagina di elenco.
3 ifconfig
Se dovete mettere a posto un server Web, è opportuno 7 cat
saperne il più possibile sulla sua attuale connessione. Vedrete spesso questo comando se eseguite istruzioni
Il comando ifconfig può essere usato senza i privilegi che avete trovato online e non siete sempre sicuri di ciò
di sudo e vi dà i dettagli di ogni collegamento di rete attivo, che fate. Infatti cat è l’abbreviazione di concatenare
fisico o virtuale. Spesso si usa per vedere il vostro indirizzo e si usa per unire i file. Nella sua forma più semplice,
IP, che appare sotto il nome dell’adattatore, ma serve può essere usato per prendere il file1.txt e il file2.txt
anche per vedere se siete o no collegati a un VPN.
Per esempio, se un collegamento è descritto come eth0,
si tratta di un cavo Ethernet, mentre tun0 è un tunnel VPN.

4 chown
C’è un sacco di roba che è opportuno imparare su chmod,
ma c’è un comando simile che è perfino più potente.
Mentre chmod indica cosa possono fare gli utenti che
non sono proprietari di un file, chown cambia
completamente il proprietario del file e il gruppo a cui
appartiene. Ancora una volta è probabile che dobbiate
scrivere sudo davanti a chown, ma la sintassi è semplice.
Se non riuscite
Ecco un esempio: chown mionome:miogruppo nomefile.file. a leggere 1.000
righe al secondo,
5 service restart usate ls | less
Non significa che dovete riavviare il computer per esplorare
manualmente, anche se talvolta è necessario farlo per le cartelle

RASPBERRY PI 113
Raspberry Pi CLI

“Chi ha detto che usare il ma se eseguite df -h, che significa human readable
cioè leggibile per gli umani, le dimensioni dei volumi
Terminale è complesso? Con verranno espresse in megabyte, gigabyte o qualsiasi unità
di misura appropriata.
poche informazioni fai tantissimo” 10 apt-get update && upgrade
e trasformarli nel file3.txt, ma può essere usato insieme Probabilmente è il comando più importante da conoscere
ad altri comandi per creare un nuovo file basato sulla ricerca e temere. Sappiamo tutti che per mantenere protetto un PC
di schemi o parole nell’originale. Spesso vedrete cat usato bisogna aggiornare il sistema operativo, ma se ne avete uno
per esplorare un singolo file. Se non specificate un nome file con Linux difficilmente lo farà in automatico. Un semplice
di output, cat si limita a scrivere ciò che trova sullo schermo. sudo apt-get update dirà al vostro sistema di controllare
Quindi le istruzioni online lo usano spesso per cercare testo la presenza di versioni più recenti delle applicazioni usate,
all’interno di un file e visualizzarne i risultati nel Terminale. e sudo apt-get upgrade le scaricherà e le installerà. Di solito
Ecco perché cat non è distruttivo. Diversamente da ciò che sono comandi sicuri da usare e dovrebbero funzionare
può succedere con altri comandi, è difficilissimo modificare regolarmente, ma a volte succede che l’aggiornamento
accidentalmente un file con questo comando. di un software comprometta il funzionamento di un altro.
Per prima cosa, quindi, fate un backup.
8 find
Utile ma sottovalutato, il comando find è sufficientemente 11 grep
autoesplicativo. Serve per trovare qualcosa. Scritto da solo È utilissimo per cercare schemi all’interno dei file. Volete
è simile a ls, a parte che elenca tutti i file nelle sottocartelle trovare tutte le righe di un libro sui formaggi in cui si
della vostra attuale posizione, oltre a quelle della cartella nomina il pecorino? grep "pecorino" librodeiformaggi.txt
in cui vi trovate. Potete usarlo per cercare nomi di file con lo farà per voi. Ancora meglio, potete usarlo per cercare
la sintassi find -name “nomefile.txt”. Inserendo un percorso all’interno di più file usando i caratteri jolly. Quindi grep
prima dell’opzione -name, potete indirizzarlo a una specifica “pecorino” *.txt troverà ogni file di testo in cui è citato
cartella di partenza per fare prima. Cambiando l’opzione quel tipo di formaggio.
-name potete cercare per giorni dall’ultima data di accesso
(-atime) o oltre. 12 top
Quando lavorate con un’interfaccia grafica come quella
Nano non
è l’unico editor
9 df degli ambienti desktop Linux o Windows, c’è sempre
di testo Se i vostri problemi con il server riguardano lo spazio un’applicazione come Monitor di sistema o Gestione
del Terminale, su disco, scrivete df e avrete un rapporto dettagliato delle attività che mostra l’elenco delle applicazioni attive
ma è il più facile dimensioni e quello di ogni volume montato nel vostro e fornisce i dettagli sulla loro occupazione della CPU, della
da usare sistema. Di default fornisce le dimensioni in byte, memoria o del disco. È uno strumento importantissimo
per risolvere i problemi se avete un programma
che funziona male e non capite quale sia. Allo stesso modo,
potete visualizzare una tabella di applicazioni funzionanti
nel Terminale di Linux che faccia la stessa cosa, scrivendo
top. Come nel caso di molti altri comandi, non è subito
chiaro come si faccia a chiudere top quando non vi serve
più, senza chiudere la finestra del Terminale. Il comando
più usato per tornare al prompt è Ctrl+C.

13 kill, killall
Usando top potete trovare quale applicazione sta
monopolizzando la CPU, ma come si fa per fermarla senza
il click destro e Termina attività? Potete usare il comando
kill seguito dal nome del processo. Se volete essere sicuri
di chiudere tutti i processi che contengono il nome
di quell’applicazione, usate killall. Quindi kill firefox chiuderà
il browser Web in Linux.

Cosa indica il prompt dei comandi


Quando aprite una finestra di Terminale macchina in cui siete. Se aprite il Terminale nel Quando aprite il Terminale per la prima volta,
in Linux, potreste restare disorientati, vostro desktop, di solito questi due nomi sono visualizzerà “vostronome@vostronome:~$”.
ma le parole davanti al cursore lampeggiante uguali. Quindi vedrete “mionome@mionome”. La tilde (~) indica che siete nella cartella home
vi dicono la vostra disposizione all’interno del Invece, quando entrate in un server remoto, per il vostro nome utente. Se al posto del dollaro
filesystem. La prima parola è il nome utente saranno diversi. Questa informazione è seguita c’è ‘#’, state usando la macchina come utente
con cui vi siete accreditati ed è seguito da @. da una colonna a cui segue il percorso alla root. Leggete man cd per imparare a spostarvi
La seconda parola è il nome dell’host della cartella in cui siete, poi c’è il simbolo del dollaro. e guardate come cambia il percorso.

114 RASPBERRY PI
Amministrazione

14 w
Ecco un intero comando sintetizzato in una lettera.
Se pensate che un altro utente sia collegato al vostro
sistema, dovete assolutamente conoscere questo
comando. Usate w per elencare tutti gli utenti attivi,
ma non sperate che vi mostri anche gli eventuali hacker.

15 passwd
Usate passwd con molta, anzi moltissima prudenza perché
la parola che scriverete subito dopo diventerà la vostra
password di login, quindi se la scriverete male
o ve la dimenticate, finirete in guai seri. Normalmente
potete cambiare solo la vostra password utente,
ma se avete i privilegi di sudo potete cambiare le credenziali
di chiunque, compreso il nome utente dopo la stessa
password. Scrivere sudo passwd cambierà anche
la password di root. Controllate la pagina del manuale Tenete d’occhio
(man passwd) per vedere opzioni utili per fare scadere e cartelle. Così come con cd, potete scrivere il nome il percorso
una password dopo un certo periodo di tempo e così via. di un file su cui agire della cartella in cui siete o un percorso della cartella
intero a cominciare dalla root del disco con ~. Per mv davanti alla riga
16 cd la sintassi è mv ~/posizione1/file1.file ~/posizione2/ di comando per
capire dove siete
Se avete un’interfaccia grafica e un navigatore di file, posizione. La cosa importante da ricordare è che
è facilissimo andare da una cartella all’altra nel vostro disco nel Terminale non esiste la funzione annulla, quindi
fisso, facendo click su di esse. Nel Terminale, sappiamo se usate rm su un file lo perderete per sempre, oppure
dove siamo grazie al percorso (leggete il box Cosa indica avrete bisogno di conoscenze specifiche per recuperarlo.
il prompt dei comandi, a sinistra), e possiamo cambiare Allo stesso modo, se usate mv o cp su un file è meglio
posizione grazie a cd che significa change directory cioè prendere nota di dove l’avete messo.
cambiare cartella. Il comando cd si usa principalmente
in tre modi: 18 nano
1 cd nomecartella Vi sposterà dentro la cartella Se avete passato la vita a usare applicazioni grafiche, potrà
specificata, purché esista all’interno di quella in cui sembrarvi strano, ma nel Terminale funzionano anche
vi trovate (usate ls se non ne siete sicuri). programmi complessi. Ci sono molti editor di testo che
2 cd ~/percorso/cartella Questo vi porterà in una vengono forniti con l’intero pacchetto, per esempio nano
posizione specifica all’interno della cartella home e vi. Potete aprire un nuovo documento scrivendo nano, Tip
(il carattere ~ dice a cd di cominciare a cercare dalla vostra o modificarne uno esistente scrivendo nano ~percorso/
home). Cominciando con / direte a cd di cominciare testo.txt (si fa lo stesso con vi). Alcune scorciatoie possono Un comando
il percorso dalla cartella root del vostro disco fisso. sembrare strane come Ctrl+O che serve per salvare. preziosissimo
3 cd .. Quest’ultimo comando vi porta su di un livello nella è man,

struttura della cartella in cui siete. 19 history abbreviazione


di “manuale”. Apre
Infine, se avete passato la giornata a copiare e incollare il file help di qualsiasi
17 mv & rm & cp comandi dal Web, potreste voler controllare che cosa avete comando. Quindi
Quando vi ci abituate, l’uso del Terminale come file fatto. Usate history per visualizzare l’elenco di tutti se volete conoscere
tutte le opzioni per il
manager diventa semplice e divertente. Così come cd, i comandi da Terminale eseguiti. Lanciate specifici comandi
comando ls, scrivete
i tre comandi fondamentali sono mv, rm e cp. Il comando numerati con !<num>: potete scorrere quelli più recenti man ls e guardate
mv si usa per spostare file da una cartella all’altra, rm usando le frecce su e giù e rieseguirli premendo Invio, cosa compare.
serve per rimuovere o cancellare un file e cp copierà file oppure cercate un comando premendo Ctrl+R. LXP

E infine il punto 20... chmod


I permessi per gli utenti sono uno degli aspetti Volete che Wordpress possa scrivere certi file o eseguire file. Di solito è seguito da tre numeri
più importanti per la sicurezza di Linux. per aggiornarli, ma ce ne sono tanti altri per indicare cosa può fare il proprietario,
Ogni file ne ha una serie che stabilisce chi può che non volete che vengano modificati i membri del suo gruppo e chiunque altro.
vedere un file; chi può leggerlo e scriverlo e non desiderate dargli la possibilità Ogni numero va da 0 a 7, dove 7 permette
e chi può eseguirlo come programma. Un file di eseguire codici senza il vostro permesso. lettura, scrittura ed esecuzione e 1 solo
visibile ai visitatori del Web, ma che può Il rovescio della medaglia è che molti problemi l’esecuzione. Se il vostro utente possiede
essere modificato solo da uno specifico con i server Web possono risalire a permessi il file, la sintassi è semplice. Per esempio
utente, è la situazione base che si affronta sbagliati, quando un’app ha bisogno di poter chmod 777 filename dà a tutti gli utenti
quando si mette un server in sicurezza. modificare un file ma è stata bloccata il diritto di leggere e scrivere un file. È meglio
Il problema è che certi file hanno bisogno di default. In questo caso vi viene in aiuto non lasciare i file in questo stato in un server
di essere modificati e altri no; pensate chmod che cambia i permessi per permettere Web per ovvi motivi. Se non possedete il file,
a un’installazione Wordpress per un blog. a ogni utente e gruppo di leggere, scrivere dovete aggiungere sudo davanti al comando.

RASPBERRY PI 115
Raspberry Pi CLI

Terminale:
profili multipli
Ecco come si adatta la riga di comando per renderlo disponibile
a utenti diversi grazie ai profili personalizzati

U
na delle caratteristiche meno note della riga di
comando di Ubuntu, il Terminale di Gnome,
è il supporto per i profili, una serie di opzioni che
comprendono il nome, il carattere, i colori di sfondo e lo
scorrimento. Inoltre, i profili possono essere impostati
per eseguire all’avvio un comando o una shell specifici,
per visualizzare una certa schermata o per collegarsi a un
computer remoto via SSH. Questa flessibilità ci fa capire
perché un utente possa voler attivare più profili.
Per esempio, si può gestire un altro computer via SSH,
come un terminale Pi Zero che esegue un server musicale I profili vengono creati e impostati tramite Preferenze
Mopidy. In tal caso, potete creare un profilo che vi fa del profilo, che trovate nel menu Modifica
accedere direttamente al vostro Pi Zero e uno che usa un
diverso schema cromatico per aiutarvi a distinguere quella Modifica del profilo. Così facendo, sarete nel nuovo profilo
specifica finestra dalle altre in esecuzione. mentre fate le modifiche, che vedrete applicate in tempo reale,
visualizzandone l’anteprima nella finestra del Terminale mentre
Creare e gestire profili procedete. È il massimo, se volete provare schemi cromatici,
Non potete usare la riga di comando come al solito per creare caratteri diversi e così via. Nella scheda Generale ci sono
e gestire i profili. Lo strumento dconf può essere usato nella anche opzioni per impostare le dimensioni iniziali della finestra
Tip shell dopo averne impostato uno, ma serve solo per vedere del Terminale, indicando righe e colonne: 80x24
le impostazioni che avete fatto seguendo i prossimi consigli è l’impostazione standard. Potete anche cambiare la forma
Avete dato a una e modificarle. La finestra mostra cosa potete fare con dconf. predefinita del cursore, Blocco, con Trattino verticale, usato
chiave un valore Quindi, per creare il vostro primo profilo personalizzato, dovete per esempio in Writer di LibreOffice o con Trattino basso.
sbagliato con dconf?
aprire il Terminale e selezionare File D Nuovo profilo. Si aprirà Il cursore cambierà mentre passate da uno all’altro. Se non
Ripristinate quello
predefinito così: una finestra di dialogo con cinque schede. Cominciate dando volete ricevere notifiche audio dall’altoparlante interno
$ dconf reset /org/ al profilo un nome chiaro che userete per selezionarlo quando del PC, deselezionate Avviso acustico. Purtroppo non potete
gnome/terminal/ passerete da uno all’altro. Prima di proseguire, fate click sul scegliere di attivare notifiche visive, come il lampeggio, per
legacy/profiles:/ pulsante Chiudi, poi passate al nuovo profilo tramite il menu profili specifici. Le ultime tre opzioni della scheda Generale
<IDprofilo>
Terminale D Cambia profilo. Dopodiché selezionate si spiegano da sole e cominciano con la disabilitazione del testo
/<nomechiave>.
Modifica D Preferenze del profilo per riaprire la finestra in grassetto. Potete anche permettere al testo di adattarsi
automaticamente, quando ridimensionate manualmente

Cambiare profilo la finestra del Terminale. Inoltre potete scegliere un carattere


personalizzato da visualizzare. Lo strumento dconf mostra
che l’opzione del carattere predefinito ha due impostazioni

P
otete cambiare profilo senza riga di comando, così si aprirà una
separate. La prima, use-system-font, mostra se state usando
uscire dall’attuale sessione nuova finestra, è come scegliere File
di Terminale. La scelta ovvia D Apri terminale:
o no il font di sistema, con un semplice valore true
è aprire il menu Terminale D Cambia $ gnome-terminal --window-with- (deselezionato) o false (selezionato). Il secondo, font, funziona
profilo e scegliere quello che volete. profile=<NOMEPROFILO> solo se “use-system-font” è impostato su false e indica
Così verranno applicate le Sostituite <NOMEPROFILO> con il carattere sostitutivo, lo stile e le dimensioni.
impostazioni di quel profilo alla quello che volete, stando attenti alle
sessione attuale. Tuttavia non maiuscole e alle minuscole. Altre opzioni di personalizzazione
funzionerà alcun comando assegnato Se il profilo contiene spazi, precedeteli Visualizzate la scheda Colori per impostare quelli del testo
a quel profilo. Potete anche avviare con una barra inversa. Per esempio e dello sfondo. Deselezionate Usare i colori del tema
una nuova sessione di Terminale dalla Mopidy\ server.
di sistema per passare velocemente a un’altro schema

116 RASPBERRY PI
Usare la riga di comando

T
utti i profili del Terminale sono gestiti e scrivete quanto segue, sostituendo l’ID Potete usare dconf write per cambiarne
da dconf, uno strumento di basso profilo esatto, compreso il carattere inziale il valore, se sapete quali sono disponibili:
livello per gestire diverse della colonna, in <IDprofilo>: $ dconf write /org/gnome/terminal/legacy/
configurazioni e impostazioni di sistema. $ dconf list /org/gnome/terminal/legacy/ profiles:/<IDprofilo>/exit-action “‘restart’”
Potete usarlo per leggere i valori delle profiles:/<IDprofilo>/ Potete sempre creare nuove chiavi usando
impostazioni, chiamate chiavi, che avete Appariranno solo le chiavi che avete già dconf, ma dovete naturalmente sapere
configurato in precedenza nella finestra di configurato. Per vedere il valore attuale il valore corretto della chiave che volete
dialogo Modifica del profilo. Prima di tutto di una specifica, usate dconf read così: cambiare. Alcuni di questi valori saranno
annotatevi l’ID profilo, che si trova nella $ dconf read /org/gnome/terminal/legacy/ una semplice scelta tra ‘true’ e ‘false’, ma
scheda Generale della finestra Modifica profiles:/<IDprofilo>/exit-action altri sono più complicati. Se fate qualche
del profilo. Poi tornate alla riga di comando Sostituite exit-action con la chiave scelta. errore, leggete il box Tip per correggerlo.

predefinito, per esempio testo verde su sfondo nero, è implementata quando chiudete manualmente il
o specificate manualmente i colori usando i vari selezionatori. collegamento, di solito con Exit. Scegliete per esempio
Potete anche passare a trasparente e poi usare il cursore per Mantenere aperto il terminale e vedrete un apparire un pop-
fondere la finestra del Terminale nello sfondo. Tavolozza dei up con un comodo pulsante Riavvia se volete riconnettervi
colori vi permette di impostare singole sfumature che potete immediatamente per qualsiasi ragione. La scheda Comando
scegliere tra gli schemi predefiniti o scegliere Personalizzato ha anche l’opzione Eseguire il comando come una shell
per selezionarli singolarmente. La scheda Scorrimento di login. Selezionatela per far leggere al Terminale il file
controlla il comportamento del Terminale in quattro modi .profile che è quello principale di inizializzazione che viene
diversi. Primo, potete visualizzare o nascondere la barra eseguito quando quando accedete direttamente alla shell,
di scorrimento; se la nascondete, potrete scorrere usando solo invece del file .bashrc, che è usato quando aprite il Terminale
la rotellina del mouse o il trackpad. Scorrere in presenza da Unity. Lo saprete se o quando ne avrete bisogno.
di output è deselezionato, così potete scorrere verso l’alto con
il mouse per fermare automaticamente lo scorrimento se c’è Completare le modifiche
una gran quantità di output. Attivando questa opzione, Avete creato il vostro primo profilo. La prossima volta che
non potrete più farlo. Scorrere alla pressione dei tasti lo aprite, il Terminale tornerà a quello predefinito, ma potete
è attiva e funziona in modo simile all’opzione precedente,