AppSuite:Upgrade from 6.22 Debian 6.0

From Open-Xchange

Update of Open-Xchange Server v6.22 to OX Appsuite 7.0 on Debian GNU/Linux 6.0

This example describes updating some OX 6 Server installation to OX Appsuite 7.

Supported update path

We expect the only valid update path will be latest 6.22.X to Appsuite 7.0.1. If you have an earlier version of Open-Xchange Server 6 installed, please update to the latest release of v6.22 before attempting an update to OX Appsuite 7. See Open-Xchange 6.20 to 6.22 Update Guide for Debian 6.0 for instructions regarding that update.

Requirements

  • An Open-Xchange Server installation v6.22.1 or later. This update guide is valid for a system installed through our Download and Installation Guide for Debian GNU/Linux 6.0 (Squeeze)
  • If you have custom packages done by Open-Xchange, please discuss with your Open-Xchange contact when these packages are available for OX Appsuite 7. Do not attempt the update earlier.
  • If you have built custom packages yourself which install config files in the OX config tree, please check the page v7.0 Packaging Changes
  • If you have custom plugins written by yourself which depend on Open-Xchange Server OSGI bundles, check the pages v7.0 Packaging Changes and v7.0 Necessary Code Changes for changes you might need to do.
  • Custom packages built for 6.22.1 or earlier might not work with OX Appsuite 7.0.
  • As for every update we strongly recommend that you make a backup of your system(s) before you proceed.

Update Open-Xchange Repositories

We start by adding some Appsuite repos to our sources.list.

# adjust this to some final repo location
cat >/etc/apt/sources.list.d/ox-appsuite.list <<EOF
deb http://buildservice.oxoe.int/repos/backend-release-7.0.1/DebianSqueeze/ /
deb http://buildservice.oxoe.int/repos/frontend-release-7.0.1/DebianSqueeze/ /

# if you have a valid maintenance subscription, please uncomment the 
# following and add the ldb account data to the urls so that the most recent
# packages get installed
# TODO: insert Update Repo Lines here
EOF

Updating repositories and update packages

Reload the package index:

$ apt-get update

Download and update all installed packages:

$ apt-get dist-upgrade

Please note: For some config files, the following interaction dialog may occur:

Configuration file `/opt/open-xchange/etc/hazelcast.properties'
 ==> File on system created by you or by a script.
 ==> File also in package provided by package maintainer.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
 The default action is to keep your current version.
*** hazelcast.properties (Y/I/N/O/D/Z) [default=N] ? 

Chose Y to install the new version. Check later no manual changes have been screwed. You can do this by comparing the new (installed) config file with the dpkg.old files created by dpkg.

One configuration setting is to be made manually:

# vi /opt/open-xchange/etc/cluster.properties
com.openexchange.cluster.name=oxcluster

IMPORTANT: Please be extremely careful when executing apt-get autoremove after the upgrade. On some test systems packages were marked for automatic removal even if they were still needed.

To remove a package from the autoremove list, you can use:

$ apt-mark unmarkauto package1 [package2 [package3 [...]]]

Restart Open-Xchange

To restart Open-Xchange Server after the update, run

$ /etc/init.d/open-xchange restart

You might want to check with

$ ps aux | grep open-xchange

that there is exactly one newly spawned process running Open-Xchange Server.

Now the backend has been upgraded to 7.0.X. The v6.22 frontend should still work with this new backend. You should verify this at this moment. Upon the first connection after the backend update, you will ge tthe message Error: updating database, try later. The second try should succeed.

Add the Appsuite GUI

# apt-get install open-xchange-appsuite open-xchange-appsuite-backend open-xchange-appsuite-manifest

It them remains to adjust apache's default.conf as well as proxy_ajp.conf.

Basically you need to merge the OX6 and Appsuite versions of those files. This leaves enough room to screw things up. Sample versions of those files are given in the following.

# /etc/apache2/sites-available/default
<VirtualHost *:80>
       ServerAdmin webmaster@localhost
 
       DocumentRoot /var/www/
 
       <Directory /var/www/>
               Options Indexes FollowSymLinks MultiViews
               AllowOverride None
               Order allow,deny
               allow from all
               RedirectMatch ^/$ /appsuite/
       </Directory>
 
       <Directory /var/www//appsuite>
               Options None +SymLinksIfOwnerMatch
               AllowOverride Indexes FileInfo
       </Directory>
 
       ErrorLog ${APACHE_LOG_DIR}/error.log
 
       # Possible values include: debug, info, notice, warn, error, crit,
       # alert, emerg.
       LogLevel warn
 
       CustomLog ${APACHE_LOG_DIR}/access.log combined
 
       # deflate
       AddOutputFilterByType DEFLATE text/html text/plain text/javascript application/javascript text/css text/xml application/xml text/x-js application/x-javascript

       # pre-compressed files
       AddType text/javascript .jsz
       AddType text/css .cssz
       AddType text/xml .xmlz
       AddType text/plain .po
 
       AddEncoding gzip .jsz .cssz .xmlz
       SetEnvIf Request_URI "\.(jsz|cssz|xmlz)$" no-gzip
 
       ExpiresActive On
 
       <Location /ox6>
                # Expires (via ExpiresByType to override global settings)
                ExpiresByType image/gif "access plus 6 months"
                ExpiresByType image/png "access plus 6 months"
                ExpiresByType image/jpg "access plus 6 months"
                ExpiresByType image/jpeg "access plus 6 months"
                ExpiresByType text/css "access plus 6 months"
                ExpiresByType text/html "access plus 6 months"
                ExpiresByType text/xml "access plus 6 months"
                ExpiresByType text/javascript "access plus 6 months"
                ExpiresByType text/x-js "access plus 6 months"
                ExpiresByType application/x-javascript "access plus 6 months"
                ExpiresDefault "access plus 6 months"
                Header append Cache-Control "private"
                Header unset Last-Modified
                Header unset Vary
                # Strip version
                RewriteEngine On
                RewriteRule v=\w+/(.+) $1 [L]
                # Turn off ETag
                Header unset ETag
                FileETag None
       </Location>
 
       <Location /ox6/ox.html>
                ExpiresByType text/html "now"
                ExpiresDefault "now"
                Header unset Last-Modified
                Header set Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"
                # Turn off ETag
                Header unset ETag
                FileETag None
       </Location>
 
       <Location /ox6/index.html>
                ExpiresByType text/html "now"
                ExpiresDefault "now"
                Header unset Last-Modified
                Header set Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"
                # Turn off ETag
                Header unset ETag
                FileETag None
       </Location>
 
</VirtualHost>
# /etc/apache2/conf.d/proxy_ajp.conf
# 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 127.0.0.1 192.168
     # you might add more ip addresses / networks here
     # Allow from 192.168 10 172.16
 </Location>
 # the old path is kept for compatibility reasons
 
<Location /servlet/axis2/services>
    # restrict access to the soap provisioning API
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1 192.168
    # you might add more ip addresses / networks here
    # Allow from 192.168 10 172.16
</Location>
 
 
<IfModule mod_proxy_ajp.c>
   ProxyRequests Off
   <Proxy balancer://oxcluster>
       Order deny,allow
       Allow from all
       # multiple server setups need to have the hostname inserted instead localhost
       BalancerMember ajp://localhost:8009 timeout=100 smax=0 ttl=60 retry=60 loadfactor=50 route=OX1
       # Enable and maybe add additional hosts running OX here
       # BalancerMember ajp://oxhost2:8009 timeout=100  smax=0 ttl=60 retry=60 loadfactor=50 route=OX2
       ProxySet stickysession=JSESSIONID
   </Proxy>
 
   # OX AppSuite frontend
   <Proxy /appsuite/api>
       ProxyPass balancer://oxcluster/ajax
   </Proxy>
 
   <Proxy /ajax>
       ProxyPass balancer://oxcluster/ajax
   </Proxy>
   <Proxy /servlet>
       ProxyPass balancer://oxcluster/servlet
   </Proxy>
   <Proxy /infostore>
       ProxyPass balancer://oxcluster/infostore
   </Proxy>
   <Proxy /publications>
       ProxyPass balancer://oxcluster/publications
   </Proxy>
   <Proxy /Microsoft-Server-ActiveSync>
       ProxyPass balancer://oxcluster/Microsoft-Server-ActiveSync
   </Proxy>
   <Proxy /usm-json>
       ProxyPass balancer://oxcluster/usm-json
   </Proxy>
   <Proxy /webservices>
       ProxyPass balancer://oxcluster/webservices
   </Proxy>
</IfModule>

After this, stop and start the apache2 and open-xchange services. Then you should be able to use the Appsuite UI. You will again encounter a "Upgrading database, try again later" message on the first login attempt. Later login attempts should work.

Leftover configuration files and runtime data

After the update you may see leftover configuration files and runtime data below /opt/open-xchange/etc.

Some of these files belong to packages which have been uninstalled during the update, they are marked with the status rc in the output of dpkg -l. You can remove these packages with the command

$ dpkg --purge <packagename>

Other orphaned files may be runtime data or temporary files which do not belong to any package and therefore couldn't be removed during the package update.

Finally, there may be backup files created by the package manager during earlier updates.

It is safe to remove all files ending in .dpkg-bak or .dpkg-remove