DietPi: backup di Gmail con Got Your Back (GYB)

| |

Sto cambiando un po’ di carte in tavola, ho dismesso il mio storico e amato Raspberry Pi e quindi ho migrato tutto il necessario su una serie di macchine virtuali che vivono su un Proxmox installato su un Intel Nuc di undicesima generazione (Intel NUC 11 Performance kit e Proxmox). Ne approfitto per studiare un po’ Proxmox (che non conoscevo se non di nome) e perché le dimensioni assolutamente ridotte di un Nuc mi permettono di tenere in piedi un piccolo nodo fatto di più macchine virtuali, ognuna con un compito ben specifico e prestazioni superiori a quelle garantite dal Raspberry.

Ho cambiato anche il modo di portare in backup (e tenerlo costantemente allineato) tutto il contenuto della mia casella di posta elettronica Gmail, abbandonando di fatto il buon vecchio Gmvault in favore di Got Your Back (più comodamente identificato come GYB), anch’esso progetto open source disponibile su GitHub all’indirizzo github.com/GAM-team/got-your-back.

Got Your Back (GYB)

Gmail desktop app on MacBook.
Photo by Justin Morgan on Unsplash

Ho mantenuto parte della vecchia configurazione (NFS sul Synology e unità montata direttamente sulla nuova macchina virtuale DietPi con GYB sopra) e portato a bordo la nuova per installare e configurare GYB, un processo molto semplice che ha richiesto esclusivamente una piccola aggiunta a DietPi non prevista nativamente dal sistema:

sudo apt-get install xz-utils

Fatto ciò potrai passare direttamente all’esecuzione dello script di installazione previsto da GYB:

