self-hosting my calendar, follow-up

Following my blog post on the topic, I played a bit with various options.

But let’s explain my use case (which might be quite specific). I need to deal with three main sources of events:

  • the Zimbra instance from my lab. It provides a CalDav interface.
  • the ICS export from my University’s teaching timetable.
  • a calendar for personal stuff. I don’t want to use my lab’s Zimbra for that.

Additionally, I follow some ICS feeds for some colleagues and other events.
I tend to access my calendar mostly on my computer, and sometimes on my N900 phone.

None of the web interfaces I looked at enabled me to (1) manage different calendars hosted on different CalDav servers; (2) subscribe to ICS feeds; (3) provide a CalDav interface to synchronize my phone.

I ended up using a radicale instance for my personal calendar, which was extremely easy to set up. It’s unfortunately a bit slow when there are many events (1600 since 2010 in my case), so I ended up importing only future events, and I will probably have to cleanup from time to time.

I switched to using IceDove with the Lightning add-on to manage all my calendars and ICS feeds. It’s unfortunately slower and less user-friendly than Google Calendar, but I’ll live with it.

On my N900, I used syncevolution to synchronize my various CalDav calendars. It works fine, but understanding how to configure it is rather tricky due to the number of concepts involved (templates, databases, servers, contexts, …). The synchronization is quite slow (several minutes for the 400-events Zimbra calendar), but works.

I also wanted a way to export my calendars to colleagues (both in a “free/busy” version, and in a “full information” version). I quickly hacked something using ruby-agcaldav (which is not packaged in Debian, and required quite a few dependencies, but it was easy to generate packages for all of them using gem2deb — the situation with other languages did not look better).
The resulting script is:


require 'agcaldav'
require 'date'

cal = AgCalDAV::Client.new(:uri => 'LABCALDAVSERVER', :user => 'xx', :password => "xx")
ev = cal.find_events(:start => '2014-02-01', :end => '2200-01-01')

cal = AgCalDAV::Client.new(:uri => 'RADICALESERVER', :user => 'xx', :password => "xx")
ev2 = cal.find_events(:start => '2014-02-01', :end => '2200-01-01')

limit = (Time::now - 7*86400).to_datetime

# create new empty calendars
ncpriv = Icalendar::Calendar.new
ncpub = Icalendar::Calendar.new

(ev + ev2).each do |e|
next if e.end < limit # drop old events to keep the calendar small # build event for the free/busy calendar pe = Icalendar::Event.new pe.start = e.start pe.end = e.end pe.klass = "PRIVATE" pe.transp = e.transp ncpriv.add(pe) # build event for the calendar with event information pube = Icalendar::Event.new pube.start = e.start pube.end = e.end pube.transp = e.transp if not e.klass == "PRIVATE" pube.summary = e.summary pube.location = e.location end ncpub.add(pube) end # export free/busy calendar fd = File::new('xx.ics', 'w') fd.puts ncpriv.to_ical fd.close # export calendar with event information fd = File::new('yy-Zeeh9bie.ics', 'w') fd.puts ncpub.to_ical fd.close

So, mostly everything works. The only thing that doesn't is that I haven't found a way to subscribe to an ICS feed on my N900. Any ideas?

self-hosting my calendar

I’m trying to self-host my calendar setup, and I must admit that I’m lost between all the different solutions.

My requirements are:

  • (A) manage my own personal calendar using a reasonably modern web interface (probably on my own CalDAV server)
  • (B) display a dozen public ICS calendars in the web interface. Organizing those public calendars in a tree would be great.
  • (C) display several caldav calendars (from two different instances of zimbra), preferably in RW mode
  • (D) provide ICS links with a secret token that allow me to provide a full view of my calendar to some people (except for private events, where I should just be marked ‘busy’)
  • (E) provide ICS links with a secret token that allow me to provide a “busy/available” view of my calendar to some people
  • (F) export something usable on my n900. MFE would be great since that is already known to work.
  • (G) easy to setup (Debian packages available in wheezy or wheezy-backports, especially for the server part)
  • (H) preferably lightweight. I don’t need a full groupware application. I can ignore the other bits if really needed.

It does not seem to be possible to find a single framework doing all of the above. AFAIK:

  • Owncloud does A, D, G
  • Baikal does A. not sure about the rest.
  • For (B), an alternative is to script the download of the ics and then upload it to the CalDAV using cadaver. But that sounds quite low-level for such a trivial use case.
  • I’ve looked at using IceOwl (and Thunderbird+Lightning) with a CalDAV server such as Radicale. That would solve A (using iceowl instead), B, C. But which CalDAV servers support D, E, F ? Radicale does not do any of those, apparently.

What did I miss?