LEZIONE 3

Il file system

Controlli base da terminale

  • ls, ls -l, ls -a
  • mv
  • cp
  • cd
  • history
  • echo
  • find, locate, whereis, which
  • updatedb
  • man

Comandi più complessi

  • nano/micro
  • grep
  • pipe
  • chmod e chown
  • lsusb
  • .bashrc
  • scrot per screen capture (scrot -d e scrot -s XX)

Installare/rimuovere software

  • apt-get install
  • apt-get update
  • apt-get upgrade

Flussi e variabili d’ambiente

  • stdin, stdout e stderr
  • redirect dell’output: < , > e /dev/null
  • $PATH

Shell scripting

  • #!/bin/bash
  • eseguire uno script

Inserire una directory nel PATH

Ecco come inserire una directory nel $PATH:

PATH=$PATH:/percorsoAssolutoAllaCartella
export PATH

ad esempio: se voglio aggiungere al PATH la cartella myScripts, che si trova nei miei documenti, dovrò modificare il file .bashrc inserendo in coda al file questo codice:

PATH=$PATH:/home/nicola/Documents/myScripts
export PATH

Avvio di un applicativo/script a intervalli regolari di tempo

Per avviare uno script o un applicativo a intervalli regolari di tempo, modificare il file crontab con il comando crontab -e. Inserire una riga in cui specificare i campi:

[1][2][3][4][5]

dove:

  • 1 = minuti
  • 2 = ore
  • 3 = giorni al mese
  • 4 = mese
  • 5 = giorni della settimana

Specificare ‘*’ per intendere ‘tutti’ i valori validi nell’intervallo. Esempio:

