Avere iniziato ad usare il pc alla fine degli anni ’80 ha un pregio: l’interfaccia grafica è per me una aggiunta e la riga di comando (Command Line Interface o CLI per fare prima) una vecchia amica. Ho una serie di appunti su programmi senza interfaccia grafica che uso normalmente per risolvere problemi noiosi e che vorrei propinarvi, ma oggi devo finire un trasferimento del server resettando i backup su Google Drive ed ho pensato di fissare il tutto in tempo reale.
La premessa è molto semplice: avete un server web, a cui potete accedere anche via shell (usando appunto la CLI) e uno script che vi fa a cadenza regolare il backup del database e delle cartelle nel server stesso, ma volete spostare questi backup in un altro server dove saranno al sicuro in caso di seri problemi della macchina. Non entro nel dettaglio sui backup automatici che le web-farm sane fanno, intesi come ripristino della macchina intera. Nel caso del server in oggetto, il database compresso è 15MB e la struttura delle cartelle principali 2GB, un po’ difficile da spedire per email, perciò ho pensato di usare un servizio che avevo a disposizione, Google Drive, e caricare lì i file del backup. Questo servizio può essere sincronizzato con il vostro computer grazie alla app relativa, oppure si possono caricare i file direttamente. Il problema è che se io scarico 2GB sul mio pc e poi li ricarico sul mio Drive i tempi sono infiniti, visto il limite in upload della mia ADSL. Da qui la necessità di caricare il file nel Drive direttamente dal server web. Google purtroppo non offre alcuna applicazione che possa funzionare da CLI, ma come sempre non sono la prima ad avere una simile necessità e quindi ecco a voi GDrive ovvero Google Drive Command Line Interface. Non c’è bisogno di saper smanettare o compilare per usare questo programma, dovete solo individuare i file binari precompilati pronti per il vostro sistema operativo, nel mio caso “gdrive-linux-x64” (linux a 64bit), e caricarli nel vostro server seguendo le istruzioni originali o la mia versione semplificata per utenti normali (non superuser). Visto che stiamo lavorando sulla shell del server e probabilmente accediamo alla nostra cartella utente (quella con la tilde ~), invece di scaricare il file nel pc e poi ricaricarlo, possiamo fare il download direttamente usando il comando wget
(non è sempre installato ma se lo è molto comodo). Il primo passo è copiare il link del file da scaricare (su Windows con Chrome tasto destro e copia link collegamento) e poi scrivere sulla linea di comando
wget -O gdrive https://docs.google.com/uc?id=0B3X9GlR6EmbnQ0FtZmJJUXEyRTA&export=download
dove la parte che comincia con https è il link che avete copiato: wget NON rinomina i file che scarica come fa un normale browser, per evitare di trovarvi un file, come nel mio caso, che si chiama “uc?id=0B3X9GlR6EmbnQ0FtZmJJUXEyRTA&export=download” ho preferito cambiare il nome in un più immediato “gdrive”. Avrei potuto chiamarlo “gdrive-linux-x64” ma dato che poi il nome del file è quello che userò per i comandi, sono per le cose semplici. Vi sconsiglio di copiare il comando sopra così com’è, è meglio copiare il link aggiornato anche se usate linux a 64 bit dalla pagina di prima, perché l’autore potrebbe aver aggiornato i binari. A questo punto avete un file abbastanza inutile se non lo abilitate all’esecuzione:
chmod +x gdrive
Se siete superuser e gli UNICI utenti del server potete spostarlo in una delle cartelle di sistema
sudo mv gdrive /usr/local/bin/
ma ricordate che chiunque acceda alla macchina, una volta abilitato, può operare col vostro Google Drive, per cui se la macchina è multiutente o semplicemente non avete possibilità di essere superuser, il posto per i programmi è la cartella bin
del vostro account. Dato che non posso fare un corso accelerato di linux in un post su gdrive, create la cartella bin se non esiste e metteteci gdrive dentro.
mkdir bin mv gdrive bin/
A questo punto non vi resta che abilitarlo a caricare file sul vostro Google Drive, lanciando il comando una prima volta:
gdrive about
se tutto è corretto, vi verrà fornito un lungo indirizzo web da copiare (se usate Putty vi basterà selezionare) e visitare sul vostro browser e da cui otterrete la chiave, da copiare e incollare nella shell per attivare il collegamento. Potete controllare il collegamento fra GDrive ed il vostro Drive sotto le impostazioni (ingranaggio in altro a destra) alla voce “Gestisci applicazioni”
A questo punto dovremmo essere in grado di caricare i file nel nostro Drive direttamente dalla linea di comando
gdrive upload nomefile
e verificare che il file risulti caricato nella vostra cartella base del Drive. Ovviamente caricare tutto in radice ha poco senso, per cui potete decidere di caricare su una cartella, tenendo presente che il Drive gestisce tutti i nomi di file o cartelle con un id e non con il nome che avete assegnato. Pertanto, se volete caricare in una cartella, dovete ricavarne l’id, che nel caso delle cartelle è l’ultima parte dell’indirizzo web che leggete nel browser, ma che probabilmente fate prima a chiedere direttamente tramite GDrive:
drive list -q "mimeType = 'application/vnd.google-apps.folder' and name contains 'backup'"
Questo comando permette di avere l’elenco delle directory che contengono il termine “backup” nel nome. L’id è una sigla del tipo 0A1BCdeFghILMNOpqR3S4tuvWXyZ
ed è univoco per ogni file o cartella e ovviamente vi serve quello della cartella dove andrete a caricare i file.
gdrive upload --parent 0A1BCdeFghILMNOpqR3S4tuvWXyZ nomefile
A questo punto non vi resta che mettere questo comando in calce allo script che usate per il backup, sostituendo l’id con quello corretto e nomefile con il vero nome del file o della variabile che indica il file di backup, completo di percorso assoluto se necessario, e il gioco è fatto!