bash <(curl -s -S -L https://git.io/gyb-install)

Da qua in poi la procedura è totalmente guidata e – non avendo tu a disposizione un’interfaccia grafica e un browser sulla DietPi (vero?) – dovrai semplicemente copiare e incollare una serie di collegamenti su un PC vero e proprio (o su uno smartphone / tablet, anche se questa opzione non è particolarmente comoda) i quali ti verranno proposti per accompagnarti nella creazione di un’applicazione Google Cloud personalizzata, con accesso alla tua posta elettronica, che supporti esclusivamente il tuo utente e quindi la tua casella (a prescindere che questa sia registrata su Gmail.com standard o su un Google Workspace).

L’unica accortezza che dovrai avere sarà quella di andare a procurare e riportare alcune informazioni un pelo più “nascoste” (?) per chi si approccia per la prima volta alla console di Google Cloud. Nello specifico sto parlando di questo paragrafo della documentazione:

The instructions will ask you to supply Client ID and Client Secret without telling you how to find them though, so here’s how:
Once you’ve completed that flow, you will find yourself at the ‘APIs & Services’ Dashboard. Select ‘Credentials’, and ‘+ CREATE CREDENTIAL’. Now you can follow the instructions from GYB’s prompt.

Verification
You’ll need to register your app inside your Google account.
Any regular command will do it, but if you don’t want to immediately backup/restore, you can use a passive verification command:

gyb --email youremail@gmail.com --action estimate

except use your real email address in place of youremail@gmail.com. GYB will open up a web page in order for you to grant access to your Gmail account. This authorization makes it possible for GYB to connect to your Google Account for Gmail data only, GYB will have no rights to any of your other Google Data. Make sure you are logged in to the Google account you specified before granting access. Once you’ve granted access, switch back to the command prompt window and hit enter. If no errors are printed, GYB should start estimating the size of your Gmail mailbox. Note that GYB only estimates the size of messages in the All Mail folder, it does not check Spam or Trash although these do count against your Gmail quota displayed at the bottom of your Gmail inbox. To accurately compare GYB’s estimate and the Gmail inbox web page quota display, first empty your Trash and Spam folders.

Congratulations, you’re up and running with GYB! You probably want to move on to performing a backup now.

e – aggiungo – attenzione a data e ora del tuo sistema. Il mio DietPi era perfettamente allineato con il server NTP di Debian ma questo differiva di poco meno di un minuto rispetto all’orario dichiarato dai server di Google (e anche da Apple, mentre facevo il test dal mio MacBook), lo script falliva miseramente dicendo (appunto) che la differenza d’orario non era corretta e non mi permetteva di ottenere un token per accedere la mia casella di posta elettronica. Ho deciso di modificare il server NTP al quale la mia VM DietPi si rivolge e l’ho puntata a time.google.com (è pubblico, puoi usarlo pure tu), in alternativa puoi scegliere anche europe.ntp.pool.org, anch’esso ben allineato.

Al termine della configurazione guidata sarai pronto per lanciare il tuo primo backup completo. Quello che ho fatto io è stato sfruttare lo spazio disco a mia disposizione sul NAS, montato via NFS, e quindi impartire il comando a GYB passandogli anche la cartella di destinazione del backup:

gyb --email mario.rossi@gmail.com --local-folder "\\mnt\GmailBackup"

Dove mario.rossi@gmail.com andrà modificato con il tuo indirizzo di posta elettronica per il quale hai precedentemente configurato GYB e \\mnt\GmailBackup con la reale cartella montata sul tuo sistema. Questa operazione potrà durare molto tempo, tutto varia in base alla quantità di posta elettronica da portare in backup.

Certo è che – al termine del primo backup che sarà completo e prenderà tutto il tuo contenuto dall’alba di tempi a oggi – potrai smettere di lanciare il backup in questa maniera e chiedere a GYB di farne uno che prenda in esame solo gli ultimi 7 giorni (o anche meno), andando così a colmare le lacune e portare in backup i semplici delta, la differenza tra il backup corposo iniziale e quelle email che non fanno ancora parte del backup memorizzato nella tua cartella di destinazione:

gyb --email mario.rossi@gmail.com --search "newer_than:7d" --local-folder "\\mnt\GmailBackup"

Quel --search "newer_than:7d" è il filtro che ti permetterà di rendere l’operazione estremamente più snella e rapida, facilmente richiamabile anche da uno script bash che puoi poi inserire in Crontab andando così a programmare l’operazione affinché non richieda neanche più l’intervento umano.

#!/bin/bash
echo; echo "Backup Gmail"
MAILUSER="mario.rossi@gmail.com"
LOCALFOLDER="/mnt/GmailBackup"
#gyb --email $MAILUSER --local-folder $LOCALFOLDER
gyb --email $MAILUSER --search "newer_than:7d" --local-folder $LOCALFOLDER

Nell’esempio qui sopra ho utilizzato un paio di variabili che posso così facilmente modificare secondo esigenza (oppure fare in maniera tale che vengano accettate da riga di comando anziché valorizzate all’interno dello script) e ho lasciato commentato la riga che richiama GYB per il backup completo, lasciando in esecuzione solo quella che va a colmare le lacune cercando nelle email degli ultimi 7 giorni (in arrivo, spedite, già spostate nelle varie cartelle).

Lo script lo faccio girare con Crontab (da root) ogni mattina all’1:30, quindi potrei anche diminuire quel valore di ricerca e portarlo a uno o due giorni al massimo, ma non lo faccio semplicemente perché GYB ha già a sua disposizione un database con il quale sa benissimo a che email è arrivato nel backup e perché il filtro di ricerca per gli ultimi 7 giorni è davvero molto rapido nel restituire risposta e portare a casa il risultato.

Un’ultima considerazione: l’alias

Lo dice la documentazione ufficiale e te lo confermo anche io: inserisci il richiamo all’eseguibile di GYB direttamente negli alias di sistema perché rende tutto molto più immediato e comodo. Se non lo hai già fatto e lo script di installazione non ha ricaricato il tuo bashrc, prova a lanciare un . ~/.bashrc e lancia gyb dalla tua riga di comando. Se fallisce o non trova l’eseguibile allora inserisci l’alias a sistema:

echo "alias gyb='/root/bin/gyb/gyb'" >> ~/.bash_aliases

E ricarica nuovamente bashrc (. ~/.bashrc) per iniziare a richiamare facilmente GYB. Ricorda, per tua convenienza, che anche le configurazioni del programma si trovano nella stessa identica cartella (utile se vuoi migrare GYB su un’altra macchina, come ho fatto io per evitare di dover riconfigurare tutto a mano), troverai quindi il file client_secrets.json, quello di configurazione dell’account Google (mario.rossi@gmail.com.cfg) e quello di autenticazione (oauth2service.json). Ci sono pure lastcheck.txt e nobrowser.txt ma di questi puoi farne anche a meno (si ricreeranno quando necessario).

A questo punto ho potuto chiudere il vecchio progetto / applicazione di Gmvault sul Cloud di Google e mandare in pensione la vecchia applicazione che ha sempre svolto con onore il suo mestiere, nonché svuotare la vecchia cartella destinata al backup sul NAS.
Lunga vita a Gmvault!

Aspetta, quasi dimenticavo: troubleshooting

Durante la fase di test e primo utilizzo di GYB ho incontrato alcune piccole e grandi difficoltà / anomalie spesso già affrontate dalla documentazione ufficiale del software oppure all’interno dei casi aperti (e poi chiusi) del repository GitHub (github.com/GAM-team/got-your-back/issues?q=is%3Aissue). Te ne lascio qui uno che quasi sicuramente ti capiterà e che dovrai affrontare (e sei tutto sommato in buona compagnia):

ERROR: ('invalid_grant: Token has been expired or revoked.', {'error': 'invalid_grant', 'error_description': 'Token has been expired or revoked.'})

Fastidioso come un catamarano nell’occhio destro, si tratta di un comportamento “previsto da Google” per tutte quelle applicazioni non pubblicate e in fase di test. In pratica la prima volta ci sbatterai la faccia inevitabilmente, dalla seconda in poi dovresti riuscire a risolvere l’anomalia (così sembra, ti farò sapere se così non fosse prossimamente).

DietPi: backup di Gmail con Got Your Back (GYB)

Il token ha validità 7 giorni dal momento della creazione (riportato qui: support.google.com/cloud/answer/10311615#zippy=%2Ctesting). Vai a rinominare manualmente il file di configurazione di GYB riguardo la tua casella di posta elettronica (ricordi quel mario.rossi@gmail.com.cfg di cui ti parlavo qualche riga fa? Ecco, quello, rinominalo in mario.rossi@gmail.com.cfg.bck o mario.rossi@gmail.com.cfg.tmp se preferisci, poco importa) e poi rilancia un’operazione di backup via GYB, anche la solita che sei solito avviare. Così facendo il software non troverà il file di configurazione e ti permetterà di ricrearlo, seguendo la procedura guidata già affrontata la prima volta. Seguila fino al termine e – salvo errori – riuscirai nuovamente a mandare in backup le tue email.

È finita qui? Affatto. Punta il browser alla pagina myaccount.google.com/security, subito in testa (tra le operazioni recenti) dovresti poter trovare un messaggio di allerta che riguarda proprio GYB e il fatto che lui sia connesso al tuo account, dovrai semplicemente dire a Google che conosci lo sviluppatore del software e che ti fidi di lui. Così facendo l’allerta rientrerà e tu potrai finalmente tornare a utilizzare GYB senza battere ciglio (risposta trovata anche grazie a questo post: stackoverflow.com/a/66292541). Se però il metodo non dovesse funzionare non resterà che rendere pubblica l’applicazione (console.cloud.google.com/apis/credentials/consent).

Se durante la re-autorizzazione (nuova registrazione del token) dovessi incorrere nell’errore

google.auth.exceptions.InvalidValue: Token used too early, 1690368331 < 1690368351. Check that your computer's clock is set correctly.

(dove ovviamente 1690368331 potrà variare in base al reale data/orario corrente), dovrai semplicemente spostarti di server NTP e risincronizzare l’orario della tua macchina DietPi (o altra distribuzione che hai scelto). Io sono passato da time.google.com a europe.ntp.pool.org risolvendo l’anomalia e riuscendo a riconfigurare GYB.

In caso di dubbi l’area commenti è a tua disposizione come sempre, io cercherò di aiutarti nel limite della mia conoscenza ed esperienza in merito 🙂✌️

#KeepItSimple


immagine di copertina:
Kristina Tripkovic (
unsplash.com)
Credits:
superuser.com/a/801189
andreaminini.com/linux/alias-su-linux
stackoverflow.com/a/2518150

Correzioni, suggerimenti? Lascia un commento nell'apposita area qui di seguito o contattami privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! ☕ :-)

L'articolo potrebbe non essere aggiornato

Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)

Condividi l'articolo con i tuoi contatti:
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Commenti
Inline Feedbacks
View all comments