Archivi tag: raspberry-pi

owncloud raspberry hdd raid

Creare un Cloud Aziendale con il Raspberry Pi

componenti owncloud raspberryVi ricordate l’articolo di qualche tempo fa in cui vi raccontavo come creare un CLOUD personale mediante Raspberry Pi e in particolare di come effetuare un RAID tra due chiavette USB? Beh dimenticatelo, è una CASTRONERIA immensa, che solo ad un pazzoide come me poteva venire in mente. Le chiavette USB sono memorie volatili, non utili per salvare a tempo immemore i dati (e in effetti nemmeno gli HDD, ma almeno un po’ più di autonomia la offrono). Il resto dell’articolo però non era tutto errato, è possibile creare un CLOUD mediante Raspberry e utilizzarlo in ambito aziendale e a questo proposito foto e tutorial per spiegarvi come ho creato una nuvoletta personalizzata per un’azienda che recentemente mi ha commissionato questo progetto.

Ma procediamo per gradi.

MISSION: Creare una directory di scambio documenti (Excell, Word, Immagini e PDF) tra 7 centri dislocati tra Italia e Svizzera gestiti e amministrati da un “super utente” dislocato a Torino (mediante operazioni su cartella senza che vengano richieste competenze particolari).

pinza crimpatrice rj45

MATERIALE NECESSARIO:

  • Raspberry Pi
  • Scheda SD per il sistema operativo
  • Alimentatore per raspberry
  • 2 HDD (li ho presi da 500GB) e relativa enclousure alimentata
  • Cavo di rete (crimpato per l’occasione in modo da poterlo collegare al router aziendale)
  • Cavo di alimentazione da trasforare in ciabatta a cui collegare i 3 dispositivi
  • APC UPS o Gruppo di continuità a cui collegare il tutto
  • Vecchio case da PC in cui inserire i vari componenti per non lasciarli a prendere polvere

SOFTWARE NECESSARIO:

ORDINE DELLE OPERAZIONI:

  • Montare i due HDD nei rispettivi case e controllare che funzionino, per comodità una volta terminato il check formattarli e partizionarli in ext4 (è possibile effettuare questa operazione sia da Linux con il comando fdisk che da windows direttamente da sistema o utilizzando uno dei millemila tool a disposione)
  • Installare OS, pacchetti aggiuntivi (APACHE, PHP5, SQLITE, PACCHETTI DIPENDENTI e OWNCLOUD come vedremo di qui a poco) sul raspberry pi
  • Effettuare RAID tra i due HDD
  • Testare il funzionamento, smontare e rimontare il CLOUD all’interno del contenitore che vorremo utilizzare per tenere i vari componenti uniti (conviene effettuare questa operazione solo dopo aver testato il software per essere sicuri che tutto funzioni senza dover riaprire per cambiare qualche pezzo con problemi di funzionamento, dico questo dopo aver installato 4 volte l’OS sulla scheda SD senza capire dove era il problema del non funzionamento rendendomi conto solo dopo di usare una piastra Raspberry bruciata tempo fa nel corso dei miei vari esperimenti sull’overclock e i dissipatori)
  • Collegare il nostro nuovo CLOUD al gruppo di continuità e alla rete (necessaria connessione internet con IP fisso) e settare le regole di forwarding del router in modo che su una porta da noi scelta la connessione internet venga instradata verso il nostro Raspberry
  • Configurare i Client (vi consiglio di effettuare da voi la configurazione mediante desktop remoto per non comunicare passwd che potrebbero confondere gli utenti)

CONFIGURAZIONE DEL CLOUD

Bene, una volta che abbiamo montato gli HDD, incominciamo a preparare le operazioni per installare Raspbian sulla nostra scheda SD. Naturalmente non è obbligatorio utilizzare questo OS tra i vari proposti dal sito principale del nostro Raspberry, ma vi dirò dopo averli provati un po’ tutti mi sembra il migliore e il più stabile tra quelli proposti.

