Fuga da Google

Apparso sul blog: "Broken links."

Prima di tutto: Non è facile.

Se quello di cui si ha bisogno è convenienza e ampio parcheggio, sarà difficile battere Google, se si vuole fare a meno di Google ed usare dei servizi simili ci vuole una buona motivazione ideale del perché farlo.

Qui parleremo di come sincronizzare un telefono Android e un Pc-server-di-casa.

Give me convenience or give me death!

In breve: Google non è gratis, offre il suo ottimo servizio in cambio dei dati dell'utente. Il business di google è la pubblicità, non la beneficenza. Se questo non è un problema, meglio continuare a usare Google e ad apprezzarne la convenienza. Se invece questo è un fastidio da risolvere, allora andiamo avanti. La Google suite offre dei servizi davvero ottimi: spazio per le foto, documenti condivisi, calendario, indirizziario, email, eccetera. Non è gratis, come docevamo il servizio si paga con i propri dati, che hanno un valore. Si tratta quindi di uno scambio che ognuno deve sentirsi libero di accettare valutandone coscientemente i pro e contro. I servizi "gratis" Non sono eterni né garantiti, difatti ad esempio Google Reader, il servizio di sincronizzazione Rss, che era davvero utilissimo, è stato chiuso e pazienza per chi lo usava e stica**i per chi ne era dipendente. Io ho usato Google reader, e so che chi non impara dalla storia è condannato a riviverla. Dunque sono sempre alla ricerca di sistemi alternativi per organizzare la mia vita digitale in modo quanto più possibile indipendente.

Quattro alternative:

  • Affidarsi a un servizio in cambio di dati (Google, Dropbox, eccetera). Pro: funziona ed non ha costi in denaro, zero fatica. Contro: perdita di privacy, le conseguenze a lungo termine sono imprevedibili.

  • Usare un servizio a pagamento (Gandi, Silent Circle, vboxx eccetera). Pro: funziona, zero fatica. Contro: costa soldi

  • Farsi da sé i propri servizi sul server di casa. Pro: hai pieno controllo su tutto. Contro: non è detto che funzioni, è fatica, costa la corrente elettrica.

  • Costruirsi una comunità in modo da ridurre i costi e la fatica. Non più il server di casa, ma il server del gruppo. Esistono community privacy-aware come Autistici e RiseUp da cui prendere esempio, e se quelle citate non offrono servizi SaaS, nessuno vieta di farti la tua comunità e avere una nuvola condivisa coi tuoi amici. Esci dalla stanzetta, frequenti gente, ti confronti, impari cose nuove e trovi la ragazza/o scoprendo che il SaaS è secondario alla tua vita. Pro: funziona, conosci gente interessante. Contro: nessuno

Selfhosting

Qui parleremo della parte server-di-casa, con i seguenti strumenti: Pc con GNU/Linux (Debian) e cellulare con Android.

Sono i miei appunti di viaggio, quanto più possibile ordinati, spero che siano utili a qualcuno.

Quello che voglio ottenere è un server di casa che offra gli stessi servizi di Google, anzi di più. Voglio sincronizzare i files tra Pc e telefonino, fare in modo che tutte le foto scattate dal telefonino vengano automagicamente caricate sul mio server di casa, voglio sincronizzare il calendario, l'indirizziario, voglio editare un file da qualsiasi computer mi trovi, voglio che i dati nel mio server siano crittografati, voglio accedere al server usando SSL, voglio usare il server per scambiare files cogli amici, voglio la scrittura condivisa con formattazione da ufficio, voglio il mio sync Rss, voglio che tutto sia bello bello bello e fruibile e facile da usare, voglio l'ampio parcheggio con privacy. voglio tutto e lo voglio ora. ecche diamine, siamo nel 2014.

Ehi dimenticavo: stai configurando Owncloud sul server per sincronizzare contatti, files e calendario con Android e quant'altro? Kudos! Complimenti!

Brevemente occorre:

  • Installare F-Droid sul telefonino, che dà accesso a un repositorio di applicazioni libere.
  • usare OwnCloud per sincronizzare i propri dati (pagando un provider o installandolo sulla propria macchina di casa)

Cominciamo col fare una Cloud personale, con un Pc, Debian e OwnCloud, per sincronizzare files, calendario e address book.

Avendo installato sul sistema di casa una Debian 7, procedo con l'installare OwnCloud

Comincio col diventare root, e farò molta attenzione a non spararmi nel piede.

sudo -s

Aggiungo al respositorio in /etc/apt/sources.list i sorgenti del software OwnCloud

deb http://download.opensuse.org/repositories/isv:ownCloud:community/Debian_7.0/ /

scarico la chiave pubblica di OwnCloud

wget http://download.opensuse.org/repositories/isv:ownCloud:community/Debian_7.0/Release.key

e la aggiungo al mio portachiavi

apt-key add - < Release.key

A questo punto installo OwnCloud

apt-get update ; apt-get install owncloud

Voglio collegarmi al mio server usando https, in modo da non far passare la password in plain text, per fare ciò dovrò abilitare https.

