Indice |
Introduzione
Salve a tutti nuovamente. Recentemente ho avuto l'occasione di giocare un po' con la Raspberry Pi versione B+, un minicomputer in vendita a meno di 40€ per il quale sono disponibili diverse distribuzioni linux precompilate. Il motivo per cui l'ho fatto, a parte ovviamente il semplice divertimento (:p), era la necessità (di un amico) di condivisione in casa di unità di storage USB fra tutti i PC, senza dover per questo tenerne uno acceso. Il risultato finale è stato ottimo, funziona tutto molto bene ed è stabile...e soprattutto la scheda si è dimostrata in grado di trasferire un file da HD USB ad altro storage di rete alla più che accettabile velocità di 6MBytes/s. In rete si trovano molte guide, alcune complete ed altre no, ma tutte più o meno con qualche errore che ho dovuto risolvere, quindi ho pensato che potrebbe essere utile raggruppare in un articolo tutte le informazioni che ho ricavato e metterle a disposizione di altri che magari abbiano le stesse necessità.
In questo articolo farò solo una brevissima descrizione delle fasi iniziali, perchè tutte ottimamente documentate su vari siti compreso EY con questo ottimo articolo di Donj, fornendo vari link su cui potrete trovare le spiegazioni dettagliate. In sostanza, partirò dall'ipotesi che chi legge abbia già una Raspberry Pi (B o B+ non fa differenza) e relativo alimentatore (mini USB, uno qualunque di un cellulare va bene) con SD card pronta, accesa e collegata alla rete di casa, ed un modo per accedervi in SSH (un qualunque PC con Linux, Putty su windows...se avete un MAC, non vi posso aiutare :P)
(breve) Descrizione tecnica della scheda
La raspberry PI B+ è un minicomputer basato su ARM 11 (BroadCom BCM2835) che può girare (in overclock) fino a 1Ghz, dotato di 512 Mb di RAM, micro SD (ver B+) o SD (ver B) per sistema operativo (ed eventuale spazio di storage), 4 porte USB 2.0, uscita HDMI, 40 pin di GPIO, connettore display e molto altro. La documentazione completa è facilmente reperibile su internet a questo link.
Sul sito del produttore, sono inoltre reperibili anche le ROM delle varie distribuzioni pubblicate per la scheda, scaricabili a questo indirizzo. Per il mio scopo, ho utilizzato la release Raspbian, un derivato della Debian.
I primi passi
Per prima cosa, naturalmente, bisognerà creare la scheda SD con la distribuzione linux scelta. La dimensione minima della SD card è 4Gb per alcune distribuzioni, 8 per altre...visti i prezzi, e anche per altri motivi che vedremo in seguito, consiglio di prenderne una il più grande possibile (da 32 gb in su).
Dopo aver scaricato il file, sarà necessario scaricare anche il software per la creazione della SD che potrete trovare a questo link per tutti i sistemi operativi, e scrivere l'immagine sulla card.
Una volta creata la SD, inseritela nella Raspberry, collegate il cavo LAN e alimentate la scheda. Il boot richiederà più o meno una ventina di secondi, al termine dei quali vedrete comparire nel vostro elenco delle periferiche collegate una nuova unità.
La Raspbian parte configurata in DHCP, quindi la prima cosa da fare sarà recuperare l'indirizzo IP che il router ha assegnato alla scheda, cosa che si può fare in molti modi, normalmente il più semplice è quello di controllare sulla web page del router stesso quali siano i dispositivi connessi, prima e dopo l'accensione della RaspBerry. Nel caso in esame, l'indirizzo era 192.168.1.5, d'ora in poi mi riferirò all'indirizzo della raspberry come [RASP_ADDR].
A questo punto siamo pronti alla prima connessione: aprite una connessione SSH verso [RASP_ADDR], porta ovviamente 22. Se usate windows, putty è il programma che fa per voi. Semplice, e soprattutto free:
Alla prima connessione da un nuovo PC, riceverete un avviso di sicurezza, accettatelo, e presto vedrete la richiesta di login della raspberry:
Per default, login e password sono rispettivamente pi e raspberry, effettuate il login:
Volendo utilizzare la Raspberry come NAS, conviene impostarle un IP statico, perchè se è vero che il DHCP tende ad assegnare sempre lo stesso IP alla stessa periferica, non impostandolo statico richiate che ad un eventuale riavvio la raspberry si trovi con un IP differente, soprattutto se avete anche una WIFI cui si collegano spesso dispositivi mobile. Per impostare lIP statico, bisogna modificare il file /etc/network/interfaces, in questo modo:
- Verifichiamo la mask della rete:
$sudo ifconfig
Nel caso in esame, la mask è 255.255.255.0, sarà quasi sicuramente così per tutti.
- Verifichiamo l'indirizzo di gateway:
in questo caso, 192.168.1.1. A questo punto, riprogrammiamo il file /etc/network/interfaces con un indirizzo IP della classe giusta, quindi nell'esempio della famiglia 192.168.1.x, diverso ovviamente da quello di gateway. Nel caso in esame, si è scelto l'indirizzo 2, quindi editiamo il file con il comando:
$sudo nano /etc/network/interfaces
Tramite l'editor, eliminiamo la riga (o LE RIGHE, se ce n'è più di una):
iface default inet dhcp
ed aggiungiamo:
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
Ovviamente, se la vostra rete non è di classe 192.168 ma, per esempio, di classe 10.0, dovrete adattare quanto scrivete alla vostra condizione, così come dovrete stare attenti a scegliere un IP statico che non sia già stato impostato su altri dispositivi.
Montare i dischi
A questo punto, siamo pronti per collegare i dischi (se non l'avete già fatto prima), e montarli sul sistema della raspberry. Per prima cosa, tenete presente che Linux non conosce il file system NTFS in modo nativo, e che comunque lo digerisce male. Se avete degli HD USB vuoti, vi consiglio di formattarli in EXTx, ottenendo così un sistema decisamente più veloce. Scrivo EXTx e non EXT2 o 3 o 4 perchè la scelta fra l'una e l'altra dipende da vari aspetti. La EXT2 è più leggera, e quindi apparentemente più adatta nei dispositivi poco potenti, ma priva di journaling, e quindi più soggetta a perdita dati nel caso di improvvisa interruzione dell'alimentazione. Non ho fatto prove direttamente, ma per via indiretta ho appreso che pare la raspberry vada un po' più in crisi con i file system dotati di Journaling, soprattutto in caso di trasferimenti multipli. Quindi, secondo me, la soluzione migliore è la EXT2 magari dotando l'alimentazione della scheda di una sicurezza, che in questo caso può essere fornita da un qualunque power pack per cellulari, ma se il vostro utilizzo è spesso limitato ad un accesso a singolo file può essere il caso di utilizzare la EXT3 o 4.
- Ottenere gli UUID dei dischi (ci serviranno in seguito):
Comando $sudo blkid
Supponiamo di ottenere una cosa del genere (nel vostro caso, probabilmente la dicitura "LABEL" non sarà presente, o sarà poco comprensibile):
Da quanto ottenuto, si apprende l'esistenza di due dischi USB entrambi formattati NTFS (ahimè).
Dovremo quindi procedere all'installazione del demone NTFS, cosa che si può fare velocemente tramite il comando:
Comando $sudo apt-get install ntfs-3g
Una volta terminata l'installazione, siamo pronti a montare i dischi. Supponiamo di voler montare il primo, quello con etichetta "SAMSUNG", che sappiamo essere da due terabytes. Dobbiamo ora ottenere la mappatura che il linux ha fatto dei due dischi in /dev, e lo possiamo fare tramite il comando:
$sudo fdisk -l
Il cui risultato, nel caso in esame, è:
Da cui vediamo che un disco da 2Tb è mappato in /dev/sda, e dunque è il nostro obiettivo.
- Creare un punto di mount
Un punto di mount altro non è che una cartella nel file system che rappresenterà il punto di accesso al device /dev/sda. Normalmente i punto di mount vengono creati in /media o /mnt, scegliamo per questo caso /media.
Comando: $sudo mkdir /media/samsung
- Impostare i permessi e l'owner
La risorsa dovrà essere accessibile in read/write da ogni utente, dunque i permessi e l'owner della cartella non possono essere root/root. Modifichiamoli con i comandi:
Comando $sudo chmod 777 /media/samsung
Comando $sudo chown pi /media/samsung
- impostare l'automount a seguito di reboot
Per impostare l'automount, si dovrà modificare il file /etc/fstab:
Comando: $sudo nano /etc/fstab
Aggiungere in coda la riga:
UUID=VOSTRO_UUID /media/samsung ntfs-3g rw,defaults 0 0
dove, ovviamente, VOSTRO_UUID è l'UUID dell'HD da montare che avete ottenuto prima tramite il comando sudo blkid. Salvate il file e uscite (in nano si fa con CTRL+X, Y maiuscolo e poi ENTER per confermare il nome del file).
- Montare il disco
Per montare il disco al volo, si può utilizzare il comando mount:
Comando: $sudo mount /dev/sda /media/samsung
Dove ovviamente sda è il device del caso in esame, voi dovrete utilizzare quello trovate tramite il comando sudo fdisk -l.
Proiettare i dischi sulla rete locale
Per condividere le risorse fra una macchina Linux (Raspberry) e le altre vostre macchine di casa, che saranno al 99% Windows, dovrete installare il demone SAMBA.
Comando: $sudo apt-get install samba smbfs
Comando: $sudo apt-get install samba samba-common-bin
Ora, il buon vecchio Zio Bill, con i permessi e i domini ha fatto un gran casino. Questo comporta il fatto che se non prendete alcune particolari azioni, finirete per vedere i dischi in rete ma Windows vi domanderà una password di accesso ad ogni connessione. In questo caso, non era una caratteristica voluta nè desiderata, quindi vi descriverò come evitarlo. Se invece volete proteggere i vostri dati da occhi casalinghi indiscreti, tralasciate tutte le parti qui sotto seguite da (!!).
- Aggiungere un utente Guest con Home pubblica (!!)
Comando: $sudo adduser guest --home=/home/public --shell=/bin/false --disabled-password
Comando: $sudo chmod -R 0700 /home/public
Comando: $sudo chown -R guest.guest /home/public
- Configurare il demone samba
la configurazione del demone SAMBA si fa modificando il file smb.conf. Il file è organizzato per sezioni che iniziano tutte con un titolo compreso fra stringhe "###############". Editiamo allora il file:
Comando: $sudo nano /etc/samba/smb.conf
Cerchiamo la linea workgroup = WORKGROUP, sarà probabilmente commentata (un "#" all'inizio della riga). Rimuoviamo il commento.
Cerchiamo ora la sezione ####### Authentication #######, al cui interno faremo le seguenti modifiche:
- Togliere il commento alla linea security = share
- aggiungere in coda alla sezione:
- Togliere il commento alla linea security = share
obey pam restrictions = yes
guest account = guest
invalid users = root
E poi un blocco relativo al vostro HD (che nel nostro casosi chiama SAMSUNG ed è montato nella cartella /media/samsung):
[SAMSUNG]
comment = un commento qualunque
read only = no
locking = no
path = /media/samsung
guest ok = yes (!!)
force user = pi (!!)
- riavviare samba
- riavviare samba
Comando: $sudo service samba restart
e abbiamo finito.
Conclusioni
le operazioni descritte, che forse ad alcuni poco pratici di Linux potrebbero sembrare complesse, sono in realtà piuttosto semplici e veloci. Il risultato finale, anche nel caso in esame che sfortunatamente presentava due HD formattati NTFS, è un NAS in grado di fornire uno streaming full HD anche contemporaneo su due PC.
Se di interesse di qualcuno, posso integrare questa guida con le istruzioni sull'utilizzo la Raspberry come servizio di DNS dinamico, come server FTP, come server SVN ed anche come downloader Torrent.