martedì 11 giugno 2013

Raspberry Pi - Guida veloce di riferimento per l'amministrazione del sistema

Un computer completo grande quanto una carta di credito: Raspberry Pi



Ormai ha compiuto più di un anno e continua a catturare l'attenzione di tanti appassionati di informatica ed elettronica, sto parlando del Raspberry Pi.
Se state leggendo questo post probabilmente sapete già che cos'è, nel caso non ne aveste mai sentito parlare vi invito a leggere questa pagina su Wikipedia ed a visitare il sito ufficiale.
L'idea originale è quella di realizzare un dispositivo economico allo scopo di diffondere l'insegnamento dell'informatica e della programmazione a tutti.
Io ne ho acquistato uno qualche mese fa e per il momento lo sto utilizzando principalmente come piccolo server nella mia rete casalinga. Il punto forte di questo piccolo computer economico è l'estrema facilità con la quale è possibile connettere sensori e altri dispositivi elettronici, ci sono infatti centinaia di progetti online con appositi tutorial.
L'idea alla base del Raspberry Pi è, secondo me, l'aspetto più importante, cioè la diffusione della cultura dell'informatica e della programmazione. Purtroppo siamo sempre più circondati da dispositivi chiusi che non stimolano in alcun modo la creatività, ma ci spingono soltanto a fruire di contenuti a pagamento. Il Raspberry Pi non ha nulla a che vedere con tali dispositivi il cui unico scopo è spillarci denaro, ma al contrario è un piccolo computer versatile e che utilizza principalmente software libero, a cominciare dal sistema operativo!

Raspbian GNU/Linux


Il Raspberry Pi viene venduto senza sistema operativo, sta all'acquirente scegliere ed installare un sistema operativo su di una scheda SD e questa è la prima grande libertà che ci offre.
Attualmente il sistema operativo più diffuso per questo dispositivo è Raspbian, una distribuzione derivata da Debian cucita su misura per il nostro Raspberry Pi. La diffusione di questo piccolo computer quindi ha spinto molti ad avvicinarsi al mondo GNU/Linux.
Ho letto molti forum con utenti Windows che non hanno nessuna familiarità con i sistemi GNU/Linux e che spesso tendono a copiare comandi per il terminale dai tutorial senza capire molto cosa stanno scrivendo.
Con questo post vorrei fornire una guida veloce di riferimento per l'amministrazione del Raspberry Pi e spiegare brevemente almeno i concetti fondamentali, così che leggendo dei comandi in un tutorial se ne capisca meglio il significato.

Gestione degli utenti


In tutti i sistemi ispirati e/o derivati da Unix come Linux, FreeBSD e OS X l'utente predefinito per l'amministrazione del sistema si chiama root, detto anche super utente. Per motivi di sicurezza non si accede mai al sistema utilizzando root, ma si utilizzano utenti standard che, all'occasione, possono ottenere i privilegi del super utente.
La prima volta che avviamo Raspbian troveremo un utente di default che si chiama pi e la cui password di accesso è raspberry.
Prima cosa saggia da fare sarebbe quella di cambiare la password di pi con il comando passwd:

passwd pi

Ci chiederà di inserire due volte la nuova password per conferma.

Se magari invece preferiamo creare un nuovo utente con un nome di nostro gradimento allora possiamo utilizzare il comando adduser:

sudo adduser [nuovo utente]

ad esempio:

sudo adduser max

Crea l'utente max.

Ottenere i privilegi del super utente


