[16-04-2020 19:44] Ho modificato la guida in modo che contemplasse due casistiche: la configurazione automatica se si può lavorare con l'interfaccia grafica del Raspberry oppure la configurazione manuale se si lavora tutto da terminale.
Vediamo allora oggi come impostare il nostro fidato Raspberry per effettuare in tutta autonomia il backup dei dati importanti (nel caso più comune la cartella di Cumulus, nel mio caso anche il database MySQL e la cartella di Apache) nel cloud drive più utilizzato da anni ormai: Google Drive!
Le strade che si possono prendere sono due: se potete connettervi all'interfaccia grafica del Raspberry (tramite monitor collegato alla porta HDMI oppure tramite VNC o simili) è possibile saltare il PASSAGGIO 1, altrimenti se lavorate tramite SSH non è possibile fare l'auto-configurazione del software che andremo ad installare perciò sarà necessario fare una configurazione manuale. In questo caso, come vedrete, i passaggi sono molto semplici ma non sono pochi perché è necessario prima di tutto abilitare le API di Google Drive per permettere al nostro Raspberry di accedervi, poi lo configureremo per effettuare il backup dei dati. A grandi linee serviranno circa 40/50 minuti (oppure 30 se fate l'auto-configurazione) per eseguire tutte le operazioni (compresi i tempi di attesa) quindi prendetevi del tempo e vedrete che poi non ve ne pentirete!
Quindi se puoi usare l'interfaccia grafica del Raspberry passa subito al PASSAGGIO 2, altrimenti segui tutta la guida...
PASSAGGIO 1
Iniziamo subito con Google Drive: dal proprio browser colleghiamoci con il nostro account Google a https://console.developers.google.com/
Accettiamo le condizioni e clicchiamo su Seleziona un progetto, poi su NUOVO PROGETTO, nella finestra che ci si apre mettiamo come nome my-rclone-access e clicchiamo su SALVA.
Attendiamo che il progetto venga creato, poi clicchiamo in alto su Abilità API e servizi, cerchiamo drive e selezioniamo Google Drive API, nella pagina che comparirà cliccheremo su Abilita.
Torniamo indietro cliccando sull’immagine di Google APIs (ora "Google Cloud Platform") in alto a sinistra e andiamo nella sezione Schermata consenso OAuth (ora "API e Servizi" poi "Schermata di consenso OAuth"), selezioniamo Esterno e facciamo clic su CREA.
Compiliamo il campo nome applicazione con my rclone [/b][/i] (ora oltre al nome va inserita la propria mail nella casella "Email per assistenza utenti" e "Informazioni di contatto dello Sviluppatore", clicchiamo poi su "Salva e Continua". Ora nella videata successiva clicchiamo su "Aggiungi Ambito") e più in basso nella parte Ambiti per API di Google clicchiamo su Aggiungi ambito
Clicchiamo ora sulla spunta vicino a ../auth/drive e poi su AGGIUNGI. (qui è cambiato abbastanza, sfruttando la casella di ricerca andiamo a trovare drive e spuntiamo "Google Drive API", poi clicchiamo su "Aggiorna" e poi su "Salva e Continua". Nella videata successiva cliccare su "Add Users" e inserire di nuovo la propria mail, concludere con "Salva e Continua". Finito, far scorrere il riepilogo e cliccare "Torna alla Dashboard".)
Scorriamo fino in fondo alla pagina e salviamo.
A questo punto ci siamo quasi, dobbiamo solo creare le credenziali di accesso, clicchiamo quindi su Credenziali a sinistra, poi su CREA CREDENZIALI e infine su ID Client OAuth. Come tipo di applicazione scegliamo Applicazione desktop e come nome my rclone client, cliccando su CREA vengono generate le credenziali: ID client e secret client che salviamo in un documento di testo per utilizzarle successivamente.
PASSAGGIO 2
Ora passiamo al Raspberry! Apriamo il terminale e iniziamo con un aggiornamento (se necessario), perciò
Codice: Seleziona tutto
sudo apt update
sudo apt upgrade
Ora installiamo il client che si occuperà di connettersi a Google Drive: rclone
Codice: Seleziona tutto
sudo apt-get install rclone
Terminata l’installazione andiamo a configurare rclone per accedere a Google Drive. Una piccola precisazione: rclone genera un file di configurazione per ogni utente, quindi dobbiamo decidere se vogliamo configurare rclone per funzionare con l’utente “pi” oppure con “root”. Siccome dovremo poi effettuare delle operazioni pianificate tramite la crontab è molto meglio impostare rclone con l’utente root, quindi lanciamo
Codice: Seleziona tutto
sudo rclone config
Se tutto è andato a buon fine uscirà questo:
Codice: Seleziona tutto
NOTICE: Config file "/root/.config/rclone/rclone.conf" not found - using defaults
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q>
Scegliamo n e diamo invio…
Al passaggio successivo indichiamo come nome gdrive, nel dare invio ci verrà fuori questa videata:
Codice: Seleziona tutto
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
1 / A stackable unification remote, which can appear to merge the contents of several remotes
\ "union"
2 / Alias for a existing remote
\ "alias"
3 / Amazon Drive
\ "amazon cloud drive"
4 / Amazon S3 Compliant Storage Providers (AWS, Ceph, Dreamhost, IBM COS, Minio)
\ "s3"
5 / Backblaze B2
\ "b2"
6 / Box
\ "box"
7 / Cache a remote
\ "cache"
8 / Dropbox
\ "dropbox"
9 / Encrypt/Decrypt a remote
\ "crypt"
10 / FTP Connection
\ "ftp"
11 / Google Cloud Storage (this is not Google Drive)
\ "google cloud storage"
12 / Google Drive
\ "drive"
13 / Hubic
\ "hubic"
14 / JottaCloud
\ "jottacloud"
15 / Local Disk
\ "local"
16 / Microsoft Azure Blob Storage
\ "azureblob"
17 / Microsoft OneDrive
\ "onedrive"
18 / OpenDrive
\ "opendrive"
19 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
\ "swift"
20 / Pcloud
\ "pcloud"
21 / SSH/SFTP Connection
\ "sftp"
22 / Webdav
\ "webdav"
23 / Yandex Disk
\ "yandex"
24 / http Connection
\ "http"
Storage>
Digitiamo ora il numero relativo a Google Drive (nel mio caso è 12) e diamo invio
Ora le strade si dividono: se hai fatto il PASSAGGIO 1 dovrai inserire a questo punto il client id e il client secret che avevamo salvato precedentemente, andiamo di copia e incolla e poi facciamo invio, se non hai fatto il PASSAGGIO 1 premi semplicemente invio sia alla richiesta del client id che a quella del client secret. Dando invio verrà mostrato questo:
Codice: Seleziona tutto
Scope that rclone should use when requesting access from drive.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
1 / Full access all files, excluding Application Data Folder.
\ "drive"
2 / Read-only access to file metadata and file contents.
\ "drive.readonly"
/ Access to files created by rclone only.
3 | These are visible in the drive website.
| File authorization is revoked when the user deauthorizes the app.
\ "drive.file"
/ Allows read and write access to the Application Data folder.
4 | This is not visible in the drive website.
\ "drive.appfolder"
/ Allows read-only access to file metadata but
5 | does not allow any access to read or download file content.
\ "drive.metadata.readonly"
scope>
Scegliamo 1 per avere l’accesso completo, si potrà perciò sia scrivere che leggere i file presenti sul nostro Drive, quindi avremo un collegamento bidirezionale!
I due passaggi successivi (root_folder_id e service_account_file) lasciamoli vuoti, perciò clicchiamo subito su invio senza digitare nulla. A questo punto verranno fatte poi due richieste dove è necessario rispondere positivamente o negativamente, rispondiamo alla prima con n, alla seconda con n se abbiamo inserito il client id e il client secret, altrimenti inseriamo y
Codice: Seleziona tutto
Edit advanced config? (y/n)
y) Yes
n) No
y/n> n
Remote config
Use auto config?
* Say Y if not sure
* Say N if you are working on a remote or headless machine or Y didn't work
y) Yes
n) No
y/n>
Se si ha risposto positivamente alla auto config verrà mostrato questo:
Codice: Seleziona tutto
If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth
Log in and authorize rclone for access
Waiting for code...
Got code
Connettiamoci alla pagina mostrata tramite il browser del Raspberry e inseriamo la nostra mail e password di Google, confermiamo l'autorizzazione all'accesso da parte di rclone al nostro Drive e verrà mostrata questa pagina:
Altrimenti se si sono inseriti client id e client secret ora va consentito l’accesso all'applicazione tramite browser, verrà mostrato un link che inizia con “https://accounts.google.com/o/oauth2/ ...”, copiamo questo link nel nostro browser e seguiamo le istruzioni che ci vengono date (Novità: premere su "Continua" al messaggio di sicurezza che ci viene presentato, poi spunta su "Visualizzare, Modificare..." e poi "Continua")(sarà necessario consentire l’accesso da parte di rclone al nostro Drive), rispondiamo positivamente e alla fine verrà rilasciato un codice di verifica, lo copiamo e lo incolliamo a terminale.
Ora sia con la configurazione manuale che con quella automatica saremo arrivati a questo punto:
Codice: Seleziona tutto
Configure this as a team drive?
y) Yes
n) No
y/n> n
Scegliamo n. Hai ufficialmente finito la configurazione! Verrà mostrato ora una videata di recap tipo questa:
Codice: Seleziona tutto
--------------------
[gdrive]
type = drive
client_id = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
client_secret = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
scope = drive
token = {"access_token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxx","token_type":"Bearer","refresh_token":"xxxxxxxxxxxxxxxxx",
"expiry":"2020-01-23T16:21:03.502362868-07:00"}
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d>
Confermiamo la creazione del nostro collegamento remoto e alla pagina successiva possiamo uscire dalla configurazione con q.
Ora possiamo provare che tutto sia andato a buon fine digitando
Codice: Seleziona tutto
sudo rclone ls --max-depth 1 gdrive:
Dovrebbe uscirci a video il contenuto della root del nostro Drive.
Ora possiamo impostare il file di backup, nella nostra home creiamo un nuovo file con
Codice: Seleziona tutto
sudo touch auto_backup.sh
Diamo i privilegi massimi con
Codice: Seleziona tutto
sudo chmod 777 auto_backup.sh
E apriamo il nostro file con
Codice: Seleziona tutto
sudo nano auto_backup.sh
Andiamo ora ad aggiungere questo nel file:
Codice: Seleziona tutto
#!/bin/bash
Sudo rclone copy /home/pi/CumulusMX/ gdrive:/backup_raspberry/CumulusMX/
echo "backup completato con successo!"
date
Questo file possiamo modificarlo a piacimento inserendo anche il backup di altre cartelle e, con un po' di lavoro in più anche di database MySQL e altro (se vi serve fatemi sapere che aggiungo sotto anche questa parte). Salviamo con CTRL+O e usciamo con CRTL+X
Ora andiamo a provare che tutto funzioni, lanciamo quindi
Codice: Seleziona tutto
sudo ./auto_backup.sh
Lasciamo lavorare il Raspberry e dopo poco dovrebbe uscire a video solo la stringa backup completato con successo! e la data e ora attuale
se ci sono degli errori probabilmente bisogna variare la cartella sul proprio Raspberry con quella corretta, facendo attenzione che se si vuole copiare la cartella è necessario mettere nei due percorsi sopra alla fine anche la “/”, se si vuole copiare un solo file no. Verifichiamo che sul nostro Google Drive sia stata creata la cartella backup_raspberry e che al suo interno ci sia il nostro backup.
Se tutto è andato a buon fine ora è il momento di automatizzare l’operazione per dimenticarsene e dormire sereni. Digitiamo ora
Codice: Seleziona tutto
sudo crontab -e
Scegliamo nano come editor (se non è stato già fatto) e aggiungiamo questa riga:
Codice: Seleziona tutto
0 0 * * * sudo /home/pi/auto_backup.sh > /home/pi/auto_backup.log
Così facendo se ci saranno degli errori verranno salvati in un file di log nella nostra home. Salviamo con CRTL+O e usciamo con CRTL+X e ogni giorno a mezzanotte verrà fatto il backup su Google Drive del nostro Raspberry! Comodo, no?
Grazie ad Anubis che mi ha permesso di approfondire i suoi problemi con rclone e creare questa guida!
In realtà rclone, come avrete intuito nella configurazione, è in grado di connettersi con molti altri servizi. Io, ad esempio, ho configurato anche il backup sul mio NAS Synology così ho sia un backup in cloud che uno a casa, se serve anche a voi posso integrare anche con questo!