Abilito Apache a usare https

a2enmod rewrite
a2ensite headers
a2ensite default-ssl
a2enmod ssl
service apache2 restart

e riavvio Apache

service apache2 restart

Creo il mio certificato SSL

Dovrò anche avere un certificato SSL valido, escludo l'idea di comperarne uno e me lo faccio a mano.

Creo la directory dove terrò i miei certificati

mkdir /etc/apache2/ssl

Devo fare in modo che il certificato che vado a creare sia X.509v3, altrimenti Android si rifiuterà di usarlo.

Edito il file /usr/share/ssl-cert/ssleay.cnf, cambiando

[ v3_req ]
basicConstraints=CA:FALSE

con

[ v3_req ]
basicConstraints=CA:TRUE

Bisogna che quando mi sarà richiesto dia come common name al mio certificato il site address, che d'ora in poi chiameremo: IP_SERVER, ossia qualcosa come server.org, altrimenti avrò problemi in seguito.

Procediamo con la creazione del certificato:

make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.crt

ora ricavo i files apache.key e apache.pem

cp /etc/apache2/ssl/apache.crt /etc/apache2/ssl/apache.pem
cp /etc/apache2/ssl/apache.crt /etc/apache2/ssl/apache.key

edito il file /etc/apache2/ssl/apache.pem e lascia solo la parte da BEGIN CERTIFICATE ad END CERTIFICATE

edito il file /etc/apache2/ssl/apache.key e lascia solo la parte da BEGIN PRIVATE KEY a END PRIVATE KEY

edito il file /etc/apache2/sites-enabled/default-ssl e modifico le righe SSL per indirizzare Apache al certificato che ho appena creato, in questo modo:

SSLCertificateFile /etc/apache2/ssl/apache.pem
SSLCertificateKeyFile /etc/apache2/ssl/apache.key

Mi assicuro che il file apache.key non sia pubblicamente leggibile

chmod 600 /etc/apache2/ssl/apache.key

e riavvio apache

service apache2 restart

A questo punto posso con un browser visitare una pagina del mio server e constaterò che alle richieste https mi viene detto che il certificato non è sicuro, in quanto non è garantito da nessuna delle entità certificatorie, ma l'ho fatto io a manina e il mio browser non lo può sapere. Dunque accetto il certificato insicuro e procedo il mio cammino di indipendenza o morte canticchiando: Sono un ribelle mamma, degli Skiantos. Ed è subito pausa caffé.

OwnCloud Setup

Raggiungo owncloud a https://IP_SERVER/owncloud

e creo il primo utente amministratore, un nuovo gruppo (user) e gli utenti, tra cui me.

Installo anche sul telefonino OwnCloud e OwnCloud-Client sul Pc e potrò così sincronizzare file in allegria.

Esportare la chiave pubblica del certificato per importarla in Android

Con Android userò DavDroid, che sincronizzerà calendario e indirizziario col mio server permettendomi di non usare i server di Google. I contatti e gli eventi sincronizzati saranno comunque visibili usando le apps di google, al momento in cui scrivo si chiamano Calendar e People, ma potrei usare altre applicazioni, come ad esempio aCalendar o aCal.

Perché DavDroid possa collegarsi al mio server dovrà sapere che Android accetta il mio certificato, perché Android accetti, pur malvolentieri, il mio certificato, esso dovrà essere X.509v3.

Per pura fortuna (guarda che combinazione) il certificato che abbiamo creato era proprio X.509v3=TRUE

Dunque ora basta che lo esportiamo in formato DER e che lo salviamo in formato CER, in modo di fare contenti tutti. sia Android che DavDroid.

openssl x509 -in/etc/apache2/ssl/apache.pem -outform DER -out /etc/apache2/ssl/certificato-del-mio-server.cer

Ora posso copiare il certificato e importarlo nello smartphone, ad esempio usando scp per copiare certificato-del-mio-server.cer sul Desktop e poi copiarlo nella SDCard dello smartphone dopo averlo collegato via usb al Desktop. Ma potrei anche mettere il certificato-del-mio-server.cer sul web e visitarlo col browser del cellulare. O anche potrei usare OwnCloud e sincronizzare il file. Importante è che metta il file certificato-del-mio-server.cer nella root della SDcard storage, non in una sottocartella.

A questo punto importo il certificato in Android, dal telefonino trovo i settaggi:

Settings / Security / Credential storage: "Install from device storage".

Android mi chiederà se sono sicuro sicuro e rimarrà sempre un pò scettico sulla bontà delle mie azioni, pazienza. Non si possono fare contenti tutti.

scetticoandroid

Questo è come Android vede l'importazione del mio certificato. E' inaudito incredibile assurdo perlomeno curioso che non si possa in pieno possesso delle proprie facoltà dichiarare una volta per tutte che è ok, non si deve preoccupare, l'ho fatto io il certificato. Non si può, il mio telefonino, mio nel senso che l'ho comperato e potrei farne ciò che voglio in teoria, è petulante e tremebondo e ci tiene a stare all'erta. Ora, è vero che se qualcuno mi installasse di nascosto un certificato sul telefonino è bene farmelo sapere, ma se qualcuno mette le mani sul mio telefonino fino a quel punto il messaggino che mi avvisa è l'ultimo dei miei problemi. Il mio Android sogna un wallet garden e mi ricorderà le conseguenze delle mie azioni ad ogni riavvio e per levare il fastidioso avviso dovrò diventare root sul telefonino e mergiare il mio certificato a quelli ufficiali. Per il senso di questo howto, lo teniamo come un problema estetico.

Ora ho il mio certificato tra gli user trusted certificates, e posso configurare DavDroid.

Installare e configurare DavDroid

Per installare DavDroid userò F-Droid e lo punterò rispettivamente per calendario e contatti a questi indirizzi, entrambi rintracciabili dall'interfaccia di OwnCloud:

https://IP_SERVER/owncloud/remote.php/caldav/

https://IP_SERVER/owncloud/remote.php/carddav/addressbooks/USERNAME/contacts

Sync calendario e contatti da Desktop

Evolution funziona per calendario e task, ma non per i contatti.

Non è chiaro ma non accetta un CardDav address, vuole un WebDav address, diamine glielo dico ma non funziona uguale. Aspé, ora funziona.. Al riavvio se lo scorda.. Ok, non ci tengo per il momento.

Userò allora IceDove (aka Thunderbird per i simpatici amici che usano Mac o Win)

Configurare IceDove con Sogo

anzi no, visto che Sogo molti lamentano che non funziona, e IceDove verrà dismesso.

Faccio comunque la prova, installo IceOwl plugin per il calendario con apt-get e configuro il tutto e funziona, Questo è l'indirizzo che devo dare in pasto a IceOwl

https://IP_SERVER/owncloud/remote.php/caldav/calendars/USERNAME/defaultcalendar

Finisco col preferire usare solo l'interfaccia di OwnCloud quando non sono sul telefonino e fare un backup direttamente dal server senza passare fuori dalla rete, usando questo script suggerito da Tanghus che dovrò editare per adattarlo alla mia configurazione.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/bin/bash

DATE=`date +"%Y-%m-%d"`

wget --no-check-certificate --auth-no-challenge --no-clobber --http-user=USERNAME --http-password=PASSWORD \
-O $HOME/backup/pimdata/contacts-$DATE.vcf
"https://192.168.1.3/owncloud/index.php/apps/contacts/addressbook/local/2/export" ;
gzip -f $HOME/backup/pimdata/contacts-$DATE.vcf ;

wget --no-check-certificate --auth-no-challenge --no-clobber --http-user=USERNAME --http-password=PASSWORD \
-O $HOME/backup/pimdata/calendar-$DATE.ics "https://192.168.1.3/owncloud/index.php/apps/calendar/export.php?calid=2";
gzip -f $HOME/backup/pimdata/calendar-$DATE.ics

Setup Finale

Sarebbe molto meglio ricominciare una vita digitale da capo, a questo punto, piuttosto che pretendere di esportare il calendario e i contatti da Google e sdegnarsi se non dovesse andare tutto perfetto. Come si è visto prima, Android è scettico su quello che stai facendo. Sarebbe molto meglio cominciare a immettere dati senza pretendere di portarsi appresso il passato.. No eh? Passiamo allora al:

Calendar Setup

  • Esporto il cal.ics da google attraverso l'interfaccia web e lo importo in OwnCloud, funziona.
  • Stacco la sincronizzazione dal telefono per il calendario di google
  • Dico al calendar viewer di visualizzare solo il mio calendario.

Contact Setup

  • Esporto i contatti in un contact.vcf file direttamente dal telefonino
  • Trasferisco contact.vcf sul Pc
  • Disattivo la sinconizzazione per i contatti di google, attraverso la app People
  • Importo contact.vcf in owncloud
  • Attivo il sync da davdroid
  • Una volta che tutto è ok, cancello i contatti da google via web

Nota: se hai scritto molto nelle note, sappi che verrà salvata solo una riga circa, inoltre si dimenticherà tutti i compleanni di cui non sia impostato anche l'anno di nascita. (si, lo so, infatti li scrivevi nelle note..) e infine si scorderà tutti i campi proprietari di Android, (ogni evento eccetto il compleanno). In compenso importerà tutti i campi regolari compresa la fotina. A seconda del personale setup di ognuno, direi che funziona bene.

Intervallo di sincronizzazione

Contatti ed eventi vengono sincronizzati automaticamente una volta al giorno, oppure ogni volta che un contatto o un evento viene cambiato, o quando forzi un sync dalla app Calendar o da Settings/ Account/ DAVdroid.

Considerazione finale

I miei contatti provengono dal Palm Pilot, hanno fatto una lunga strada e sono passati da Google solo perché non trovai un altro modo per convertirli in un formato accettabile per WebOS, che usavo nel mio precedente telefonino. Sono più che lieto di riportarli finalmente a una dimensione privata.