Per poter modificare i file posti al di fuori della propria cartella home o per avviare programmi di amministrazione del sistema è necessario ottenere i privilegi dell'amministratore.
Per fare questo si utilizza il comando sudo (dall'inglese super user do) seguito dal comando che si vuole eseguire come amministratore.
Quando si utilizza sudo verrà richiesto di autentificarsi con l'inserimento della propria password utente.
Se avete creato un nuovo utente con adduser come nel precedente esempio, è probabile che questo non sia autorizzato ad utilizzare il comando sudo. Per abilitare l'utente all'utilizzo di sudo possiamo aggiungerlo al gruppo sudo con questo comando:

adduser [nome utente] sudo

ad esempio:

adduser max sudo

Aggiunge l'utente max al gruppo sudo.

Organizzazione del file system


root è anche il termine che indica il punto di inizio del disco di sistema, il suo indirizzo è rappresentato dal carattere /.
Per visualizzare il contenuto del disco ad una data posizione si utilizza il comando ls (dall'inglese list segments) seguito dall'indirizzo della posizione, ad esempio:

ls /
visualizza il contenuto del disco di sistema.

All'interno del disco ci sono una serie di cartelle standard che hanno uno scopo ed un contenuto ben preciso, quelle che vedremo in questo post sono:
  • home – contiene le cartelle home di tutti gli utenti. Ciascun utente ha i diritti di accesso in lettura e scrittura all'interno della propria cartella home.
  • mnt – (mount) contiene le cartelle che danno accesso ad i file system degli altri dischi collegati, o meglio dire montati, nel sistema.
  • etc – contiene tutte le cartelle ed i file di configurazione del sistema.

Montare hard disk esterni


L'operazione di mount di un'unità esterna, che può essere un hard disk o una penna USB, consiste nel rendere accessibile il contenuto della stessa al nostro sistema. Normalmente, nelle distribuzioni più comuni questa operazione è fatta automaticamente nel momento in cui si collega l'unità, sul Raspberry Pi invece, questa operazione va fatta manualmente dal terminale.

Quando si “monta” un disco esterno in pratica si fa in modo che il file system dell'unità esterna diventi parte del file system di sistema.
Come ho spiegato precedentemente, la cartella /mnt è quella destinata a contenere le cartelle alle quali si collegano i file system dei dischi collegati. Prima cosa da fare è creare una cartella all'interno di /mnt che farà da punto di inizio del disco esterno, ad esempio:

sudo mkdir /mnt/disco

Il comando mkdir serve a creare nuove cartelle, in questo caso abbiamo creato una cartella chiamata disco. Ancora una volta abbiamo usato sudo perché stiamo apportando modifiche al di fuori della nostra cartella home.
Colleghiamo il disco esterno ad una porta USB del Raspberry Pi ed utilizziamo il comando lsblk (dall'inglese list block devices) per identificare il disco.

lsblk

Verrà visualizzato sul terminale una lista dei dischi collegati come questa:

NAME               MAJ:MIN    RM    SIZE    RO    TYPE    MOUNTPOINT
sda                            8:0           0       1.8T       0       disk
└─sda1                     8:1           0      1.8T        0       part
mmcblk0               179:0           0     14.9G      0       disk
├─mmcblk0p1      179:1          0      56M        0       part         /boot
└─mmcblk0p2      179:2          0      14.8G      0       part        /

Il disco mmcblk0 è la scheda SD che contiene il sistema operativo. Come chiaramente mostrato la scheda SD ha due partizioni chiamate rispettivamente mmcblk0p1 e mmcblk0p2.
sda invece è il disco collegato alla porta USB, il quale, in questo caso, ha una sola partizione identificata come sda1.
Di solito il primo disco esterno collegato è chiamato sda, quindi ci sarà sdb per il secondo disco, sdc per il terzo e così via. Per ogni disco ci possono essere una o più partizioni identificate dal numero che segue il nome del disco, quindi sda1 è la prima partizione del disco sda, sda2 la seconda partizione, ecc...
Ora che conosciamo quale disco e quale partizione montare basta dare il comando:

sudo mount /dev/sda1 /mnt/disco

Abbiamo comunicato al comando mount di associare la prima partizione del disco sda alla cartella disco all'interno di /mnt.
Ora possiamo guardare il contenuto del disco

ls /mnt/disco

Modificare i file di configurazione del sistema


Generalmente tutti i file di configurazione del sistema sono posti nella cartella /etc come già detto precedentemente. Tra questi troviamo anche i file di configurazione delle applicazioni o dei demoni che abbiamo installato. In ogni sistema operativo ispirato a Unix i file di configurazione sono sempre dei file di testo che possono essere letti e modificati con un editor di testo. Questo principio di mantenere i file leggibili e modificabili rende estremamente semplice la configurazione del sistema.

Per modificare un file di configurazione dobbiamo lanciare un editor di testo con i privilegi di amministrazione. Ci sono diversi editor di testo disponibili, uno dei più semplici da utilizzare è nano:

sudo nano nome_file

nano è un editor di testo essenziale e semplice da utilizzare, nome_file deve essere sostituito con il percorso del file che vogliamo modificare.
Gli editor di testo per il terminale non utilizzano il mouse, il cursore si sposta tramite i tasti freccia. I comandi fondamentali di nano sono i seguenti:
  • Ctrl + o salva il testo, prima di salvare chiede conferma del nome del file
  • Ctrl + x esce dal programma e torna al terminale, se il testo è stato modificato, ma non ancora salvato, chiede se si vuole procedere con il salvataggio.

Montare un disco esterno automaticamente all'avvio del computer


Per poter fare in modo che il sistema monti un disco al suo avvio basterà andare a modificare un file di configurazione che si trova in /etc, questo file si chiama fstab (File System Table, tabella dei file system).
Apriamo fstab con l'editor di testo per configurare il montaggio automatico del disco

sudo nano /etc/fstab

All'interno del file ci sono tante righe quante sono le partizioni che vengono integrate nel file system principale. Ogni riga ha il seguente formato:

<file system> <punto di mount> <tipo> <opzioni> <dump> <pass>

  • file system è la partizione che vogliamo montare
  • punto di mount è la cartella che vogliamo collegare alla partizione
  • tipo è il formato del file system della partizione (ext4 è il formato standard di Linux)
  • opzioni sono le opzioni per il montaggio del disco, di solite vanno bene quelle di default
  • dump è un'opzione deprecata, sarà sempre 0
  • pass è l'ordine con il quale la partizione viene controllata dal comando fsck (con 0 non viene controllata)
Per il nostro disco la riga dovrà essere così

/dev/sda1    /mnt/disco    ext4    defaults    0     3

Dopo aver aggiunto la riga vista nell'esempio alla fine del file fstab, possiamo salvare premendo i tasti Ctrl + o, quindi usciamo dall'editor con Ctrl + x.
Ora possiamo riavviare il sistema con il disco collegato e questo verrà montato all'avvio.

Il sistema di aggiornamento ed installazione di programmi


Ciascuna distribuzione adotta un proprio sistema di gestione dei pacchetti software per l'aggiornamento del sistema e l'installazione/disinstallazione dei programmi.
Tutti i pacchetti software ed i programmi previsti dai curatori della distribuzione sono a disposizione degli utenti su dei server online. Ogni distribuzione avrà quindi uno o più repository (ripostiglio o magazzino), cioè un database online, dal quale prelevare i pacchetti software aggiornati dai curatori.
Nella maggior parte dei casi quindi, per installare un programma o verificare gli aggiornamenti del sistema e dei programmi installati basterà interrogare il repository di riferimento della propria distribuzione.

Per quanto riguarda il Raspberry Pi i comandi utilizzati per verificare gli aggiornamenti sono gli stessi utilizzati in tutti i sistemi Debian e derivati.
I comandi necessari da terminale sono due, il primo scarica la lista delle versioni di tutti i pacchetti software presenti nel repository:

sudo apt-get update

Il comando sudo è necessario per ottenere i privilegi di amministratore visto che l'utente normale non può effettuare operazioni di aggiornamento del sistema.
Successivamente si ordina di eseguire l'aggiornamento confrontando le versioni dei pacchetti prelevate dal repository con quelli installati attualmente sul sistema:

sudo apt-get upgrade

Alla fine della verifica verranno indicati il numero di pacchetti che devono essere aggiornati o eventualmente installati ex-novo o eliminati. Dopo aver confermato la volontà di eseguire l'aggiornamento i pacchetti verranno scaricati ed installati.

Installare programmi o altri pacchetti software


In modo molto simile alla procedura di aggiornamento si possono installare programmi o pacchetti nuovi. E' sempre meglio, prima di procedere, aggiornare la lista delle versioni disponibili sul repository se non lo si è già fatto in giornata per assicurarci di scaricare la versione aggiornata.

sudo apt-get update

quindi si può procedere all'installazione del pacchetto voluto con

sudo apt-get install [nome pacchetto]

ad esempio:

sudo apt-get install transmission-daemon

scarica ed installa il client torrent Transmission in versione daemon (un demone è un programma eseguito in background senza interfaccia grafica).

Conclusione


Concludo qui questa breve guida, prossimamente pubblicherò dei tutorial per l'installazione e configurazione di altri pacchetti software.