martedì 5 novembre 2013

Tasker, rsync e un po' di magia



Chi non ha bisogno di rendere automatiche cose noiose e pedanti?
Dropbox dal telefono è scomodo, se volete un file, non viene caricato in automatico, poi dovete aspettare che si carichi sul PC... non è di certo il miglior modo per fare una copia dei dati di un telefono. Stesso discorso per altre applicazioni proprietarie... ma per fortuna ci viene incontro l'open source. Abbiamo già tutto sui nostri sistemi Linux a parte Tasker.
L'obiettivo di quest'oggi è integrare Android con il PC Linux per avere un sistema di copia dei file in locale, svincolato da Cloud di qualche aziende che risiede in una parte non specificata del globo e che fa chissà cosa coi nostri dati.
Il vostro smartcoso si accorgerà del PC e... MAGGGIA! Niente più cavi e dubbi su cosa sia su cellulare e cosa su PC.
Useremo Tasker per decidere DOVE e QUANDO far avvenire la cosa e rsync per decidere COME.
Difficoltà: medio-bassa
Spesa: pochi euro per Tasker, ma li vale tutti!


Ciò che faremo è settare il nostro PC con un indirizzo IP fisso, e installare apache per assicurarci che il PC sia rilevabile con Tasker. Infine utilizzeremo rsync tramite Tasker per la copia dei file sul PC.
Tasker

Tasker merita un capitolo a parte. Tasker è un programma per Android che permette di automatizzare un evento che per voi è ripetitivo, per esempio accendere il WiFi una volta arrivati a casa. Scegliendo la causa e la conseguenza potrete ottenere una serie infinita di "programmini" che lavorano al vostro posto. C'è chi lo usa per silenziare il cellulare sul posto di lavoro, chi per mandare SMS alla moglie una volta a casa... noi per avere una copia dei dati sempre sul PC.
Le conseguenze sono chiamate Task, invece per legare la causa all'effetto dovete creare un Profile. Il profilo permette di legare le cause (sei in un posto, scatta l'ora X, accade l'evento Y, ...) con le conseguenze (il Task).


Il profilo è abbastanza semplice e intuitivo, viceversa il Task (una serie di operazioni che scegliete voi, una specie di script fatto tramite un interfaccia grafica) a volte vuole testato per capire cosa non funziona, o per verificarne il corretto funzionamento.


Vi rimando alla guida su xda-developers per Tasker, la guida definitiva. Se non avete mai giocato con Tasker scaricatelo in versione di prova e prima di partire con questo articolo, fate qualche profilo per conto vostro :) 


Computer

Si parte installando apache:
pacman -S apache
lanciamo ed abilitiamo il processo per l’avvio:


systemctl start httpd
systemctl enable httpd

vi rimando al wiki di arch per rendere più sicuro il server o alle guide di debianizzati.org se usate ubuntu o una deb-based.


Una volta settato e verificata la presenza di una pagina (basta anche la paggina di default "It works") all’indirizzo 127.0.0.1 possiamo procedere con l’impostare un IP fisso sul proprio PC.
Per esempio su GNOME: Impostazioni > Rete > Ruota dentata (in basso a destra) e vi basta inserire nelle opzioni IPv4 gli indirizzi attuali reperiti tramite DHCP.


Sicurezza

Utilizzeremo rsync tramite Tasker, basterà creare una chiave sul cellulare e copiare il pub all'interno del file .ssh/authorized_keys nella cartella personale sul PC e la chiave sul cellulare. Come sempre il wiki di Arch ha già tutto dentro.

Profiles

Tasker si deve occupare come prima cosa di rilevare il computer e successivamente di lanciare rsync.
Per questi due eventi dobbiamo fare due profili.
Il primo si attiva solo a casa vostra e ogni ora (oppure ogni 2).


Io ho più task che si occupano di rilevare più PC in casa. Il tutto viene lanciato dal task PCs.
Ovviamente Tasker non sta in attesa di chiamate dal PC ma viceversa cerca il PC con un HTTPGET, vi rimando sul wiki ufficiale per una comprensione estensiva. Il task se rileva il PC imposta una variabile* a 1 (per esempio la variabile PC, nel mio caso è stewie perchè questo è il nome del mio portatile), viceversa a 0.


Non si vede ma HTTP Get salva il risultato nel file http_get_utab.
Il mio profilo si occupa di settare una variabile come 0 o 1 in caso di assenza o presenza del PC.
Il secondo profilo si attiva solo se la variabile PC è impostata a 1.



Sì. i miei PC si chiamano Peter e Stewie
In questo caso controlliamo Peter (che è il PC fisso) e anche la variabile SyncFatto perchè voglio che la cosa sia fatta una volta al giorno; infatti la variabile SyncFatto viene impostata a 0 a mezzanotte (dal profilo che vedete qui sopra Sync Variable) e alla fine del processo di rsync gli attribuisco valore 1 (in questo modo fino a mezzanotte non si ripete il Sync).  
Il task Sync invece notifica l'avvio del processo e lancia rsync.


Task Sync che richiama il task rsync aggiungendo qualche notifica.


Task rsync. Viene eseguito solo questo processo.

Sincronizzazione

Una volta copiate le chiavi sul pc potete fare una connessione in ssh di prova usando le chiavi (se non sapete come estrapolate il codice da qui sotto). Infine si può impostare il comando shell su Tasker:
/system/xbin/rsync -vHrltD --chmod=Du+rwx,go-rwx,Fu+rw,go-rw --no-perms --exclude .android_secure --delete-after -e "/system/bin/ssh -y -p 22 -i '/storage/sdcard0/.ssh/id_rsa' -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" /sdcard_folder/ user@IP_address:~/location
In cui:
/storage/sdcard0/.ssh/id_rsa
Indica la posizione della chiave


/sdcard_folder/
deve coincidere con la posizione della vostra sdcard (o memoria interna)


user@IP_address:~/location
indica l'utente sul PC da connettere all’IP_address (l'IP scelto sul PC). La location è la cartella in cui salvare i file nella vostra home sul PC (potrebbe essere la cartella Cellulare).


Per quanto mi riguarda ho anche aggiunto un paio di notifiche che mi indicano quando il processo è iniziato e quando è finito, giusto per controllare che tutto proceda come si deve. Se siete proprio dei fighi potete aggiungere delle azioni sulle notifiche, come lo stop al processo (lanciate un task che lancia un comando shell da root: killall rsync) o il rimandarlo di qualche minuto.


N.B.: il sync non è un backup incrementale (anche se si può fare sempre usando tasker, a voi la scelta, fate un po' di pratica e poi troverete le info per il backup incrementale con rsync sul wiki di Arch), quindi ogni file rimosso dal cell sarà rimosso ANCHE dal PC. È una vera e propria sincronizzazione di file che vi permette di avere i file del cellulare sul PC, può fare da backup in caso di memoria corrotta, ma NON MANTIENE I FILE RIMOSSI SUL TELEFONO.

*Una variabile viene nominata (attribuito un nome) per essere riconosciuta, e a questa viene associata un valore (numerico o meno, con Tasker potremmo chiamarla "informazione").