martedì 25 giugno 2013

Raspberry Pi - come installare e configurare Samba per condividere un hard disk esterno sulla rete casalinga

In questa guida vedremo come creare un NAS (Network Attached Storage) con il Raspberry Pi. Per chi non lo sapesse, un NAS è un dispositivo collegato ad una rete la cui funzione è quella di condividere tra gli utenti della stessa una memoria di massa. In pratica collegheremo il Raspberry Pi al router/modem di casa tramite cavo ethernet (andrebbe bene anche collegarlo tramite un adattatore wifi USB), quindi collegheremo un hard disk esterno alla porta USB del Raspberry e per finire installeremo e configureremo Samba per rendere accessibile a tutti i dispositivi collegati alla rete casalinga il contenuto dell'hard disk.

Se vi state chiedendo che cos'è Samba, è un progetto libero che fornisce servizi di condivisione file e stampati utilizzando il protocollo di condivisione SMB di Microsoft. La popolarità di Samba è dovuta dal fatto che è un software libero e permette la condivisione tra computer con diversi sistemi operativi, tra i quali Windows, OS X e Linux.
Perché dovremmo voler condividere un hard disk sulla rete casalinga? Per esempio potremmo mettere tutte le nostre foto ed i nostri video sull'hard disk condiviso così da potervi accedere dal nostro desktop, dal portatile o da un'altro dispositivo che utilizziamo a casa.

Il Raspberry Pi con un hard disk Western Digital Red da 2 Tera byte utilizzato come NAS


Collegare e montare l'hard disk esterno alla porta USB

Prima cosa da fare e collegare fisicamente l'hard disk alla porta USB del Raspberry Pi, successivamente dobbiamo montare, cioè rendere accessibile il contenuto dello stesso al nostro sistema.
Una cosa importante da sapere è che il Raspberry Pi non riesce ad alimentare un hard disk esterno USB, quindi dovrete fare in modo di alimentarlo esternamente. Come vedete nella foto io ho utilizzato una base alimentata, potete comunque scegliere un qualsiasi case che abbia un cavo di alimentazione.

Creiamo una cartella all'interno di /mnt che farà da punto di inizio del disco esterno, ad esempio:

sudo mkdir /mnt/nas

Ora con il comando lsblk andiamo ad identificare il nostro disco

lsblk

Verrà visualizzato sul terminale una lista dei dischi collegati:

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, 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...
Per avere il massimo delle prestazioni dal nostro disco dobbiamo fare in modo che la partizione che useremo per il nostro NAS sia formattata con il file system di tipo ext4. Se così non fosse possiamo formattare la partizione con il comando mkfs.

ATTENZIONE: questo comando formatterà la partizione, quindi cancellerà qualsiasi file in esso contenuto. Ricordatevi di mettere al sicuro i file che non volete perdere prima di procedere!

Ora che siete sicuri di quello che fate:

sudo mkfs -t ext4 /dev/sda1

Il disco è pronto, possiamo montare la partizione con il comando:

sudo mount /dev/sda1 /mnt/nas

Per avere accesso completo al contenuto del disco in lettura e scrittura, modifichiamo il proprietario della cartella nas e di tutte le sotto cartelle ed i file in essa contenuti con il nostro nome utente.

sudo chown -R [nome_utente]:[nome_utente] /mnt/nas

Dove al posto di "[nome_utente]" inserirete il vostro nome utente, ad esempio se utilizzate l'utente di default pi, scriverete:

sudo chown -R pi:pi /mnt/nas

Ora possiamo guardare il contenuto del disco

ls /mnt/nas

Per poter fare in modo che disco venga montato all'avvio del sistema bisogna andare a modificare il file di configurazione /etc/fstab.
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>

Per il nostro disco la riga dovrà essere così

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

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

Installare e configurare Samba

Prima di installare Samba aggiorniamo la lista delle versioni dei pacchetti del repository con

sudo apt-get update

quindi installiamo

sudo apt-get install samba samba-common-bin

questo comando installerà due pacchetti: samba e samba-common-bin, al termine dell'installazione passiamo alla configurazione.
Il file di configurazione di Samba si trova in /etc/samba, quindi:

cd /etc/samba

Facciamo una copia di sicurezza del file di configurazione con

sudo cp smb.conf smb.conf.original

Apriamo il file di configurazione smb.conf con l'editor di testo

sudo nano smb.conf

