From ArchWiki
Jump to navigation Jump to search

Open-Xchange is a groupware solution providing mail facilities, calendaring, shared contacts and Google-Docs-like text editing.


In order to use Open-Xchange, you need an empty, configured MySQL installation as well as a configured instance of Postfix, Dovecot and Apache. Additionally, Open-Xchange does currently not work with OpenJDK. You will need oracles jreAUR from the AUR.


Open-Xchange is available in the AUR. Right now, no meta-package exists. Alternatively, it can be installed from the custom repository of the current maintainer. Taking the AUR approach is highly recommended. Package names are the same as upstream, and the same between the custom repo and the AUR.

Install the following packages: open-xchangeAUR open-xchange-authentication-databaseAUR open-xchange-grizzlyAUR open-xchange-adminAUR open-xchange-appsuiteAUR[broken link: package not found] open-xchange-appsuite-backendAUR[broken link: package not found] open-xchange-appsuite-manifestAUR[broken link: package not found]

From the custom repository

Merge-arrows-2.pngThis article or section is a candidate for merging with Unofficial repositories.Merge-arrows-2.png

Notes: please use the second argument of the template to provide more detailed indications. (Discuss in Talk:Open-xchange#)

Add the following lines to your pacman.conf:

Server =


Initialize the configdb

For some reason, Open-Xchange expects an MySQL-Server without a set root password. So reset the password in your MySQL instance before continuing. The initconfigdb script does not set a new root password, so you are good to set a new one after the installation has finished.

# /opt/open-xchange/sbin/initconfigdb --configdb-pass=YOUR-DB-PASSWORD -a

Initialize the server

MAX_MEMORY_FOR_JAVAVM as a rule of thumb for simple installations should be half available system memory. The value must be in MB. For example "1024" for 1GB .

# /opt/open-xchange/sbin/oxinstaller --add-license=YOUR-OX-LICENSE-CODE --servername=oxserver --configdb-pass=YOUR-DB-PASSWORD --master-pass=YOUR-ADMIN-MASTER-PASSWORD --network-listener-host=localhost --servermemory MAX_MEMORY_FOR_JAVAVM
# systemctl start open-xchange

Initialize the first server instance

# /opt/open-xchange/sbin/registerserver -n oxserver -A oxadminmaster -P YOUR-ADMIN-MASTER-PASSWORD

Create the file store for OX Drive

You can modify the folder that's used for this.

# mkdir /var/opt/filestore
# chown open-xchange:open-xchange /var/opt/filestore

Register the Database and Filestore with the server

# /opt/open-xchange/sbin/registerfilestore -A oxadminmaster -P YOUR-ADMIN-MASTER-PASSWORD -t file:/var/opt/filestore -s 1000000
# /opt/open-xchange/sbin/registerdatabase -A oxadminmaster -P YOUR-ADMIN-MASTER-PASSWORD -n oxdatabase -p YOUR-DB-PASSWORD -m true

Webserver configuration



Make sure to enable the following modules in /etc/httpd/conf/httpd.conf:

proxy proxy_http proxy_balancer expires deflate headers rewrite mime setenvif lbmethod_byrequests

Add the following includes to /etc/http/conf/httpd.conf:

Include conf/extra/proxy_http.conf
Include conf/extra/ox.conf
Create the config files by hand

Create the following two files:

LoadModule proxy_http_module modules/

<IfModule mod_proxy_http.c>
   ProxyRequests Off
   ProxyStatus On
   # When enabled, this option will pass the Host: line from the incoming request to the proxied host.
   ProxyPreserveHost On
   # Please note that the servlet path to the soap API has changed:
   <Location /webservices>
       # restrict access to the soap provisioning API
       Order Deny,Allow
       Deny from all
       Allow from
       # you might add more ip addresses / networks here
       # Allow from 192.168 10 172.16
   # The old path is kept for compatibility reasons
   <Location /servlet/axis2/services>
       Order Deny,Allow
       Deny from all
       Allow from
   # Enable the balancer manager mentioned in
   <IfModule mod_status.c>
     <Location /balancer-manager>
       SetHandler balancer-manager
       Order Deny,Allow
       Deny from all
       Allow from
   <Proxy balancer://oxcluster>
       Order deny,allow
       Allow from all
       # multiple server setups need to have the hostname inserted instead localhost
       BalancerMember http://localhost:8009 timeout=100 smax=0 ttl=60 retry=60 loadfactor=50 route=APP1
       # Enable and maybe add additional hosts running OX here
       # BalancerMember http://oxhost2:8009 timeout=100 smax=0 ttl=60 retry=60 loadfactor=50 route=APP2
      ProxySet stickysession=JSESSIONID|jsessionid scolonpathdelim=On
      SetEnv proxy-initial-not-pooled
      SetEnv proxy-sendchunked
   # The standalone documentconverter(s) within your setup (if installed)
   # Make sure to restrict access to backends only
   # See:$YOUR_VERSION/mod/mod_authz_host.html#allow for more infos
   #<Proxy balancer://oxcluster_docs>
   #    Order Deny,Allow
   #    Deny from all
   #    Allow from backend1IP
   #    BalancerMember http://converter_host:8009 timeout=100 smax=0 ttl=60 retry=60 loadfactor=50 keepalive=On route=APP3
   #    ProxySet stickysession=JSESSIONID|jsessionid scolonpathdelim=On
   #	   SetEnv proxy-initial-not-pooled
   #    SetEnv proxy-sendchunked
   # Define another Proxy Container with different timeout for the sync clients. Microsoft recommends a minimum value of 15 minutes.
   # Setting the value lower than the one defined as in will lead to connection
   # timeouts for clients.  See for additional information.
   # NOTE for Apache versions < 2.4:
   # When using a single node system or using BalancerMembers that are assigned to other balancers please add a second hostname for that
   # BalancerMember's IP so Apache can treat it as additional BalancerMember with a different timeout.
   # Example from /etc/hosts:	localhost localhost_sync
   # Alternatively select one or more hosts of your cluster to be restricted to handle only eas/usm requests
   <Proxy balancer://eas_oxcluster>
      Order deny,allow
      Allow from all
      # multiple server setups need to have the hostname inserted instead localhost
      BalancerMember http://localhost_sync:8009 timeout=1900 smax=0 ttl=60 retry=60 loadfactor=50 route=APP1
      # Enable and maybe add additional hosts running OX here
      # BalancerMember http://oxhost2:8009 timeout=1900  smax=0 ttl=60 retry=60 loadfactor=50 route=APP2
      ProxySet stickysession=JSESSIONID|jsessionid scolonpathdelim=On
      SetEnv proxy-initial-not-pooled
      SetEnv proxy-sendchunked
   # When specifying additional mappings via the ProxyPass directive be aware that the first matching rule wins. Overlapping urls of
   # mappings have to be ordered from longest URL to shortest URL.
   # Example:
   #   ProxyPass /ajax      balancer://oxcluster_with_100s_timeout/ajax
   #   ProxyPass /ajax/test balancer://oxcluster_with_200s_timeout/ajax/test
   # Requests to /ajax/test would have a timeout of 100s instead of 200s 
   # See:
   # - Ordering ProxyPass Directives
   # - Worker Sharing
   ProxyPass /ajax balancer://oxcluster/ajax
   ProxyPass /appsuite/api balancer://oxcluster/ajax
   ProxyPass /drive balancer://oxcluster/drive
   ProxyPass /infostore balancer://oxcluster/infostore
   ProxyPass /publications balancer://oxcluster/publications
   ProxyPass /realtime balancer://oxcluster/realtime
   ProxyPass /servlet balancer://oxcluster/servlet
   ProxyPass /webservices balancer://oxcluster/webservices

   #ProxyPass /documentconverterws balancer://oxcluster_docs/documentconverterws
   ProxyPass /usm-json balancer://eas_oxcluster/usm-json
   ProxyPass /Microsoft-Server-ActiveSync balancer://eas_oxcluster/Microsoft-Server-ActiveSync

<VirtualHost *:80>
       ServerAdmin webmaster@localhost

       DocumentRoot /var/www/html
       <Directory /var/www/html>
               Options Indexes FollowSymLinks MultiViews
               AllowOverride None
               Order allow,deny
               allow from all
               Require all granted
               RedirectMatch ^/$ /appsuite/

       <Directory /var/www/html/appsuite>
               Options None +SymLinksIfOwnerMatch
               Require all granted
               AllowOverride Indexes FileInfo
Install config files from repository

Alternatively, you can install the config files from the custom repository:

# pacman -S open-xchange-apache-conf
Start the Webserver
# systemctl start httpd


nginx is not currently supported. If you absolutely MUST use nginx, configure apache to listen on some other port and let nginx proxy requests to apache. Edit /etc/http/conf/httpd.conf:

# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#Listen 80

This will make apache listen on port 8080 and only for connections from localhost. Next, add a new server block to your /etc/nginx/nginx.conf:

server {
    listen       80;
    server_name  your.domain.tld;
    location / {
        proxy_pass http://localhost:8080;

Not the nicest solution, but the only one possible at the moment.

Create default context

# /opt/open-xchange/sbin/createcontext -A oxadminmaster -P YOUR-ADMIN-MASTER-PASSWORD -c 1 -u oxadmin -d "Context Admin" -g Admin -s User -p YOUR-ADMIN-PASSWORD -L defaultcontext -e oxadmin@YOURDOMAIN.tld -q 1024 --access-combination-name=groupware_standard

Create your first user

# /opt/open-xchange/sbin/createuser -c 1 -A oxadmin -P YOUR-ADMIN-PASSWORD -u USERNAME -d "DISPLAYNAME" -g GIVENNAME -s SURNAME -p YOUR-USER-PASSWORD -e EMAIL@YOURDOMAIN.TLD --imaplogin IMAPSERVER-USERNAME --imapserver IMAPSERVER --smtpserver SMTPSERVER

Restart Open-Xchange

# systemctl restart open-xchange

First login

Navigate your Browser to http://your.domain.tld Log in with the credentials of the testuser you just created.

Enable Open-Xchange to run at startup

# systemctl enable httpd mysqld open-xchange

Additional Modules


If you have Sieve configured, you can add the [b]mailfilter[/b] module to edit your sieve rules from within Open-Xchange.

Install open-xchange-mailfilterAUR[broken link: package not found] and edit /opt/open-xchange/eetc/ from




Afterwards, restart Open-Xchange:

# systemctl restart open-xchange


Install open-xchange-davAUR from the AUR or from the unofficial repository.

Edit /opt/open-xchange/etc/


Edit /opt/open-xchange/etc/groupware/


Edit /etc/httpd/conf/extra/ox.conf and insert the following before </VirtualHost>:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT}      Calendar           [OR]
RewriteCond %{HTTP_USER_AGENT}      Reminders          [OR]
RewriteCond %{HTTP_USER_AGENT}      DataAccess         [OR]
RewriteCond %{HTTP_USER_AGENT}      DAVKit             [OR]
RewriteCond %{HTTP_USER_AGENT}      Lightning          [OR]
RewriteCond %{HTTP_USER_AGENT}      Adresboek          [OR]
RewriteCond %{HTTP_USER_AGENT}      dataaccessd        [OR]
RewriteCond %{HTTP_USER_AGENT}      Preferences        [OR]
RewriteCond %{HTTP_USER_AGENT}      Adressbuch         [OR]
RewriteCond %{HTTP_USER_AGENT}      AddressBook        [OR]
RewriteCond %{HTTP_USER_AGENT}      Address\ Book      [OR]
RewriteCond %{HTTP_USER_AGENT}      CalendarStore      [OR]
RewriteCond %{HTTP_USER_AGENT}      CalendarAgent      [OR]
RewriteCond %{HTTP_USER_AGENT}      accountsd          [OR]
RewriteCond %{HTTP_USER_AGENT}      eM\ Client         [OR]
RewriteCond %{HTTP_USER_AGENT}      CoreDAV
RewriteRule (.*)                  http://localhost:8009/servlet/dav$1     [P] # for grizzly http service

Note that this isn't the cleanest solution, but I haven't gotten the cleaner one (two VirtualHosts) to work yet.

Restart open-xchange:

# systemctl restart open-xchange


Get the following packages from the AUR or from the custom repository: open-xchange-documents-backendAUR open-xchange-documents-uiAUR open-xchange-documents-ui-staticAUR open-xchange-documents-ui-commonAUR open-xchange-documents-ui-editorsAUR calcengineAUR

Edit /opt/open-xchange/etc/

# Enables or disables the "text" module capability globally.

# Enables or disables the "spreadsheet" module capability globally.

Edit /opt/open-xchange/etc/


Edit /opt/open-xchange/etc/


Restart open-xchange:

# systemctl restart open-xchange


You will need hunspell and an appropriate language pack for it. For example:

# pacman -S hunspell hunspell-en

Document templates

Install open-xchange-documents-templatesAUR fromt he AUR

Restart open-xchange:

# systemctl restart open-xchange


Open-Xchange logs extensively to /var/log/open-xchange. Most errors occur because conflicting modules have been installed.

Package origin

Since the AUR packages have been built from the Debian 8 packages, every link to Documentation will pertain to the Debian 8 version of the documentation.

See also