0 5 * * 1 rm /tmp/*

ovvero: alle 5 di mattino di ogni lunedì di tutti i mesi rimuovere qualsiasi contenuto della cartella /tmp.

Avvio di un applicativo/script al boot

Per avviare in automatico un applicativo o script quando la scheda si avvia, modificare il file /etc/rc.local inserendo il comando da lanciare.

Avvio di un applicativo/script ad ogni reboot (service)

Per avviare un applicativo come service, si deve creare un demone da inserire nella cartella init.d in cui specificare il comportamento che il sistema deve tenere in avvio, spegnimento o rilancio. Vedi esempio.


Approfondimenti

Env

Durante la lezione è stato citato un metodo per inserire uno shebang tale che si lasci alla shell il compito di indagare dove nel sistema operativo si trovi l’eseguibile dedicato all’esecuzione dello script. Per esempio, ho uno script in python e voglio usare #!/ per far eseguire in automatico lo script alla shell, senza invocare “python .py", ma semplicemente esegguendo ./.py (trovandomi nella directory in cui risiede lo script) Mi basta aggiungere come header dello script la riga `#!\usr\bin\python`. Questo è vero per molti sistemi, ma non per tutti. Cosa succederebbe se avessi python installato in `/usr/loca/bin`? O `~/.bin`? Possiamo ovviare a questo problema usando questa formula:

#!/usr/bin/env python

che delega al programma env il compito di trovare l’interprete python (nel nostro caso) nell’ambiente in cui si vuole eseguire lo script.

Da notare che:

  • questo sistema non vale solo per python, ma per qualsiasi interprete o shell (non esiste solo bash!) installato sul proprio sistema;
  • il comando python invoca la versione default di python per il sistema. Molto probabilmente si tratta di python 2.7. Qualora si sia impostato python 3 come default, sarà questa la versione caricata. In caso si volesse esplicitamente indicare quale versione di python caricare, usare python2 o python3 al posto del semplice comando pyhton.

Altri comandi da terminale

  • cat
  • df
  • &
  • fg
  • /etc/group
  • pip (per installare o rimuovere pacchetti software python)
  • set, env
  • export $PATH
  • read

Python - introduzione

  • compilazione e interpretazione: codice sorgente -> bytecode -> eseguibile
  • Python2 e Python3
  • IDLE, interprete, shell script
  • blocchi di codice: indentazione vs parentesi
  • Variabili
  • print() e input[3]/raw_input[2]
  • int() e str()
  • len(array)
  • if condizione, valori True, False, connettori logici
  • iterazione 1: for i in range(min, max+1)
  • iterazione 2: While condizione:
  • definizione di funzione (argomenti, ritorno)
  • applicazione di una funzione ad una lista: [x.funzione, for x in [lista]]
  • dizionari

Alcuni link interessanti:

  • think python, sul sito disponibile il libro in formato pdf o html;
  • Un MOOC su Python a cura del simpatico dr.chuck!

Altro

Modelli di rasPi:

  • raspberryPi1 mod.A+
  • raspberryPi1 mod.B+
  • raspberryPi2 mod.B
  • raspberryPi3 mod.B
  • raspberryPi Zero

pagina su raspberrypi.org

Power Supply

Secondo le specifiche ogni scheda raspberryPi viene alimentata con un trasformatore capace di fornire una tensione di 5V DC. La corrente richiesta varia da scheda a scheda e dall’uso che se ne deve fare (e.g. se si connette un WiFi dongle, la richiesta di corrente aumenta). Sono richiesti almeno 700mA. Per alimentare il Raspi3 mod B serve un alimentatore che fornisca una corrente di 2.5A (specifiche dell’alimentatore ufficiale).

NB Se si conosce il wattaggio del trasformatore si può ottenere la corrente supportata:

Watt/5V = mA

Sistema Operativo

Ad oggi (ottobre 2016) dal sito raspberrypi.org risultano disponibili questi OS:

  • Raspbian
  • Ubuntu Mate
  • Snappy Ubuntu Core
  • windows 10 IOTCore
  • OSMC
  • LibreElec
  • PiNet
  • RISC OS
  • NOOBS -> utility per installare il SO sul raspberryPi utilizzando l’SD card

pagina su raspberrypi.org

SD Card

L’SD Card deve essere class 10 formattata in Fat32. L’SD Card va formattata usando un tool specifico. Se si desidera ovviare alla linea di comando (tool dd su sistemi UNIX – da maneggiare CON MOLTA CURA) si può usare uno strumento software con GUI come SD Formatter.

Procedura di preparazione della SD card e del SO per l’installazione

  • assicurarsi che l’SD Card sia class 10
  • formattare l’SD Card in Fat32
  • scaricare NOOBS (o qualsiasi altro OS desiderato) dal sito
  • scompattare l’archivio e trascinare i file estratti (i files NON la cartella) nell’SD Card appena formattata
  • estrarre l’SD Card dal computer e caricarla sul raspberryPi

Per chiarimenti ed ulteriori opzioni e/o soluzioni, seguire le istruzioni.

Primo avvio

Al primo avvio NOOBS chiederà di scegliere il SO che si desidera installare sul raspberryPi. Selezionare quello desiderato tra quelli presenti e dare l’avvio al procedimento di installazione (che sovrascriverà l’SD Card -> QUINDI, per avere più OS da poter provare bisogna avere una SD Card dedicata a ciascun OS)

Una volta installato il sistema operativo, aprire LXTerm e digitare

sudo apt-get update
sudo apt-get upgrade

NB L’utente base è pi, la password è raspberry.

Monitor non HDMI

Se si utilizza l’uscita video composit, possono verificarsi problemi di visualizzazione a causa delle dimensioni dello schermo. Per sistemare la problematica si deve accedere al file /boot/config.txt digitando sudo nano /boot/config.txt. Conoscendo la risoluzione del proprio schermo (wxh), cercare nel file le linee #framebuffer_width=1280 #framebuffer_height=720 Rimuovere il simbolo di commento # e inserire la larghezza e l’altezza del proprio schermo.

Un tutorial sull’argomento.

Regolare la dimensione dell’immagine a schermo

Se l’immagine a schermo eccede la dimensione dell’area visibile, si deve spegnere la funzione overscan. Lanciare il tool raspi-config da terminale con sudo rasppi-config. Selezionare quindi Advanced Options e ancora Overscan

Se il problema di visualizzazione consiste in una banda nera attorno alla figura, si può ridurre o eliminare l’effetto editando il file /boot/config.txt: sudo nano /boot/config.txt. Cercare la sezione relativa all’overscan: #overscan_left=16 #overscan_right=16 #overscan_top=16 #overscan_bottom=16 Togliere il simbolo di commento e cambiare il valore usando valori negativi. Provare con -20.

Overclock

Se la performance del raspberryPi è troppo lenta, si può overclockare la scheda accedendo al tool di configurazione tramite sudo raspi-config; da qui selezionare Overclock e scegliere una delle opzioni.

NB L’overclock può danneggiare la scheda. Fare MOLTA attenzione.

Gestione dell’utente

Di default si utilizza raspberryPi tramite l’utente creato al momento dell’installazione dal sistema stesso. L’utente di default è pi e la password associata è raspberry Per cambiare la password usare il tool raspi-config chiamandolo con sudo raspi-config. Scegliere l’opzione change_pass ed inserire la nuova password.

NB si può cambiare la password anche da terminale con passwd, inserendo la password attuale e quella con la quale si vuole fare cambio.

Avvio in Windowing System

In alcune distro per raspberryPi, può capitare che di default sia richiesto all’utente di fare log in e lanciare manualmente il desktop. Se si vuole automatizzare queste operazioni, utilizzare il tool raspi-config: comando sudo raspi-config. Selezionare le opzioni di boot e scegliere la soluzione desiderata.


NETWORKING

Per connettere il raspberryPi alla rete, semplicemente connettere con cavo RJ45 il router di casa con la scheda. Assicurarsi che il router abbia abilitato l’opzione DHCP server. Nel caso, abilitarla.

Trovare l’indirizzo IP

Per vedere quale indirizzo ip sia stato assegnato al raspberryPi, digitare a terminale: hostname -I questo comando ritorna l’ip locale del raspberryPi. Per vedere gli indirizzi e le impostazioni per tutte le connessioni di cui si dispone (o almeno per le quali c’è dell’hardware predisposto), digitare a terminale sudo ifconfig ### Impostare un ip statico

Per impostare un indirizzo ip fisso si deve editare il file /etc/network/interfaces. Si può visualizzare il contenuto del file digitando more /etc/network/interfaces Per editare il file sudo nano /etc/network/interfaces Modificare la voce dhcp in static e aggiungere le righe:

  • address 192.168.1.10 l’indirizzo ip che si vuole impostare (in questo caso, come esempio, 192.168.1.10)
  • netmask 255.255.255.0 la maschera di sottorete (non cambiare)
  • gateway 192.168.1.1 l’indirizzo del router (in questo caso, come esempio, 192.168.1.1)

Dopo aver scritto le modifiche sul file, rimuovere i DHCP leases, con il comando

sudo rm /var/lib/dhcp/*

e quindi riavviare il raspberryPi: sudo reboot.

Impostare il nome network del raspberrypi sulla propria rete

Per cambiare il nome dell’host sulla rete rispetto al nome di default raspberrypi si devono modificare due file:

  • /etc/hostname
  • /etc/hosts

Per prima cosa, editare il file /etc/hostname: sudo nano /etc/hostname e sostituire raspberrypi con il nome di propria scelta (un’unica parola, senza segni d’interpunzione o caratteri non alfanumerici). Quindi, modificare il file /etc/hosts: sudo nano /etc/hosts Modificare l’ultima riga, dove compare raspberrypi e sostituire con il nome inserito nel file precedente. Fare un reboot della scheda.

Impostare una rete wireless

Solo la revision 3 di RaspberryPi monta un modem wifi integrato. Se si dispone di una scheda raspberrypi rev 3 e della versione aggiornata di raspbian, selezionare il bottone relativo alle interfacce di rete nella barra in alto a destra. Selezionare il propro network e quindi inserire la password.

Se, invece, si dispone di una versione non recente di raspbian o di una scheda rev 1 o 2, utilizzare il tool WiFi Config. Tale tool è indispensabile qualora si debba inserire un WiFi dongle. Il tool si trova nella sezione Preferences del menu Start.


Si può creare una rete wireless dal terminale. Per farlo, accedere al file /etc/network/interfaces e trovare la sezione relativa al wlan0. Questa dovrebbe corrispondere a: allow-hotplug wlan0 iface wlan0 inet dhcp wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf La prima riga dice alla scheda di stabilire subito una connessione wifi non appena un WiFi dongle è inserito. La seconda riga indica al raspberryPi di allocare un indirizzo ip usando il dhcp. Se si preferisce un indirizzo statico, cambiare dhcp in static. La terza riga indica dove si trova il file supplicant.

Il file supplicant contiene l’ SSID (nome del network) e l’SPK (password) della rete. Quindi, editare il file /etc/wpa_supplicant/wpa_supplicant.conf: sudo nano /etc/wpa_supplicant/wpa_supplicant.conf. Modificare i campi ssid e spk del file, quindi fare un reboot della scheda.

Usare un console cable

In assenza di rete si può utilizzare un console cable per connettere il computer al raspberryPi. Maggiori informazioni presso il sito di Adafruit

NB: Si devono leggere BENE i tutorial e la reference sul sito per capire come utilizzare il cavo e come avviene la comunicazione (TTL - USB). Ci si dovrà impratichire anche con PuTTY.

Controllare il raspberryPi con SSH

Se non si dispone di uno schermo, SSH è uno strumento utile per controllare la scheda da remoto attraverso la connessione di rete. Per prima cosa, la comunicazione SSH - Secure SHell va abilitata sul raspberryPi. Questo si fa con il tool raspi-config: sudo raspi-config. Abilitare la voce SSH. Dal computer (Linux o Mac OS X), digitare ssh 192.168.1.10 -l pi dove 192.168.1.10 è l’ip assegnato al raspberryPi. Inserire la password una volta richiesto, e la connessione è stabilita. Vedi anche questo tutorial sul sito di Adafruit.

Controllare il raspberryPi con VNC

VNC sta per Virtual Network Computing. Questo strumento permette di controllare graficamente la scheda da remoto. Per usare VNC, si deve installare un server sul raspberryPi e un client su ciascun computer da cui si vuole controllare la scheda.

Server

Per installare il server su raspberryPi:

sudo apt-get update
sudo apt-get install tightvncserver

Per avviare il server: vncserver :1 La prima volta che il comando viene eseguito, sarà richiesta la creazione di una password per la connessione.

Client

Per quanto riguarda il client, invece, si può scegliere fra varie opzioni. RealVNC si connette bene con tightvnc ed è disponibile per Linux, OS X e Windows. Quando il client richiede l’ip del server a cui connettersi, digitare “:1" (:1 = mi connetto al display numero 1). Inserire la password (quella impostata con _vncserver_, **non** quella di login della scheda raspberryPi!).

Per avviare il server VNC allo startup: tutorial adafruit

Strumenti VNC client:

RaspberryPi e Mac OS X: file sharing e screen sharing

Per condividere file tra un raspberryPi e Mac OS X, si deve installare sul raspberryPi netatalk: sudo apt-get install netatalk Nel Mac, nel menu del Finder, segliere GO -> Connect To Server e digitare:

afp://192.168.1.10

e clickare su Connect. Fare un reboot del raspberryPi. Viene richiesto il login (con le credenziali di accesso a raspberryPi, quindi pi come utente e raspberry come password di default). Nel raspberryPi, installare alcune utilities:

sudo apt.get install avahi-daemon
sudo update-rc.d avahi-daemon defaults

Quindi editare il file /etc/avahi/services/afpd.service: sudo nano /etc/avahi/services/afpd.service e scrivere il seguente codice:

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
	<name replace-wildcards="yes">%h</name>
	<service>
		<type>_afpovertcp._tcp</type>
		<port>548</port>
	</service>
</service-group>

Per avviare il demone: sudo /etc/init.d/avahi-daemon restart


Per condividere lo schermo del raspberryPi con il Mac, una volta installato VNC, e impostata la condivisione file, editare il file /etc/avahi/services/rfb.service: sudo nano _/etc/avahi/services/rfb.service_ Inserire nel file il seguente codice:

<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
	<name replace-wildcards="yes">%h</name>
	<service>
		<type>_rfb._tcp</type>
		<port>5901</port>
	</service>
</service-group>

Quindi avviare il demone: sudo /etc/init.d/avahi-daemon restart

Da Mac è quindi possibile vedere lo schermo del raspberryPi. Quando richiesta la password, utilizzare la password impostata con VNC, non quella di login dell’utente di raspberryPi.