Posted on Tue 12 January 2016 in linux

The value of calendar and addressbook information

Starting with the emerging of mobile technologies it became reasonable to manage appointments and addresses with such devices. However, when dealing with multiple computers and mobile devices the question arises how can this information be synchronized? You will of course answer that the big players such as Google, Microsoft or Apple have already solved this problem for you by syncing data with the "cloud" ... but wait ... what does this mean? Well, you are sending confidential information as plain text to some servers outside of Germany and you have no idea who else has access to this data - apart from the NSA - and how this information is analysed and used. So let us think about an alternative...

What is radicale?

radicale is a python-based lightweight calendar server that implements CalDAV and CardDAV, two well-documented specifications for the exchange of calendar and address book information. Since both protocols are standardized they can be easily used with various applications including Mozilla Thunderbird (Lightning) and Apple Calendar/Contacts, but also mobile devices via DAVdroid or the default iPhone applications. A complete list of supported applications and their configurations can be obtained from the official radicale documentation. Of course there are similar products such as the Darwin Calendar Server, DAViCal or ownCloud, but what is nice about radicale is that it is not a big software suite, but rather one tool for one job approach.

How to install radicale?

Warning: radicale in Debian Jessie

The current version of radicale in debian jessie seems to be a little bit buggy, so there may be problems when multiple calendars should be used from the same user account. However, since radicale is under continuous development you can try to install a newer version e.g. radicale_1.1.1-1 from sid that does not have these problems.

Installing radicale

First the radicale package must be installed:

apt-get install radicale 

After that the basic configuration can be set by adapting the /etc/radicale/config file. Since apache2 should be used for delivering the data, only a small subset of options must be set: this is, on the one hand, the use of the filesystem storage (each calendar will be put into a separate file) and on the other hand, the activation of logging. Hence, the important parts are:

type = filesystem
filesystem_folder = /var/lib/radicale/collections

config = /var/log/logging

Since the storage folder is not created automatically, it should be done in the next step:

mkdir -p /var/lib/radicale/collections
chown radicale.radicale /var/lib/radicale/collections

Additionally, the logging directory must be created so that it can be used for the log files:

mkdir /var/log/radicale/
chown radicale.radicale /var/log/radicale

git support (optional)

To keep track of calendar changes, git support can be activated. As a result, every calendar change is automatically committed to the git repository. To activate this feature do:

apt-get install python-dulwich
cd /var/lib/radicale/collections
git init
chown radicale.radicale -R /var/lib/radicale/collections/.git

Apache2 configuration

Instead of using the built-in server component, apache2 will be used for delivering the data. Apache2 is more mature and has a better support for different authentication mechanisms.


Since radicale is a python-based webapplication, a wsgi file must be prepared that can be linked to the apache2 server. Thus, create the /var/www/radicale directory and add the /var/www/radicale/radicale.wsgi file with the following content:

import radicale
application = radicale.Application()

Adapt the owner and permissions of the wsgi file:

chown radicale.radicale /var/www/radicale/radicale.wsgi
chmod 0755 /var/www/radicale/radicale.wsgi

If the apache2 wsgi module is not installed yet, install and enable it:

apt-get install libapache2-mod-wsgi
a2enmod wsgi

radicale site config

To register the wsgi file with the apache2 server, create a new apache2 site configuration in /etc/apache2/sites-available/radicale.conf with the following content:

<IfModule mod_ssl.c>
    <VirtualHost *:5232>
        ServerName yourdomain.de

        WSGIDaemonProcess radicale user=radicale group=radicale threads=1
        WSGIScriptAlias / /var/www/radicale/radicale.wsgi

        <Directory /var/www/radicale>
            WSGIProcessGroup radicale
            WSGIApplicationGroup %{GLOBAL}
            AllowOverride None
            Require all granted
            Options -Indexes

        <Location />
            AuthType Basic
            AuthName "Calendar Auth"
            AuthBasicProvider file
            AuthUserFile /var/www/radicale/.htpasswd
            Require valid-user

        # ssl stuff
        SSLEngine on
        SSLCertificateFile    /etc/ssl/certs/cal.pem
        SSLCertificateKeyFile /etc/ssl/private/cal.key

The configuration provides the link to the wsgi file, a basic authentication mechanism and the use of SSL for protecting the data transmission.

For the authentication mechanism, the corresponding user(s) can be created as follows:

htpasswd -c /var/www/radicale/.htpasswd username

Edit /etc/apache2/ports.conf file and make apache2 listen on the defined port:

<IfModule ssl_module>
    Listen 5232

Finally, enable the radicale site configuration and reload apache2:

a2ensite radicale
service apache2 reload


To test the installed radicale server open the following domain in your browser: https://yourdomain.de:5232/

Setting up clients

The configuration of the various clients is not topic of this post. Please consult the official radicale documentation for more information.