La guida ufficiale da seguire è quella proposta da instructables.com, ma vi consiglio di non scaricare l’immagine che propongono in quanto ha già pacchetti precompilati all’interno (in particolare relativi al server Apache e a SSL) che vanno in conflitto con le spiegazioni che propongono (mi han fatto impazzire un bel quarto d’ora e proprio per questo mi appresto a creare questo tutorial).

Di mio per le prime operazioni ho utilizzato un computer con Windows 7 per poi continuare la configurazione direttamente sul nostro Raspi utilizzando Putty (o se preferite Kitty). Una guida la potete trovare (in italiano per chi vuole!) su raspberry.org, ma la riporto qui per comodità (mia nel caso di future installazioni ;p):

  • Scarica l’immagine necessaria come dal link che vi propongo poco prima nella sezione SOFTWARE NECESSARIO
  • Inserisci la scheda SD in una porta dedicata o utilizza HUB per SD USB e formatta la scheda SD (utile a questo proposito SD Formatter)
  • Scarica WIN32DiskImager, scompattalo e eseguilo, seleziona l’immagine di Raspbian scaricata e scompattata in una Directory (o come si usa dire ora in Italiano Cartella… bah) e premi su Write e attendi la fine delle operazioni segnalate da una nuova finestra su cui dovremo premere su OK
  • Scollega la scheda, inseriscila nel raspberry pi, collegalo alla rete dai alimentazione con l’alimentatore e con Putty (è necessario capire che indirizzo IP gli è stato assegnato dal vostro DHCP server, nel mio caso il router, gli ha assegnato) effettua il primo accesso. Nome utente Pi, passwd: raspberry

Bene siamo pronti per incominciare, fai un bel respiro (fiuu) fai partire Pandora per creare atmosfera (consiglio Karl Jenkins) e…. si va!

Al primo avvio verrà eseguito in automatico il comando Raspi-config (nel mio caso l’ho utilizzato al volo per overcloccare il raspberry portandolo a 900 Mhz giusto per avere un attimo più di velocità) effettua reboot del dispositivo e ricollegati al Raspberry con Putty.

Da qui in poi per le cose che non capite guardate gli screenshot su instructable, utili e per i niubbi direi necessarie!

Modifica subito la rete in modo che il raspberry pi abbia indirizzo IP statico (necessario, serve a far si che l’IP non cambi mai nel caso di blackout e riavvi vari e che il nostro microserver si avvii molto più velocemente):

$ sudo nano /etc/network/interfaces

e inserisci i nuovi valori (in funzione di come hai configurato la tua rete aziendale):

auto lo
auto eth0
iface eth0 inet static
address 192.168.1.XXX
gateway 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255

premi su CTRL + O (salva) e CTRL + X (esci dall’editor). Riavvia la rete del Raspberry per far si che i cambiamenti abbiano effetto:

$ sudo /etc/init.d/networking restart

Ora aggiorna i software del nostro OS:

$ sudo apt-get update

Ora installiamo il software necessario per creare il nostro server Apache su cui far girare il nostro Cloud (vi consiglio di copiare e incollare in putti questa stringa per non doverla riscrivere da capo, pur con l’ausilio del completamento automatico dei comandi nativo di Linux con il tasto TAB):

$ sudo apt-get install apache2 php5 php5-json php5-gd php5-sqlite curl libcurl3 libcurl4-openssl-dev php5-curl php5-gd php5-cgi php-pear php5-dev build-essential libpcre3-dev php5 libapache2-mod-php5 php-apc gparted

Al fine di ottimizzare PHP installiamo l’estensione APC (Alternative PHP Cache):

$ sudo pecl install apc

E andiamo a dire al nostro motore PHP di utilizzarla creando un file .ini:

$ sudo nano /etc/php5/cgi/conf.d/apc.ini

E inserendo i seguenti dati:

extension=apc.so
apc.enabled=1
apc.shm_size=30

