Planet
Using Kolab with Dovecot IMAP Server
This is a guest post by Mihai Badici who managed to get his Kolab Server to run with Dovecot IMAP instead of Cyrus IMAP. Here he is writing about his experiences and lets other people know how to follow his example.
I've used Dovecot for years as the IMAP server in a openldap-centric mail system configuration. When I started looking for a solution to add Contacts/Calendar support I found Kolab that is, in my opinion, the right way to do it, because it only requires a few additions in the IMAP protocol at the server side (which allows one to enjoy the stability of a solid Linux mail server setup) and shift the burden to the client side, where it is easy to add plugins, modify and test the product etc.
So I embraced the idea, but also I want to keep my previous work and not to learn to configure a new IMAP server (there is nothing wrong with learning, but I prefer to learn something else). Kolab uses Cyrus as its default IMAP server, but since there is a metadata patch for dovecot, I chose the latter. The IMAP metadata format is described in RFC 5464.
Packages
There are metadata patches for 2.0.x and 1.1.x branches. Since I had no problems with 2.0, I choose this one, because it is the newest. As a matter of fact, I tried to compile also the 2.1.x branch, but it gave me some errors and so I abandoned it for the moment. I think it is not difficult to adapt the patch but I never had time to return to this.
So i used dovecot 2.0.21 (during the time I compiled few previous versions without problems.) You can download it from www.dovecot.org.
Because kolab is ldap-centric, you also need openldap libraries in order to compile dovecot. I'm using slackware 13.37 which has openldap version 2.4.23 but I compiled against different versions, so you can probably use your distribution's package.
I used the metadata patch from http://hg.dovecot.org/dovecot-metadata-plugin
You also need gcc, m4 and I think autoconf/automake to compile the package.
Compiling
First I built dovecot:
$ configure --with-ldap --sysconfdir=/etc --prefix=/usr
$ make; make install
In fact I use slackbuild to build a package, but that's the idea.
Once you do this you have a dovecot IMAP server (without metadata support) up and running. I do it that way because dovecot libraries are needed to compile the patch.
So, after that you can extract the plugin and run
$ ./configure --with-dovecot=/usr/lib/dovecot
$ make
If you want to build on your current server, you can also run
$ make install
I wanted to make a package, so I copied the resulting .so libs from src/.libs together with the original dovecot files in a directory and use mkpkg. The specifics depend on your distribution. (There is also a conf file needed for the package, as follows so don't run mkpkg, yet). You can find the package I created for my Slackware setup on my server.
Configuration
In dovecot 2.x the configuration model was changed. Now we have multiple configuration files in a conf.d directory.
I hope remember the relevant part correctly. If not, feel free to ask me. In 10-auth.conf I have:
!include auth-ldap.conf.ext
which include the ldap stuff usefull for directory access. In auth-ldap.conf.ext I have:
passdb {
driver = ldap
# Path for LDAP configuration file, see example-config/dovecot-ldap.conf.ext
args = /etc/dovecot/dovecot-ldap.conf.ext
}userdb {
driver = ldap
args = /etc/dovecot/dovecot-ldap.conf.ext
}and in /etc/dovecot/dovecot-ldap.conf.ext:
hosts = localhost
base = dc=machinet
pass_attrs = uid=user,userPassword=password
user_filter = (uid=%u)
pass_filter = (uid=%u)
Surely, you can write better filters. The Kolab schema is different, I will try this someday.
The metadata specific section is in 10-master.conf:
service dict {
# If dict proxy is used, mail processes should have access to its socket.
# For example: mode=0660, group=vmail and global mail_access_groups=vmail
unix_listener dict {
#mode = 0600
#user =
#group =
}This will open a pipe named dict in /var/run/dovecot/. I had some trouble with the permissions to this pipe: since I use 10000 as uid and gid for my users, and I don't have such a user in /etc/passwd, I cannot enter here user=10000 and group=10000, because dovecot return an error. I simply put a
chown 10000.10000 /var/run/dovecot/dict
in the initialization script; there are better ways for sure to do it but I didn't bother
Bugs
I have few servers with this setup since one year ago and there are no crashes (which was my main concern till now). The metadata plugin is not in production use; Also I syncronize my Android phone via kolabdroid with one of the servers.
Thanks
Well, there are many people I must thanks:
- people from the Kolab Community, starting with Torsten Grote who "forced" me to write this
- Bernhard Herzog and Dennis Schridde who wrote the metadata plugin
- the authors and contributors of Dovecot
- and so many others
Compiling KDE Kontact from Source
I’m running Debian Sid, because I like to have a rolling distribution with the latest and greatest software as soon as it is released. Unfortunately, the KDE packagers in Debian lack (wo)men power and still ship 4 year old KDE PIM packages. Using their experimental KDE repository does not help.
Since I have multiple annoying issues with Kontact 4.4.11 and because I need it functional for work, I decided to take a rather extreme step: Compiling it myself from the source code repositories. Turns out that it isn’t all that difficult. I documented the process below for those who want to follow my example. It enables me to stay up to date with the development whenever I want and I receive bug fixes immediately after they have been pushed without having to wait for them to be packaged for my distribution. Also, in case I want something to be fixed that still isn’t in latest master, I can just do it myself now.
In order to get started I read KDE techbase which is quite a good resource even though it could still be improved. At first I had to add the following to my ~/.gitconfig file.
[url "git://anongit.kde.org/"] insteadOf = kde: [url "git@git.kde.org:"] pushInsteadOf = kde:
Then I could start cloning the git repositories:
$ git clone git://anongit.kde.org/akonadi $ git clone git://anongit.kde.org/kdepim $ git clone git://anongit.kde.org/kdepimlibs.git $ git clone git://anongit.kde.org/nepomuk-core $ git clone git://anongit.kde.org/nepomuk-widgets $ git clone kde:soprano.git $ git clone git://anongit.kde.org/strigi
At first I tried to just clone kdepim, but I needed the others as dependencies. The Strigi repository uses git submodules, so I had to do the following:
$ cd strigi $ bash change_to_development_git.sh
While I was trying to make everything compile without error, I needed to install the following packages. Please note that on your system you might need additional packages like build-essentials which I already had installed. Finding out which package is missing is quite easy from the cmake output.
$ sudo apt-get install libgrantlee-dev libsasl2-dev libprison-dev libical-dev libakonadi-dev libgpgme11-dev kdelibs5-dev libqtwebkit-dev libqt4-opengl-dev libiodbc2-dev libraptor2-dev librasqal3-dev librdf0-dev libbz2-dev libdbus-1-dev libfam-dev libclucene-dev libclucene-core1 libboost-all-dev libqjson-dev
The techbase told me to have some environment variables set, so I added this to my ~/.bashrc file.
# KDE export KDEDIR=/opt/kde export KDEDIRS=$KDEDIR:/usr export XDG_DATA_DIRS=$XDG_DATA_DIRS:/usr/share:/opt/kde/share
Then I sourced the file, to have the changes right away.
$ source ~/.bashrc
Of course I created /opt/kde and gave my user the necessary rights to write into this directory. Then for each repository I cloned before, I changed into the directory of the repository and executed the following commands.
$ mkdir build $ cd build $ cmake .. -DCMAKE_INSTALL_PREFIX=/opt/kde $ make -j 3 $ make install
In rare cases I got an error which I fixed by either installing a missing package or by editing some file. For example, in kdepim I needed to change build/kalarm/cmake_install.cmake because it was trying to install something to /usr where my user had no write access to. In strigi/strigidaemon/bin/daemon/eventlistener/eventlistenerqueue.cpp I had to add #include <unistd.h> in the beginning for it to build.
Once everything was build and installed, I removed my KDE PIM applications from Debian to be sure there are no conflicts. I couldn’t remove akonadi or some libraries because of dependencies.
$ sudo apt-get remove kontact kmail korganizer kaddressbook akregator
In the #kontact IRC channel I was told to execute the following command which allowed me to have access to the settings in the newly build applications.
$ kbuildsycoca4 --noincremental
After this is done, I would suggest a restart to be sure that no old libraries are loaded or old Akonadi is running.
Then you can start your new KDE PIM applications and enjoy them. I’m really impressed by the progress done over the last few years and especially enjoy IMAP idle for Inbox folders and the ability to run all PIM applications independent from each other. Kontact really is a professional full-fledged groupware client.
Have fun with your brand new PIM applications and consider contributing if you find the time!
Community News: Stabilizing Kolab 3
The past weeks the Kolab Community has been busy working on the upcoming release of Kolab 3. We had people trying out fresh Kolab installs, or upgrading their existing installs to Kolab 3 alpha following the growing documentation. Also community members Michael Kiefer and Paul Klos worked on Debian packaging while Johannes Graumann is still testing their work. Jeroen van Meeuwen was working on making our awesome PHP LDAP capabilities generally available and wrote about why your system should have a proper FQDN. He also wrote a little script that assists users with migrating their Kolab 2.3 LDAP data to Kolab 3. This script still needs some feedback. So if you have a Kolab 2.3 server running, please check it out!
There's now also preliminary documentation on how to turn Kolab into a hosted platform including a page where individual users can sign up themselves. The Kolab Webadmin has an extensive API allowing for all kinds of different scenarios and integration.
New Releases
We of course have also been very busy fixing bugs and getting Kolab 3 ready. That work resulted in the following package releases. All of them can be downloaded at the usual location.
pykolab-0.5.4
Several bugs have been resolved, including
- Wallace incorrectly accepted messages to multiple recipients, causing the message to only be sent to the first recipient listed
- Annotations on default folders did not distinguish between shared and private namespace
- The default setup procedure did not include any of the "domain name spaces" known to be local (i.e. localhost, localhost.localdomain and the system's FQDN), causing mail bounces to be bounced themselves.
-
When the additional email addresses were changed or altered in kolab-webadmin, these changes were not stored after hitting the submit button. (bug #973)
pykolab 0.5.5
Another bugfix release of pykolab fixing several bugs:
- setup-kolab does not set up syncroton database tables (bug #1023)
- [kolab_smtp_access_policy] searches primary_domain for recipient addresses instead of hosted domain (bug #1017)
- Listing quotas using a wildcard causes traceback (bug #1006)
- Setting quota to zero (0) results in division by zero error (bug #1005)
- Polling for domains list against an external LDAP server for a secondary domain may fail miserably (bug #1004)
- syncrepl module not included with pykolab (bug #1002)
pykolab 0.4.16
This is a bug-fix release for the old Kolab 2.4.
kolab-webadmin 3.0.1
This release includes quite a long list of bug-fixes, and some enhancements even a refactoring of the LDAP backend. Some fixed bugs are:
- Default add form display undesired side-effects (bug #984)
- Can not view resources in webadmin (bug #982)
- Login into webadmin not possible for Non-DirectoryManager users (bug #981)
- effective_rights for user don't allow adding users in hosted scenario (bug #980)
kolab-webadmin 3.0.2
This is a bug-fix release for Kolab 3.0 mainly, but includes some enhancements for hosted environments as well.
libkolab 0.3.2
This releases fixes several bugs. For example one that caused a crash when updating the address book folder for that a patch was supplied by Laurent Montel. Many thanks to him! Another one is that libkolab now also allows for UTF-8 attachment names.
kolab-syncroton 1.0.1
This release fixes mainly folder issues for example the Calendar and Contact folder were not synchronizing properly on Android phones (bug #1029).
Why Your System Should Have a Proper FQDN
While only a warning in setup-kolab, some people set up a Kolab Groupware server with with an improper system fully qualified domain name, with all sorts of undesirable effects. I'm actually seriously considering making this warning a fatal error.
Why does a system require a proper FQDN? Is it actually required?
I'll answer the second question first, since it has the shortest possible answer: No.
Of course a proper FQDN is not absolutely required. But it is strongly recommended. For example, the default "localhost" and "localhost.localdomain" names you'll find in /etc/hosts (with address 127.0.0.1) are not "fully qualified domain names".
Right after you install a system (unless you have a fancy network infrastructure with (dynamic) DNS and DHCP, or a prepared DNS entry for a static IP address), the only way a system knows how to refer to itself is using these names "localhost" and "localhost.localdomain".
With a Kolab Groupware setup, this is somewhat problematic. Not because there's a guarantee it won't work, but because it is an insensible default, and secundary components that install alongside Kolab Groupware won't work as expected.
So what is a proper FQDN? Well, it exists of at least two parts: the host's name, and a domain name. For example, if the host's name is 'kolab01', and the domain name is 'example.org', the FQDN would be 'kolab01.example.org'. Please note that the domain name itself 1) exists of the domain name you (probably) registered and the top-level domain name you registered it with - apologies to those in the know, for bastardizing the terminology, and 2) may actually be a sub-domain name, such as 'ch.kolabsys.com'.
When you set a system's FQDN it is important that it exists of at least these three parts divided by a dot (.) character. Why?
A domain name (for example, 'example.org') is used for three purposes: 1) its IN A is probably pointed at a webserver, so that people can navigate to http://example.org equally well as http://www.example.org, 2) its IN A is used as a fallback recipient SMTP server address should no IN MX records exist, 3) it contains the SOA and NS records (authority statements, signatures, and other things).
Because of 1), the server to which the IN A for the domain name is pointing, it is unlikely (for larger deployments) that this is also the server on which the groupware deployment runs. Furthermore, it is best practice to set your MX records, possibly to the same system, but MX records nonetheless, so that you may have a level of redundancy (by supplying more than one MX record).
That said, the Kolab Groupware component that is the 389 Directory server refers to itself using the configured system's FQDN. While this can work should the IN A for "example.org" never change, it is more problematic should the system only be using 'localhost' or 'localhost.localdomain' - your 389 graphical console won't be able to connect to the administrator server with that set.
Furthermore, it is just bad, bad practice. A domain like 'example.org' is like a particular forest, and one of your systems is one of the trees. Unless you had a very specific deployment in mind, I'm sure you'll want to be able to refer to a single tree rather than only being able to refer to the entire forest as a whole.
That said, this is not what setup-kolab is developed to handle either. It'll chop off the first part of the "FQDN", so using 'example.org' will lead the setup to conclude you're going to want to set up for domain 'org'. It'll use that domain to build you a standard root dn as well, which in this example case would become 'org'. Settings that relate to login realms, and other sorts of stuff all over the place will result in unexpected behaviour, not to say fail.
First Experiences Installing the New Kolab 3.0
The Kolab Groupware Solution lets you synchronize your contacts and calenders over multiple devices and easily share them selectively with other users. It is a 100% Free Software and historically close to the KDE community, but you can also use it with a multitude of different clients such as Thunderbird. Ever since the first alpha version of the brand new Kolab 3.0 Groupware Solution was released, I wanted to give it a try. The new features and especially the freshly skinned webclient based on Roundcube got me excited. I’m still running an old Kolab 2.2 server on Debian for personal use and hope to be able to switch to 3.0 as soon as Debian packages are ready. So far the best system to run Kolab on is CentOS, because native packages exist. Even though I have virtually no experience with CentOS, I tried a test install in a virtual machine. Read on for my experiences.
Installing CentOS in VirtualBox
Being an advanced user, I started to follow the quick howto from kolab.org. So at first I had to download an ISO image of CentOS from a mirror. I decided to use VirtualBox because it has a nice GUI and is fairly easy to setup. Then I created a new VM called “Kolab Server” with Redhat GNU/Linux 64bit as an operating system because that was closest to CentOS. Afterward, I hooked in the ISO image as a virtual CD drive and booted the VM.
It booted right into a graphical GNOME environment showing me a button to install CentOS to the hard drive. Pressing that button a couple of times didn’t produce any result, so I figured out what the button was actually starting and ran that command from the terminal. There I was told that there wasn’t enough RAM available to execute the graphical installer. Thankfully the terminal installer was started right away for me and I could get going.
The install was quite easy. Just a few questions here and there. I decided to disable the firewall completely to not run into any trouble with that later. As soon as the installation was complete I didn’t want to work with the cumbersome VM window anymore and was looking into ways to access the VM with ssh. Turned out, I just had to configure Port Forwarding for the VM. So in VM Settings I selected “Attached to: NAT” in the “Network” tab. In “Advanced” I configured “Port Forwarding” as follows:
Name | Protocol | Host IP | Host Port | Guest IP | Guest Port guestssh | TCP | | 2222 | | 22
This allowed me to login with ssh from the host machine using
ssh -p 2222 root@localhost
Installing and Setting Up Kolab
Then I continued to follow the quick installation howto. Since the URL of the release package changed since the howto was written, I had to look up the proper URL by clicking on the provided link. The installation of Kolab itself took some time, but it went through without errors. Starting setup-kolab resulted in the following warning:
WARNING: The Fully Qualified Domain Name or FQDN for this system is incorrect. Falling back to 'localdomain'.
Since I had already heard about problems with incorrect domain names, I decided to take the warning seriously and abort the setup by pressing Ctrl+C. To get some more advanced help on the issue I moved over to docs.kolab.org for the extensive installation guide. It told me that the setup “requires that the Fully Qualified Domain Name (FQDN) for the system resolves back to the system”. So in /etc/sysconfig/network I added HOSTNAME=kolab.example.org and in /etc/hosts I added 10.0.2.15 kolab.example.org since 10.0.2.15 was the IP address of the VM. Apparently, it is important not to use 127.0.0.1 here. Then I had to reboot for the hostname change to take effect.
After the VM came back up, I logged into ssh and ran again:
# setup-kolab
This time, it started without warnings and asked me to provide many many passwords. You can see that Kolab still takes security seriously. I’ll post the output of setup-kolab below.
Please supply a password for the LDAP administrator user 'admin', used to login
to the graphical console of 389 Directory server.
Administrator password [ZqtSz8nIQI6f4hR]:
Please supply a password for the LDAP Directory Manager user, which is the
administrator user you will be using to at least initially log in to the Web
Admin, and that Kolab uses to perform administrative tasks.
Directory Manager password [KzHd2dVQ2o9JkXr]:
Please choose the system user and group the service should use to run under.
These should be existing, unprivileged, local system POSIX accounts with no
shell.
User [nobody]:
Group [nobody]:
This setup procedure plans to set up Kolab Groupware for the following domain
name space. This domain name is obtained from the reverse DNS entry on your
network interface. Please confirm this is the appropriate domain name space.
example.org [Y/n]: n
Domain name to use: kolab.example.org
The standard root dn we composed for you follows. Please confirm this is the root
dn you wish to use.
dc=kolab,dc=example,dc=org [Y/n]:
Setup is now going to set up the 389 Directory Server. This may take a little
while (during which period there is no output and no progress indication).
Shutting down dirsrv:
kolab... [ OK ]
Starting dirsrv:
kolab... [ OK ]
Please supply a Cyrus Administrator password. This password is used by Kolab to
execute administrative tasks in Cyrus IMAP. You may also need the password
yourself to troubleshoot Cyrus IMAP and/or perform other administrative tasks
against Cyrus IMAP directly.
Cyrus Administrator password [kplMHHzS_U3QRP2]:
Please supply a Kolab Service account password. This account is used by various
services such as Postfix, and Roundcube, as anonymous binds to the LDAP server
will not be allowed.
Kolab Service password [IWx-2tE0QoC-VcZ]:
Shutting down postfix: [ OK ]
Starting postfix: [ OK ]
Shutting down amavisd: The amavisd daemon is apparently not running, no PID file /var/run/amavisd/amavisd.pid
[FAILED]
Starting amavisd: [ OK ]
Stopping clamd.amavisd: [FAILED]
Starting clamd.amavisd: LibClamAV Warning: **************************************************
LibClamAV Warning: *** The virus database is older than 7 days! ***
LibClamAV Warning: *** Please update it as soon as possible. ***
LibClamAV Warning: **************************************************
[ OK ]
Stopping wallaced: [FAILED]
Starting wallaced: [ OK ]
Initializing MySQL database: [ OK ]
Starting mysqld: [ OK ]
Please supply a root password for MySQL. This password will be the administrative
user for this MySQL server, and it should be kept a secret. After this setup
process has completed, Kolab is going to discard and forget about this password,
but you will need it for administrative tasks in MySQL.
MySQL root password [gOZS47jIzy8HOXy]:
Please supply a password for the MySQL user 'kolab'. This password will be used
by Kolab services, such as the Web Administration Panel.
MySQL kolab password [gsc5FFDJOgGGsOX]:
Please supply the timezone PHP should be using.
Timezone ID [UTC]: CEST
Please supply a password for the MySQL user 'roundcube'. This password will be
used by the Roundcube webmail interface.
MySQL roundcube password [j_dvolYPbVVfT8I]:
Stopping httpd: [FAILED]
Starting httpd: [ OK ]
Shutting down cyrus-imapd: [FAILED]
Starting cyrus-imapd: [ OK ]
Stopping kolab-saslauthd: [FAILED]
Starting kolab-saslauthd: [ OK ]
Stopping kolabd: [FAILED]
Starting kolabd: [ OK ]At first I was afraid seeing these [FAILED] services, but then I realized that stopping services that haven’t been started yet will of course fail. There’s already an enhancement request for suppressing this and other unnecessary output from the setup script. Feel free to work on this request. It is a simple python script, so that should be an easy exercise.
Trying out Kolab
So now Kolab was installed and setup. Surprised by how smoothly that went I was asking myself “What now?”. So I looked in the documentation which pointed me to first login in the web-based administration panel. Since I had no graphical environment installed on the server, I had to forward ports again, to be able to access it from the host machine.
Name | Protocol | Host IP | Host Port | Guest IP | Guest Port guesthttp | TCP | | 8080 | | 80
So now I could go to http://localhost:8080/kolab-webadmin/ and login with cn=Directory Manager and the password KzHd2dVQ2o9JkXr that was supplied during the setup process. The login worked well and I could see the shiny webadmin. I was only surprised to find no way to add users, so I asked in IRC. There I was pointed to the documentation again. Since I used the quick install guide, I completely missed the section “Preparing the System”. There was a paragraph on SELinux that says “Not all components of Kolab Groupware are currently completely compatible with running under SELinux enforcing the targeted policy”. So in /etc/selinux/config I had to change SELINUX=enforcing to SELINUX=permissive. This way SELinux just prints a warning, but doesn’t enforce the policy. I again restarted VM, reloaded the webadmin page and had still no links to add users. It turned out that I just had to terminate the current webadmin session by logging out and in again, and there the link appeared.
Now I created a test user and ran the following to verify that it was created successfully.
# kolab list-mailboxes user/test.test@kolab.example.org user/test.test/Archive@kolab.example.org user/test.test/Calendar@kolab.example.org user/test.test/Calendar/Personal Calendar@kolab.example.org user/test.test/Configuration@kolab.example.org user/test.test/Contacts@kolab.example.org user/test.test/Contacts/Personal Contacts@kolab.example.org user/test.test/Drafts@kolab.example.org user/test.test/Journal@kolab.example.org user/test.test/Notes@kolab.example.org user/test.test/Sent@kolab.example.org user/test.test/Spam@kolab.example.org user/test.test/Tasks@kolab.example.org user/test.test/Trash@kolab.example.org
Great! It worked. Now I moved on to try the webmailer based on Roundcube by going to http://localhost:8080/roundcubemail. I was quite pleased by what I saw. It looke quite nice, a lot better than the old Roundcube skin and seemed to work flawlessly. Only when I sent a test mail to the test user, I noticed that there was a ServerError when checking for new mails. A look in /var/log/httpd/error_log indicated that I had foolishly specified the wrong timezone during setup. So I had to change it in /etc/php.ini from date.timezone=CEST to date.timezone=Europe/Berlin and restart apache with
# service httpd restart
From now on everything went smoothly and I had a working Kolab server running. Overall I was quite pleased how easy and fast the installation went. Configuration also improved significantly compared to the old Kolab release in Debian. There were a few problems during the installation, but all of them were caused by mistakes on my side and by not starting with the full documentation.
So if you are interested in Kolab, please give it a try and let me know about your experiences!
Making Our PHP LDAP Capabilities Generally Available
In our web client based on Roundcube, we have had a need to get very large LDAP directories to function as an address book. While "large" is a relatively subjective term, in terms of LDAP "large" simply means running out of time, or meeting the look-through or size limits. Additionally, of course, PHP itself is subject to memory size and maximum execution time restrictions.
We weren't the first to run into these problems, of course, but with a little help we came up with a very, very good solution. Using Virtual List View (VLV) control and Server-Side Sort (SSS) control, browsing very large address books page-by-page takes maybe a tenth of a second per page. Roundcube address book problem solved (thanks Thomas, thanks Robert!)
But are they complex?
VLV and SSS controls are both very complex (the former more than the latter), with configuration on the LDAP server required and client-side BER encoding magic involved. I am not a programmer, let alone traditionally educated, so to me the PHP code (or the code's capabilities, rather) resulting from this effort is simply awesome. To properly function, it requires a patch to PHP to be applied, which I've now submitted for upstream inclusion. Kolab Groupware ships its own PHP packages solely to include this patch. There's many other gotchas to take into account as well.
Gotcha!
To use server-side sorting, you have to create an index on the LDAP server with a single attribute containing a list of attribute names using which entries can be sorted. When using LDAP from a client, you have to specify that exact same sort order.
To use Virtual List View controls, you require a successful hit on the server-side sorting (as that is the index). You also have to configure the LDAP server with a search (for which it requires a base, filter and scope). When using LDAP from a client, in addition to hitting the server-side sorting, you have to hit those three exact same search parameters as well.
That may not sound so difficult...
Complications with the User Interface Context
However, an LDAP client like Roundcube lists and/or searches differently based on the context.
One context is the address book. Typically one would browse an addtress book sorted by "Surname, Givenname" or "Givenname Surname". These one or two attributes (displayName can be put to very good use here) would then be included in the server side sorting. But then again, who sensibly browses a very large address book page by page? A 1000 entries with a page size of 40 results in 25 pages already - address book sizes I speak of when I say "large" are literally hundreds of thousands of entries.
So the keyword is searching - but searching is a complex realm in and by itself. If you were allowed to search only on the attributes included in a SSS and VLV, searching is virtually useless (all puns intended). Searching would basically allow you to list VLV entries starting with the first result your search had found.
You would like to search by location, phone number, department, organization, email address and other attributes. This is difficult to do efficiently, but can be done. The show-case is in what I'm sort of announcing in this blog post.
After your search results are in, you would still like them sorted somehow. If you would like to know who lives in Narnia and search for it, your results should not look like so:
- Narnia
- Narnia
but like so (for example):
- Doe, Jane
- Doe, John
A second context is auto-complete. In it's very nature, auto-completion is always a search (and not simply a paginated list of all entries), similar to the search for people living in Narnia. You can imagine how a set of search results could need to be paginated if there were many people living in Narnia.
Furthermore, in the user interface context where you use auto-complete (the compose window, the ACL entry management on folders), no address book interface pop-up is available, as only a small list with hits is displayed. The pages are much smaller, increasing the change the result set needs pagination.
Naturally, auto-completion searches for a limited set of attributes - but also most likely different attributes than an address book listing. Most likely, a search for the purpose of auto-completion looks at a display name ("Doe, J. (Engineer)", perhaps), a given name ("Jane", "John"), a surname ("Doe"), any email address (mail, alias, mailalternateaddress, mailforwardingaddress attributes), etc.
Imagine these searches would occur without the help of pre-sorted indexes. A million-and-one LDAP entries may need to be searched, all results would need to be obtained, the results would then need to be sorted, to then return only the first 10-15 entries. Wouldn't it be great if you could search, sort and paginate with the help of pre-sorted indexes?
But... I did mention earlier, the three magic search parameters need to match the server-side VLV search configured. As it turns out you can actually specify additional search parameters, but only in a very specific way. More awesome stuff I'm announcing in this blog post.
And all of this is only in Roundcube?
Within the Kolab Groupware realm, we have more components that hook into LDAP and perform listings and searches. Two of them are the Kolab Web Administration Panel (or actually, its API) and Syncroton.
So I've had multiple agenda's to attend to; 1) avoid needing to do actual programming for the Web Administration Panel, 2) avoid requiring Roundcube libraries with both the WAP and Syncroton and 3) further enhance our LDAP capabilities for yet even more awesome stuff.
I give to you Net_LDAP3 - not yet a PHP PEAR module, because it's a work in progress, and I don't like their license requirements and I don't like their function naming conventions (camel-case, basically).
My target is to integrate all of the LDAP functionallity required with Roundcube, our Kolab plugins for Roundcube, the WAP and Syncroton.
I've already achieved the following milestones:
- Unless specifically configured, or specifically disabled, or not a supported control on the LDAP server, the Net_LDAP3 module automatically discovers available settings for VLV/SSS listings (method list_entries())
- A method search_entries() with an argument for additional search parameters that automatically uses VLV/SSS configured or discovered but with the additional filter settings,
- Validation of the desired sorting,
- Automatic selection of one sorting configuration out of available sorting configurations,
- Allow a method login() to find a user entry before binding as the user being logged in,
- The execution of a registered hook to obtain or set configuration items using a routine external to Net_LDAP3,
- The execution of a registered hook to use for logging,
- Trace and debug levels
Obviously there's still many things on my TODO list, which ends with patching Roundcube, the WAP and Syncroton to use this module.
Community News: On The Way to Beta
Last week Kolab 3.0 alpha1 was released. Finally feature-complete, Kolab 3.0 will largely only stabilize further from this point on forward. From the length of this news update you can see that we have been everything but lazy the past week. We've helped plenty of people on the mailing list and on IRC to get the brand new Kolab installed and heard many success stories and happy users.
There's many things still left on our TODO list, including providing all the necessary documentation to upgrade existing Kolab deployments to Kolab 3.0. While testing these upgrades now, we find issues with the tool chain we provide that will need to be resolved before we can publish the documentation on docs.kolab.org. We appreciate help in testing real-life upgrade scenarios! I myself, for one, have so far used a real-life test corpus.
Documentation (General and Upgrade Paths)
There's a lot of work in documentation, which is easy enough to contribute to when considering most of the information on the Kolab wiki is outdated for native packaging, though some information is still very relevant (such as the Fighting Spam article, that has been included in the Administrator Guide). We have 4 different upgrade scenarios to document:
- Upgrade from an OpenPKG installation (Kolab 2.2 or 2.3),
- Upgrade from a Kolab 2.4 installation (with native packages),
- Upgrading Cyrus IMAP from 2.3 to 2.4 (third-party product integration),
- Upgrading the format from Kolab v2 to the new Kolab v3.
While I myself am working on 1) in combination with 4), I learn a couple of things about 2) and 3) as well, but I'm merely migrating data over and upgrading the format. Given the lessons learned, it will take us a little while longer than we expected, to come up with a properly documented upgrade path that is likely to work for most of you. For those of you interested in working on the upgrade path(s), please see the documentation GIT repository where the texts are being developed and maintained (see the Upgrading_*.xml files).
Preliminary documentation for 1) upgrading from an OpenPKG installation (Kolab 2.2 or 2.3) is now available. Please help us test this procedure as well.
Localization
Most of the Kolab components these days allow their texts to be localized, including the Kolab daemon, SMTP Access Policy, command-line tools, and the Web Administration Panel and API. We are aware our strongest userbase is in Europe, and we all know many different languages are spoken in Europe.
We have created the opportunity to easily translate Kolab at the localisation platform Transifex. Please check it out and translate a few strings. Every word helps! ;)
Packaging
We have many users interested in Debian and/or Ubuntu packages, but we do not have the packagers to do the packaging. So far, I've only managed to get Kolab 2.4 on Squeeze to a state in which it is missing only the Roundcube packages, after which we can start testing how well "setup-kolab" behaves and deal with the fallout. Naturally, work is needed for Kolab 3.0, and for Wheezy, Sid and Ubuntu platform versions.
Become a Kolab Community champion by providing the many users with the few packages. Please simply write to the Kolab development mailing list (kolab-devel at kolab dot org).
New Releases
kolab-utils-3.0.1
This is a bug-fix release for Kolab 3.0, solving a single bug with the upgrade toolchain. A download is available from the usual location, as "it is either tagged or it doesn't exist".
pykolab-0.5.3
We have released pykolab-0.5.3, a bug-fix release containing small enhancements as well. This release is available from the usual location and is available for native package deployments as an update in the kolab 3.0 development repository.
The most important changes since 0.5.2 are:
- A new configuration section in /etc/kolab/kolab.conf is available: [kolab_hosting]
This section contains setting related to Hosted Kolab deployments, for which more work and more documentation is still pending. - Added a command to list mailbox ACLs. Usage:
$ kolab list-mailbox-acls <mailbox-pattern>
$ kolab lam <mailbox-pattern> - Added a command to set mailbox ACLs. Usage:
$ kolab set-mailbox-acl <mailbox-pattern> <subject> <rights>
$ kolab sam <mailbox-pattern> <subject> <rights>
Examples:
$ kolab set-mailbox-acl shared/lists@example.org john.doe@example.org lrs
$ kolab set-mailbox-acl user/jane.doe*@example.org joe.sixpack@example.org lrs - Added a command to delete mailbox ACL entries. Usage:
$ kolab delete-mailbox-acl <mailbox-patter> <subject>
$ kolab dam <mailbox-pattern> <subject> - Added a new command list-mailbox-metadata. Usage:
$ kolab list-mailbox-metadata <mailbox-pattern>
Example:
$ kolab list-mailbox-metadata user/john.doe/Calendar@example.org - Added a new command set-mailbox-metadata. Usage:
$ kolab set-mailbox-metadata <mailbox-pattern> <metadata-key> <metadata-value>
Example:
$ kolab set-mailbox-metadata user/john.doe/Calendar@example.org /shared/vendor/kolab/folder-type "event.default" - Added a new command rename-mailbox. Usage:
$ kolab rename-mailbox <old-mailbox> <new-mailbox>
Example:
$ kolab rename-mailbox user/jane.doe@example.org user/jane.sixpack@example.org
kolab-webadmin-3.0.0
This is a bug-fix and enhancement release, as up and until today we've included only development snapshots in Kolab 3.0 (alpha1). This release can be downloaded from the usual location.
The most important changes are:
- The domain name space selection box displayed on login has been removed again.
This was a temporary work-around for multi-domain deployments, that allowed a user to log in to one of the domains available. We have now settled on a convention in which specifying @domain as part of the login username will attempt to log the user in to that domain, and if no domain is specified, a login attempt against the primary domain will be attempted.
Users will basically log in with their uid@domain, or full mail or alias email addresses, if they are not in the primary domain. - The log system is overhauled, and now allows for trace, debug, info, warning and error messages to be logged separately, and without code modification - whereas previously, to get trace information, all console() calls needed to be uncommented.
This introduces a new setting available in the [kolab_wap] section of /etc/kolab/kolab.conf, named "debug_mode". Set this to a string of either trace, debug, info, warning or error (with the default being "error"). - A preliminary interface for registration with Hosted Kolab deployments is included. Manual intervention is required to fully deploy and enable this interface, including a database schema update, for which testing and documentation is pending.
roundcubemail-plugins-kolab-0.7.3
This is a simple bug-fix release. There's a list of fixed bugs available in our issue tracker.
libkolabxml-0.8.1
We've released version 0.8.1 of libkolabxml, with a couple of bug-fixes, primarily in relation to exception handling and encoding problems we've experienced. The download is available at the usual location.
libkolab-0.3.1
We've released version 0.3.1 of libkolab - another bugfix release with fixes primarily related to PHP bindings (naming and location), encoding handling, and the format upgrade for Kolab 3.0. You can find this release for download at the usual location.
kolab-utils-3.0.2
We've released kolab-utils version 3.0.2 - a bugfix release for Kolab 3.0, hopefully resolving most of the format upgrade issues. You can download this release at the usual location.
LDAP
While the data is being worked on, this means that for a migration of LDAP data, we, the community at large, would appreciate help. If a migration of LDAP data (from OpenLDAP to 389 Directory Server) isn't desirable, then perhaps a data migration from OpenLDAP on a Kolab OpenPKG deployment to OpenLDAP on native packages is.
I have completed the base integration layer necessary to have the Kolab daemon run against an OpenLDAP server using Syncrepl, during our Sprint in Berlin, which needs testing, bug reports and perhaps even some further development.
Bug Reporting
We encourage you to log tickets in our issue tracker, whether the issue be big or small. We apply two golden rules (of thumb):
- If something is unexpected, it is a bug.
- If it isn't in Bugzilla, it doesn't exist.
We therefore encourage you to take everything that raises your eyebrow or doesn't quite work the way you expected, and put it in a ticket.
SyncKolab 2.0.2 released
Version 2.0.2 of the Thunderbird Extension SyncKolab was just released. It is a maintainance release fixing many bugs and is available for direct download. If you are new to SyncKolab, we have a step by step guide on how to use SyncKolab with Thunderbird and Lightning. Please note that SyncKolab does not yet work with the new Kolab 3 Format.
These bugs were fixed:
- #24933 Hide folders does not work.
- Remove periodic sync option (this is deprecated by the listener).
- Add close-window-when-done option to configuration dialog.
- #24934 message date checking on contacts removed.
- #24938 Fix for window to small.
- #24936 Fix problem with list sync.
- #24954 Fix problem with auto sync.
- #24957 Fix problem with list names with spaces.
- Fix problems with name in the uid (i.e. for mailing lists or irregular clients).
- #24959 Fix problem with multiple accounts.
- #24967 Add utf-8 en-/decoding when writing the sync cache files.
- #24986 Make status columns resizable.
- #24960 Fix monthly recurrence rules.
So What's Next?
With the release of the Kolab 3.0 alpha1, we now enter a stage in the development process and release management called testing. Usually an alpha release is sort of a development snapshot, but to be honest with you we didn't change as much as you might think, between 2.4 and 3.0.
One of the things that needs testing is the upgrade of your system to Kolab 3.0, be it from Kolab 2.2, 2.3 or 2.4.
I am, therefore, writing some documentation on performing that upgrade.
Alpha of Kolab 3.0 and Roundcube 0.8 released
The new version of the Kolab Groupware Server is now feature complete and ready for the first alpha. Alongside with today's release of Kolab 3.0 alpha1, the Kolab web client Roundcube was released in version 0.8. The Kolab Groupware solution now integrates better into existing user directory setups. Security as well as scalability has been improved. It is now possible to scale all functional components of Kolab separately. Also, there is a new unified command line utility for administrative tasks.
This alpha version is meant for testers and early adopters and is explicitly not intended for use in production environments. Installation instructions can be found on docs.kolab.org. There are also quick installatioin instructions for the impatient. All bugs should be reported on issues.kolab.org. Thanks to native packages, Kolab 3.0 alpha can be used as a rolling release. This way, users effortlessly stay close to the latest development, do not have to upgrade to beta, rc and final releases, and receive bug fixes immediately. Once Kolab 3.0 is matured and stable, enterprise packages of certified Kolab can be obtained from Kolab Systems.
Web Client Roundcube 0.8
With Kolab 3.0 Roundcube becomes the default web client for the Kolab Groupware solution. Development of this Free Software initiative is therefore funded by Kolab Systems. Contacts, Calendars and, with Kolab 3, also Tasks can be managed by Roundcube. The new 0.8 release features a brand new skin for an enhanced visual experience that should make day to day work more pleasant. Generally Roundcube was made more stable and its performance was improved. It also includes more robust session handling that fixes the accidental session timeouts of earlier versions. The LDAP address book now properly supports photos, country object classes and serialized address values. A new address book widget now simplifies the selection of recipients when composes emails. Last but not least, Roundcube's license was changed from GNU GPLv2 to GNU GPLv3 or any later version.
Web Administration Panel
Kolab 3.0 comes with a customizable web based administration front-end that allows management of users and groups. New in version 3.0 is the management of resources, domains and roles. New mail domains and domain aliases can easily be added and user roles such as administrators and domain maintainer can be created and assigned. It is also possible to set role- or group-based plugins and settings for the Kolab web client and to enforce access policies for the Kolab server. Furthermore, an API is provided to access all functionality of the web administration panel. This way it is easy to integrate Kolab administration tasks into existing administration front-ends. A sample API client is included that can be used by webmail providers to sign up Kolab users.
Kolab Server
The server components have been rewritten completely for the 3.0 release and ensure that the code-base is easier to maintain and to contribute to. For example, all dependencies of old Horde code have been removed. The Kolab daemon that ships with Kolab 3.0 has also been rewritten. It now supports mail-flow monitoring, enforces recipient policies, quota and can be extended with Python modules. These modules can handle emails on the fly and could for example add corporate footers or even do in-line translation of emails.
Kolab now uses the 389 Directory Server per default, but still supports OpenLDAP. The system that shows when users are free or busy without revealing their detailed calendars has undergone a rewrite as well and benefits from a more modern code-base.
The Open Standards Kolab uses to store its data are governed by the Kolab Enhancement Proposals. Over the years, several enhancements have been proposed and accepted which made an overhaul of the Kolab Format necessary. The new format saves calendar data in the xCal and Contacts data in the xCard format. It removes ambiguity and makes the Kolab format future proof and extensible for coming features. To ease transition to the new format a upgrade tool is provided. There is also a libkolab library with several language bindings that can read and write both formats. It can be used in Kolab clients to support the new format easily.
Mobile Synchronisation
Since version 2.3 Kolab relies on the ActiveSync protocol to connect mobile clients to its server. With Kolab 3.0 the new ActiveSync implementation Syncroton replaces the old Z-Push stack which improves performance significantly. Authentication is now harmonized with other Kolab clients and also supports credential separation. This security feature allows for different authentication credentials on mobile devices. Should a device get lost, the main credentials are not compromised.
Screenshots
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Kolab Client for Windows based on Kontact 4.8
A new version of the Kolab client for Windows has just been released. The installation package can be downloaded from files.kolab.org. Even though it includes a huge amount of bugfixes and is fully usable, this Kolab client package is still named "Rough Cut" by its maintainer Andre Heinecke, because there is still some room for more stabilization. If you want to deploy a Kolab client on Windows machines professionally, you can buy an enterprise version from Kolab Systems. They offer professional support and can assist you with deployment and configuration.
If you find any bugs, please report them to bugs.kde.org and add <aheinecke at intevation dot de> to the CC list, so he will be notified. This Kolab client for Windows release will be the last one of the 4.8 series. Further development will now focus on the 4.9 branch of Kontact and will include features such as Kolab 3 support, new Google PIM data import and improved search functionality.
Results from the Kolab Sprint in Berlin

This week members of the Kolab Community met in Berlin for some very productive face to face work on the upcoming release of Kolab 3.0 alpha. Developers from ownCloud, Roundcube, KDE, Cyrus IMAP, Fedora, and of course Kolab sat together for one week, discussed, hacked and celebrated. Employees of Kolab Systems used the opportunity to meet with several business partners and a usability expert provided some valuable input that will be used to make Kolab clients more user friendly.
The Syncroton maintainer assisted Kolab developers to finish the integration of a brand new mobile synchronisation framework for Kolab 3.0. The Kolab backend was ported to a new API, many bugs were fixed, the synchronisation performance was significantly improved and all essential features are finished.
Roundcube already being the default Web-Client for the Kolab Groupware had two developers present. They put finishing touches on the new skin that improves the look of Roundcube enormously. Also, the groupware functionality of Roundcube is now feature complete, since it is able to handle tasks. But for coming versions of Kolab, there were plenty of ideas for new exciting features.
The developers of ownCloud including the maintainer and founder Frank Karlitschek came to Berlin to help to integrate ownCloud into the Kolab web client. A basic integration was completed. ownCloud can now be shipped, installed and configured alongside Kolab. They can even share the same user directory based on LDAP. There were several lively discussions on how to integrate ownCloud even more seamlessly which resulted in many ideas and tasks that will be worked on in the coming weeks after the sprint.
Several minor technical problems have been solved during the sprint. These include the management of resources such as cars by Kolab. People can reserve them on a first come first serve basis. After the sprint there is still some potential for performance improvements when resolving conflicts with thousands of resources. Another technical detail that was resolved is integration into openldap that now works as well as with the 389 Directory Server. The free/busy daemon is now feature-complete and overall configuration management. Unfortunately, the planned work on native packages for common GNU/Linux distributions did not happen, since nobody from these communities was present. We are still welcoming and supporting any packaging efforts that are developing.
Overall, it was a great event. Some people met for the first time, had many beers together and got to know each other so well that future collaboration will benefit a great deal. The Kolab community would to like to especially thank KDAB for providing the office space and refreshments for the Sprint. We are all looking forward to meet each other at the next Kolab event which will hopefully happen soon.
Warming up to sprint: Kolab 3.0 Pre Sprint Release, Talk Schedule and next round of drafts for Web Client
If you follow our streams at Identi.ca, Twitter, Google+ or Facebook, you’ll have noticed that we pushed out the first installable Kolab 3.0 release yesterday. I lack the words that adequately describe how excited I am about this, to be honest.
This is not a full release yet, mind you, as we are just getting ready to sprint, so this is not yet feature complete – a pre-alpha, if you will. It is however nearing feature equivalence for the 2.3 series, so we are quite confident for the upcoming Kolab 3.0 release. Whatever we manage to complete during the sprint, including whatever the community manages to come up with during the sprint, will then end up in the Kolab 3.0 release.
In order to make that even easier, we’ll also have a series of talks during the sprint, starting with a Kolab 3.0 walk through by Jeroen van Meeuwen, our Systems Architect, who will give you the tour de force of what has been done for Kolab 3.0. On Tuesday Christian Mollekopf will talk about libkolab which provides an API for any technology that wishes to integrate with Kolab 3.0. Never before has it been more easy to hook other technologies up with Kolab.
Wednesday and Thursday will then be covered by the Kolab Systems Web Powerhouse, Thomas Brüderli and Aleksander Machniak, the original architect and author, as well as the most active contributor of the Roundcube Web Client and the new Kolab Web Client which incorporates Roundcube and adds more groupware functionality. Their talks will be about the new ActiveSync stack we have been experimenting with, and the next generation of the web client, including the new skin.
With regards the new skin, Michael Krautwasser, Roundcube’s designer for many years, has provided a new set of designs for the Kolab Community Web Client and seeks comments. You can find them at
- https://bueroflint.box.com/s/d1b730349d9d15fbf913
- https://bueroflint.box.com/s/9bade049a121ac47b320
- https://bueroflint.box.com/s/49ead7309af10852ad2b
- https://bueroflint.box.com/s/77095416933ec022eff6
and your comments are best sent to kolab-devel@kolab.org.
So if you want to take a look, help iron out last glitches, participate in the sprint remotely or on site, here are the installation instructions for the pre-sprint pre-alpha Kolab 3.0 release. More information on the sprint is found here and of course on the Kolab Community Wiki.
Hope to see you next week in Berlin!
Sprint News and Pre-Alpha Release of Kolab 3.0
The first Kolab Technology sprint is about to happen next week. Many developers will meet in Berlin to have some fun with awesome new technology. For example, three ownCloud developers will be present to work with the Kolab community on integrating ownCloud with Kolab 3.0. Check out the sprint's wiki page for more information on topics and participants.
In order to enable everybody to work on the same brand new code and to have a common platform, we are already releasing a pre-alpha version of Kolab 3.0. This version is only intented for development and should never ever be used on a production system. We also provide straight-forward and easy instructions for the installation.
The presentations will start with Jeroen van Meeuwen who will give a fast-paced walk-through of Kolab 3.0, with what changed, and motivations to have changed, and how it looks/works today. Thomas Brüderli, the Roundcube maintainer and Kolab Systems employee will talk about Roundcube – The new Web Client for Kolab. He will give a short introduction into the Roundcube project and how it became a fully functional web client for the Kolab Groupware. Alexander Machniak and Lars Kneschke are going to present and work on Syncotron the new ActiveSync stack which will replace z-push in Kolab 3.0. KDE PIM developer Christian Mollekopf will talk about libkolab and client integration possibilities. His presentation titled "libkolab: Kolab made easy, everywhere" will feature a short introduction to the new xCal/xCard based Kolab Format 3.0 and the problems that are addressed with the specification, as well as an overview over the two new kolab libraries, libkolab and libkolabxml, showing what they can provide to client implementors, to make their implementation easier, while at the same time improving interoperability.
Here's the current schedule of the presentations:
| Time | Speaker | Presentation |
| Monday 10am | Jeroen van Meeuwen | Kolab 3.0 walk-through |
| Tuesday 6pm | Christian Mollekopf | libkolab: Kolab made easy, everywhere |
| Wednesday 6pm | Alexander Machniak and Lars Kneschke | Syncotron - Synchronization done right |
| Thursday 6pm | Thomas Brüderli | Roundcube – The new Web Client for Kolab |
Kolab 3.0 pre-alpha Release and Installation
In order to enable developers at the Kolab Technology Sprint to work on the same brand new code and to have a common platform, we have released a pre-alpha version of Kolab 3.0. This version is only intented for development and should never ever be used on a production system since it might do all sorts of nasty unexpected things such as eating your children and causing a word-wide financial collapse.
Here is a quick HOWTO by Jeroen van Meeuwen on installing and configuring the pre-alpha release of Kolab 3.0 on a CentOS 6.3 system. The setup is actually quite similar to installing Kolab 2.4 on CentOS 6.2.
Install the epel-release package. At the time of this writing, this means executing:
# rpm -Uvh http://mirror.switch.ch/ftp/mirror/epel/6/i386/epel-release-6-7.noarch.rpm
Install the kolab-3.0-community-release package. At the time of this writing, this means executing:
# rpm -Uvh http://mirror.kolabsys.com/pub/redhat/kolab-3.0/el6/development/i386/kolab-3.0-community-release-6-1.el6.kolab_3.0.noarch.rpm
Install the kolab-3.0-community-release-development package. At the time of this writing, this means executing:
# rpm -Uvh http://mirror.kolabsys.com/pub/redhat/kolab-3.0/el6/development/i386/kolab-3.0-community-release-development-6-1.el6.kolab_3.0.noarch.rpm
Install Kolab Groupware like so:
# yum install kolab
Setup Kolab with a minimal amount of interference:
# setup-kolab
This will setup Kolab Groupware including LDAP, Postfix, Cyrus IMAP, Roundcube, Free/Busy and ActiveSync using the information available on the system and a minimal amount of input. For greater flexibility during the setup process, please read the Configuration chapter in the documentation.
Now With Extra Added Fellowship
Last week I was surprised to receive an email from Shane Coughlan inviting me to become a Fellow of the OpenForum Academy. The current Fellowship has some of my personal heroes in there and so it was exciting and humbling to receive such an offer.
From their website:
OpenForum Academy is a think tank with a broad aim to examine the paradigm shift towards openness in computing that is currently underway, and to explore how this trend is changing the role of computing in society.
and:
OpenForum Academy is an independent programme established by OpenForum Europe. It has created a link with academia in order to provide new input and insight into the key issues which impact the openness of the IT market. Central to the operation of OpenForum Academy are the Fellows, each selected as individual contributors to the work of OFA. A number of academic organisations have agreed to work with OFA, working both with the Fellows and within a network of contributors in support of developing research initiatives.
During Akademy last week I was very impressed by the keynote presentation given by Will Schroeder of Kitware. At the core of his talk was a concern that research should be open by default, but it isn’t: peer review is a black box and publishers charge a fortune for access to the final paper. Over dinner we spoke at length on this matter.
I am lucky in that my career is no-longer tied to my publication record. This allows me the freedom to do my research when and where I want. Typically this means I treat all my research as “work in progress”. As and when I make little steps forward, I publish what I have done in my blog and gather feedback.
I have now taken the decision that whenever I have a complete piece of work I will publish:
- in an open-access journal;
- my data and the method I used to gather it;
- any tools I used to process that data.
Kolab 3.0: Update,overview and release plans
Almost half a year ago I had the pleasure to write the Kolab 3.0 primer, and ways of getting involved. Optimistically I scheduled the release for May/June 2012 in that posting. Attentive readers may have noticed that it is no longer June and Kolab 3.0 hasn’t been released yet.
So perhaps it is time to provide an update and overview.
The main culprits for delays in this first release done by the new team are pretty much the usual suspects: Everything is more work than expected, you end up having to do more than you initially planned, including unforeseeable interruptions and there was less help than you hoped for.
The good news is: We’re almost there.
Much work has gone into the invisible underbelly of the technology, starting from the Kolab XML
format itself. Christian Mollekopf has done an unbelievable amount of work on libkolabxml and libkolab, the refactored Kolab XML format, and its API with wrappers in multiple programming languages to make Kolab integration as easy as being able to call the API to manipulate Kolab objects.
Christian also put Kolab XML V2 format support into libkolab so that clients using libkolab can work against either version of the format, and largely finished a migration tool from version 2 to version 3 to provide users with a data upgrade path. And finally he re-based Kolab support in the KDE Kontact client that is the basis for our desktop client on libkolab for the KDE PIM 4.9 release already. In fact thanks to some supersonic packaging in the Fedora community I am already using libkolab with KDE PIM 4.9 rc 1 against all my Kolab 2.3 servers.
Also we had to shed the dependency on the outdated Horde 3 framework for Kolab 3.0, which meant a good deal of conceptual work, such as coming up with a new Free/Busy System or dealing with conflicts in ways that are far superior than anything Kolab has ever done while maintaining full off-line capability, one of Kolab’s great advantages over other solutions.
When looking at these pages it should become obvious how much time has gone into truly understanding the problems at hand and resolving them solidly in a way that is publicly documented and allows participation from anyone in the community.
Enabling participation is in fact what we spent a lot of time on throughout the past months, from the Kolab Community web site relaunch, over the IRC meetings for Kolab 3.0 planning and development, to the hiring of Torsten Grote as Kolab Evangelist who went to work on the community resources straight away and is your dedicated community-go-to-guy-for-all-things-kolab, all the way to the intermediate release of Kolab 2.4 to make it easy for people to get Kolab servers up and running that would allow to tap into and participate in the ongoing development.
That release also featured quite a bit of work by Jeroen van Meeuwen, our Systems Architect and specialist for the most complex set-ups that scale to hundreds of thousands of users or do things that are widely considered impossible. Again much of that work has happened in the background, but will be fundamental for a lot of things you’re about to see Kolab doing in the next years to come.
Among these things are trimming back LDAP schema extensions to ensure that Kolab integrates into existing directory services more easily, be they in pre-existing corporate infrastructures, in products that wish to integrate Kolab, in cloud offerings or in proprietary directory services where Kolab provides the first bridgehead for migration towards more freedom of choice and Open Standards.
Also Jeroen and Christoph have been giving a lot of thought to how resource management should work, because our experience all too often was that many things were not done right to enable the kinds of work flows and scenarios people wanted to implement – not just in Kolab, but pretty much anywhere. So we gave this one quite a bit of thought that Jeroen shared on his blog.
Other parts are configuration management, including the REST inspired API for configuration of the server and the server underlying configuration management which will allow using any kind of configuration management in the future. And of course Jeroen was the key person to get the 2.4 release out of the door, as well as many other things.
The first application to make use of that API is the new web administration front end developed by Aleksander Machniak, one of the main Roundcube developers on staff at Kolab Systems. Already available within Kolab 2.4, this web admin interface is independent of the kind of directory service or configuration mechanism used in the background and extensible to virtually any scenario. If you wonder how it looks, Jeroen put some screen shots up on his blog. And last but not least he has spent much time on getting our documentation up to speed.
But of course it wouldn’t be a proper release without something falling victim to triage. In this case the victim is Server Side Akonadi. While it will add truly magical capabilities to the Kolab server, we designed the Kolab 3.0 release such that it would remain an optional component to make sure we preserve the ability to scale all the way down to small embedded devices. So because it is optional, and because we did not want to delay the release further, we have put it at the back of the priority chain and removed it from the list of blockers. But you should expect to find it in one of the next series 3 releases.
And of course we haven’t stopped at having given Roundcube its push to the 0.7 release and developing our new web interface on top of it. We’re now also trying to think about how that next web client should look like and how to bring things together with the desktop clients.
For this we are working together with the professional designer who is also responsible for the current and future Roundcube skins, and you can find some of his designs for the next generation web client of Kolab online here. If you have comments, we’d be happy to hear your input and receive your help.
In case if you want to get involved in any of the areas we’re working on, the upcoming Kolab 3.0 Technology Sprint in Berlin is perfect place for that.
This is also where we will be working on finishing of some of the more exciting things we’ve been playing with, such as ownCloud integration for the web interface. This is something we already have sketched in our webmail.klab.cc demo instance and several people have found this close to usable. So we’re overjoyed that Frank, Arthur and Georg of ownCloud will join us for the sprint and invite others who have technology or projects that would work with Kolab in interesting ways to also join us during that week.
And we particularly invite packagers for all the various distributions out there to join us for the sprint. Because we would love to have Kolab 3.0 be natively available on all platforms just weeks after it is released, and make its way into the upstream distributions. Doing this ourselves for all distributions is more than we can reliably ensure, especially since we also have to take enterprise distributions such as Univention Corporate Server (UCS) into account that add substantial work on that front.
Also, we’re not just developing the next generation server, we have also just enabled Mozilla Thunderbird & Lightning for professional usage with Kolab through plenty of work that has gone into SyncKolab by Niko Berger who has joined Kolab Systems to also provide a professional maintenance path for supported users.
And naturally there are still customers who want support as we do all of the above.
So even though I would still have plenty of things to feature I guess it should have become obvious that we have been far from inactive and I truly feel honoured and somewhat humbled to be working with such a great team of dedicated professionals and great minds.
A lesser group could not have achieved that much in such short time, and Kolab 3.0 when it comes out this summer is going to be one exciting piece of technology. I hope you’ll give it a try and will check out our company web site for how we can assist you in your professional needs.
But now, the magic incantation: Go forth and make Kolab 3.0!
GIMP Doesn’t
GIMP does not drive me to the airport if my flight is before 10am.
Akademy 2012: A Virgin's Demise
Shortly, I'll be off to travel to Tallinn, Estonia, to attend Ye Olde Annual KDE Conference aptly dubbed Akademy.
This is going to be something new to me, to be honest. First, I'm new to Estonia - never been there before in my life. Second, I'm a newbie in the KDE community. I haven't got the slightest clue what's awaiting me after I touch down, but for the stories my fellow Kolabian Paul Adams has shared with me. All of them funny, not all of them good...
Furthermore, I must admit in all honestly, I myself am a GNOME user. By convenience, more than anything else, and though it's not supposed to be bad, of course, yet I feel like I might be walking into the lion's nest ;-)
I'm confident I'll enjoy myself - but not in the way you're thinking of right now. I've heard Tallinn is a very beautiful city, and I regret not going to see much of it - if this conference is anything like the dozens of other conference I've been to. I'm sure there'll be plenty of KDE people who turn to be on speaking terms with a GNOME user after we have a good old-fashioned how-much-beer-can-you-chuck contest.
Yet though, all fun aside, the strongest impression I need to make is not at any random bar. It's on stage, right in front of all those people.
I'll be giving a talk titled "KDE Releases that Just Work(TM)" - this is supposed to be where I make my move. I've been practicing different stances to emphasize different points all week long.
I'll speak to subjects I think I'm an expert on, and that I think are open for vast improvement within the KDE project. There's a couple of gotchas though;
- I'm not the only one to think he's an expert
- I'm not the only expert
For release engineering and quality assurance and so ultimately the quality of releases to really improve, consensus between a large variety of people needs to be established, not all of them with anywhere near the same agenda, let alone anywhere near the same opinion.
This sort of effort touches processes, tools, workflows and ultimately what the individual developer is doing. The trick is to find consensus on a way to improve (the use of) all those tools, to make all of that touching further enable the people that actually do the work - those that'll give me the evil stare for using GNOME - and make them feel empowered, and achieve greater satisfaction.
I'm Going To Akademy; So Is Kolab
So, its that time of year again, the annual meeting of all things KDE… Akademy! This year it is coming to you from Tallin, Estonia. This year will be my 6th outing to the event ![]()

Of course, KDE is very dear to me and to Kolab and so, in addition to me, there will be a few other members of the Kolab community will meet at this year’s Akademy. Key contributors Christian Mollekopf and Jeroen van Meeuwen will be present and available to discuss Kolab related issues. Jeroen will also give a talk about release engineering processes using KDE as an example. His experience from the Fedora Project, Cyrus IMAP, Cyrus SASL and from his roleas a Systems Architect at Kolab Systems provides him with ample experience to give some insight into how release engineering and quality assurance within the fast-paced KDE project could be improved further.
The Kolaborators will also be taking part in a Task Management sprint featuring Zanshin and Kolab developers. If you are interested in task management in KDE, you are invited to join. The sprint will focus on counting work into bringing Zanshin-like experience to Kolab on the desktop and web. This meeting will take place during the workshop week after the main conference; no date or time has been set yet, but if you track down me, Christian or Kevin Ottens we’ll work it out.
Akademy is one of my favourite conferences of the year and I’m really excited to be catching up with my KDE buddies. If you want to talk about Kolab (or anything else) just come track me down… I’ll be around until Wednesday.
Akademy 2012
Akademy is the annual world summit of KDE, one of the largest Free Software communities in the world. It is a free, non-commercial event organized by the KDE Community.
Fedora Board Runoff Election
As you might know we had a tie of two candidates (Nick and Robert) in the Fedora Board election. The runoff election between the two of them has now started, please vote now! Voting is open for one week, that is until 2012-06-20 00:00:00 UTC.
Cyrus IMAP: What Happened When They Switched To GIT?
So recently Jeroen van Meeuwen asked me to take a look at Cyrus IMAP. He had been involved in their switch from CVS to GIT and was curious to see what the results looked like. Let’s start with the usual green blobs:
Cyrus IMAP: Full History in Green Blobs (Click to Enlarge)
So, since I do not know precisely when the switch from CVS to GIT was made, I’m using Jeroen’s start date in the project (2010-09) as a rough guideline. Looking at the green blobs it is pretty clear that something happened after he joined the project. But let’s start by looking at what was going on before he joined.
Between 1993-07 and 2010-09 there were 25 accounts in CVS. Note: accounts and not contributors; clearly some of these accounts belong to the same person. For much of these first 7 years the project is also displaying what I refer to as “token-based development”; that is, in many weeks there is only one contributor (as if you had to hold a shared token to commit). I first noticed this phenomenon when studying Evince during my PhD and I have seen it only a couple of times since. I wish I could explain it.
Now, since 2010-09 we can see that 27 new accounts have contributed to the project; most are only around for one week (if we look deeper, I bet for only one or two commits) never to be seen again. Perhaps one of the effects of switching to GIT is that it is simply a lot easier for people to contribute? No brainer.
But I think there is slightly more at play here. How did Cyrus IMAP manage to get to its 17th anniversary and then basically double the size of its developer community just because of a switch to GIT? A project of such importance surely must have been attracting more folk before the switch to GIT… It is not like activity has increased significantly since the switch, right? Right?
Let’s take a look at some simple measures… Commit and Committers per month:
In the days after 2010-09 we can clearly see that commit rate (commits/day) has increased and so has the effort density (there is more activity on more days). But we are not seeing any significant increase in the number of contributors per day. So commit rate is up (not surprising, GIT encourages this and it is almost always exposed except where pushes are squashed) and committer rate is about the same.
Hang on! What about all those new folk we saw appear since the switch to GIT? Well, a typical week still only sees one or two contributors and these new contributors are mostly only hanging around for a few pushes (so they easily account for the days where the commuter rate increases to 2 or 3).
Here is what I think is going on… The switch from CVS to GIT has almost certainly made it easier for people to join and take part in the Cyrus IMAP community (even if only briefly). This accounts for some of the increased participation of new contributors. However, I suspect Cyrus IMAP in its first 17 years had way more contributors that the 25 we can see. My guess is that plenty people were submitting patches and that one of the 25 were applying them, thus losing the identity of the patch submitted in the CVS log.
So whilst switching to GIT has probably caused some growth, I think it is not as much growth as it may seem because the old CVS data hides the true scale of the community.
So what does the Cyrus IMAP community look like these days? This graph shows which contributors worked together (i.e. committed in at least one file together) during October 2010, the month after the switch. Everyone say “Hi” to the Cyrus IMAP community:
As the primary data store for Kolab data, Cyrus IMAP is a project close to my heart (but one that I really play no direct role in). If you would like to learn more and take part in the community check them out at their website or join in the discussion at #cyrus on Freenode.
Fedora elections about to end – vote NOW!
In case you did not yet cast your vote in the current Fedora elections, please do so now! The voting period closes promptly at 23:59:59 UTC on the 7th. Yes, that is today!
As a special bonus, you most Fedora contributors this time should be allowed to vote for FAmSCo, too – even if they are not (yet) a Fedora ambassador. I have been working hard on the new FAmSCo election guidelines and therefor I want all of you to vote! Now!













