User Tools

Site Tools


Installing and configuring Horde Groupware

Horde Groupware or Horde Webmail Groupware is an open-source web-based group management application. It features common tools for group/team management: calendar (kronolith), address book (turba), webmail (imp, mimp, dimp), task lists (nag), notes (mnemo), wiki (wicked), group management, permissions, categories. It's also highly customizable, allowing you to choose themes, define your entry/portal web-page, set locales, set display preferences, etc.

We've started using Horde Groupware for ROSEdu group management and for the USO and RL courses. It is light and intuitive and, at this point, suitable for our needs.

Install and basic configuration

The installation and configuration process is complex but quite straightforward. Horde's README and INSTALL files and wiki and searchable mailing lists should provide all necessary answers. I've completed four installation processes, all on a Debian GNU/Linux 5.0 Lenny; the last one was accomplished while writing this tutorial to make sure I don't miss out on something. Having more than one installation experience helped me discover new features and configuration options in Horde.

I will detail my installation/configuration process in the rest of this tutorial. Hopefully it will help reduce the time someone would normally invest when installing Horde Groupware.

I didn't use Debian's internal package, as I wanted more freedom when installing and configuring Horde. For my third and fourth installation instances, I used a non-privileged account, so it was mandatory that I installed Horde from its source package.

System settings and requirements

The following list shows the system configuration and setting and desired features. I want an Apache2 and MySQL based instance, with IMAPS login (based on an e-mail account) and the built-in wiki.

  • Debian GNU/Linux 5.0 Lenny
  • Horde Webmail Groupware
  • non-privileged account
  • Apache2 web-server
  • MySQL
  • IMAPS e-mail access
  • IMAPS login
  • Horde builtin wiki (wicked)

Required packages

The required Debian packages are listed below. A MySQL server also has to be configured (it need not be on the same system). cvs needs only be installed for CVS-based modules (such as wicked).

  • apache2
  • libapache2-mod-php5
  • mysql-client-5.0
  • php5
  • php5-cli
  • php-pear
  • php5-imap
  • cvs for CVS-based modules


You should download Horde in a web-accessible location. I recommend using a symbolic link (horde) for easy naming. As mentioned above, I have used Horde Webmail Groupware 1.2.3.

razvan@swarm:~$ cd public_html/
razvan@swarm:~/public_html$ wget wget
Downloaded: 1 files, 26M in 1m 33s (288 KB/s)
razvan@swarm:~/public_html$ tar xzf horde-webmail-1.2.3.tar.gz 
razvan@swarm:~/public_html$ ls
razvan@swarm:~/public_html$ ln -sf horde-webmail-1.2.3 horde

Initial configuration

Most installation steps are described in the $HORDE_INSTALL_DIR/docs/INSTALL file.

First of all a database has to be created. Afterwards, the setup script ($HORDE_INSTALL_DIR/scripts/setup.php) needs to be run (php5-cli package must be installed). It will ask for the webroot path and then will enable further configuration, using a screen similar to the one below:

Horde Groupware Webmail Edition Configuration Menu 
    (0) Exit
    (1) Configure database settings
    (2) Create database or tables
    (3) Configure administrator settings
    (4) Update from an older Horde Groupware Webmail Edition version

Type your choice: 

Create database and tables

The database configuration step (1) should run smoothly. However, the 'Create database or tables' step (2) failed for me everytime as I had already created the database. As such I used the $HORDE_INSTALL_DIR/scripts/sql/groupware.mysql.sql script:

razvan@swarm:~/public_html/horde/scripts/sql$ mysql -u $MYSQL_USERNAME -h $MYSQL_HOSTNAME -p$MYSQL_PASSWORD $MYSQL_DATABASE
mysql> source groupware.mysql.sql
ERROR 1044 (42000): Access denied for user 'swarm_horde'@'' to database 'mysql'
ERROR 1146 (42S02): Table 'swarm_horde.user' doesn't exist
ERROR 1146 (42S02): Table 'swarm_horde.db' doesn't exist
ERROR 1227 (42000): Access denied; you need the RELOAD privilege for this operation
ERROR 1044 (42000): Access denied for user 'swarm_horde'@'' to database 'horde'
ERROR 1044 (42000): Access denied for user 'swarm_horde'@'' to database 'horde'
Query OK, 0 rows affected (0.05 sec)

Do not worry about the above errors. The script is ment to be run by the MySQL root user, enabling the creation of the database and user. As I had already created the database and required user, those steps were not needed.

Webroot update

Because there may be problems detecting the webroot URL (happened to me every time), update the $HORDE_INSTALL_DIR/config/registry.php file (look for the 'webroot' variable). In my case, this must be '/~razvan/horde':

$this->applications['horde'] = array(
    'fileroot' => dirname(__FILE__) . '/..',
    'webroot' => '/~razvan/horde',

To test the configuration, one has to access the required web page (http://SERVER_NAME/WEBROOT/test.php). Anything marked with red is bad news and should be corrected. Most of the time the problem is missing packages. Use the specific web pages to run tests for IMP, Ingo, Kronolith and Turba.

Configure authentication

I want IMAPS authentication for IMP (also for login). For that I use the $HORDE_INSTALL_DIR/imp/config/server.php file.

$servers['imap'] = array(
    'name' => ' IMAP Server',
    'server' => '',
    'hordeauth' => false,
    'protocol' => 'imap/ssl/novalidate-cert',
    'port' => 993,

By default, Horde Groupware uses IMP's IMAP authentication. The configuration option can be changed by altering the 'driver' configuration option in $HORDE_INSTALL_DIR/config/conf.php:

$conf['auth']['params']['app'] = 'imp';
$conf['auth']['driver'] = 'application';

Enable HTTPS

You can configure HTTPS only access to Horde through the use of mod_ssl and mod_rewrite Apache modules. Replace /~razvan/horde with your webroot.

<IfModule mod_rewrite.c>
  <IfModule mod_ssl.c>
    <Location /~razvan/horde>
      RewriteEngine on
      RewriteCond %{HTTPS} !^on$ [NC]
      RewriteRule . https://%{HTTP_HOST}%{REQUEST_URI}  [L]

That's it!

Congratulations! You now have a working instance of Horde Webmail Groupware. Accessing your base URL (http://SERVER_NAME/WEBROOT/) should get you to the secured login page.

Extra configuration and customization

Installing wicked

As mentioned above, wicked (Horde's integrated wiki) should be installed. In order to do that we have to download the CVS version, as mentioned on the site (don't forget to install cvs)

razvan@swarm:~/public_html/horde$ export
razvan@swarm:~/public_html/horde$ cvs login
Logging in to
CVS password: 
cvs login: CVS password file /home/razvan/.cvspass does not exist - creating a new file

As mentioned on the site, the tag for wicked's stable branch is FRAMEWORK_3, and this is what I will checkout:

razvan@swarm:~/public_html/horde$ cvs co -r FRAMEWORK_3 wicked

The sql scripts have to be run in a similar fashion to the first set of scripts:

razvan@swarm:~/public_html/horde/$ cd wicked/scripts/sql/
razvan@swarm:~/public_html/horde/wicked/scripts/sql$ ls
CVS  wicked.mssql.sql  wicked.oci8.sql  wicked.sql
razvan@swarm:~/public_html/horde/wicked/scripts/sql$ mysql -u $MYSQL_USERNAME -h $MYSQL_HOSTNAME -p$MYSQL_PASSWORD $MYSQL_DATABASE
mysql> source wicked.sql

Run the wicked test script (http://SERVER_ROOT/WEBROOT/wicked/test.php). It should complain you do not have the Text_Wiki PEAR package installed. If you have privileges, you could use pear install. Otherwise, use manual downloading:

razvan@swarm:~/public_html/horde$ cd pear/
razvan@swarm:~/public_html/horde/pear$ wget
2009-08-07 18:36:28 (403 KB/s) - `Text_Wiki-1.2.0.tgz' saved [65864/65864]

razvan@swarm:~/public_html/horde/pear$ wget
2009-08-07 18:36:42 (191 KB/s) - `Text_Wiki_Creole-1.0.1.tgz' saved [19987/19987]

razvan@swarm:~/public_html/horde/pear$ ls
Archive    Date      MDB2      PEAR.php    Text_Wiki-1.2.0
Auth       Date.php  MDB2.php  PEAR5.php   Text_Wiki-1.2.0.tgz
Cache      File      Mail      SOAP        Text_Wiki_Creole-1.0.1
Cache.php  File.php  Mail.php  Services    Text_Wiki_Creole-1.0.1.tgz
Console    HTTP      Net       Structures  XML
DB         Log       OS        System.php  package.xml
DB.php     Log.php   PEAR      Text
razvan@swarm:~/public_html/horde/pear$ tar xzf Text_Wiki-1.2.0.tgz 
razvan@swarm:~/public_html/horde/pear$ tar xzf Text_Wiki_Creole-1.0.1.tgz 
razvan@swarm:~/public_html/horde/pear$ cp -r Text_Wiki-1.2.0/* .
razvan@swarm:~/public_html/horde/pear$ cp -r Text_Wiki_Creole-1.0.1/* .

Enable Creole markup

To enable Creole markup, use the configuration menu in the Administrative -> Setup -> Wicked user interface. See below.


Certain features of Horde can be tuned either at global level, through the use of configuration files or web user interface, or at user level, through the web user interface.

Setup automatic configuration of default identity

When using IMP, I like automatic configuration of the Default Identity (sender address). For that I use a postauthentication script, as mentioned here (search David Komanek).

Update $HORDE_INSTALL_DIR/config/hooks.php with the script. Also update the postauthenticate configuration in $HORDE_INSTALL_DIR/config/conf.php:

$conf['hooks']['postauthenticate'] = true;

Change default theme

File to update: $HORDE_INSTALL_DIR/config/prefs.php;
Preference to alter: 'theme' (I like 'silver');

// UI theme
$_prefs['theme'] = array(
    'value' => 'silver',

Change default sidebar width

As the sidebar is quite small, I like updating it from 150 to 200

File to update: $HORDE_INSTALL_DIR/config/prefs.php;
Preference to alter: 'sidebar_width';

$_prefs['sidebar_width'] = array(
    'value' => 200,

IMP - configure default sending charset

File to update: $HORDE_INSTALL_DIR/imp/config/prefs.php;
Preference to alter: 'sending_charset';

// Select widget for the possible charsets
$_prefs['sending_charset'] = array(
    'value' => 'UTF-8',

IMP - disable view of deleted messages

File to update: $HORDE_INSTALL_DIR/imp/config/prefs.php;
Preference to alter: 'delhide';

// hide deleted
$_prefs['delhide'] = array(
    'value' => 1,

Configure date and timezone options

File to update: $HORDE_INSTALL_DIR/imp/config/prefs.php;
Preferences to alter: 'first_week_day', 'twentyFour', 'date_format', 'timezone';

// what day should be displayed as the first day of the week? (0 - Sunday, 1 - Monday)
$_prefs['first_week_day'] = array(
    'value' => '1',
// time format
$_prefs['twentyFour'] = array(
    'value' => true,
// date format
$_prefs['date_format'] = array(
    'value' => '%a, %b %e, %Y',
// user time zone
$_prefs['timezone'] = array(
    'value' => 'Europe/Bucharest',

UI configuration

User UI configuration

A non-admin user can alter his/hers configuration through the Options -> Global Options menu. The user can configure personal information, theme, sidebar width, time format, etc.

Administrative UI configuration

The administrative UI configuration is enabled through the Administration -> Setup menus. As the configuration files (conf.php and conf.bak.php) are altered through the web interface, they must be writable by the web server user (www-data for Apache2) (the backup file must be created if it does not exist):

razvan@swarm:~/public_html/horde/config$ cp conf.php conf.bak.php
razvan@swarm:~/public_html/horde/config$ chmod 777 conf.php conf.bak.php
razvan@swarm:~/public_html/horde/wicked/config$ touch conf.php conf.bak.php
razvan@swarm:~/public_html/horde/wicked/config$ chmod 777 conf.php conf.bak.php

Enable Creole markup

The Administration -> Setup -> Wicked menu enables configuration of the built-in wiki. The usual configuration I'm doing is changing the default markup to Creole (the $conf[wicked][format] variable).


By default, Horde logs information in /tmp/horde. Configuration can be altered through the use of the web interface (Administration -> Setup -> Horde -> Logging) or by using the $HORDE_INSTALL_DIR/config/conf.php file:

$conf['log']['priority'] = PEAR_LOG_NOTICE;
$conf['log']['ident'] = 'HORDE';
$conf['log']['params'] = array();
$conf['log']['name'] = '/tmp/horde.log';
$conf['log']['params']['append'] = true;
$conf['log']['type'] = 'file';
$conf['log']['enabled'] = true;
tutorials/horde_groupware.txt · Last modified: 2009/08/07 21:46 by razvan