I’ve added a new post describing how to install Darwin Calendar Server (aka DCS, aka Apple’s Calendar Server) from source on Ubuntu 9.10.
I’ve wanted to have a shared family calendar for a while. We’ve tried paper calendars. They never got updated, and moving things around was a pain. Sara may disagree with me, she still prefers a regular paper datebook. But the ability to remind each other of when various things are scheduled is really better in the electronic world. My work uses calendarserver (part of OSX Server) to schedule meetings, and combined with a client program like iCal, it’s a great system. Just because it’s Apple, though, doesn’t mean it’s only available for Mac users. Programs like Outlook for Windows or Evolution for linux can also subscribe to calendars published by calendarserver. You can find a partial list of compatible clients at http://trac.calendarserver.org/wiki/CalendarClients, but any program which can speak CalDAV should work fine.
CalendarServer is, itself, freely available. You don’t need a Mac server, and you don’t have to buy OSX. It’s written in Python, so it runs on pretty much any platform, and is distributed under an MIT license. It’s even available via apt in recent Ubuntu releases, which makes it really really easy to set up if you have an Ubuntu machine handy. These are some quick notes about how I configured this for our local network.
First, install the server and its dependencies:
bash $ sudo apt-get install
The filesystem where calendarserver (caldavd) will store its data needs to have extended user attributes enabled, since it stores a lot of data about individual calendars in extended attributes. I put mine in /home/caldavd, since that’s the user who the server runs as.
A word of caution… If you aren’t familiar with configuring filesystems, check
bashman mount or search online for help before following the next few steps. The following is not a complex task, but don’t mess around with your filesystem if you’re guessing. You won’t be happy if you mess up.
bash # Make a backup of /etc/fstab before you mess with it. It's an important file! $ sudo vi /etc/fstab and add the ‘userxattr’ flag to whichever filesystem you plan to use. “`bash # /dev/md1 # userxattr only for caldavd, apple calendar server UUID=1aaecc3a-5da5-4abc-a25d-bfb11963cda6 /home ext3 relatime,userxattr 0 2 ”` Your /etc/fstab may look totally different. The only relevant bit of information is that you need to add ‘userxattr’ to the 4th column of data. Leave the rest alone. For more information on the UUID part, read http://www.unixtutorial.org/2008/05/ubuntu-uuid-how-to/
Now you need to remount the filesystem.
bash $ sudo mount -o remount
Now you need to configure the server.
bash $ vi /etc/caldavd/caldavd.plist
Apple .plist files are XML ‘property lists’. This one is the main
configuration for the calendar server. The file is well organized and pretty
easy to understand if you have some familiarity with this kind of thing. I’m
sure that if you buy OSX Server you get all this in a friendly GUI, but for us
no-GUI peoples, hand-editing the XML is the way to go.
I edited the following in mine :
Now copy some default configuration files into the places referenced by
caldavd.plistbash $ sudo cp
/usr/share/doc/calendarserver/examples/accounts.xml /etc/caldavd $ sudo cp
/usr/share/doc/calendarserver/examples/sudoers.plist /etc/caldavd ”` We won’t
edit these just yet, but they need to exist in order for the server to start
You now need to allow the server to start by editing
bash $ sudo vi /etc/default/calendarserver #
uncomment the line 'start_calendarserver=yes' And fire it up.
sudo /etc/init.d/calendarserver start $ sudo less /var/log/caldavd/error.log
Check for any issues which might crop up. If you don’t see anything awful,
you’ve got a functioning calendar server. You should also be able to browse to
https://your.hostname:8443 using a web browser and see a rather un-Apple-
looking black-and-gray layout of XML data.
OK, so it works. But, at the moment, nobody can use it because you haven’t configured any accounts. “`bash $ sudo chown caldavd:caldavd /etc/caldavd/accounts.xml /etc/caldavd/sudoers.plist
$ sudo chmod go-rwx /etc/caldavd/accounts.xml # passwords go in here in cleartext unless you do an LDAP integration or something else fancy-like, so you don’t want anyone else reading this file.
$ sudo vi /etc/caldavd/accounts.xml ”` Like caldavd.plist, I found accounts.xml to be pretty straightforward and easy to edit. Create some users, add those users to groups if you like. I didn’t mess around with the location type too much, but if you’re setting up a calendar for scheduling a conference room or classrooms, you might find that very useful.
I found some very helpful explanations of the accounts.xml syntax at
http://www.nabble.com/accounts.xml-configuration-td15252751.html. Notice the
recommendation to generate UUIDs for all accounts, and add them to your
bashuuidgen command on OSX worked great for this since
I was already working on a Mac. On Ubuntu, you can do the following:
sudo apt-get install uuidcdef $ uuidcdef -u
I did not make any changes to the default sudoers.plist file. I may tinker with it at some point, but I have no need for this functionality right now, and the default configuration (no sudoers) suits me just fine.
You can verify that your configuration is OK by checking your calendar server in a web browser. Go to https://your.server:8443/ and click the ‘principals’ link near the top of the page. You’ll be prompted to log in. Use a username & password you just entered into accounts.xml. From here you can look for ‘users’ or ‘groups’. When you reach a URL like ‘/principals/users/alex/’ or ‘/principals/groups/family/’ you will see more information about that entity. Especially note the ‘Calendar user addresses’. You’ll need one of those when configuring your client in the next step.
*Note : * I am a real novice at administering this server. I don’t fully comprehend the ins & outs of all the different configuration options, or why the same calendar is available through so many different URLs. Please post comments on what you can find out as you experiment.
Finally, here are some notes on configuring OSX’s iCal program to use the calendar server. If anyone wants to write guides for other clients, I’ll be happy to post them, but iCal is all we’re currently using here at Deanspot HQ.
In the iCal menu, select Preferences. Click the Accounts tab, and you’ll see something like the one below. Click the + in the lower left. Enter a description, a user name and a password (from accounts.xml). Click the arrow next to ‘Server Options’, and in the ‘Account URL’ window, enter the full URL from browsing the calendar server in your web browser. For instance, if I’m setting up my ‘alex’ account, I’d use https://gringotts.dean:8443/principals/users/alex/ (for my personal calendar) or https://gringotts.dean:8443/principals/groups/family/ for our shared family calendar. I can access this because I am a member of the ‘family’ group in accounts.xml, but note I still use my ‘alex’ account, not the ‘family’ user. (Why the group has a password, I’m not entirely sure. One more admin detail to figure out someday.)
Click Add, and you should be able to start adding calendars and events. Check the server logs in /var/log/caldavd/ if you have problems connecting.
For group calendars, any items you add are, of course, visible to others in the group. Also (semi-annoyingly) each group user doesn’t seem to have the ability to set different alarms for events. Alarms set by others in your group will go off in your iCal. I experience this on a daily basis when co-workers enter stuff like ‘Sales Meeting’ (I’m not in Sales) or ‘Billy’s Cub Scout Meeting’. Oh well.
So, that’s Apple CalendarServer on Ubuntu in a nutshell. Hope that’s helpful.☙ ☙ ☙