Salviamo e chiudiamo il file come prima con CTRL + O e CTRL + X

Ora andiamo a cambiare i valori di upload_max_filesize, post_max_size del nostro server Apache al fine di aprire l’upload di file sul cloud a dimensioni esagerate (1 GB di file!!!). Per far questo editiamo php.ini:

$ sudo nano /etc/php5/apache2/php.ini

E impostiamo i valori sui rispettivi dati:

upload_max_filesize=1024M

post_max_size=1200M

Per muovervi direttamente alla riga necessaria all’interno del file php.ini vi consiglio di utilizzare l’utile funzione di nano trova con il comando CTRL + W

Aggiungiamo al nostro php.ini l’estensione per APC, quindi spostiamoci nel file nella sezione delle estensioni (extension=) e aggiungiamo la riga:

extension=apc.so

Salviamo e chiudiamo (devo inserire di nuovo i comandi di nano? Dai su che ora li avete imparati!)

Configuriamo Apache per abilitare SSL (lo fa Google con le query di ricerca perchè non possiamo farlo anche noi? ;p)

$ sudo nano /etc/apache2/sites-enabled/000-default

E modifichiamo i valori di Allow over ride da All a None e configuriamo SSL

$ sudo a2enmod rewrite

$ sudo a2enmod headers

Concludiamo quindi la configurazione di SSL come ci propone instructable:

$ sudo openssl genrsa -des3 -out server.key 1024; sudo openssl rsa -in server.key -out server.key.insecure;sudo openssl req -new -key server.key -out server.csr;sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt;sudo cp server.crt /etc/ssl/certs;sudo cp server.key /etc/ssl/private;sudo a2enmod ssl;sudo a2ensite default-ssl

Mi raccomando nel fornire la passprase nel tenerla a memoria! Riavviamo quindi il nostro nuovo web server Apache:

$ sudo service apache2 restart

Ed ora possiamo finalmente scaricare owncloud. Vi consiglio, a differenza di come fa instructable che fa riferimento ad un indirizzo non più presente su www.owncloud.org di utilizzare l’utima versione del software (la 5.x in quanto la 4.x ha alcuni problemi con le directory condivise):

$ wget http://download.owncloud.org/community/owncloud-latest.tar.bz2

Procediamo con la decompressione dell’archivio:

$ sudo tar -xjf owncloud-x.x.x.tar.bz2 e qui vi consiglio di utilizzare il completamento automatico dei comandi a cura del tasto TAB in quanto potrebbe essere differente la versione di Owncloud che andate ad installare da quella che ho installato io.

Ora potete procedere a copiare la cartella nella web root del vostro server Apache presente sul Raspberry:

$ sudo cp -r owncloud /var/www

Diamo i permessi al nostro web server di accedere ai file e alla relativa directory (o cartella se proprio vogliamo usare sto windowismo)

$ sudo chown -R www-data:www-data /var/www/owncloud/

Modifichiamo i valori del nostro file .htaccess e settiamoli come quelli inseriti all’interno del file php.ini per far si che possiamo effettuare upload di file di dimensioni pari ad 1 GB:

$ sudo nano /var/www/owncloud/.htaccess

Ci fermiamo un attimo, modifichiamo la musica che stiamo ascoltando su Pandora (non è che sia necessario, ma dopo un po’ Karl Jenkins potrebbe annoiare e di mio passerei ai Chumbawamba), e incominciamo a configurare il raid tra i due HDD che immagazzineranno i dati del CLOUD.
In questo caso la guida di riferimento è quella di Davidhunt, ma al posto di usare 3 HDD ne andiamo ad usare “solo” due.

Partiamo dal presupposto che abbiate già partizionato in unica partizione (identica fra i due hdd, identici fra loro) e l’abbiate formattata in Fat32. Colleghiamo gli hdd ognuno in una delle due porte USB del nostro Raspberry (mi raccomando che siano autoalimentati o vi si bruceranno quanto prima) e monitoriamo come vengono visti dal nostro raspy:

