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!

Condividi e consiglia questo articolo!

    14 pensieri su “Creare un Cloud Aziendale con il Raspberry Pi

    1. Francesco

      Ciao!
      Ho seguito la tua guida e fino alla fine non ho avuto problemi quindi ti faccio i complimenti per la chiarezza della guida.
      Proprio quando devo dare il permesso al server di accedere alla directory data (quindi quando vado a dargli il comando $ sudo chown -R www-data:www-data /mnt/raid/data/ ) mi da questo errore:

      chown: changing ownership of /mnt/raid/data/ Operation not permitted.

      Ho provato anche da root a cambiare tutti i permessi insomma le ho provate tutte ma continua a darmi lo stesso errore. Hai qualche consiglio da darmi su come risolvere questo problema?
      Grazie,
      Francesco

      Rispondi
      1. Pino Autore articolo

        Ciao Francesco e grazie mille per i complimenti!

        Mi spiace per il problema in cui sei incappato, domani, con un po’ di tempo a mia disposizione, provo ad analizzare la situazione e a vedere se riesco a proporti una soluzione.

        Rispondi
        1. Francesco

          Allora sono riuscito a risolvere il problema che molto probabilmente era legato alla formattazione della chiavetta in FAT32 infatti formattandola in ext4 non mi ha dato alcun problema.
          Ovviamente dopo aver settato tutto owncloud sono incappato in un altro problema che provo ad esporti per vedere se hai qualche consiglio da darmi.
          Se mi connetto dalla rete di casa owncloud funziona perfettamente ma se invece provo a cambiare rete quando digito https://192.168.x.x/owncloud non riesco a connettermi in alcun modo alla pagina di accesso di owncloud.
          Qualunque idea è ben accetta anche perché penso che questo problema sia legato alle porte di accesso del router cosa in cui non sono molto portato.
          Grazie mille per la tua disponibilità,
          Francesco

          Rispondi
          1. Pino Autore articolo

            Bravo Francesco! Hai appena vinto un aggiornamento della guida, ho ricontrollato e avevo scritto una castroneria, ora ho corretto!
            Ma quindi mi sembra di capire che stai lavorando su due chiavette usb?
            Attenzione che le usb hanno una memoria volatile e dopo un tot di scritture smettono di funzionare! Dalla mia esperienza lo sconsiglio, come puoi leggere dall’inizio di questo articolo

            Il problema di non riuscire a collegarti da esterno non è solo un problema di router.
            Il discorso è molto più lungo, provo a fartela breve: l’indirizzo del tuo raspy è 192.128.x.x in quanto è nella tua rete interna. Una volta che si esce dal tuo router si cambia l’ip. In funzione se è statico o dinamico varierà nel tempo o meno.
            Per poter accedere alla tua rete, o meglio al router (in quanto è il punto di accesso tra una rete, la tua e l’altra, internet) devi reperire l’ip che gli è stato assegnato dall’indirizzo: http://www.whatismyip.com/.
            Dopodichè devi fare un port forwarding nel router e dir lui che quando qualcuno punta al router su una determinata porta (http://whatisyourip:666) venga smistato sull’indirizzo ip interno del tuo raspberry (192.168.x.x).
            Se il tuo ip varia ad ogni riavvio del router o ogni sera (ip dinamico) è necessario utilizzare, se il tuo router lo supporta, un servizio tipo http://www.dyndns.org (io lo uso per collegarmi a casa dove l’ip è dinamico, nell’azienda in cui ho installato questo cloud l’ip è statico e non hanno problemi perchè ho installato il client sulle macchine che si collegano al cloud e di conseguenza non devono conoscere l’ip).
            In caso di ip dinamico nattato il servizio di Dyndns non funziona, e così al volo non so neppure dirti se funziona il port forwarding. Devi perciò controllare il tuo provider di adsl cosa ti fornisce.

            In sintesi quello che devi fare è per fare il primo test è:
            Documentarti sulla tua connessione adsl e scoprire il tuo ip
            Fare un port forwarding sul tuo router verso il raspberrry
            Puntare a quell’indirizzo + directoy owncloud -> http://whatisyourip:666/owncloud il browser del dispositivo esterno alla tua rete.

            Spero di esser stato un minimo chiaro per averti dato modo di trovare i relativi tutorial con spiegato nel dettaglio come cimentarti in questa nuova esperienza. Ciao e buon lavoro!

            Rispondi
            1. Francesco

              Ok grazie mille sei stato molto chiaro e conciso!
              Diciamo che l’utilizzo delle chiavette è solo una prova iniziale per vedere come funziona e nel caso mi dovesse piacere monterei due hard disk come hai fatto tu!
              Stasera o domani mi metto al lavoro su come risolvere quest’ultimo problema e nel caso ci riuscirò ti farò sapere in modo tale da aiutare chi potrebbe avere lo stesso problema!
              Ti ringrazio ancora,
              Francesco

    2. cazy

      la guida mi sembra fatta bene e molto semplice da seguire nei vari passaggi, MA temo che se monti gli HDD in verticale prima o poi si rompono, meglio tenerli in orizzontale 🙂

      Rispondi
      1. Pino Autore articolo

        Grazie per i complimenti!

        Hai ragione, dipende però come metti il case 😀
        Di mio infatti ho girato poi il case in maniera che gli hdd rimanessero paralleli al terreno.
        Del resto il cloud è sistemato in uno stanzino in cui nessuno guarda, per cui non disturba gli amanti del “design”

        Rispondi
    3. crazy

      beh in questo caso… alzo le maini 🙂

      cmq complimenti per l’articolo, nelle prox settimane metterò in pratica quanto hai scritto

      ciao

      Rispondi
      1. Pino Autore articolo

        Grazie Crazy, comunque il tuo appunto è necessario e rimarrà qui a imperitura memoria per chi vorrà cimentarsi nel creare il suo personale cloud. Devo dire che io ne son ancora soddisfatto, del resto è sempre li che continua a funzionare.

        Ciao e ben vengano i contributi come il tuo!!

        Rispondi
    4. fabioi

      Ciao
      Ti ringrazio per la guida
      Ma ho un problema

      Mi esce questo messaggio di errore

      Can’t write into config directory!
      This can usually be fixed by giving the webserver write access to the config directory.

      Grazie per l’attenzione

      Rispondi
      1. Pino Autore articolo

        Prego fabioi, hai dato il permesso all’utenza del web server per la modifica dei file nella directory di owncloud? Si fa utilizzando il comando:

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

        Rispondi
    5. Loris

      Ciao Pino, ho lo stesso problema di Francesco ma non sono riuscito a risolvere il problema quindi ti chiedo qualche informazione in più.
      Da quello che capisco devo girare la porta 666 (dell’ip pubblico) verso la 666 (?) del mio Raspberry? e poi dall’esterno entrare tramite l’indirizzo:
      http://IPPUBBLICO:666/owncloud ? Se è così non mi funziona ma probabilmente ho capito male io. Grazie per la tua risposta.

      Loris

      Rispondi
      1. Pino Autore articolo

        Ciao Loris,

        no in realtà tu devi configurare il tuo router per rispondere su una determinata porta, ad esempio la 666. Poi questa porta la inoltri al tuo rapsberry in funzione dell’applicazione. Nel caso del cloud, che risponde sulla porta 80, lo farai girare su quella porta li.

        Rispondi
    6. LUIPEZ

      NAS NO CLOUD

      Vorrei fare quanto in questa guida da utilizzare come NAS.

      Ossia nel mio ufficio vorrei utilizzarlo come archivio continuo di dati.

      I due dischi in che RAID sono?

      A me interesserebbe un Raid di MIRRORING per la sicurezza dei dati.

      Fammi sapere quali modifiche apportare.

      Grazie

      Rispondi

    Lascia un commento

    Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *