Unnikked - Esperienze personali in campo informatico

Come sincronizzare calendari e contatti usando gli standard CardDAV e CalDAV con Baïkal su Ubuntu 14.04

Con il numero crescente di persone che utilizzano diversi dispositivi (smartphone, computer, tablet ecc) la necessità di mantenere tutto sincronizzato aumenta.

Gli standard CalDAV e CardDAV forniscono un modo veloce e facile per mantenere sincronizzate le nostre attività e i nostri contatti.

In questo tutorial vedremo come sincronizzare calendari e contatti da un server che si controlla, usando una installazione di Baïkal: un server CalDAV e CardDAV scritto in PHP.

Prerequisiti

Per poter seguire questo tutorial è necessario disporre di una macchina con sopra installato Ubuntu 14.04 di cui si ha accesso SSH (per un test locale si può usare Vagrant), di un account con privilegi di amministrazione e di un dominio per l’accesso al server (durante il test locale è consigliabile impostare un dominio fittizio tramite il file <a href="https://unnikked.tk/guida-file-hosts-in-linux/" target="_blank">/etc/hosts</a>).

Si installeranno anche le dipendenze utilizzate da Baïkal e configurato un certificato SSL.

Installazione di Baïkal

Per iniziare installeremo le dipendenze del pacchetto, scaricheremo l’archivio di installazione procedendo con l’estrazione.

In questo tutorial si utilizzerà la versione 0.2.7 ma è consigliabile controllare il sito ufficiale per l’uscita di nuove versioni.

Assumendo una installazione pulita di Ubuntu procediamo con l’aggiornamento delle definizioni delle repository.

sudo apt-get update

Per poter installare Baïkal dobbiamo avere a disposizione un ambiente quasi LAMP, al posto di MySQL utilizzeremo SQLite.

Questo software comunque supporta anche Nginx come webserver e MySQL come gestore database.

sudo apt-get install apache2 php5 php5-sqlite sqlite3

Ora che l’ambiente di base è stato installato possiamo procedere con il download del server procedendo con l’installazione.

Per prima cosa spostiamoci in /var/www

cd /var/www

Scarichiamo la versione 0.2.7

sudo wget http://baikal-server.com/get/baikal-regular-0.2.7.tgz

Ed estraiamo l’archivio utilizzando l’utility tar

sudo tar -xvzf baikal-regular-0.2.7.tgz

Procediamo ora con alcune operazioni di routine, per prima cosa eliminiamo l’archivio baikal-regular-0.2.7.tgz scaricato tramite il comando rm

sudo rm baikal-regular-0.2.7.tgz

E rinominiamo la cartella baikal-regular nel nome dominio utilizzato, per esempio dav.example.com

sudo mv baikal-regular dav.example.com

Ripristiniamo i permessi utenti e gruppo a www-data

sudo chown -R www-data:www-data dav.example.com

Configurare Apache

La nostra applicazione è ora installata, dobbiamo ora configurare un VirtualHost di Apache.

Baïkal ci rende la vita facile includendo nei file di progetto un file di configurazione template per Apache.

Ci basterà copiare tale file nella cartella sites-available e modificarlo secondo i parametri a disposizione.

sudo cp /var/www/dav.example.com/Specific/virtualhosts/baikal.apache2 /etc/apache2/sites-available/dav_example_com.conf

Utilizzando un editor di testo come vim possiamo modificare il file dav_example_com.conf e sostituire dav.example.com con il nome dominio che punterà al web server.

sudo vim /etc/apache2/sites-available/dav_example_com-ssl.conf
<VirtualHost *:80>
    DocumentRoot /var/www/dav.example.com/html
    ServerName dav.example.com

    RewriteEngine On
    RewriteRule /.well-known/carddav /card.php [R,L]
    RewriteRule /.well-known/caldav /cal.php [R,L]

    <Directory "/var/www/dav.example.com/html">
        Options None
        Options +FollowSymlinks
        AllowOverride All
    </Directory>
</VirtualHost>

E’ ora necessario configurare un certificato SSL. E’ possibile comprare un certificato SSL oppure crearne uno.

Una volta generato / scaricato il certificato SSL assumiamo che siano stati spostati nella cartella /etc/apache2/ssl e che i file siano chiamati apache.crt e apache.key.

E’ necessario ora comunicare ad Apache come usare il certificato SSL. Creiamo il file dav_example_com-ssl.conf e copiamo il contenuto proposto

sudo nano /etc/apache2/sites-available/dav_example_com-ssl.conf
<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/dav.example.com/html
        ServerName dav.example.com

            RewriteEngine On
            RewriteRule /.well-known/carddav /card.php [R,L]
            RewriteRule /.well-known/caldav /cal.php [R,L]

        <Directory "/var/www/dav.example.com/html">
            Options None
            Options +FollowSymlinks
            AllowOverride All
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLEngine on

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

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>

        BrowserMatch "MSIE [2-6]" \
                nokeepalive ssl-unclean-shutdown \
                downgrade-1.0 force-response-1.0
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

    </VirtualHost>
</IfModule>

Ovviamente non dimentichiamoci di sostituire dav.example.com e i nomi dei file del certificato con i nomi reali a nostra disposizione.

Abbiamo quasi finito. Le configurazioni per Apache sono terminate, ora abbiamo bisogno di abilitare il modulo <a href="https://unnikked.tk/come-abilitare-modulo-mod_rewrite/" target="_blank">rewrite</a>, abilitare i siti e riavviare Apache.

Per abilitare il modulo rewrite utilizziamo l’utility a2enmod

sudo a2enmod rewrite

Utilizzando invece il comando a2ensite abilitiamo i due VirtualHost configurati

sudo a2ensite dav_example_com dav_example_com-ssl

E infine riavviamo Apache

sudo service apache2 restart

Configurare Baïkal

Prima di procedere con l’installazione da browser è necessario lanciare un ultimo comando dalla console dei comandi atto alla creazione del file ENABLE_INSTALL.

sudo touch /var/www/dav.example.com/Specific/ENABLE_INSTALL

Possiamo ora aprire il browser sul dominio configurato per iniziare l’installazione, per esempio https://dav.example.com.

baikal-wizard

Verrà mostrata una schermata con diverse opzioni. Impostiamo il fuso orario tramite il menu a tendina e creiamo una password per l’amministrazione, le altre configurazioni possono rimanere alterate.

Una volta cliccato su Save changes è necessario scegliere SQLite, non è necessario porre modifiche al parametro visualizzato.

baikal-database-setup

Cliccando di nuovo su Save changes è possibile iniziare ad usare Baïkal cliccando su Start using Baïkal.

baikal-installation-completed

Creazione utenti

Una volta installato l’applicazione è necessario creare gli utenti e collegarli per avviare la sincronizzazione.

Per creare un utente bisogna accedere alla interfaccia di amministrazione utilizzando l’utente admin e la password scelta durante l’installazione.

La prima pagina dell’applicazione è la Dashboard. Mostra cosa è abilitato e fornisce alcune statistiche basilari come il numero degli utenti, calendari e contatti.

Per creare un utente:

  1. In cima alla pagina, clicchiamo su Users and resources
  2. Ora clicchiamo sul pulsante a destra + Add user
  3. Compiliamo i campi e clicchiamo sul pulsante Save changes

Conclusioni

E’ ora possibile iniziare la sincronizzazione dei calendari e dei contatti. E’ possibile utilizzare qualsiasi client CalDAV e CardDAV per la connessione al server, bisogna utilizzare il nome dominio configurato come hostname. Nota alcuni client necessitano che come username deve essere fornito la email dell’utente.