$ sudo cat /proc/partitions

In genere ne troviamo uno in sda1 e l’altro in sdb1

Installiamo mdadm con cui effettueremo il raid:

$ sudo apt-get install mdadm

Ed effettuiamo il raid tra i due hdd ottendone uno nuovo secondo la semplice equazione 1 + 1 = 1 (ossia ciò che scrivo su uno lo scrivo su due):

$ sudo mdadm –-create /dev/md0 –-level=mirror –-raid-devices=2 /dev/sda1 /dev/sdb1

E controlliamo che nasca il nuovo drive:

$ sudo cat /proc/partitions e controlliamo che esista md0 delle stesse dimensioni dei nostri due hdd

Creiamo quindi un filesystem in questo nuovo hdd virtuale:

$ sudo mkfs /dev/md01 -t ext3

Ed effettuiamo un veloce test per vedere se funziona questa nostra nuova partizione:

$ sudo mount /dev/md01 /mnt
$ sudo cd /mnt
$ sudo mkdir test
$ sudo rm -rf test/

Ora aggiungiamo una regola ad fstab per far si che ad ogni avvio del raspberry in automatico si monti questa nuova partizione:

$ sudo nano /etc/fstab e aggiungiamo la riga:

/dev/md01 /mnt/raid ext3 defaults 0 2

Riavviamo il raspberry e continuamo con l’installazione del nostro cloud seguendo il tutoria su instructables.com da dove l’avevamo interrotto:

$ sudo shutdown -r now

Riaccediamo con putty al nostro raspberry e creiamo una directory per i dati del cloud nella partizione raid e diamo possibilità al nostro server di accedere a questa nuova directory (e se volete chiamarle cartelle fatti vostri ma non chiamatemi):

$ sudo mkdir /mnt/raid/data/
$ sudo chown -R www-data:www-data /mnt/raid/data/

Ora puntiamo il browser all’ip a cui abbiamo configurato il nostro raspberry e completiamo la procedura di installazione del nostro cloud creando l’utente amministratore con relativa passwd e cambiando la directory di default per la cartella data a quella creata precedentemente (/mnt/raid/data/).

Ed ora arriva la parte davvero divertente, montare tutto in un nuovo case.

ASSEMBLIAMO FISICAMENTE IL CLOUD:

Necessari all’operazione:

componenti owncloud raspberry

  • Case svuotato per l’occasione e pulito da ogni traccia di polvere e sporcizia che non fa mai bene alle apparecchiature elettroniche
  • Raspberry con Owncloud installato e relativo alimentatore
  • I 2 HDD in raid e relativi alimentatori
  • Fascette elettriche, che come direbbe il signor Claudio Stefani (uno dei migliori attrezzisti di set del mondo del cinema Italiano) fanno meno male del banale e oramai datato fil di ferro
  • Pazienza, garbo, cura e buona musica.
  • Cavo ethernet e pinza crimpatrice per cablare il cavo di rete

giuntare fascetta elettrica

Iniziamo a preparare le fascette per fissare il raspberry, se non sono abbastanza lunghe giuntiamole come da figura.

raspberry in case

Piazziamo il raspberry in modo che la scheda sd sia poi accessibile dall’esterno:

accesso sd raspberry

Nel caso di future manutenzione o sostituizioni della stessa.

hdd raspberry raid

Piazziamo i 2 HDD e controlliamo che ci stiano i relativi alimentatori

cloud raspberry all component

Procediamo a fascettare e bloccare i cavi per non farli muovere in caso di trasporto del server fino ad ordinare tutto all’interno.

COSA MANCA?

Rimane tutta la parte relativa alla configurazione degli account, alla creazione di una directory condivisa e alla configurazione dei client, vi rimando però ad un prossimo articolo, questo mi sembra già parecchio lungo… e diciamocelo vi avrò decisamente annoiato!