Um seine Kalender und Kontake auf mehreren Geräten syncron zu halten, gibt es verschieden Möglichkeiten. Am einfachsten geht das warscheinlich mit Google, die unterstützen viele Formate und machen auch den Export der Daten verhältnismäßig einfach. Bei Apple und Microsoft wird es außerhalb des eigenen Systems etwas umständlich.
Wer auf den Upload in die "Cloud" verzichten möchte, kann sich sog. CalDAV- bzw. CardDAV-Server einrichten. Gerade weil eine Synchronisation nicht permanent erfolgen muss, bietet es sich an, diesen Server im heimischen LAN zu betreiben, wofür sich wiederum der Raspberry Pi oder ein ähnlicher Minicomputer hervorragend eignet.
Wer auf seinem RasPi bereits einen Webserver wie Apache oder nginx laufen hat oder Wert auf ein hübsches (Web-)Frontend legt, der sollte sich Baïkal genauer ansehen und auch ownCloud hat entsprechende Features an Bord.
In einem Podcast von Marcus 'monoxyd' Richter zum Thema private Cloud bin ich auf Radicale aufmerksam geworden, einen einfachen Kalender- und Kontakte-Server, der als Python-Skript auf fast jedem System läuft. Glaubt man der Website, dann läuft der sogar ohne Konfiguration und Installation. Da dann aber ein paar Sachen doch nicht so klappen, wie ich mir das vorgestellt hatte und ich keine 100%ige out-of-the-box-Lösung gefunden habe, nochmal für mich selbst, falls ich mal kein Backup gemacht habe und für alle Suchenden:
[neuste Version von Github holen, Radicale installieren, Ordner anlegen, Konfig-Datei schreiben:]
git clone git://github.com/Kozea/Radicale.git
cd Radicale
sudo python setup.py install
sudo mkdir /etc/radicale
sudo nano /etc/radicale/config
Achtung! Die folgende Config funktioniert nur, wenn auch die nachfolgenden Teile diese Tutorials ausgeführt werden. Ansonsten bitte lesen, verstehen und Pfadangaben anpassen...
[server] # CalDAV server hostnames separated by a comma # IPv4 syntax: address:port # IPv6 syntax: [address]:port # For example: 0.0.0.0:9999, [::]:9999 # IPv6 adresses are configured to only allow IPv6 connections hosts = 0.0.0.0:5232 # Daemon flag daemon = True # File storing the PID in daemon mode pid = /home/radicale/radicale.pid # SSL flag, enable HTTPS protocol ssl = True # SSL certificate path certificate = /etc/ssl/server.crt # SSL private key key = /etc/ssl/server.key # SSL Protocol used. See python's ssl module for available values protocol = PROTOCOL_SSLv23 # Ciphers available. See python's ssl module for available ciphers ciphers = # Reverse DNS to resolve client address in logs dns_lookup = True # Root URL of Radicale (starting and ending with a slash) base_prefix = / # Possibility to allow URLs cleaned by a HTTP server, without the base_prefix can_skip_base_prefix = False # Message displayed in the client when a password is needed realm = Radicale - Password Required [encoding] # Encoding for responding requests request = utf-8 # Encoding for storing local collections stock = utf-8 [auth] # Authentication method # Value: None | htpasswd | IMAP | LDAP | PAM | courier | http | remote_user | custom type = htpasswd # Htpasswd filename htpasswd_filename = /etc/radicale/users # Htpasswd encryption method # Value: plain | sha1 | crypt htpasswd_encryption = sha1 [rights] # Rights backend # Value: None | authenticated | owner_only | owner_write | from_file | custom type = owner_write [storage] # Storage backend # Value: filesystem | multifilesystem | database | custom type = filesystem # Folder for storing local collections, created if not present filesystem_folder = /home/radicale/collections [logging] # Logging configuration file # If no config is given, simple information is printed on the standard output # For more information about the syntax of the configuration file, see: # http://docs.python.org/library/logging.config.html config = /etc/radicale/logging # Set the default logging level to debug debug = False # Store all environment variables (including those set in the shell) full_environment = False
[System-User radicale anlegen, htpasswd installieren, Benutzer eines Kalenders erstellen, SSL-Zertifikate erzeugen, Autostart-Skript schreiben:]
sudo adduser --quiet --system --group --disabled-password radicale
sudo apt-get install apache2-utils
sudo htpasswd -sc /etc/radicale/users mustermann
sudo openssl genrsa -out /etc/ssl/server.key 2048
sudo openssl req -new -x509 -days 365 -key /etc/ssl/server.key -out /etc/ssl/server.crt
sudo nano /etc/init.d/radicale
#! /bin/bash ### BEGIN INIT INFO # Provides: radicale daemon # Required-Start: $syslog # Required-Stop: $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: radicale server daemon # Description: Daemon script to run a radicale permanent peer # Placed in /etc/init.d. ### END INIT INFO # Author: Nicolas Bernaerts # Version: # V1.0, 06/09/2013 - Creation # V1.1, 09/09/2013 - Use under-priviledged system user # V1.2, 15/12/2014 - Changes for radicale # V1.3, 26/01/2015 - Fix in do_start if pid file was not deleted # description variables PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="radicale server" NAME="radicale" USER=$NAME DAEMON=/usr/local/bin/$NAME ROOT=/home/$NAME PIDFILE=$ROOT/$NAME.pid # Exit if radicale program is not installed if [ ! -x "$DAEMON" ] ; then echo "Binary $DAEMON does not exist. Aborting" exit 0 fi # Exit if radicale user home directory doesn't exist if [ ! -d "$ROOT" ]; then echo "User $USER does not exist. Aborting" exit 0 fi # Function that starts the daemon/service # 0 - daemon started # 1 - daemon already running # 2 - daemon could not be started do_start() { # If needed, start the daemon start-stop-daemon --start --quiet --pidfile $PIDFILE --chuid $USER --exec $DAEMON --test RETVAL="$?" if [ "$RETVAL" = "1" ]; then echo "$NAME already running" else start-stop-daemon --start --quiet --pidfile $PIDFILE --chuid $USER --exec $DAEMON RETVAL="$?" [ "$RETVAL" = "0" ] && echo "$NAME started" fi return "$RETVAL" } # Function that stops the daemon/service # 0 - daemon stopped # 1 - daemon already stopped # 2 - daemon could not be stopped do_stop() { # Stop the daemon start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME RETVAL="$?" [ "$RETVAL" = "0" ] && echo "$NAME stopped" [ "$RETVAL" = "1" ] && echo "$NAME was not running" # remove pid file rm -f $PIDFILE return "$RETVAL" } # deal with different parameters : start, stop & status case "$1" in # start service start) do_start ;; # stop service stop) do_stop ;; # restart service restart) do_stop do_start ;; # unknown command, display help message *) echo "Usage : $SCRIPTNAME {start|stop|restart}" >&2 exit 3 ;; esac
[ausführbar machen, Runlevel hinzufügen, Server starten]
sudo chmod +x /etc/init.d/radicale
sudo update-rc.d radicale defaults
sudo service radicale start
Nun sollte der Server laufen und mit den entsprechenden Clients auf Smartphone und PC können nun Kalender unter https://[ip]:5232/mustermann/[kalendername].ics/ bzw. Kontakte unter https://[ip]:5232/mustermann/[kontakttgruppe].vcf/ gespeichert und synchronisiert werden.