Andiamo a cercare la sezione identificata con ##### Authentication ##### e modifichiamo la riga
#  security = user
con
security = user

Quindi salviamo premendo i tasti Ctrl + o, premiamo enter per confermare il nome del file, quindi usciamo dall'editor con Ctrl + x.
Ora bisogna riavviare il server Samba per fare in modo che utilizzi le nuove impostazioni

sudo /etc/init.d/samba restart

Ora bisogna creare la password di Samba per il nostro utente, digitiamo il comando

sudo smbpasswd -a [nome_utente]

dove al posto di  [nome_utente] inserirete il vostro nome utente, per esempio Pi se non ne avete creato un altro. Vi verrà chiesto di inserire la password due volte.
Ora andiamo a modificare di nuovo il file di configurazione:

sudo nano smb.conf

Andiamo alla fine del file ed aggiungiamo queste righe:

[usb]
comment = USB Share
path = /mnt/nas
writeable = yes

Salviamo e usciamo dall'editor, quindi riavviamo il server Samba per l'ultima volta

sudo /etc/init.d/samba restart

Il vostro NAS è pronto!
Potete accedere dal vostro computer, se utilizzate una distribuzione GNU/Linux, tramite Nautilus, il gestore di file. Andate sul menu alla voce "inserisci posizione" e digitate:

smb://[indirizzo_IP]/usb/

Dove al posto di [indirizzo_IP] inserirete l'indirizzo IP del vostro Raspberry Pi. Vi verrà chiesto di inserire nome utente e password (quella che avete inserito per Samba), dopo di che potrete vedere il contenuto del disco come fosse sul vostro computer.
A questo punto, per velocizzare il collegamento al disco remoto, potete selezionare la voce "aggiungi posizione ai segnalibri", così non dovrete riscrivere l'indirizzo tutte le volte.

Per quanto riguarda OS X e Windows basterà esplorare la rete dal gestore dei file e vedrete comparire il server RaspberryPi (il nome di default del Raspberry se non lo avete modificato). Rispetto a Linux non cambia niente, vi verrà chiesto nome utente e password e potrete accedere al disco.

lunedì 17 giugno 2013

Adesivi per coprire il logo del tasto Windows con Tux, il pinguino di Linux

Tralasciando i miei portatili Apple del passato, ho sempre e solo utilizzato distribuzioni GNU/Linux sui miei computer, mi sono quindi chiesto perché le mie tastiere devono avere quel tasto con il logo di Windows? Quello che in ambiente Unix è chiamato tasto "super" o tasto "meta".
Purtroppo in commercio non ci sono alternative, al massimo si possono trovare pochissimi modelli di tastiere pensate per i Mac che non sfoggiano la bandierina a scacchi di Microsoft, ma hanno il tasto "command".
Per personalizzare le mie tastiere mi sono messo a cercare degli adesivi che potessero sostituire il logo Windows con il pinguino Tux di Linux o qualsiasi altro simbolo che fosse coerente con l'utilizzo con i sistemi GNU/Linux. Questa ricerca mi ha portato ad un unico negozio online che vende degli adesivi con il pinguino Tux dagli Stati Uniti, i prezzi purtroppo non sono economici e sono ulteriormente aggravati dalle spese di spedizione.
Così alla fine ho deciso di auto produrli. Ho cercato un file vettoriale con Tux, ho apportato delle piccole modifiche per adattarlo alla stampa ed ho commissionato un'azienda specializzata per far stampare gli adesivi.
Ho fatto stampare gli adesivi su un materiale polimerico lucido con retro grigio, per avere una lunga durata. Sono adatti per l'esposizione in luoghi interni ed anche esterni, inoltre, una laminazione lucida sopra la stampa, li protegge dall'usura dovuta al contatto con le dita.
Sono tagliati a forma circolare, di 13 mm di diametro, adatti quindi alla maggior parte delle tastiere, li ho applicati con successo anche sulla tastiera del mio net-book.
Ho ottenuto quello che volevo, ma ho dovuto spendere molto di più del preventivato, avendo dovuto ordinarne in gran quantità.
Se qualcuno fosse interessato ad avere degli adesivi per la tastiera può contattarmi, io ne ho utilizzati quattro, ma ne ho centinaia da parte.

Il punguino Tux sulla tastiera del mio net-book



Questa è la tastiera Logitech del mio desktop

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.