OLAT

Installation & Administration Documentation 7.0.0

MELS - Multimedia & E-Learning Services, University of Zuerich, Switzerland

Table of Contents

Preface
1. OLAT easy installer
2. Installation and Configuration
2.1. Prerequisites
2.2. Standard Installation
2.3. Developer Installation
2.4. Deployment
3. Enable additional components
3.1. WebDAV access
3.2. Full text Search
3.3. TeX math formulas in wikis
3.4. LDAP synchronization and authentication
LDAP configuration via olat.local.properties
LDAP expert configuration
LDAP administration
3.5. Shibboleth authentication
3.6. Instant Messaging
Basic install
Features
Memory issues
Openfire Performance Tuning (cache)
File handlers
3.7. Setup MRTG server monitoring
3.8. Onyx
4. The config files
4.1. webapp/WEB-INF/src/serviceconfig/olat.properties
4.2. olat.local.properties
4.3. webapp/WEB-INF/
web.xml
4.4. Spring read configuration files
brasatoconfig.xml
org/olat/_spring/brasatoconfigpart.xml
olat/user/propertyhandlers/_spring/userPropertiesContext.xml and userPropertriesHandlersContext.xml
org/olat/_spring/olatextconfig.xml
org/olat/core/_spring/olatcoreconfig.xml
org/olat/core/commons/scheduler/_spring/schedulerCorecontext.xml
org/olat/core/commons/scheduler/_spring/olatextconfig.xml
org/olat/core/commons/persistence/_spring/databaseCorecontext.xml
org/olat/ldap/_spring/ldapContext.xml
org/olat/commons/modules/glossary/_spring/glossaryContext.xml
org/olat/commons/coordinate/cluster/_spring/olatdefaultconfig.xml
org/olat/admin/sysinfo/_spring/sysinfoContext.xml
org/olat/search/service/_spring/searchContext.xml
org/olat/shibboleth/_spring/shibbolethContext.xml
org/olat/notifications/_spring/olatdefaultconfig.xml
5. Customize your installation
5.1. Internationalization and translations
5.2. Concept
5.3. Configuration
5.4. The online translation tool
5.5. Customizing the disclaimer
6. Clustered OLAT
6.1. Clustered OLAT System Overview
6.2. Installation of ActiveMQ (JMS)
6.3. Configuration mod_jk as Loadbalancer
6.4. OLAT Cluster Properties
7. Administration
7.1. System information
sessions
infomsg
errors
loglevels
sysinfo
snoop
usersessions
locks
Multi-user events
Cluster
caches
Buildinfo
fstest
7.2. System configuration
Layout
Languages
Ajax Web 2.0 Mode
Quota Management
7.3. System registration
7.4. Instant Messaging Administration
7.5. Course activity
7.6. Properties
7.7. Advanced properties
Example Info Message
Example PASSED true for a certain test
7.8. Translation tool
7.9. Full Text Search Administration
7.10. Manual triggering the notifications
7.11. Access Rights
Examples
8. Deletion of unused users and resources from the system
8.1. User Deletion
User Deletion Workflow
Configuration of User Deletion
8.2. Delete inactive learning resources
8.3. Delete inactive project group
9. Upgrading from previous installation
9.1. General upgrade concept
9.2. Upgrading from 6.3.x to 7.0.x
9.3. Upgrading from 6.2.2 to 6.3.x
9.4. Upgrading from 6.1.1 to 6.2.x
9.5. Upgrading from 6.0.x to 6.1.1
9.6. Upgrading from 6.0.0 to 6.0.3
9.7. Upgrading from 5.2.x to 6.0.0
9.8. Upgrading from 5.1.x to 5.2.x
9.9. Upgrading from 5.0.x to 5.1.x
Conversion of wiki's
9.10. Upgrading the 4.x.y series
Upgrading from 4.1.4 to 5.0.x
Upgrading from 4.1.1 to 4.1.4
Upgrading from 4.0.2 to 4.1.1
Upgrading from 4.0.1 to 4.0.2
Upgrading from 4.0.0 to 4.0.1
9.11. Upgrading the 3.x.y series
Upgrading from 3.2.1 to 4.0.0
Upgrading from 3.2.0 to 3.2.1
Upgrading from 3.1.4 to 3.2.0
Conversion of the existing Filesystem
Converting and Altering of the database
Upgrading from 3.1.3 to 3.1.4
Upgrading from 3.1.2 to 3.1.3
Upgrading from 3.1.0 to 3.1.2
Upgrading from 3.0.1 to 3.1
Upgrading from 3.0.0 to 3.0.1
9.12. Upgrading from 2.x
10. Contact, mailinglists and support
10.1. Mailinglists
10.2. Support
11. OLAT software license
12. Change history

List of Tables

2.1. Local configuration properties
2.2. MySQL configuration file parameters.
2.3. Common Build Goals
3.1. LDAP configuration parameters in olat.local.properties
7.1. Default Quotas
7.2. Access Rights Example 1
7.3. Access Rights Example 2

List of Examples

4.1. Definition of a user property in the userPropertriesHandlersContext.xml
4.2. Each listed bean must be defined in the userPropertriesHandlerContext.xml
4.3. Home settings configuration

Preface

This documentation is intended for OLAT system administrators. It describes how to install, update and run OLAT. It also describes OLAT capabilities of customization on configuration level.

$Revision: 1.67 $, $Date: 2010-09-29 08:00:59 $

Chapter 1. OLAT easy installer

IMPORTANT: This "single-click" installation is meant to provide you an easy way to get a hands-on impression of OLAT and it's new features. Please note that the preconfigured setup has not thoroughly been tested; specifically with regard to the embedded HSQLDB (Database) used by this installation. This installation comes pre-packaged with the following software components.

  • Prepackaged Tomcat5

  • Prepackaged HSQL Database

  • Comes preconfigured

  • Provides uninstaller

If you intend to use OLAT in a production environment, please refer to the source distribution. It will give the necessary configuration options to setup OLAT for your specific environment.

Download and unzip the Demo-Installer:

  • Windows: Double-click on setup.exe to install the preconfigured OLAT on your harddrive. After the installation finished, double-click the newly created OLAT icon on your desktop or run "runOlat.bat".

  • MacOSX or Linux: Double-click on OLAT-install.jar to install the preconfigured OLAT on your harddrive. If this does not work, open a shell, change to the directory where you've unzipped the Demo-Installer package and run the setup.sh script to start up OLAT. After the installation you need to start a shell and run the runOlat.sh script. On a Mac you need to type:

    cd /Applications/OLAT
    ./runOlat.sh

    On Linux you can double-click the new created desktop icon or open an shell and type

    cd $PATH_TO_YOUR_INSTALLATION
    ./runOlat.sh

    Now start your webbrowser and launch the following URL:

    http://localhost:8080/olat/

You may now log in to your local OLAT installation. Use any of the predefined accounts listed below (username/password):

  • administrator / olat

  • author / test

  • learner / test

  • test/ test

  • test2 / test

  • test3 / test

Please change the passwords of the predefined user accounts or remove the users completely after your first login.

Chapter 2. Installation and Configuration

The following sections describe both the standard installation (see Section 2.2, “Standard Installation”) as well as the developer installation (see Section 2.3, “Developer Installation”.) Before proceeding with either installation you should ensure that you have read and understood the prerequisites (see Section 2.1, “Prerequisites”) for installing OLAT.

There is default configuration webapp/WEB-INF/src/serviceconfig/olat.properties. This file that contains settings required to build and install OLAT. Most of these settings you will not need to change though you may wish to review them anyway. You can overwrite this default properties in olat.local.properties. OLAT searches for this file on the classpath. In any case you need an empty olat.local.properties.

Warning

Windows users should note the (Java) practice of using forward slashes in directory paths (e.g., C:/TEMP instead of C:\TEMP) when setting OLAT properties. In addition users of Mac OS/X should be aware that the the OS/X VM implementation of Java may be installed on your system and that you will need to install the Sun Microsystems JVM and set it as your default JVM.

If you run OLAT on a 64Bit System you may run into a known Java Virtual Machine bug which results in strange errors difficult to track down. Try adding an additional VM system variable (-Djava.net.preferIPv4Stack=true) which disabled the IPv6 in favor of IPv4.

2.1. Prerequisites

Before commencing with your OLAT installation you must first ensure that the following prerequisites are present and are functioning correctly. Please consult the relevant product documentation for further information as well as installation and configuration instructions.

  • JDK SDK 1.6 must be installed on your Tomcat host and when compiling from source. Note that it is not sufficient to have a JRE installed as Tomcat requires the compiler at runtime! It is, however, possible for JDK 1.6 to co-exist on systems that already have other JDKs installed.

  • Maven (version 2.2.x or later) is required in order to build and deploy the OLAT application. Note that during the build Maven will download depedencies and that an Internet connection is required during the build. It is recommended to ensure that adequate runtime heap memory is allocated to the Maven process (esp. when invoked as an external tool from an IDE) so you may wish to set the MAVEN_OPTS environment variable to include -Xms1024m -Xmx1024m (please see Maven documentation for details.)

  • Tomcat web container (version 6.x or later) to host the web application. On UNIX systems OLAT recommends that Tomcat runs under a dedicated user (e.g., "tomcat") for security reasons. In situations where more than one instance is required (e.g., multiple cluster nodes on the same host) it is worth setting up each OLAT instance in its own JVM and sharing a common base installation (see Tomcat documentation concerning CATALINA_BASE installations.)

  • MySQL (version 5.0.x or later.) Since OLAT uses the InnoDB storage engine which employs a single tablespace and logfile structure per database instance it is recommended that OLAT be provided with a dedicated instance. On UNIX systems OLAT recommends that MySQL runs under a dedicated user (e.g., "mysql") for security reasons. Note that for the installation you will need to have administrative acces to your database (e.g., the root account)

  • Openfire (version 3.4.x or later.) to support Instant Messaging (XMPP) This component is optional and may be omitted if you do not wish to use such services.

On busy production sites continuous monitoring of OLAT is recommended in order to assess performance and to resource dimensioning needs accurately. OLAT recommends the use of SNMP based monitoring tools such as Multi Route Traffic Grapher or Nagios as well as log analysis tools (e.g., access statistics etc.) such as Webalizer. Please refer to the relevant product documentation for installation and configuration instructions.

2.2. Standard Installation

This chapter describes the installation of OLAT for those wishing to use OLAT in a test or production environment. If you are a developer then please skip this section and proceed to Section 2.3, “Developer Installation” where the installation process for an Eclipse IDE environment is described (please see the specific notes regarding Eclipse and WTP found in developer installation instructions!) If you are a deployment manager then we suggest that you review the Operations chapter to consider additional installation and configuration details. This installation process has been tested on Linux, MacOSX and Windows systems. Our production systems run on Linux and use JDK 1.6.x, Tomcat 6.x, MySQL 5.x and the latest Openfire 3.4.x

The following are the necessary steps for installation:

  • The database user and the olat database needs to be created. Please refer to the scripts initDatabase.sql and setupDatabase.sql, which are located in the olat3\webapp\WEB-INF\classes\resources\database. For MySQL the steps are as follows:

    • Create the database and user manually. (use your user and password instead of olat and olatpwd)

      # mysql -u root -p On the console run the following SQL-statements:
      # use mysql;
      # mysql> create database olatdb;						
      # mysql> create user 'olatdb'@'localhost' identified by 'olatpwd';
      # mysql> grant all on olatdb.* to 'olat'@'localhost' identified by 'olatpwd';
      # mysql> flush privileges;  			
      

    • On the console run the script:

      >> mysql -u olat -p olatdb < setupDatabase.sql
      

    The webapp/WEB-INF/src/serviceconfig/olat.properties file contains settings required to build and install OLAT most of which you will seldom, if ever, need to change. The olat.local.properties file contains those configuration settings you are most likely going to need to change for your environment. Begin by making an empty olat.local.properties save it to /yourTomcatDir/lib or an other place on your classpath. Review the olat.properties contents and amend them as appropriate for your local environment.

    Please note that OLAT application directories will be created for you during the build for which the build user account must have sufficient access rights. Pre-existing directories will not be removed though their contents may become overwritten.

    The follow remarks apply to the local properties (note that other parameters not cited here are chiefly of relevance to developers):

    Table 2.1. Local configuration properties

    userdata.dirThis should be set to an appropriate application data location. A typical choice on a Linux system would be /var/lib/olat.
    archive.dirA typical choice is ${userdata.dir}/archive.
    log.dirA typical choice is ${userdata.dir}/logs.
    upgrade.dirA typical choice is ${userdata.dir}/upgrades.
    folder.rootA typical choice is ${userdata.dir}/bcroot.
    temp.dirA typical choice is ${userdata.dir}/tmp.
    smtp.*Mail settings for your local SMTP agent (typically an MTA such as Sendmail, Postfix or Exim) Without these settings your OLAT instance will be unable to issue emails. You must sent email addresses for admin and support emails.
    instance.id This is an internal instance identifier used by OLAT and should only be changed in the event that several instances are deployed within a single cluster.
    db.* The database settings are mostly self explanatory and refer to the database server that will host the OLAT database.

  • The following MySQL configuration parameters should be applied to your server configuration file (i.e., my.cnf)

    Table 2.2. MySQL configuration file parameters.

    default-storage_engineThis must be set to innodb and applies to all OLAT tables (unless the table definition states otherwise)
    transaction-isolationThis must be set to READ-COMMITTED which denies opportunity for dirty reads and represents the optimal choice for an OLTP system. This is a required setting for OLAT.
    innodb_data_home_dirThis establishes the tablespace for your OLAT database which you can place under your MySQL data directory. You must create this directory yourself before starting the MySQL instance. We recommend a dedicated tablespace for OLAT and hence a dedicated MySQL instance.
    innodb_log_group_home_dirThis establishes the logfiles for your OLAT database which you can place under your MySQL data directory i.e., datadir in a directory called olatlogs We recommend dedicated logfiles for OLAT and hence a dedicated MySQL instance. For heavy loads you may consider locating these files on a separate partition or volume. You must create this directory yourself before starting the MySQL instance.
    innodb_flush_log_at_trx_commit When set to 1 this flushes the log buffer to the log file with each commit and a a disk write is performed. This is a reasonable default value for OLAT which ensures ACID compliance though you may wish to review other possible values depending on your circumstances.
    innodb_buffer_pool_sizeGenerally speaking we recommend a value of c. 1024M for production systems though a (considerably) smaller value is appropriate for trial instances
    innodb_additional_mem_pool_sizeThis should be set to 20M and is required exclusively for the data dictionary and related matters.
    log-bin, expire_logs_daysWe strongly recommend that you make use of binary logging and that you retain binary logs for a reasonable period of time (e.g., 5-7 days) See MySQL documentation for further details.

  • Put your customized log4j.xml file to tomcat/lib directory. Example file :

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false" threshold="all">
    
    <!--
       This file gets only used if you overwrite the file in WEB-INF/classes with this one or by specifing a java system property.
       Overwrite it with -Dlog4j.configuration="file:/tmp/mylog4j.xml" (java system property) and specifie a path for your logging config.
    -->
    
     <!-- CONSOLE appender defined in case it is ever needed -->
     <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
       <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d [%t] %-5p %c{1} %x - %m%n"/>
       </layout>
     </appender>
    
     <appender name="DebugLog" class="org.apache.log4j.DailyRollingFileAppender">
       <param name="File" value="/olatapps/olatng/logs/thishost/tomcat/olatng99/olat.debug.log"/>
       <param name="DatePattern" value="'.'yyyy-MM-dd"/>
       <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d [%t] %-5p %c{1} %x - %m%n"/>
       </layout>
     </appender>
    
     <!-- this is not UNIX syslog but instead the standard olat logging -->
     <appender name="syslog" class="org.apache.log4j.DailyRollingFileAppender">
       <param name="File" value="/olatapps/olatng/logs/thishost/tomcat/olatng99/olat.log"/>
       <param name="DatePattern" value="'.'yyyy-MM-dd"/>
       <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d [%t] %-5p %c{1} %x - %m%n"/>
       </layout>
     </appender>
    
     <!--  OLAT settings  -->
     <logger name="org.olat">
        <level value="INFO"/>
     </logger>
    
     <logger name="org.olat.basesecurity.AuthHelper">
       <level value="ERROR"/>
     </logger>
    
     <logger name="org.apache.commons.httpclient">
       <level value="WARN"/>
     </logger>
    
     <logger name="org.olat.core.commons.taskExecutor.ThreadPoolTaskExecutor">
       <level value="ERROR"/>
     </logger>
     <logger name="org.apache.pdfbox.filter.FlateFilter">
       <level value="FATAL" />
     </logger>
     <!--  Third party libraries -->
     <logger name="org.apache">
       <level value="ERROR"/>
     </logger>
    
     <logger name="org.hibernate">
       <level value="ERROR"/>
     </logger>
    
     <logger name="org.springframework">
       <level value="ERROR"/>
     </logger>
    
      <!--
      Filter db-task executor error and warn because they could happen per design
      -->
     <logger name="org.hibernate.event.def.AbstractFlushingEventListener">
       <level value="FATAL"/>
     </logger>
     <logger name="net.sf.hibernate">
       <level value="WARN"/>
     </logger>
    
     <!-- verify treecache.xml activation -->
     <logger name="org.jboss.cache">
       <level value="DEBUG" />
     </logger>
     <logger name="org.hibernate.cache">
       <level value="DEBUG" />
     </logger>
     <root>
       <level value="INFO" />
         <appender-ref ref="syslog"/>
     </root>
    
    </log4j:configuration> 
    					

  • Download olat.war File and deploy it into tomcat (copy to webapp directory). See 'Tomcat Web Application Depolyment' documentation.

2.3. Developer Installation

This section describes the installation process for developers working on OLAT code. Please ensure that you have already installed the necessary prerequisites as described in Section 2.1, “Prerequisites” and that these are functioning correctly.

Throughout we assume that you are working with Eclipse and have the Web Tools Platform (WTP) and Concurrent Version Systems (CVS) support installed. We have found that it is best to install WTP when packaged with Eclipse (e.g., by downloading the Eclipse IDE for Java Developers) rather than attempt to install WTP to an existing Eclipse installation.

Maven is the build tool used by OLAT and we encourage you to become familar with it (you may be interested to know that the Maven: The Complete Reference is available online)

Step by Step Development Installation :

  1. perform fresh checkout from cvs (not simply cvs-update) of olat3 and olatcore (use a new workspace if you have this folders already in your workspace)

    Important

    Note that when you rename olatcore to something else, you manually have to adjust the path to olatcore in the modules section in olat3/pom.xml!

  2. In Terminal: make sure that you are using maven 2.2 or higher (mvn -V)

  3. In Terminal: go to olat3 directory

  4. In Terminal: create eclipse project settings and creates .classpath files

    mvn eclipse:eclipse, mvn install (installs copies all jars and resources to the target folder). If you run out of memory while runnig this commant set MAVEN_OPTS="-Xmx1024m" in front of the mvn command.

  5. In Eclipse: refresh ola3 and olatcore projects

  6. In Eclipse: setup tomcat server by clicking on olat3->Run As->Run on Server->Manually define a new server

  7. In Eclipse: under Servers find your server and change content of the server.xml to:

    <?xml version="1.0" encoding="UTF-8"?>
      <Server port="8005" shutdown="SHUTDOWN">
        <Service name="Catalina">
          <!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
          <Connector port="8080"/>
          <Engine defaultHost="localhost" name="Catalina">
            <Host appBase="webapps" name="localhost">
              <Context path="/olat" docBase="/yourhome/workspace/olat3/olat/target/olat" debug="0" reloadable="false" >
              </Context>
            </Host>
          </Engine>
        </Service>
      </Server>
                

  8. (optional) In Eclipse: setup VM arguments by clicking on olat3->Run Configurations->Arguments->VM Arguments and pasting:

    -Djava.io.tmpdir="/tmp/olatdata" -Xmx512m -Xms512m

  9. In Eclipse link the core sources (olatcore/src/main/java) and core resources (olatcore/src/main\resources) to olat3 project. Go to olat3->Properties->Java Build Path->Source->Edit the two path entries to your env.

  10. Before you start create an empty olat.local.properties and save it to /yourTomcatDir/lib (OLAT searches for this file on the classpath and /tomcat/lib is part of it). But OLAT should start with just the default config!

  11. Usually you will get a timeout exception when you start a new OLAT. After double clicking on the server entry you can increase the timeout for the startup.

  12. (not needed normally). If your tomcat starts very quickly but you cannnot access OLAT it might be that tomcat did not find the OLAT context. Right click the server entry and click publish to inform eclipse about a new context.

Background (optional for further interest) :

  • The whole start up is no longer done by the custom olat_config.xml mechanism and instead all is done with the Spring framework.

  • In short: web.xml contains the Spring configuration files paths (see: contextConfigLocation) used for Spring injection at OLAT load(OlatServlet.init() comes after Spring...). If done, Spring injects the servlet context into files which implement ServletContextAware.

  • Dependencies are done with the "depends-on" bean attribute

  • There is only one Spring context for the whole OLAT which you can access via CoreSpringFactory (only needed in rare special cases!) changes in olat.local.properties are reflected upon each restart of Tomcat (no more mvn olat:propeties needed). Developers can use the embedded HSQLDB and do not need to create a database manually (Default installation of data and database points to java.io.tmpdir which you can overwrite with -Djava.io.tmpdir=/yourdir if you like or adjust the olat.local.properties file as before).

For OLAT configuration see olat.properties. You can overwrite each property in your olat.local.properties.

The following are the most frequently used Maven goals. Generally speaking for normal development it suffices to invoke compile or package under the developer profile i.e.,

mvn package

Table 2.3. Common Build Goals

cleanRemoval of all generated and distributed assets. Remove application and log directories.
compileCompilation of Java assets and distribution of related XML files, properties files and server configurations
packagePackging of all compiled and distributed assets into your local deployment target (as an aside a WAR is also generated.)
install Sets up the database (depending on your database properties) and places generated assets in your local repository (i.e., where your M2_REPO points to) If you are only interested in invoking this target in order to install the database then you can do so directly by issuing the olat:dbinstall goal.
testPerform JUnit tests and generated a HTML based report.
siteGeneration of a website, found under olat/target/site, including extensive information of interest to developers (e.g., output of static code analysers, project information etc.) Be advised that this target takes a while to complete.

2.4. Deployment

Deployment involves manual configuration of your Tomcat context and the copying of the application resources into the target directory. Developers should be aware that the build process (using the developer profile) will create a local deployment target accessible from within Eclipse.

Configuration of Tomcat requires an application context be configured pointing to the directory where you have deployed your application assets. Practices vary with some administrators preferring to put this context into the server.xml file and others preferring to place it separately under the Catalina engine directory tree. Either way your context should resemble something of the form:

			<Context path="/olat" 
				docBase="/path/to/olat"
					debug="4" reloadable="false" />

You may now deploy your application from either the administrative or the manager consoles within Tomcat, or by restating your Tomcat instance (which is often the preferred approach if you are using the CATALINA_BASE methodology).

You can access your deployed application by visiting http://tomcat_host:tomcat_port/olat in your browser (if you are accessing the instance from behind a reverse proxy then your should use your virtual host name.) By default you can either login as administrator (password olat) or as author (password test). The former has full administrative rights and we strongly recommend that you change the password immediately by navigating to 'Home', 'Settings' and 'Password'. See the tab 'User Management' for a list of all test users (all with password 'test').

Be aware that OLAT does not yet work deployed as an unpacked war file due to some issues with servletcontext methods we use. Tomcat comes with unpack war files set to true as default.

Chapter 3. Enable additional components

3.1. WebDAV access

WebDAV (Web-based Distributed Authoring and Versioning) is a set of HTTP extension aimed at supporting the management (incl. creation, deletion etc.) of files on the web. It is used within OLAT for access to personal, course and shared folders and is activated out of the box.

Log in to your OLAT instance, open the personal folder under Home and see the online help for WebDAV beside the WebDAV for your OLAT instance.

Security advice

In a production environment it is recommended to use WebDAV in connection with HTTPS only, otherwise the user name and password are sent clear text. Moreover you should be aware that most firewall products impose constraints on WebDAV methods and that this may impede the functionality at your site.

3.2. Full text Search

The basic configuration of OLAT Full text search is mostly done via olat.local.properties. The following parameters have to be set:

  1. generate.index.at.startup (true/false): If set to "true" then the search index will be generated at OLAT startup.

  2. restart.window.start [0..24]: Define start-time of restart-window. See also parameter 'restart.window.end'. E.g. 01:00-02:59 restartWindowStart=1 restartWindowEnd=3. The hole day : 00:00-24:00 restartWindowStart=0 restartWindowEnd=24. Default = '0'

  3. restart.window.end [0..24]: Define end-time of restart-window. Default = '24'.

  4. search.service [enabled|disabled]

    Default:enabled (since OLAT 6.0.3)

  5. search.indexing.cronjob [enabled|disabled]: Enable triggering indexer via cron-job instead at startup

    Default:disabled (since OLAT 7.0.0)

    When enabled , configure 'generate.index.at.startup=false'

  6. search.indexing.cronjob.expression cronjob syntax

    Example '0 0 18 * * ?' start indexer at 18:00 ever day

OLAT 6.0.3 introduced the possibility to have a separate OLAT instance running for indexing and processing search queries. You may consider running two instances if on of the following is true:

Reasons for running a separate indexer instance

  • Your instance has thousands of courses, but the actual semester / course session needs only a fraction of them to be active.

  • Your instance has a lot of concurrent sessions and runs out of VM RAM.

If you decide to install the search / full indexer instance you need to install and run a JMS server, e.g. apaches ActiveMQ

The University Zurich runs two complete separate tomcat instances, but you may experiment with different setups. It is as easy as setting up two olat instances which then communicate over JMS, for example with the following setup:

  • /olat/dmz for the LMS instance

  • /olatfullindex/dmz for the fullindexer instance

The users work with /olat/dmz and the /olatfullindex/dmz is only open for administrators .

Configuration Steps

  1. Setup two instances of OLAT as usual:

    Verify setup

    • Check working /olat/dmz

    • Check working /olatfullindex/dmz

    • shutdown both instances

  2. install and run a JMS server, e.g. apaches ActiveMQ

  3. Change the olat.local.properties of /olat/dmz as follows:

    • search.service=disabled

  4. Change the olat.local.properties of /olatfullindex/dmz as follows:

    • search.service=enabled

  5. In the olat_extensions.xml of /olatfullindex/dmz you are advised to deactivate all olat sites of the <bean id="olatsites"... except the <bean id="olatsites_admin".

If you start now the /olat/dmz/ instance and have jms server running, your should receive a Search not available message if you enter something in the search box. This is as expected, because the other instance is not yet started. Just start the /olatfullindex/dmz instance, and if successfully started you should be able to search.

The advanced configuration of OLAT Fulltext Search is mostly done via olat_config.xml under section 'SearchService Module'. The following parameters can be set:

  1. restartInterval [0...X]: Restart Indexing after xx ms (0=no restart) Default = '0'.

  2. restartDayOfWeek [0...7]: Restart only at this day 1=Sunday,2=Monday...7=Saturday (0=restart every day) Default = '0'.

  3. pptFileEnabled (true/false): Enabled/Disable indexing of power-point files. Default = 'true'.

  4. excelFileEnabled (true/false): Enabled/Disable indexing of excel files. Default = 'true'.

  5. maxResults [0...X]: Max number of search results. Default = '100'.

  6. maxHits [0...X]: Internal max number of search result hits. Default = '1000'

  7. fileBlackList Space separated list of file-names which will not be indexed. Default = 'imsmanifest.xml'

  8. indexInterval [0...X]: Sleeping time of indexing thread between adding documents in ms (0=no delay). Use this parameter to reduce CPU load. Default = '0'

  9. documentsPerInterval [0...X]: Number of documents which will be added to index before sleeping (see indexInterval). Default = '4'.

  10. numberIndexWriter [0...X]: Number of index-writer threads(0= no parallel working index-writers). Use this parameter for performance tuning. Default = '0'

  11. folderPoolSize [0...X]: Number of folder-indexer threads. Use this parameter for performance tuning. Default = '0'.

  12. pdfTextBuffering (true/false): Enable text-buffering of extracted PDF text. Use this parameter if you have many pdf files for performnace tuning. Default = 'false'.

3.3. TeX math formulas in wikis

The integrated Wiki rendering component which is currently used in the repository type Wiki can display mathematics in Web pages. Is is based on the great javascript project called jsMath ( jsMath Website). It tries to render the formular with special mathematics fonts, if the fonts are not installed it uses images provided by the javascript library. As it is a huge number of images (20'000) we do not provide them unpacked in our distro as it makes unzipping the distro too long. Therefore you have to run 'mvn olat:font' to unzip the font files to the appropriate location.

3.4. LDAP synchronization and authentication

During a Google summer of Code project (GSoC) Maurus Rohner implemented an LDAP interface for OLAT. The following features are supported:

  • Bulk user import / synchronization from the LDAP directory both as one-time jobs or as a scheduled recurrent operation (configurable, can be disabled). Synchronizaton can also be started from the GUI.

  • On-the-fly user generation on first user login (alternative to configuration above)

  • Login and real-time authentication agains the LDAP directory

  • Caching of LDAP password to protect OLAT from tremporarily LDAP downtime (configurable, can be disabled)

  • Migrating of existing OLAT users with LDAP users (configurable, can be disabled)

  • Mapping of LDAP attributes to OLAT user properties (configurable)

  • Support for multiple LDAP bases to define which user groups shold be synchronized / are allowed to log in (configurable)

  • Support for various LDAP servers including Microsoft Active Directory or OpenLDAP

  • SSL support

The implementation does not cover group synchronization or LDAP group to OLAT group mappings. If you need such features, ask for commercial help, frentix GmbH who supervised and integrated the project into OLAT can develop it for you.

LDAP configuration via olat.local.properties

To enable LDAP login and user synchronization you mus edit the following variables in the OLAT olat.local.properties file

Table 3.1. LDAP configuration parameters in olat.local.properties

ldap.enable=trueEnable / disable LDAP support.
ldap.ldapUrl=ldap://openldap.olattest.org:389The URL to your LDAP server, including port
ldap.ldapSystemDN=cn=Administrator,dc=olattest,dc=orgSystem user: used for getting all users and connection testing
ldap.ldapSystemPW=mySuperPasswordThe LDAP password of the system user
ldap.ldapBases= ou=person,dc=olattest,dc=orgList of bases where to find users. To use multiple bases you must edit the config file manually
ldap.sslEnabled = falseEnable SSL connection
ldap.trustStoreLocation=/usr/lib/j2sdk1.5-sun/jre/lib/security/cacertsLocation of the Java trust store
ldap.trustStorePwd=changeitThe Java trust store password
ldap.trustStoreType=JKSThe Java trust store type
ldap.cacheLDAPPwdAsOLATPwdOnLogin=trueWhen users log in via LDAP, the system can keep a copy of the password as encrypted hash in the database. This makes OLAT more independent from an offline LDAP server and users can use their LDAP password to use the WebDAV functionality. When setting to true (recommended), make sure you configured password.change.allowed=false
ldap.convertExistingLocalUsersToLDAPUsers=trueWhen the system detects an LDAP user that does already exist in OLAT but is not marked as LDAP user, the OLAT user can be converted to an LDAP managed user. When enabling this feature you should make sure that you don't have a user 'administrator' in your ldapBases (not a problem but not recommended)
ldap.deleteRemovedLDAPUsersOnSync=falseUsers that have been created vial LDAP sync but now can't be found on the LDAP anymore can be deleted automatically. If unsure, set to false and delete those users manually in the LDAP administration panel.
ldap.deleteRemovedLDAPUsersPercentage=50 Sanity check when deleteRemovedLDAPUsersOnSync is set to 'true': if more than the defined percentages of user accounts are not found on the LDAP server and thus recognized as to be deleted, the LDAP sync will not happen and require a manual triggering of the delete job from the admin interface. This should prevent accidential deletion of OLAT user because of temporary LDAP problems or user relocation on the LDAP side. Value= 0 (never delete) to 100 (always delete).
ldap.ldapSyncOnStartup=trueShould users be created and synchronized automatically on startup? If you set this and the cron configuration to false, the users will be generated on-the-fly when they log in the first time.
ldap.ldapSyncCronSync=trueShould users be created and synchronized periodically, not just during startup? If you set this and the startup configuration to false, the users will be generated on-the-fly when they log in the first time.
ldap.ldapSyncCronSyncExpression=0 0 * * * ?Set the rule how often the LDAP synchronization should take place. Default is every hour. For the cron syntax see quartz cron syntax documentation
ldap.ldapUserObjectClass=personConfiguration for syncing user attributes during login or cron and batch sync. The user object class to use.
ldap.ldapUserCreatedTimestampAttribute=createdTimestampThe LDAP attribute that tells the creation date of the LDAP user. In active Directory this is typically "whenCreated", in OpenLDAP "createdTimestamp". If not available, use the same as for the last modified date.
ldap.ldapUserLastModifiedTimestampAttribute=modifyTimestampThe LDAP attribute that tells the creation date of the LDAP user. In active Directory this is typically "whenChanged", in OpenLDAP "modifiedTimestamp"
ldap.attributename.useridentifyer=uidMapping of the LDAP user identifyer to an OLAT user. In Active Directory this is typically "sAMAccountName", in OpenLDAP "uid".
ldap.attributename.email=mailMapping of the mandatory OLAT user properties. In this example the LDAP attribute "mail" will be mapped to the OLAT user property "email"
ldap.attributename.firstName=givenNameMapping of the mandatory OLAT user properties. In this example the LDAP attribute "givenName" will be mapped to the OLAT user property "firstname"
ldap.attributename.lastName=snMapping of the mandatory OLAT user properties. In this example the LDAP attribute "sn" will be mapped to the OLAT user property "lastName"
olatprovider.enable=falseDisable the normal OLAT login screen. When you set ldap.cacheLDAPPwdAsOLATPwdOnLogin=true, a fallback to the normal OLAT login is made in case the LDAP server can not be reached. You can set this variable also to true to have the OLAT and the LDAP login screen available
default.auth.provider=LDAPUse the LDAP login screen as the default login screen.

Restart tomcat. Have a look at the olat logfile to see if the configuration was accepted. A common error is to use whitespace in the configuration, e.g. ldap.ldapSystemPW=mySuperPassword is not the same as ldap.ldapSystemPW = mySuperPassword...

LDAP expert configuration

Advanced LDAP configuration can be made in the LDAP Spring config file locate under webapp/WEB-INF/src/serviceconfig/org/olat/ldap/_spring/olatextconfig.xml

  • reqAttrs: Define which OLAT user properties are required to be available. Default is is the userid and email, but you could define that the phone number is also mandatory.

  • userAttributeMapper: Define the mapping from LDAP user attributes to OLAT user properties. In the olat.local.properties you can define the mapping only for the user ID, the email, first name and last name. But you can define any kind of attribute mapping, e.g the students organization or his phone number. Add a new line for each additional mapping.

  • staticUserProperties: Sometimes it is handy to give all users that are synched via LDAP a special OLAT user property so that you can later diffenentiate those users from the ones you create manually in OLAT. Define a static user property that is added to the OLAT users that are synced via LDAP

LDAP administration

The LDAP module offers an administration GUI that lets you manually synchronize LDAP users. The LDAP admin panel can be found under Administration > LDAP.

To manually delete users in OLAT that do not exist on the LDAP server anymore, press the Start button in the section Delete users deleted in LDAP.

To manually create new and synchronize existing users in OLAT compared to the server, press the Start button in the section Synchronization.

At the bottom you see a logging panel that shows all logging messages regarding the LDAP module. For example, here you see that a certain user could not be synced from the LDAP server because a required attribute was missing.

To manually delete users in OLAT that do not exist on the LDAP server anymore, press the To manually delete users in OLAT that do not exist on the LDAP server anymore, press the Start button in the section Delete users deleted in LDAP.Start button in the section Delete users deleted in LDAP.

3.5. Shibboleth authentication

Shibboleth is a standardized authentication and authorization mechanism. With Shibboleth, the user is redirected to a WAYF/Discovery Service (Where Are You From?), asked to chose her Home Organisation/Identity Provider (her university / company website) to authenticate. The user selects his Home Organization 'University B' and is redirected to its login page. The user sees the familiar login page of 'University B' and provides his login name and password. If login name and password match, the user is redirected back to the resource (e.g. OLAT) he initially requested. After successful authentication at his Home Organization, the resource (OLAT) decides (based on the provided attributes) on granting or denying him access. In the background, the Home Organization provided minimal user details to OLAT, which it requires for the access authorization decision and for delivering its service. See the SWITCH AAI Demo for a Shibboleth Login Procedure summary.

A Shibboleth Service Provider is needed, to protect any resource (e.g. OLAT) on that web server, either with web server access rules or within the application itself. OLAT uses since 6.2.x Shibboleth Service Provider 2.0 with Apache, mod-shib, shibd, mod_jk. The Shibboleth Service Provider Access Rules guideline is found here. A resource either can be protected with acces rules defined in the web server configuration or by the application itself by checking certain Shibboleth attributes. In both cases, a Shibboleth session must be enforced on the file, location or directory to protect. Second, there must be an authorization rule based on attributes that determines how access is granted. If you plan to use the XML access control rules with Apache (e.g. in order to dynamically protect a location), you first have to make sure that the Shibboleth module actually is active for the specific location or the whole web server. This can be done by using a rule in the Apache configuration like the following:

 
			<Location /olat/shib> 
				AuthType shibboleth
    				ShibRequireSession On
    				require valid-user
    				ShibUseHeaders On
  			</Location>
			

If you wonder what the names are of the attributes you can check for, have a look at the attribute-map.xml file.

The configuration of OLAT Shibboleth Module is done via olat.local.properties / olat_config.xml. The following parameters have to be set:

  1. EnableShibbolethLogins (true/false): If set to "true" Shibboleth will be enabled on your installation.

  2. UniqueIdentifiers: Defines the attributes which allows to uniquely identify an authenticated person. Make sure, values of this attribute are truly unique. It is used to map an identity who has been authenticated by an Identity Provider to an identity within OLAT. The default unique identifier ("<Default />")is mandatory. You may specify unique identifiers on a per-site basis (e.g. <OriginSite siteName="examplesite" uidAttribute="exampleuid" />)

  3. AttributeTranslations (contains Attribute elements): Shibboleth can provide attributes to OLAT after successfull authentication of an identity. These attributes are propagated within OLAT for use e.g. as a pre-condition within a course. To make the attribute names easier to read (and use) you may provide translations to the attributes. E.g. "givenName" reads easier as opposed to "Shib-InetOrgPerson-givenName" (which is the attribute's actual name). See the olat_config.xml.in file for an example. The Service Providers's supported attributes are listed in attribute-map.xml. See below the Shibboleth Service Provider 2.0 installation section.

  4. OLATUserMapping : This section is used to map Shibboleth attributes to user preference attributes within OLAT. After each successfull Shibboleth authentication, the given Shibboleth attributes are mapped to the corresponding attributes in the OLAT user profile. E.g. Shibboleth Attribute "Shib-InetOrgPerson-givenName" would be mapped to the OLAT user profile's first name with the following statement:

    <FirstName>Shib-InetOrgPerson-givenName</FirstName>

    Valid mappings are: FirstName, LastName, EMail, InstitutionalName, InstitutionalEMail, InstitutionalUserIdentifier.

Step by step guide to enable Shibboleth 2 on your OLAT installation (without set up of identiy provider):

  1. Install and configure Shibboleth Service Provider 2.0 with Apache, shibd (Shibboleth daemon), mod-shib, mod_jk. Please check the Shibboleth SP Hands-on documentation (see overview image) here. All needed information about directory structure, sanity checks, key/certificate generation, using a Discovery Service, attribute mappings, etc. could be found at the mentioned link. These links might also be useful: Shibboleth 2 Installation and Shibboleth 2 Configuration.

    Shibboleth Service Provider for Apache Overview

  2. Get a FQDN (DNS name) for your OLAT installation like: olat.earth.sky

  3. Create an RSA key and out of it create a certificate request using openssl. See example from Swiss Education & Research Network: How to obtain server certificate.

  4. Let the certificate request sign from a certificate authority

  5. Download the signed certificate in the PEM format with the full certificate chain included.

  6. Place the certificate in the shibd directory toghether with the shibboleth2.xml, attribute-map.xml, etc.

  7. Your AAI federation should provide you with Federation Metadata. The federation metadata contains information about all Service Providers and Identity Providers participating in the federation. The metadata provider URL is specified in shibboleth2.xml. The shibd is dowloading a backup matadata file locally.

    Naturally, your OLAT Service Provider must also be included into your Federation Metadata.

  8. You should check with your Identity Provider that the OLAT required attributes are visible to your OLAT Service Provider.

  9. The last piece of the Shibboleth puzzle is the OLAT authentication provider. This must be specified in olat_config.xml, see AuthProvider of the LoginModule. There are 2 available authentication providers for Shibboleth: org.olat.shibboleth.DefaultShibbolethAuthenticationController where WAYF (see below) is activated over shibd config, and the org.olat.shibboleth.ShibbolethAuthenticationController which is used by UZH with SWITCH Embedded WAYF.

    The EmbeddedWAYF or Embedded Discovery Service is specific to the SWITCH AAI. In a federated environment, the user has to declare where he wants to authenticate. The easiest way is to ask the user "Where Are You From?". The ideea is to embed WAYF on Resource (OLAT), customize look and feel but effectively still transparently use central WAYF. More info here.

    The EMBEDDED-WAYF section in shibbolethlogin.html was automatically generated via the Embedded WAYF Code generator. It provides look and feel configurator, IdP list configurator, uses the same URL for all embedded WAYFs, the logic script is generated and loaded from the central WAYF. If you belong to the SWITCH AAI federation, all you have to do is to configure the Embedded DS in shibbolethlogin.html: configure layout, IdP list, and the different URLs (e.g. wayfSPEntityID) in src/serviceconfig/org/olat/shibboleth/_spring/olatdefaultconfig.xml. See Embedded DS SWITCH tutorial.

  10. Suppose that all the above are fulfilled (that is the shibd is up and running an properly configured, the OLAT is shibboleth.enabled and running) it is time to check if shibboleth authentication works. Set the loglevel for the org.olat.shibboleth.ShibbolethDispatcher to DEBUG (into Administration/loglevels), now you should be able to see in olat.log the "Shib attribute Map", that is the attributes an authenticated user receives fom the Identity provider and provides via the service provider to OLAT.

3.6. Instant Messaging

The fully integrated Instant Messaging System enables the following features in OLAT

  • Private Person to Person chat with anybody who is online in OLAT

  • Synchronisation of OLAT groups with Roster of Instant Messaing Server. See always the Buddies that are online and available for a chat

  • Roster integrated in OLAT GUI. Instant access to your Buddies wherever you are in the OLAT GUI

  • Groupchat feature for each course and the users Buddygroups

  • Chat and group chat client run on most browsers without the need of special plugins

  • Users can connect with any jabber compatible chat client to olat. See in Home/Settings for username, password to connect with an external client.

  • OLAT Instant Messaging System based on the Jabber Internet standard (XMPP protocol) (Jabber.org)

Basic install

Prerequisites

  • Instant Messaging Server: Openfire (formerly knows as JiveMessenger/Wildfire) from igniterealtime.org. An Open Source IM server unter the GPL license written in Java. To download the latest server go to: JiveSoftware download Site and download the version that suits your os best.

  • Openfire needs a Java Virtual Machine > = 1.6.x

  • Mysql database. Openfire runs also with other databases (like OLAT does)

  • This installation describes the steps if you run the Openfire on the same machine together with OLAT and share the same database server, but you can run the IM server as well on another machine.

Installation: Go to OLAT_HOME and edit the olat.local.properties file like:

#Instant Messaging properties
instantMessaging.enable=true (enable or disable all instant messaging features)
instantMessaging.server.name=your.jabber.server 
#(you need a own dns name or just localhost for testing)
instantMessaging.generateTestUsers=true 
# (the OLAT test users are generated in OLAT/IM-server with the default passwords also for instant messaging)
instantMessaging.admin.username=admin 
#(these are the default settings of openfire, Change later!)
instantMessaging.admin.password=admin

Now download and install the openfire server and start it (See openfire docu for installation issues). To test your server go the http://[your-instant-messaging-servername]:9090 and log in as admin/admin and you see the admin console. To test the Instant Messaging features open your favorite jabber client like (Exodus, PSI, Kopete, ...) and log in as one of the OLAT Test users automatically created. (user:administrator/pw:olat - user:author/pw:test - user:test/pw:test)

If you are able to chat with each other you are ready to start OLAT together with the IM server. The IM server should run at the time you start OLAT, otherwise you get an error message that you have enabled Instant Messaging but the server is not running.

OLAT uses the admin user account which need to be present on the IM server to talk with Openfire. Versions up to OLAT 6.0.x talked to the IM server over http using the the administration account, emulating the use of the web interface. This was error prone and every change in the openfire web gui lead to errors. Each OLAT release has an associated IM server release it is working with. Since OLAT 6.1.x (available february 2009) a plug in for the IM server must be installed. OLAT creates user accounts and manages groups and group members on the Openfire IM server by sending custom XMPP packets . This XMPP packets are interpreted by a openfire plug-in on the server side an some client code on the OLAT side. You have to install the plug in on the server to enable this. Download the plug in here: http://www.olat.org/downloads/stable/olatUserAndGroupService.jar and use the web console of Openfire to install the plugin.

In the OLAT administration panel

Features

  • Technical overview

    The OLAT Instant Messaging system is build with jabber components. The server (openfire) implements the XMPP protocol and is compatible with most Jabber clients. OLAT connects to the server using the open source client library SMACK from igniterealtime Softare.

    The SMACK client is used to connect to the server and gets the Roster and manages presence information for the buddies of the connected user. If people like to use one of the fully featured Jabber clients they can use them too. You find the settings in your "Home"->"Settings"->"Instant Messaging". If you use your own jabber client you have to set the resource higher then the SMACK client (priority 0) to route messages to you own client and not to the one integrated in OLAT.

  • OLAT groups synchronizing with the Openfire server.

    OLAT provides a tool for managing personal groups with members called OLAT 'groups' When enabling the Instant Messaging features the information from the groups is used to create and maintain a roster in the instant messaging server. The roster stays always visible in the OLAT user interface and provides a overview of the availablity of the users buddies.

    As the Instant Messaging server is completely separated from OLAT the information is synchronized between the components. We have to explain the mechanism first that you understand how the prozess works. As users who log in using the Shibboleth authenitification mechanism don't have a passwort in OLAT. We create an additional account for each user on the IM server. The credentials consits of the OLAT username which is unique in OLAT and a random generated passwort only used for IM. When a user logs into OLAT for the first time OLAT checks if the user has an IM password. If no, a new accounts gets created on the IM server and the password for this IM account is saved in the o_bs_authentication table with the provider name "INST-MSG". On the IM server you should see the created account as well. There are two cases when you need to synchronize OLAT with the Instant Messaging server.

    case 1: You start olat for the first time with Instant Messaging enabled. Here everything should work automatically if you make sure that the IM server is already running before starting OLAT. In this case OLAT creates the groups and the user accouts of the members of each group in the IM server. If you log in as a user you should see your groups as a roster containing the members.

    case 2: In case of a server crash of the IM server or other problems you have to re-synchronize the data to make sure both databases are synchronized. Shut down Openfire. Log in to the mysql database:

    # mysql -u [database user] -p
    # use openfire;
    # delete from ofGroupUser;
    # delete from ofGroupProp;
    # delete from ofGroup;
    
    # use olat;
    # delete from o_property where name='org.olat.instantMessaging.InstantMessagingModule::issynced';
      

    Next time you start OLAT it synchronizes again the data between OLAT and the IM server.

    If you do not want this feature you can disable it in olat_config.xml in the instant messaging module part.

  • Setting the Instant Messaging server properties

    There are many settings inside the openfire admin console, make sure you adjust at least the following:

    - Check the server name: You should use a hostname that gets resolved by the DNS server, otherwise the clients of olat will not be able to connect to the server. Server Settings -> Server Name

    - Registration - Login -> Disable both properties so user cant create accounts themself.

    - Resource Policy -> Choose "Always Kick".

    - Group Chat -> Histroy Settings -> "Show a Specific Number of Messages"

Memory issues

To decrease memory usage start the server with the following virtual machine parameters. "java -jar -Xss256k startup.jar". This will dramatically decrease virtual memory usage on Linux based systems as only 256KB memory is reserverd for each thread stack (default is 512KB).

Openfire Performance Tuning (cache)

Openfire uses caches to run efficiently. Default cache sizes may get to small if you have a lot of users/groups on your system. If you have to much load on your database check and count the queries that only come from Openfire and increase cache size by applying the following sql queries to the Openfire database. In our production system this helped to reduce the number of queries by the factor 10x.

insert into ofProperty (name,propValue) values('cache.group.size','5242880');
insert into ofProperty (name,propValue) values('cache.group.maxLifetime','3600000');

insert into ofProperty (name,propValue) values('cache.username2roster.size','5242880');
insert into ofProperty (name,propValue) values('cache.username2roster.maxLifetime','3600000');

insert into ofProperty (name,propValue) values('cache.userGroup.size','5242880');
insert into ofProperty (name,propValue) values('cache.userGroup.maxLifetime','3600000');

insert into ofProperty (name,propValue) values('cache.userCache.size','2097152');
insert into ofProperty (name,propValue) values('cache.userCache.maxLifetime','3600000');

insert into ofProperty (name,propValue) values('cache.groupMeta.size','2097152');
insert into ofProperty (name,propValue) values('cache.groupMeta.maxLifetime','3600000'); 
      

File handlers

If you have more than 800 concurrent sessions on you OLAT system you should increase file limits on process base. The default file handle limit is normally 1024 per process (per Java VM). As each connection to the server keeps its socket file. When you encounter (or better even before) "Too many open files" Exceptions in the Openfire logfile you should increase it.

#  increasing the max number of filehandles on a Linux box
ulimit -Sn 4096
ulimit -Hn 4096
         

You should do this in the context where the process gets started (init.d file) to make sure every time the service gets restarted it will be set again.

3.7. Setup MRTG server monitoring

OLAT provides some graphical monitoring tools to supervise the helthness of your server. The graphics are generated by a tool called MRTG which originally has been designed to monitor network devices. Thanks to the very generic interface it can be used to monitor anything that provides a comparable value.

The available scripts are all built for Unix. If someone creates some windows equivalents, please share them with us.

  • MRTG

    The open source tool MRTG can be downloaded from MRTG site. Most Linux distributions have pre-built binary packages.

  • Build the configuration file

    Go to your olat3 directory and use maven to generate the MRTG configuration file. Make sure the path to your MRTG is correct in your olat3/olat.local.properties file. Usually you don't have to change anything there:

    ...   
    # MRTG configuration for monitoring (optional)
    mrtg.bin=/usr/bin/mrtg
    monitoring.dir=${base.dir}/monitoring
    ... 

    Now generate the configuration for MRTG and the olat server monitoring scripts:

    #cd olat3
    #mvn install

    Now the necessary configuration is located at olat3/monitoring/conf/

    mrtg.cfg: The MRTG main configuration file. Usually you do not need to change anything here. Review the file and proceed with the installation of the cronjobs.

  • Installing the monitoring crontabs

    monitoring-crontab: This are the cron jobs you need to install. You can use any cron system. On most Unix systems you can type the following as root:

    #crontab -e -u apache  (or wwwrun or whatever user is running your apache)
    

    Now paste the generated sample monitoring-crontab file from olat3/monitoring/conf into the editor and save.

    The cronjobs fetch some statisitcal values from the OLAT server every 5 minutes, plus it checks the ping time to google to see if your network is up and running and writes the information in a temporary file. MRTG uses then the files to read the value (kind of not so nice, feel free to send us a much nicer configuration file. Then if runs the MRTG program every 5 minutes to update the graphics.

  • Configuring Apache

    Configure your apache to deliver the index page from the mrtg output. This is in your olatdata/monitoring directory. See the section ??.Search for the monitoring section.

  • Interpreting the images

    Point your browser to the location where you have your monitoring defined. You will get an overview page that contains the daily and weekly statistics. Click on any title to also see the montly and early statistics.

    The images are kind of odd. They must be read from right to left and not vice verca. This means: the present is at the very left side of the image, and the past is at the right side.

    • Users online: number of authenticated user sessions. If a user is logged in twice, he will be counted twice. The blue line shows the users logged in using SSL.

    • WebDAV iser: number of users connected using WebDAV. The blue line shows the users who use an SSL WebDAV connection.

    • Instant messaging users: number of running instant messaging clients. This acutally shows the distinct number of online users since at each moment there can only be one instant messaging client in the system per user. The blue line shows the number of opened chat windows.

    • Link availability: milliseconds needed to ping google.com. A network test

    • Apache and MySQL processes: number of running apache processes (green) and running MySQL processes (blue). Handy to optimize your configuration.

    • CPU load: Unix load multiplied by 100. (MRTG can only handle integers, load is usually a number between 0 and 1. Read Unix manpages to really understand the meaning of this value. Generally you can say, a load of 1 (value of 100 in the graph) means that in the average one process is requesting CPU cycles at each moment. If you have a multi processor machine the interpretation of this value changes. A machine with four processes can handle a load of 4 to have the same busyness as a one processor machine with a load of 1.

    • Memory: Green is the amount of memory used (Total memory - free memory - buffered memory - cached memory) in your system. Note that this is not the memory used by OLAT but a monitoring of your system memory! Blue is the amount of swap used (Total swap - free swap). Note that it is common that the swap is used under linux even there is free memory. Read the manpages to understand the memory management of your operating system.

    • Runtime controllers: number of OLAT controllers held in a weak hash map. When the line drops, the garbage collector has cleaned up the unused controllers.

3.8. Onyx

The default OLAT assessment plugin can be overridden using the assessmentplugin.activate property in your olat.local.properties. Please consult the section assessmentplugin config in the olat.properties for further details.

####################################################
# assessmentplugin config
####################################################
# Olat -> default assessmentplugin
# Onyx -> The Onyx-Testplayer (onyxassessmentplugin) can be downloaded at http://www.olat.de/onyx.
#                 The Testplayer is one element of the Onyx-Testsuite and has been designed,
#                 developed and tested by BPS - Bildungsportal Sachsen GmbH - http://www.bps-system.de
#         OLAT makes no representations or warranties of any kind, either express or implied,
#         nor shall OLAT have any liability whatsoever to any person using Onyx, with respect to its functionality.
#         For all questions and help concerning the Onyx-Testplayer and the Onyx-Testsuite
#         including any support write to support@bps-system.de
####
assessmentplugin.activate=Olat

Chapter 4. The config files

OLAT is fine grained configurable, and comes with reasonable default values in the olat.properties file. In the olat.local.properties essential settings must be configured, overwriting the values from the olat.properties file (see Section 4.1, “webapp/WEB-INF/src/serviceconfig/olat.properties”). These values are propagated to the Spring configuration files defined in the web.xml configuration file. The web.xml is located in the webapp/WEB-INF directory. It enumerates the different Spring configuration files or locations (see Section 4.3, “webapp/WEB-INF/”). You can plug-in your own developed stuff as defined in various xml files found under Section 4.4, “Spring read configuration files”.

4.1. webapp/WEB-INF/src/serviceconfig/olat.properties

The main configuration file defines the default values and is serving its properties for the Spring configuration files described in Section 4.4, “Spring read configuration files”.

The olat.properties file is well documented, you should read there what and how to set the values.

OLAT will startup without configuration, using the integrated HSQLDB and a data directory path defined by the Java property java.io.tmpdir

4.2. olat.local.properties

The olat.local.properties found in the olat3 project serves as a template and must be copied manually to the classpath. If no olat.local.properties file can be found during first startup, OLAT creates an empty olat.local.properties file in the tomcat/lib directory, and must be restarted.

The values in the olat.local.properties override the default values from the olat.properties.

These properties are typically set in a productive environment:

  • userdata.dir

  • instance_id

  • server.domainname

  • db.name

  • db.user

  • db.pass

  • db.database.dialect

  • db.hibernate.ddl.auto

  • defaultlang

  • adminemail

  • supportemail

If you setup OLAT in Eclipse IDE and want to develop, the following properties are recommended in addition. See also the devloper documentation for more information.

Recommended developer properties:

  • olatcore.debug

  • olatcore.src

  • localization.cache

4.3. webapp/WEB-INF/

web.xml

Configuration file used for servlet container, for more information see wikipedia:web.xml. It contains the configuration for the servlets, MIME mappings, and since OLAT 6.3.x a list of Spring configuration files for the application context.

Configured Servlets:

  • org.olat.core.servlets.OLATServlet

  • org.olat.core.servlets.SecureWebdavServlet

  • org.olat.commons.servlets.ICalServlet

  • org.olat.commons.servlets.RSSServlet

  • com.sun.jersey.spi.container.servlet.ServletContainer configured for org.olat.restapi.support.OlatRestApplication

The Spring Application Context is configured within the web.xml and the order of the listed files defines the overriding hierarchy for beans. Spring files residing in a JAR file (e.g. olatcore.jar) need to be referenced by a full path. The OLAT LMS Spring configuration files are resolved with a wildcard search on the classpath.

4.4. Spring read configuration files

The Spring read configuration files are within the directory structures:

  • WEB-INF/classes/serviceconfig/...

  • various folders WEB-INF/classes/.../_spring

There are three types of configuration files to find here and a simple mechanism of overwriting default values with your customized ones. In this installation and administration guide only the configuration files and their meaning is outlined. The Spring config files make use of the defined property values in olat.properties and olat.local.properties.

The three types

  • Framework settings

    • brasatoconfig.xml

    • org/olat/core/_spring/olatcoreconfig.xml

    • org/olat/core/commons/scheduler/_spring/olatdefaultconfig.xml This file is located inside the olat-core.jar providing defaults to be overriden by the olatexconfig.xml.

      org/olat/core/commons/scheduler/_spring/olatextconfig.xml

  • General OLAT web application settings

    • org/olat/_spring/brasatoconfigpart.xml

    • org/olat/_spring/extensionContext.xml

    • org/olat/_spring/olatextconfig.xml

    • org/olat/_spring/portalContext.xml

    • org/olat/_spring/sitedefContext.xml

    • org/olat/_spring/webdavContext.xml

    • org/olat/core/commons/scheduler/_spring/olatextconfig.xml

  • Module/Component/Service Settings

    • WEB-INF/classes/.../_spring/[modulename]Context.xml

      The bean definition for the Modules/Components/Services are in the [modulename]Context.xml files. In most cases the configuration is extracted as properties which can be set over the olat.properties, olat.local.properties mechanism.

Overriding mechanism

  • olatdefaultconfig.xml contains default values and is placed under src/serviceconfig/...>a_package_path</_spring/olatdefaultconfig.xml containing all bean definitions and attributes defined by a service

  • Any olatextconfig.xml containing the same bean definitions, overrides the values from the olatdefaultconfig.xml.

brasatoconfig.xml

Basic settings from olat.properties injected in various classes by Spring. Here the list of AJAX accepted user agent strings is defined.

org/olat/_spring/brasatoconfigpart.xml

Defines a mapping of paths to dispatchers in <bean id="org.olat.core.dispatcher.Dispatcher"...

Some examples are:

  • /dmz/ refers to dmzbean which loads and configures the org.olat.dispatcher.DMZDispatcher

  • /auth/ refers to authbean which loads and configures the org.olat.dispatcher.AuthenticatedDispatcher

olat/user/propertyhandlers/_spring/userPropertiesContext.xml and userPropertriesHandlersContext.xml

This feature was started, designed and developed by BPS Bildungsportal Sachsen and finished by Frentix . The last tests and fixes were done by MELS .

These two configuration file define the user attributes available and mandatory/optional, moreover it is the place where their usage is specified. This means you can remove, add, rename user attributes, and also define their availability in different forms, tables/listings, and read only views in this two files.

Three important points to mention first:

  • Each new release means that you must track the changes in this configuration and act accordingly - e.g. adding of new forms, removing forms, etc.

  • This custom fields may not only appear in forms and read only views. There are table data models, bulk imports, exports, configuration managers to be taken into account. Thus it is a configuration to be tested, and thought about twice.

  • Search with custom fields works only for the users having those user fields filled.

The configuration file userPropertriesHandlersContext.xml lists the available User properties defining at least a name , group and deletable boolean value. The configuration file userPropertiesContext.xml contains a list of code places which are user property enabled. Hence you can configure each table, form, read only view with the set of user properties visible.

The following examples introduce the concepts used:

Example 4.1. Definition of a user property in the userPropertriesHandlersContext.xml

<bean name="userPropertyFirstName" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> 1
	<property name="name" value="firstName" /> 2 
	<property name="group" value="account" /> 3
	<property name="deletable" value="false" /> 4
</bean>
  						

1

The beans name must be unique over all properties, the class refers to a java class responsible for handling input, output, and validation. This Generic127CharTextPropertyHandler needs the three values initialized via Spring properties - name, group, deletable.

2

name i18n key for translation

3

group you can group properties together, e.g. address if your property belongs to address information

4

deletable if the value can/should be deleted in case the user is deleted. Should be true in most cases.


Example 4.2. Each listed bean must be defined in the userPropertriesHandlerContext.xml

<bean id="org.olat.user.UserPropertiesConfig" class="org.olat.user.propertyhandlers.UserPropertiesConfigImpl">
	<property name="userPropertyHandlers"> 1
		<list>
			<ref bean="userPropertyFirstName" />	2
			<ref bean="userPropertyLastName" />
			<ref bean="userPropertyEmail" />
			<ref bean="userPropertyBirthDay" />
			<ref bean="userPropertyGender" />
			<ref bean="userPropertyTelPrivate" />
			<ref bean="userPropertyTelMobile" />
			<ref bean="userPropertyTelOffice" />
			<ref bean="userPropertySkype" />
			<ref bean="userPropertyHomepage" />
			<ref bean="userPropertyStreet" />
			<ref bean="userPropertyExtendedAddress" />
			<ref bean="userPropertyPoBox" />
			<ref bean="userPropertyZipCode" />
			<ref bean="userPropertyRegion" />
			<ref bean="userPropertyCity" />
			<ref bean="userPropertyCountry" />
			<ref bean="userPropertyInstitutionalName" />
			<ref bean="userPropertyInstitutionalUserIdentifier" />
			<ref bean="userPropertyInstitutionalEmail" />
			<ref bean="userPropertyOrgUnit" />
			<ref bean="userPropertyStudySubject" />
		</list>
	</property>
  					

1

It as simple as it looks - it is just a list of previously defined user properties

2

added userProptertyFirstName and userPropertyLastName. Make sure if you add your own, that you list them here.


Example 4.3. Home settings configuration

<bean id="org.olat.user.UserPropertiesConfig" class="org.olat.user.propertyhandlers.UserPropertiesConfigImpl">
	<property name="userPropertyHandlers">
		<list>
			<ref bean="userPropertyFirstName" />
			<ref bean="userPropertyLastName" />
			.
			.
			.
			<ref bean="userPropertyStudySubject" />
		</list>
	</property>		
	<property name="userPropertyUsageContexts">
		<map>
			<!-- 
				Forms that show user properties
			-->
			<entry key="org.olat.user.ProfileFormController"> 1
				<bean class="org.olat.user.propertyhandlers.UserPropertyUsageContext">
					<property name="propertyHandlers"> 2
						<list>
							<ref bean="userPropertyFirstName" />
							<ref bean="userPropertyLastName" />
							.
							.
							.
							<ref bean="userPropertyStudySubject" />
						</list>
					</property>
					<property name="mandatoryProperties"> 3
						<set>
							<ref bean="userPropertyFirstName" />
							<ref bean="userPropertyLastName" />
							<ref bean="userPropertyEmail" />
						</set>
					</property>
					<property name="userViewReadOnlyProperties"> 4
						<set>
							<ref bean="userPropertyFirstName" />
							<ref bean="userPropertyLastName" />
							.
							.
							.
							<ref bean="userPropertyStudySubject" />
						</set>
					</property>
					<property name="adminViewOnlyProperties"> 5
						<set />
					</property>
				</bean>
			</entry>
  					

1

The configuration affects the ProfileFormController. If this is not documented, you must use the java IDE to find the class and corresponding GUI workflow. The following descriptions refer to this form now.

2

This list of properties are shown as input fields in the specified order to the user.

3

The set of properties that mandatory and a validity check for a not empty semantic is called on each property.

4

This set defines which properties are only in read-only mode for the user.

5

These are the properties visible to administrators only. Make sure you do not have them here and also in read-only for users list.


org/olat/_spring/olatextconfig.xml

The interesting configuration parts are:

Layout defining controllers for header, topnav and footer

  • id="fullWebApp.HeaderControllerCreator" defines layout and work flows for the header part.

  • id="fullWebApp.TopNavControllerCreator" defines layout and work flows for the top nav part.

  • id="fullWebApp.FooterControllerCreator" defines layout and work flows for the footer part.

org/olat/core/_spring/olatcoreconfig.xml

Bootstrap for the olatcore, mainly for services which have to be configured and created before anything else happens.

org/olat/core/commons/scheduler/_spring/schedulerCorecontext.xml

Default values of the scheduler. This file is inside of the olat-core.jar and your own values must be specified in the olatextconfig.xml

org/olat/core/commons/scheduler/_spring/olatextconfig.xml

Defines the scheduled jobs used inside of OLAT, if you have a job to be scheduled, add it here.

org/olat/core/commons/persistence/_spring/databaseCorecontext.xml

The configuration for datasources, hibernate and c3p0 connection pool. Most options can be configured via olat.local.properties, and also the selection of the used db vendor (see ${db.vendor}).

org/olat/ldap/_spring/ldapContext.xml

See also olat.properties file for LDAP basic settings.

org/olat/commons/modules/glossary/_spring/glossaryContext.xml

Defines the Glossary Manager Implementation and marks the dependency to the referenceManager.

org/olat/commons/coordinate/cluster/_spring/olatdefaultconfig.xml

Switches the administration view for a cluster/non-cluster setup depending on the property ${cluster.mode}.

org/olat/admin/sysinfo/_spring/sysinfoContext.xml

The info message GUI is different in a cluster. This GUI gets differently initialised on each tomcat node with the property ${node.id}

org/olat/search/service/_spring/searchContext.xml

The Lucene based full text search can be configured with blacklist of files to exclude, maximal size of files to include. There is also a list of indexer defining which part of OLAT gets crawled.

org/olat/shibboleth/_spring/shibbolethContext.xml

Most notable is the mapping of the Shibboleth provided attributes to OLAT user properties, and the attribute translation map for easier handling of attribute names within the OLAT application.

org/olat/notifications/_spring/olatdefaultconfig.xml

The notification emails are sent periodically. The intervall can be configured by overriding the bean definition in an olatextconfig.xml

Chapter 5. Customize your installation

Since the OLAT 6.0.x Release the CSS framework YAML is used, the customization for themes can be found in an own document (Understanding the brasato layout). The impatient can find the theme relevant stuff under Themes.

5.1. Internationalization and translations

See our extensive manual for more information about the new translation tool and existing translations.

5.2. Concept

The Brasato application framework offers full internationalization (i18n) support. Every GUI message visible in the user's browser (e.g. navigation, error messages etc.) is computed by the i18n system based on the user's language configuration.

Translations, as we call these GUI messages, are stored in Java Properties files on the file system as part of the source code of the application. Each Java package can contain a directory _i18n. There you will find the localization files, e.g. LocalStrings_de.properties for German translations. In the context of the translation infrastructure we call the package to which the translation belongs the bundle. Translation files in org/olat/core/_i18n/ are the translation files for the bundle org.olat.core.

The i18n system features an easy to use translation tool that allows users to translate new languages or customize an existing language package for a certain use case. The system does also provide easy to use workflows to enable and disable languages, import and export language packages and to create or delete languages.

If you wish to translate OLAT to a new language and you want to contribute this translation to the OLAT community, please contact us first. We have a dedicated translation server where your translations will automatically be checked into our CVS and we can communicate you the changes that happend in the code due to code refactoring and development. We would love to have your favorite language as an official OLAT language!

5.3. Configuration

Languages are configured in olat3/webapp/WEB-INF/olat_config.xml. Add new languages in the Localization module and set the default and fallback language. You sould make your changes in the olat_config.xml.in rather than in the olat_config.xml file. You can then run maven mvn olat:properties to generate your olat_config.xml file.

From this config files the system reads the default configuration. Once an administrator uses the admin GUI to set the language parameters, the config is written into the olatdata user space. This user space configuration overwrites the default values. The configuration can be found in the file olatdata/system/configuration/org.olat.core.util.i18n.I18nModule.properties. This file can be deleted to restore the configuration to the default settings.

We really appreciate if you do your translation on our translation server and contribute it to the community. If you still want to set up your own translation server then you have to do the following:

  • Check out the application i18n project (olat3_i18n) from CVS or unzip the sources from a ZIP.

    Maybe this project is stored in your private CVS and not named like the example below. You could also use any other path to an existing directory here, this directory will contain the new created languages from your server. Configure the i18n path for the application files in your olat.properties: i18n.application.src.dir = /opt/olat3_i18n/src/main/java

  • Check out the olatcore i18n project (olatcore_i18n) from CVS or unzip the sources from a ZIP.

    This could well point to the same directory as the i18n application source dir! Configure the i18n path for the olatcore files in your olat.properties: i18n.brasato.src.dir = /opt/olatcore_i18n/src/main/java

  • Configure the system as a translation server.

    Set is.translation.server=true in your olat.local.properties file

  • Restart tomcat.

When loggin in as administrator you will now see a menu item Administration > Translation Tool.

5.4. The online translation tool

OLAT has a handy translation tool built into the system so that you do not have to understand an IDE like eclipse. All translation files can be edited via webbrowser.

The translation tool together with related topics how to set up a tranlation server, how to create, import and export a lanuage, etc. are explained in detail in a separate manual: Understanding the Internationalization (i18n) and Translation System.

5.5. Customizing the disclaimer

OLAT 6.3 introduced two ways to customize the disclaimer. You can add a second checkbox to the disclaimer and a link to a file download.

  1. registration.disclaimerAdditionalCheckbox in olat.properties (olat.local.properties) add the second checkbox. The label for this checkbox is in the i18n package org.olat.registration, key disclaimer.additionalcheckbox.

  2. registration.disclaimerAdditionaLinkText in olat.properties add the link with the file download. The label is the i18n key disclaimer.filedownloadurl in the package org.olat.registration. The path of the file relative to olatdata/customizing/disclaimer is set with a i18n key disclaimer.filedownloadurl in the same package as the label.

Chapter 6. Clustered OLAT

Version 6.1 of OLAT introduces support for clustering: you can now run OLAT on multiple interconnected application servers. This chapter provides details about clustered OLAT and how to set it up. Version 6.0 of OLAT already introduced the possibility of running a separate tomcat instance for handling the search index and serve search requests. The OLAT cluster in 6.1 goes further and allows having any number of tomcat instances running OLAT being combined in one OLAT cluster. This allows you to scale OLAT to the growing number of users by simply adding another OLAT node.

When setting up a cluster there are two important point of views to consider: the external and the internal. The external view describes how the system is reached from the outside and how load is distributed to the different OLAT nodes. The internal view describes how the OLAT nodes interact and what means they require for this communication.

On the external view: An important part of clustering OLAT is to define how user sessions and requests are routed to the available OLAT instances. There are different possibilities for doing this out there. The basic requirement to any solution though is to have sticky sessions, i.e. once a new user's session is routed to a particular OLAT instance, subsequent requests of the same user session must be routed to the same OLAT instance. Other than that you can use hardware loadbalances or software loadbalancers (such as Apache with mod_jk) as long as they support sticky sessions. This chapter assumes using mod_jk - but this is purely a deployment choice.

On the internal view, this change in architecture requires new forms of communication between the different OLAT nodes in order to synchronize certain actions and data. For this communication OLAT uses JMS (ActiveMQ) and the database. It is therefore important to note that all OLAT nodes in a cluster need access to the same JMS broker, the same database and the same filesystem.

Topics not covered in OLAT Clustering

Clustering in OLAT focuses on being able to increase the number of concurrent session and hence scale the number of sessions and requests. It does does not focus on High-Availability nor Session Replication

6.1. Clustered OLAT System Overview

Clustered System Overview

The clustered OLAT system is based on three layers :

  • Front-layer with apache and mod_jk as loadbanlacer see Section 6.3, “Configuration mod_jk as Loadbalancer”

  • Tomcat-layer with OLAT Web-application. Based on your number of concurrent clients, you will have a number of OLAT nodes. There is one special Node with single-services enabled. Single-services are course-logging, notifications etc. (see Section 6.4, “OLAT Cluster Properties”) This services could run only once in a OLAT cluster.

  • Backbone-service layer with database, shared filesystem, messaging-system (JMS) for cluster-node communication and Openfire chat server.

Each of the layer could be on different hosts. The services on a layer could be clustered vertical too e.g. each OLAT Node could be on an other machine.

6.2. Installation of ActiveMQ (JMS)

OLAT in cluster mode requires a JMS system to be available. Since we completely rely on the JMS specification you can use any of your preferred JMS provider. Also, we don't put any special requirements on the JMS provider such as persistency or failure tolerance. Hence you could use a standalone JMS server or a serverless, multicast based JMS.

As an example we're presenting the configuration of ActiveMQ here.

  • Download ActiveMQ 5.2 or newer from here: http://activemq.apache.org/download.html

  • In conf/activemq.xml adjust the networkConnector to be static://tcp://localhost:61616

  • In conf/activemq.xml remove the discoveryUri from the transportConnector named 'openwire' to avoid multiple ActiveMQ servers to discover each other - unless you want exactly that

  • Start the ActiveMQ server via bin/activemq.bat/.sh

  • Configure the jms.broker.url in OLAT's olat.properties accordingly

6.3. Configuration mod_jk as Loadbalancer

This section describes Apache with mod_jk as a solution for load balancing in an OLAT cluster. You are free to use any other load balancer (hard- or software) as long as certain criterias are met (see below).

Refer to http://tomcat.apache.org/connectors-doc/generic_howto/workers.html for details

Criterias for the Load Balancer

  • Session stickyness: The OLAT Cluster requires session stickyness to be configured to make sure a particular user is always routed to the same tomcat instance.

  • Apache and one tomcat instance must run on same host: Static files (those under /olat/raw) can be served by Apache directly and do not need to take a detour via tomcat. Hence apache needs to be configured to serve /olat/raw directly from a tomcat instance on the same host. In order to do this you must install an OLAT node at least once on the host where you run apache - it does not necessary have to be included in the load balancing but it must be started once in order to populate the /olat/raw/* directories.

Example configuration of Apache with mod_jk

mod_jk.conf:

  <IfModule mod_jk.c>
    JkRequestLogFormat "%w %V %T %r"
    JkWorkersFile      "/modjkdirectory/workers.properties"
    JkLogFile          "/logdirectory/mod_jk.log"
    JkShmFile          "/modjkdirectory/mod_jk-runtime-status"
    JkLogLevel         error 
    JkOptions          +ForwardURICompatUnparsed
    JkMount            /olat/* loadbalancerworker
    JkMount            /olat loadbalancerworker
    JkUnMount          /olat/raw/* loadbalancerworker

   ...
   </IfModule>	  	
	  	

  • Make sure to JkMount the loadbalancerworker under /olat

  • Make sure to JkUnMount the raw directory /olat/raw

workers.properties:

workers.tomcat_home=/usr/local/opt/tomcat-6.0
workers.java_home=/usr/local/opt/java-1.6
ps=/

worker.list=loadbalancerworker

worker.loadbalancerworker.type=lb
worker.loadbalancerworker.balance_workers=tomcatolat02,tomcatolat01
worker.loadbalancerworker.sticky_session=true
worker.loadbalancerworker.sticky_session_force=false
worker.loadbalancerworker.method=s
worker.loadbalancerworker.connect_timeout=15000
worker.loadbalancerworker.prepost_timeout=15000

worker.basic.type=ajp13
worker.basic.socket_timeout=1200
worker.basic.cachesize=1
worker.basic.cache_timeout=1300
worker.basic.recycle_timeout=1300
worker.basic.port=8009
worker.basic.distance=10
worker.basic.lbfactor=10
worker.basic.connect_timeout=30000
worker.basic.prepost_timeout=30000

worker.tomcatolat01.host=localhost
worker.tomcatolat01.port=8019
worker.tomcatolat01.domain=tomcatolat01
worker.tomcatolat01.reference=worker.basic
worker.tomcatolat01.lbfactor=10

worker.tomcatolat02.host=localhost
worker.tomcatolat02.port=8029
worker.tomcatolat02.domain=tomcatolat02
worker.tomcatolat02.reference=worker.basic
worker.tomcatolat02.lbfactor=10
	  	

  • Add the loadbalancerworker under worker.list and all OLAT nodes under worker.loadbalancerworker.balance_workers

  • Configuring connect_timeout and prepost_timeout instructs mod_jk to detect a deadlock or crash in an OLAT node

If you are using VirtualHost and JkMountCopy together, please refer to http://tomcat.apache.org/connectors-doc/reference/apache.html for details, how JkMount is inherited from global server to VirtualHosts.

6.4. OLAT Cluster Properties

# server port must be the one visible to the outside - usually 80
server.port=80

# server.port.ssl must is usually 443
server.port.ssl=443

# this must definitely be true in cluster mode
server.modjk.enabled=true

# the jvmRoute must match what you configure in the worker.properties
server.modjk.jvmRoute=tomcatolat01

# the internal http port is used for directly connecting to tomcat, bypassing apache
server.internal.http.port=8081

#
# more specific cluster properties
#
# cluster.mode must be set to Cluster 
cluster.mode=Cluster

# select one node in your cluster where you enable singleton services, disable it on all others
cluster.singleton.services=disabled|enabled

# used for stopping tomcat
cluster.catalinaport=8015

# the ajpport port must match the one you configure in worker.properties
cluster.ajpport=8019

# when in cluster mode every node needs an unique integer between (1-64), first node has to be node "1".
node.id=1

# jms broker url for the eventbus
jms.broker.url=failover:(tcp://activemq.host.name:61616?wireFormat.maxInactivityDuration=30000)


# the treecache.xml file name - used for Cacher
treecache.xml.file=treecache.xml

# the multicast port used by jboss treecache
multicast.port=41414
      

Chapter 7. Administration

About this chapter

This chapter explains what you can do in the OLAT administration. The administration tab in the header of the OLAT screen is only visible if you are an system administrator of OLAT. It explains all the menu items on the left side of the screen and talks also about mrtg monitoring and more.

7.1. System information

sessions

All authenticated sessions are shown here

infomsg

  • Info message: This message is presented to each user on the login screen. When logged in, the message disapears. Set an empty message to delete an existing message. When rebooting the server, the message persists.

  • Maintenance message: This message is presented on every page at the top of the screen. Using the maintenance message user can be notified about a server shutdown e.g. in 5 minutes. Users have then the change to finish their work and to log out cleanly. Set an empty message to delete an existing message. When rebooting the server, the message is automatically removed.

    The maintenance message can also be set by that runs on the same server as the OLAT server. This can be used to inform user about a daily backup procedure that includes a shutdown of the server. Schedule a maintenance message five minutes prior to the shudown.

    #wget "https://www.yourolat.com/olat/maintenanceMessage.html?token=xyz123&msg=Hello+world"

    The token parameter is set automatically the first time you start OLAT. You can lookup the value in the properties table (See properties section below). Search for a property that has the category "_o3_" and the name "maintenanceMessageToken".

errors

A convenient way to quickly show an error with its stacktrace (e.g with id "E123", which shows up in the orange screen when an error occurs). For large logfiles it is a lot more efficient to use external tools like grep. The logfile is situated at olatdata/logs/olat.log

Hover with the mouse over the text Error number: and a tooltip appears with the actual max Exy number

loglevels

To set the log4j-Loglevels on the fly. Loggers set to debug will of course fill the log quickly. The loggers show up on this screen only if the associated class has been loaded. (e.g. course loggers only show up if at least one person has entered a course since the startup of the server)

sysinfo

  • Display memory: (with option to garbage collect). Note that the information of free memory is only accurate after a garbage collection. But you are advised not to trigger a full garbage collection on a live system.

  • DefaultControllerCount: Number of org.olat.gui.control.Controller of all users. The instances are stored in a weakhashmap and are thus only accurate right after a garbage collection. The count is now generated by incrementing and decrementing instead a count over the collection.

  • Threads: thread dump. Note that five threads are needed for each authenticated user if you have instantmessaging enabled (Thread-XXXX, Smack Packet Writer, Smack Writer Listener Processor, Smack Packet Reader, Smack Listener Processor). Because of the large number of threads, it is thus adviceable to reduce the stack thread size which often defaults to 512kB per thread (use the -Xss option, e.g. /usr/local/opt/java-1.5/bin/java -server -Xss256k -Xms768m -Xmx768m -Djava.net.preferIPv4Stack=true)

  • Java Environment Properties: can be very useful

snoop

Dumps out all the information about your http-Request (similar to the famous Tomcat SnoopServlet)

usersessions

User-session administration. Can be used to handle overload situations.

  • Block new logins. No new users can login anymore. Only administrators can further login.

  • Invalidate all sessions! All user except administrator will be logout.

  • Invalidate a certain number of sessions (ordered by last access).

  • Set session-timeout in sec.

  • Set maxium number of sessions. More sessions will be blocked.

For debugging only : Displays all UserSession objects with its Windows contained.

locks

Certain actions (e.g. editing a certain course) can only be done by one person at a time. All locks are listed here. The locks are released when the usersession is unbound (session timeout or log-off). The locks are reentrant for a person: If you are in a course editor and your browser crashes, you can re-login (thus obtaining a new session) and still re-enter the editor.

Multi-user events

If a person enters e.g. a course, the Controller will register to listen to global event of interest. If you are currently working in a OLAT group which is deleted right at this time by an administrator of this group, the controller will receive a message that the OLAT group has been deleted and inform you on the screen.

Cluster

Information about cluster when running in cluster-mode. This tab is disabled in single-VM mode.

  • Information about cluster-nodes like number of send/received messages. Link to change admin-console to an other cluster-node.

  • Start/stop performance monitoring. Reset performance monitoring. Table with performance statistic for all measure-points.

  • Link to release all locks without finishing user-sessions.

  • Last send and received cluster events.

  • List with registered cluster event-listeners.

caches

Currenty there are to major caching mechanisms in OLAT active. First the EHCache (Easy Hibernate Cache) and the Softcache.The EHCache tries to minimize access to the database by caching queries recenty loaded from the database. The EHCache could be used for general purpose caching tasks but is actually mostly used as a database query cache. The softcache does caching for the needend data of a whole course with all properties and rights. The "soft" indicates that it uses javas soft keys for referencing to object on the heap and therefore the java memory manager can

Buildinfo

Information about installed OLAT software version like :

  • version with build number

  • isClusterMode [true or false]

  • nodeId : current connected node-number

  • serverStartTime

  • baseDir

fstest

If you are in a clustered OLAT you can check your distributed filesystem with this simple test. The Test generates files on different nodes and checks if they are visible on every node. Do not run this in a production environment as it can produce some heavy load.

7.2. System configuration

Layout

Here you can test existing layout themes. Select a theme from the list in order to use it. Your modifications will be activated after the next login.

Languages

Here you can define the standard language is used on the OLAT login page as well as when creating new user accounts. You can select languages from supported language list that should be at the disposal of OLAT users. You can see the completion of translation in %.

For language administration you can import and export language packages.

Ajax Web 2.0 Mode

With the release 5.2.0 the OLAT GUI can be served in two different modes. The "normal" and the "AJAX" mode. In the normal mode every page that is requested from the server gets delivered as a fully rendered HTML page with complete header and body. In the ajax mode only the components in the screen that changed are delivered to the client and displayed by dom replacement. The administration menu item "AJAX" shows which clients are fully tested and support the ajax mode. The clients are checked by the html header attribute "user-agent". You can add other user agent stings here for immediate activation. But if you want them permanent ajax activated you have to add them to the olat-config.xml file.

When the ajax mode is activated each client starts polling in periodical time. This feature is at the moment mainly used in the instant messaging stuff either for indicating that the user has a new message or while chatting. Default polling time is 10s and 2s while chatting. To increase or decrease this value see section instant messaging in the admin environment.

Quota Management

Every folder to which a user can updload data has a quota and an uploadlimit and belongs to a system default quota category. There are six categories (see table below).

You as OLAT administrator can change the values of the system default quotas and uploadlimits, but the system quotas itself you can not delete them. If you change the value of a system quota or uploadlimit, as you already assume, you change it for every folder which is in this category. If you like to change only one folder's quota you might add a new quota specially for this folder and the default value is overwritten. The only thing you need to is indicating the path to this folder and of course set the new quota and uploadlimit values.

An example: The system default value for the quota '::DEFAULT::USERS' is 10240 KB. That means the subfolders that are directly under /homes have the quota value 10240 KB. The user with username 'extralarge' needs more diskspace. You may create only for him a new quota whose path is '/homes/extralarge' and set the quota's value to e.g. 50000 KB. If you delete this quota the user 'extralarge' has again as before the default value 10240, if you didn't change it meanwhile.

In many cases you might edit quotas in a more convenient way. Under every folder's overview there is a 'Edit quota' button (e.g. in your personal folder) only visible for OLAT-administrators. Like this the path is already filled in.

If you are not owner or participant of OLAT group you need to select the group_id from database using the OLAT group name as follow: (assuming the OLAT groupname is 'xyz')

mysql> SELECT group_id FROM o_gp_business WHERE businessgrouptype = 'BuddyGroup' AND groupname = 'xyz';
	+----------+
	| group_id |
	+----------+
	|   524290 |
	+----------+
	1 row in set (0.00 sec)

The path is: /cts/folders/BusinessGroup/524290

Table 7.1. Default Quotas

Default QuotaQuota (KB)Upload Limit (KB)Path to folder used to overwrite the default value
::DEFAULT::USERS1024010240/homes/[username]
::DEFAULT::POWERUSERS1024010240/homes/[username]
::DEFAULT::GROUPS1024010240/cts/folders/BusinessGroup/[group_id]
::DEFAULT::REPOSITORY1024010240unchangeable
::DEFAULT::COURSEFOLDERS1024010240/course/[course_id]/coursefolder
::DEFAULT::NODEFOLDERS1024010240/course/[course_id]/[foldernodes|dropboxes|taskfolders]/[node_id]

The default values for system quotas and uploadlimits you might configure in the olat.properties file as shown below:

	# folder component default values: upload size and quota
	folder.maxulmb=10
	folder.quotamb=10
	  

7.3. System registration

You can join in and register your OLAT installation at olat.org to transfer statistical information anonymously (such as number of users, courses, etc.). These data will not be related to your installation. They will only serve to better document OLAT's use.

7.4. Instant Messaging Administration

Here you can control the communication with the instant-messaging server. :

  • You check username and password for openfire.

  • You can check version of IM server plugin.

  • You can do a connection reset. Only necessary if autoConnect fails. Check IM server web interface for reconnected session of "admin" user.

  • You can start synchronization of study or project groups as Buddy Roster groups on the Instant Messaging server. This can be useful if the Instant Messaging server has been temporarily unavailable.

  • You can set 'idle poll time' and 'chat poll time' used in HTML chat.

7.5. Course activity

Since OLAT 6.0.3 there is a course activity information available. This is a list with the loaded courses. The table is only refreshed by clicking again on the menu entry.

Columns

  • Active count of users having the course open at this very moment. Whereas open means, open in a tab.

  • [ms] number of milliseconds it took for the first load from disk.

  • Calls count of starting the course. This can be 0 in case the course detail page was only displayed.

  • Title Course title

  • Author Initial course author

If you are running the Full text search/indexer in the same instance as the OLAT LMS. You will see every course loaded.

7.6. Properties

Search form for user's properties. For more specific search use the advanced property search. More information about the property you will find in the next section 'Advanced properties'.

7.7. Advanced properties

Almost everything in OLAT can have its properties. They are saved in the table o_property, a very generic table. As you see below only three of thirteen rows can not be NULL. The fields are used dependent on the businesscase and this are not in every case all of them.

mysql> desc o_property;
+------------------+----------------+------+-----+---------------------+-------+
| Field            | Type           | Null | Key | Default             | Extra |
+------------------+----------------+------+-----+---------------------+-------+
| id               | bigint(20)     |      | PRI | 0                   |       |
| lastmodified     | datetime       |      |     | 0000-00-00 00:00:00 |       |
| creationdate     | datetime       | YES  |     | NULL                |       |
| identity         | bigint(20)     | YES  | MUL | NULL                |       |
| grp              | bigint(20)     | YES  | MUL | NULL                |       |
| resourcetypename | varchar(50)    | YES  | MUL | NULL                |       |
| resourcetypeid   | bigint(20)     | YES  | MUL | NULL                |       |
| category         | varchar(33)    | YES  | MUL | NULL                |       |
| name             | varchar(255)   |      | MUL |                     |       |
| floatvalue       | decimal(78,30) | YES  |     | NULL                |       |
| longvalue        | bigint(20)     | YES  |     | NULL                |       |
| stringvalue      | varchar(255)   | YES  |     | NULL                |       |
| textvalue        | text           | YES  |     | NULL                |       |
+------------------+----------------+------+-----+---------------------+-------+
13 rows in set (0.03 sec)

Example Info Message

The info message on the login-screen is saved as a property. This property only use three fields except id, lastmodified and creationdate, namely: category, name and textvalue, the text of the message.

mysql> select * from o_property where name="InfoMsg";
+--------+---------------------+---------------------+----------+------+------------------+----------------+
| id     | lastmodified        | creationdate        | identity | grp  | resourcetypename | resourcetypeid |
+--------+---------------------+---------------------+----------+------+------------------+----------------+
| 393217 | 2005-04-12 17:09:06 | 2005-04-12 17:09:06 |     NULL | NULL | NULL             |           NULL |
+--------+---------------------+---------------------+----------+------+------------------+----------------+

   ----------+---------+------------+-----------+-------------+--------------+
    category | name    | floatvalue | longvalue | stringvalue | textvalue    |
   ----------+---------+------------+-----------+-------------+--------------+
    _o3_     | InfoMsg |       NULL |      NULL | NULL        | only as demo |
   ----------+---------+------------+-----------+-------------+--------------+
1 row in set (0.01 sec)

Example PASSED true for a certain test

The information about passing tests is also saved in the o_property table. Below you see that the users with the identities 163847 and 163849 have passed the test NID:iqte::71256453203971.

mysql> select * from o_property where category="NID:iqte::71256453203971" and name="PASSED" and stringvalue="true";
+--------+---------------------+---------------------+----------+------+------------------+----------------+
| id     | lastmodified        | creationdate        | identity | grp  | resourcetypename | resourcetypeid |
+--------+---------------------+---------------------+----------+------+------------------+----------------+
| 655376 | 2005-04-13 13:01:49 | 2005-04-13 13:01:49 |   163847 | NULL | CourseModule     | 71256453203963 |
| 655384 | 2005-04-13 13:17:51 | 2005-04-13 13:17:51 |   163849 | NULL | CourseModule     | 71256453203963 |
+--------+---------------------+---------------------+----------+------+------------------+----------------+

   --------------------------+--------+------------+-----------+-------------+-----------+
    category                 | name   | floatvalue | longvalue | stringvalue | textvalue |
   --------------------------+--------+------------+-----------+-------------+-----------+
    NID:iqte::71256453203971 | PASSED |       NULL |      NULL | true        | NULL      |
    NID:iqte::71256453203971 | PASSED |       NULL |      NULL | true        | NULL      |
   --------------------------+--------+------------+-----------+-------------+-----------+
2 rows in set (0.01 sec)

7.8. Translation tool

See the chapter Chapter 5, Customize your installation

7.9. Full Text Search Administration

In the cluster-mode, this menu item is only enabled on the node where the search-service is running. There are 6 sections :

  • Indexer Status : Status of current running index or status of last run since OLAT start.

  • Index Status : Status of current used index.

  • Search Status : Number of search queries since OLAT start.

  • Start/Stop Index : Start or stop indexer. The index-interval parameter can be overwritten to reduce CPU load.

  • Number of indexed elements per document-type : During indexing each OLAT document-type will be counted e.g. 'type.group'.

  • Number of indexed elements per file-type : Number of indexed HTML, PDF, Text , Word, Excel and Power-point files.

7.10. Manual triggering the notifications

Notfications are triggered automatically once daily 10min after midnight. You can configure the time in the OLAT configuration. If you wish to notify the users immediate during the day you can trigger the notification manually be pressing the button in the admin area.

7.11. Access Rights

  • every user has one identity

                   +---------------+  
+---------+        | o_bs_identity |
| o_user  |        +---------------+
+---------+        | id            |
| user_id | 1 -- 1 | fk_user_id    |
+---------+        +---------------+
  • every identity is in one ore more security groups and every security group has one or more identities

                         +-----------------+                     
                         | o_bs_membership |        +---------------+       
+---------------+        +-----------------+        | o_bs_secgroup |        
| o_bs_identity |        | id              |        +---------------+
+---------------+        | secgroup_id     | n -- 1 | id            |
| id            | 1 -- n | identity_id     |        +---------------+
| fk_user_id    |        +-----------------+
+---------------+

  • every group has one or more policies

  • every resource belongs to one ore more policies

                        +--------------+
                        | o_bs_policy  |        +----------------+        
+--------------+        +--------------+        | o_olatresource |
|o_bs_secgroup |        | id           |        +----------------+
+--------------+        | oresource_id | n --1  | resource_id    |
| id           | 1 -- n | group_id     |        | resname        |
+--------------+        | permission   |        | resid          |  
                        +--------------+        +----------------+

The policy shows you which group has what kind of permission for which resource-type (resname). Permissions are e.g: "access", "read", "hasRole", etc. It depends on the particular business case how they are to interpret. Resources can be everything, e.g. BaseSecurityModules, FileResources, Controllers, etc.

Examples

Table 7.2. Access Rights Example 1

GroupKeyPolicyResource-KeyResource-Type
2hasRole BaseSecurityModule:RAuthor

Every identity which is in the security-group id=2 is author.

Table 7.3. Access Rights Example 2

GroupKeyPolicyResource-KeyResource-Type
26access26SecGroup
26hasRole BaseSecurityModule:RAuthor
26admin71252385216138CourseModule

If a user's identity is in the secgroup id=26 he has admin permissions to the resource '71252385216138'. He is also OLAT-author as long his identity belongs to the secgroup id=26. Additionally he might add and remove other users from the secgroup id=26.

Chapter 8. Deletion of unused users and resources from the system

8.1. User Deletion

User can be deleted in 'User management' tab. Users can be deleted directly without any notification with 'Delete user immediately' or users can be deleted with notification-email workflow. All user data will be deleted. The login-name of a deleted users is still reserved because new user account should not use an used login-name. A deleted user can not be recovered.

A user can have the following states :

  • active : Normal state of OLAT users.

  • Not deletable : User has a permanent account and will never be listen in deletion-workflow. OLAT administrator can change state back to active.

  • login blocked : User can not login. OLAT administrator can change state back to active.

  • deleted : User is deleted and cannot be recovered.

An user manager can change the state in form 'Manage user settings' at tab 'Roles'

Only the efficiency statement of a user will be archived as excel sheet. You will find the excel sheet at ARCHIVE_PATH/archive_deleted_users/DELETE_DATE/del_identity_DELETED_IDENTITY_NAME. The ARCHIVE_PATH can be configrated in olat.properties with property 'archive.dir' (e.g. archive.dir=C:/temp/deleted_archive). The directory can be somewhere in the filesystem. The idea is, that the archive directory is outside of olat-system. The OLAT system did not use the archived data and the archived data can not be recovered into the OLAT system.

The following user-data will be deleted : personal-folder, home-page, notes, user-properties, personal calendar, bookmarks, notifications, test-results, interrupted tests and instant messaging accout. The will be removed as owner from the following resources : groups, learning resources and catalog. If the reoved user is the last owner of the resource, the administartor will be inserted as owner.

User Deletion Workflow

The user-deletion workflow includes three steps :

  1. Inactive users :

    List of users which have not logged on to OLAT since xx months (e.g. 24 month, limit can be configurated). You can inform them via e-mail about the imminent deletion of their user account.

    That deletion can be prevented by clicking Activate. You can select the users which you want to delete and press the 'send notification email' button. In a popup you can edit or disable the notification email. The selected users will be removed form the 'Inactive user' list and moved to the 'E-mail sent' list.

  2. E-mail sent :

    List of users which have been notified via e-mail about the imminent deletion of their user account. The period for reaction (answer via e-mail or login) has not yet expired (e.g. 30 days, limit can be configurated). That deletion can be prevented by clicking Activate.

  3. Ready to delete :

    List of user accounts which are ready for deletion. The period of 30 days for reaction has expired. By clicking Activate you can prevent the deletion of user accounts.

    The deleted user accounts can not be recovered.

User deletion workflow

Configuration of User Deletion

The following delete parameter can be configrated in olat.properties or olat_config.xml :

  • Archive Directory : The archive.dir can be configurated in the olat.properties file.

  • Enable/Disable user-deletion for user manager : In the olat.config file, you can configurate if user manager can delete users or not (BaseSecurity Module : canDeleteUser=[true|false])

  • Define deleted user-fields : In the olat.config file, you can configurate which userfields will be deleted or not (User Module : field name="XXX" editableByUser="XXX" deletable="[true|false]). Default value is 'true'. With 'deletedFieldValue=-' can be defined which string should be inserted into the deleted user-fields.

  • Email response address : In the olat.config file, you can configurate the 'deleteEmailResponseToUserName' and 'adminUserName' which will be used in notification email (Deletion Module : 'deleteEmailResponseToUserName=administrator', 'adminUserName=administrator' )

8.2. Delete inactive learning resources

The OLAT administrator will be supported to delete inactive (not used over certain time) learning resources. The workflow to delete inactive learning resources includes three steps :

  1. Inactive learning resources :

    List of learning resources which have not been used since xx months(e.g. 24 month, limit can be configurated). You can inform the owners of selected learning resources via e-mail about the imminent deletion of their resources.

    That deletion can be prevented by clicking Activate. You can select the learning resources which you want to delete and press the 'send notification email' button. In a popup you can edit or disable the notification email. The selected learning resources will be removed form the 'Inactive learning resources' list and moved to the 'E-mail sent' list.

  2. E-mail sent :

    List of learning resources which have been notified via e-mail about the imminent deletion of their resources. The period for reaction (answer via e-mail or starting the resource) has not yet expired (e.g. 30 days, limit can be configurated). That deletion can be prevented by clicking Activate.

  3. Ready to delete :

    List of learning resources which are ready for deletion. The period of 30 days for reaction has expired. By clicking Activate you can prevent the deletion of user accounts.

    The deleted learning resources can not be recovered.

The learning resource will be archived in a ZIP file at : ARCHIVE_PATH/archive_deleted_resources/DELETE_DATE/del_group_DELETED_RESOURCE_NAME. The ARCHIVE_PATH can be configrated in olat.properties with property 'archive.dir' (e.g. archive.dir=C:/temp/deleted_archive). The directory can be somewhere in the filesystem. The idea is, that the archive directory is outside of olat-system. The OLAT system did not use the archived data and the archived data can not be recovered into the OLAT system.

8.3. Delete inactive project group

The OLAT administrator will be supported to delete inactive project groups. The workflow to delete inactive project group includes three steps :

  1. Inactive project group :

    List of project groups which have not been used since xx months(e.g. 24 month, limit can be configurated). You can inform the owners of selected project groups via e-mail about the imminent deletion of their groups.

    That deletion can be prevented by clicking Activate. You can select the project groups which you want to delete and press the 'send notification email' button. In a popup you can edit or disable the notification email. The selected project groups will be removed form the 'Inactive project group' list and moved to the 'E-mail sent' list.

  2. E-mail sent :

    List of project groups which have been notified via e-mail about the imminent deletion of their groups. The period for reaction (answer via e-mail or starting the groups) has not yet expired (e.g. 30 days, limit can be configurated). That deletion can be prevented by clicking Activate.

  3. Ready to delete :

    List of project groups which are ready for deletion. The period of 30 days for reaction has expired. By clicking Activate you can prevent the deletion of project groups.

    The deleted project groups can not be recovered.

The group will be archived in a ZIP file at : ARCHIVE_PATH/archive_deleted_groups/DELETE_DATE/del_group_DELETED_GROUP_NAME. The ARCHIVE_PATH can be configrated in olat.properties with property 'archive.dir' (e.g. archive.dir=C:/temp/deleted_archive). The directory can be somewhere in the filesystem. The idea is, that the archive directory is outside of olat-system. The OLAT system did not use the archived data and the archived data can not be recovered into the OLAT system.

Chapter 9. Upgrading from previous installation

See the first section to understand the general upgrading approach. Then consult the following sections that applies to your setup.

9.1. General upgrade concept

When upgrading from a previous OLAT version several things have to be done:

  1. Download the new OLAT release as WAR-File (when you have only configuration changes) or as source-code (when you want to customize your OLAT). Move your old OLAT first to a safe location to have a backup if something goes wrong. Configure your property values in the olat.local.properties file and save it in TOMCAT_HOME/lib.

    #create empty olat.local.properties in TOMCAT_HOME/lib
    #vi olat.local.properties
    #mvn package
    #cp olat/target/olat.war to your tomcat webapp 
    

    Note that the steps above will not change any data that resides in your olatdata directory when your have your olatdata defined outside the olat3 directory. The olatdata directory should never be located in the olat3, this is only the place for the programm code!

  2. Changing the database model, adding new tables, altering existing tables due to changes in the programm code. This step is normally automatic. See if there is a file in PATH_TO_YOUR_OLAT/olat3/database/alter_*_to_*.sql that matches your database vendor. This file will be applied to your database

    Before you do anything: please backup your database! Run something like this

    #mysqldump -u olat -p olat >mydump.sql

    It is very important that you execute this sql file in the correct order! When you are running OLAT version 3.1.2 for example it is absolutley mandatory that you run first the 3.1.2_to_3.1.3, then the 3.1.3_to_3.1.4 and only after that the 3.1.4_to_3.2.0!

  3. Now start tomcat. The first launch might take some time.

Caution

The order of the upgrading chapter is now reversed. But you still have to do the upgrades from the lowest to the highest number.

9.2. Upgrading from 6.3.x to 7.0.x

OLAT Configuration mechanism changed for the 7.0 release.

OLAT is configured by the placeholder replacement mechanism from Spring Framework. Spring searches for two files: serviceconfig/olat.properties and classpath: olat.local.properties. The entries in the second file overwrite the default entries in the first file.

To overwrite the defaults create an empty olat.local.propeties file and place it in /yourTomcatDir/lib (part of the classpath) or in the root of your OLAT classpath (e.g. webapp/WEB-INF/classes). See OLAT Administration tab (Setup entry) for your running configuration. When you start OLAT with an empty olat.local.propeties file for development reasons, your userdata will be written to java.io.tmpdir which is platform dependent (e.g. linux: /tmp). You can overwrite this location with a VM parameter -Djava.io.tmpdir=/home/user/data to have userdata in a convenient place.

Example for olat.local.propeties properties for MySQL.

# DB-properties of your 6.3 installation
db.name=olat_63
db.user=olat_63
db.pass=****

db.vendor=mysql
db.database.dialect=org.hibernate.dialect.MySQL5Dialect
# Important because validation would failed because validation is done before upgrade!
db.hibernate.ddl.auto=none

# Path-properties of your 6.3 installation
userdata.dir=/opt/olatdata
archive.dir=${userdata.dir}/archive
log.dir=${userdata.dir}/logs
upgrade.dir=${userdata.dir}/upgrades
folder.root=${userdata.dir}/bcroot
temp.dir=${userdata.dir}/tmp
      

Upgrade steps :

  1. Create an olat.local.propeties file for your OLAT configuration.

  2. Define the properties in olat.local.propeties file with value of your existing OLAT configuration. Minimum db- and path-properties.

  3. Copy olat.local.propeties to TOMCAT_HOME/lib directory.

  4. Create an log4j.xml file for your OLAT application. See Log4J XML Configuration

  5. Copy log4j.xml to TOMCAT_HOME/lib directory.

  6. Download 7.0 WAR File from www.olat.org

  7. Deploy WAR File like any standard WAR into your Tomcat installation. E.g. copy WAR file to webapps directory.

  8. Now start tomcat.

  9. Upgrade will be done at first startup.

  10. If you customized your 6.3 OLAT installation, check first olat.properties for available properties. You can overwrite any value in your olat.local.propeties file. For advanced changes look at Chapter 4, The config files. Probably you have to update some _spring/***Context.xml files and rebuild olat.war.

9.3. Upgrading from 6.2.2 to 6.3.x

Install OLAT as described in the installation chapter make sure you do not drop your existing database (see database properties)!! We recommend to move your existing installation from PATH_TO_YOUR_OLAT/olat3 to PATH_TO_YOUR_OLAT/olat6.x.x and install the 6.x.x package as your new PATH_TO_YOUR_OLAT/olat3. All user data is located in the olatdata directory which should not be located in the PATH_TO_YOUR_OLAT/olat3. The olatdata directory and the database won't be changed when installing the new code.

Your userdata will be upgraded with several migrations during the first startup. Depending of the amout of data this takes some time. Succesfull upgrades are listet in PATH_TO_OLATDATA/system/installed_upgrades.xml (OLATUpgrade_6_3_0 stuff)

Your database will be upgraded with new tables/colums automatically upon the first startup. See PATH_TO_YOUR_OLAT/database for altering code for your database. Succesfull upgrades are listet in PATH_TO_OLATDATA/system/installed_upgrades.xml

Now start tomcat.

9.4. Upgrading from 6.1.1 to 6.2.x

Install OLAT as described in the installation chapter but DON'T RUN 'ant dbsetup'!! We recommend to move your existing installation from PATH_TO_YOUR_OLAT/olat3 to PATH_TO_YOUR_OLAT/olat6.0.x and install the 6.2.x package as your new PATH_TO_YOUR_OLAT/olat3. All user data is located in the olatdata directory which should not be located in the PATH_TO_YOUR_OLAT/olat3. The olatdata directory and the database won't be changed when installing the new code.

OLAT 6.2.x comes with a rich text formatting textarea field which is used in forums and many general description fields. These field now support html tags and the content of these fields need so be migrated to get rid of the former wiki syntax which gets replaced by html. This process is automatically done upon first starting 6.2.x but you may have a look into the log file for errors.

#cd PATH_TO_YOUR_OLAT
        #rm olat (if olat is a symlink, otherwise: mv olat3 olat6.1.1)
        #unzip OLAT-6.2.0.zip
        #ln -s OLAT-6.2.0-PUBLIC-XXXXX olat
        #cd olat
        #cp olat.properties.default olat.properties
        #vi olat.properties
        #ant install

Your database will be upgraded with new tables/colums automatically upon the first startup. See PATH_TO_YOUR_OLAT/database for altering code for your database. Succesfull upgrades are listet in PATH_TO_OLATDATA/system/installed_upgrades.xml

Now start tomcat.

9.5. Upgrading from 6.0.x to 6.1.1

Install OLAT as described in the installation chapter but DON'T RUN 'ant dbsetup'!! We recommend to move your existing installation from PATH_TO_YOUR_OLAT/olat3 to PATH_TO_YOUR_OLAT/olat6.0.x and install the 6.1.1 package as your new PATH_TO_YOUR_OLAT/olat3. All user data is located in the olatdata directory which should not be located in the PATH_TO_YOUR_OLAT/olat3. The olatdata directory and the database won't be changed when installing the new code.

#cd PATH_TO_YOUR_OLAT
        #rm olat (if olat is a symlink, otherwise: mv olat3 olat6.0.x)
        #unzip OLAT-6.1.1.zip
        #ln -s OLAT-6.1.1-PUBLIC-XXXXX olat
        #cd olat
        #cp olat.properties.default olat.properties
        #vi olat.properties
        #ant install

Your database will be upgraded with new tables/colums automatically upon the first startup. See PATH_TO_YOUR_OLAT/database for altering code for your database. Succesfull upgrades are listet in PATH_TO_OLATDATA/system/installed_upgrades.xml

Now start tomcat.

9.6. Upgrading from 6.0.0 to 6.0.3

Install OLAT as described in the installation chapter but DON'T RUN 'ant dbsetup'!! We recommend to move your existing installation from PATH_TO_YOUR_OLAT/olat3 to PATH_TO_YOUR_OLAT/olat6.0.1 and install the 6.0.3 package as your new PATH_TO_YOUR_OLAT/olat3. All user data is located in the olatdata directory which should not be located in the PATH_TO_YOUR_OLAT/olat3. The olatdata directory and the database won't be changed when installing the new code.

#cd PATH_TO_YOUR_OLAT
#rm olat (if olat is a symlink, otherwise: mv olat3 olat6.0.1)
#unzip OLAT-6.0.3.zip
#ln -s OLAT-6.0.3-PUBLIC-XXXXX olat
#cd olat
#cp olat.properties.default olat.properties
#vi olat.properties
#ant install

Update your database manually according to PATH_TO_YOUR_OLAT/olat3/database/alter_6_0_0_to_6_0_3.sql

Now start tomcat.

9.7. Upgrading from 5.2.x to 6.0.0

Install OLAT as described in the installation chapter but DON'T RUN 'ant dbsetup'!! We recommend to move your existing installation from PATH_TO_YOUR_OLAT/olat3 to PATH_TO_YOUR_OLAT/olat5.2.x and install the 6.0.x package as your new PATH_TO_YOUR_OLAT/olat3. All user data is located in the olatdata directory which should not be located in the PATH_TO_YOUR_OLAT/olat3. The olatdata directory and the database won't be changed when installing the new code.

#cd PATH_TO_YOUR_OLAT
#rm olat (if olat is a symlink, otherwise: mv olat3 olat5.2.x)
#unzip OLAT-6.0.1.zip
#ln -s OLAT-6.0.1-PUBLIC-XXXXX olat
#cd olat
#cp olat.properties.default olat.properties
#vi olat.properties
#ant install

Update your database manually according to PATH_TO_YOUR_OLAT/olat3/database/alter_5_2_x_to_6_0_0.sql

Now start tomcat.

9.8. Upgrading from 5.1.x to 5.2.x

Install OLAT as described in the installation chapter but DON'T RUN 'ant dbsetup'!! We recommend to move your existing installation from PATH_TO_YOUR_OLAT/olat3 to PATH_TO_YOUR_OLAT/olat5.2.x and install the 5.2.x package as your new PATH_TO_YOUR_OLAT/olat3. All user data is located in the olatdata directory which should not be located in the PATH_TO_YOUR_OLAT/olat3. The olatdata directory and the database won't be changed when installing the new code.

#cd PATH_TO_YOUR_OLAT
#rm olat (if olat is a symlink, otherwise: mv olat3 olat5.2.0)
#unzip OLAT-5.2.0.zip
#ln -s OLAT-5.2.0-FINAL-XXXXX olat
#cd olat
#cp olat.properties.default olat.properties
#vi olat.properties
#ant install

Update your database manually according to PATH_TO_YOUR_OLAT/olat3/database/alter_5_1_0_to_5_2_0.sql

Now start tomcat.

9.9. Upgrading from 5.0.x to 5.1.x

Install OLAT as described in the installation chapter but DON'T RUN 'ant dbsetup'!! We recommend to move your existing installation from PATH_TO_YOUR_OLAT/olat3 to PATH_TO_YOUR_OLAT/olat5.1.x and install the 5.1.x package as your new PATH_TO_YOUR_OLAT/olat3. All user data is located in the olatdata directory which should not be located in the PATH_TO_YOUR_OLAT/olat3. The olatdata directory and the database won't be changed when installing the new code.

#cd PATH_TO_YOUR_OLAT
#rm olat (if olat is a symlink, otherwise: mv olat3 olat4.1.4)
#unzip OLAT-5.1.0.zip
#ln -s OLAT-5.1.0-FINAL-XXXXX olat
#cd olat
#cp olat.properties.default olat.properties
#vi olat.properties
#ant config-all
#ant install

Update your database manually according to PATH_TO_YOUR_OLAT/olat3/database/alter_5_0_0_to_5_1_0.sql

Now start tomcat.

Conversion of wiki's

In OLAT 5.1.0 we introduced a new wiki syntax (mediawiki) to html parser with much more syntax support. To make sure all your wiki's look the same we have to make some conversions. To start the conversion do the following:

$ cd  PATH_TO_YOUR_OLAT/bin/wiki_migration
## edit the wiki_migration_51.sh to your path of repoistory and olat installation
$ vi wiki_migration_51.sh
## change export BCROOT=/usr/local/opt/olat/olatdata/bcroot to your installation
## change export OLATROOT=/usr/local/opt/olat/olatlive to your installation
## run it!
$ ./wiki_migration_51.sh
## in the output.log you will see what changed
        

9.10. Upgrading the 4.x.y series

Upgrading from 4.1.4 to 5.0.x

Install OLAT as described in the installation chapter but DON'T RUN 'ant dbsetup'!! We recommend to move your existing installation from PATH_TO_YOUR_OLAT/olat3 to PATH_TO_YOUR_OLAT/olat4.1.4 and install the 5.0.1 package as your new PATH_TO_YOUR_OLAT/olat3. All user data is located in the olatdata directory which should not be located in the PATH_TO_YOUR_OLAT/olat3. The olatdata directory and the database won't be changed when installing the new code.

#cd PATH_TO_YOUR_OLAT
#rm olat (if olat is a symlink, otherwise: mv olat3 olat4.1.4)
#unzip OLAT-5.0.1.zip
#ln -s OLAT-5.0.1-FINAL-XXXXX olat3
#cd olat
#cp olat.properties.default olat.properties
#vi olat.properties
#ant config-all
#ant install

Update your database manually according to PATH_TO_YOUR_OLAT/olat3/database/alter_4_1_4_to_5_0_0.sql

Now start tomcat.

Upgrading from 4.1.1 to 4.1.4

4.1.2, 4.1.3 and 4.1.4 are minor bugfix releases. There are no database changes, it is only a code replacement for the 4.1.1 release, the installation should be easy.

Install OLAT as described in the installation chapter but DON'T RUN 'ant dbsetup'!! We recommend to move your existing installation from PATH_TO_YOUR_OLAT/olat to PATH_TO_YOUR_OLAT/olat4.1.1 and install the 4.1.4. package as your new PATH_TO_YOUR_OLAT/olat. All user data is located in the olatdata directory which should not be located in the PATH_TO_YOUR_OLAT/olat. The olatdata directory and the database won't be changed when installing the new code.

#cd PATH_TO_YOUR_OLAT
#rm olat (if olat is a symlink, otherwise: mv olat olat4.1.1)
#unzip OLAT-4.1.4.zip
#ln -s OLAT-4.1.4-FINAL-XXXXX olat
#cd olat
#cp olat.properties.default olat.properties
#vi olat.properties
#ant config-all
#ant install

Now start tomcat.

Upgrading from 4.0.2 to 4.1.1

There are no database changes,except for those how upgraded their database to Mysql 5.0.x. Due to changes in the datatype DECIMAL you have to adjust the range of this datatype used in the OLAT database. The alter statements are in the following file. Befor you update uncomment the alter statements in the file and check whether some of your data is affected by the alter statemets.

mysql -u [olat_db_user] -p < OLAT_HOME/database/alter_4_0_0_to_4_1_0.sql

Install OLAT as described in the installation chapter but DON'T RUN 'ant dbsetup'!! We recommend to move your existing installation from PATH_TO_YOUR_OLAT/olat to PATH_TO_YOUR_OLAT/olat4.0.2 and install the 4.1.1 package as your new PATH_TO_YOUR_OLAT/olat. All user data is located in the olatdata directory which should not be located in the PATH_TO_YOUR_OLAT/olat. The olatdata directory and the database won't be changed when installing the new code.

#cd PATH_TO_YOUR_OLAT
#rm olat (if olat is a symlink, otherwise: mv olat olat4.0.2)
#unzip OLAT-4.1.1.zip
#ln -s OLAT-4.1.1-FINAL-XXXXX olat
#cd olat
#cp olat.properties.default olat.properties
#vi olat.properties
#ant config-all
#ant install

Now start tomcat.

Upgrading from 4.0.1 to 4.0.2

4.0.2 is a minor bugfix release. There are no database changes, it is only a code replacement for the 4.0.1 release, the installation should be easy.

Install OLAT as described in the installation chapter but DON'T RUN 'ant dbsetup'!! We recommend to move your existing installation from PATH_TO_YOUR_OLAT/olat to PATH_TO_YOUR_OLAT/olat4.0.1 and install the 4.0.2. package as your new PATH_TO_YOUR_OLAT/olat. All user data is located in the olatdata directory which should not be located in the PATH_TO_YOUR_OLAT/olat. The olatdata directory and the database won't be changed when installing the new code.

#cd PATH_TO_YOUR_OLAT
#rm olat (if olat is a symlink, otherwise: mv olat olat4.0.1)
#unzip OLAT-4.0.2.zip
#ln -s OLAT-4.0.2-FINAL-XXXXX olat
#cd olat
#cp olat.properties.default olat.properties
#vi olat.properties
#ant config-all
#ant install

Now start tomcat.

Upgrading from 4.0.0 to 4.0.1

4.0.1 is a minor bugfix release. There are no database changes, it is only a code replacement for the 4.0.0 release, the installation should be easy.

Install OLAT as described in the installation chapter but DON'T RUN 'ant dbsetup'!! We recommend to move your existing installation from PATH_TO_YOUR_OLAT/olat to PATH_TO_YOUR_OLAT/olat4.0.0 and install the 4.0.1. package as your new PATH_TO_YOUR_OLAT/olat. All user data is located in the olatdata directory which should not be located in the PATH_TO_YOUR_OLAT/olat. The olatdata directory and the database won't be changed when installing the new code.

#cd PATH_TO_YOUR_OLAT
#rm olat (if olat is a symlink, otherwise: mv olat olat4.0.0)
#unzip OLAT-4.0.1.zip
#ln -s OLAT-4.0.1-FINAL-XXXXX olat
#cd olat
#cp olat.properties.default olat.properties
#vi olat.properties
#ant config-all
#ant install

Now start tomcat.

9.11. Upgrading the 3.x.y series

Upgrading from 3.2.1 to 4.0.0

Install OLAT as described in the installation chapter but DON'T RUN 'ant dbsetup'!! We recommend to move your existing installation from PATH_TO_YOUR_OLAT/olat3 to PATH_TO_YOUR_OLAT/olat3.2.1 and install the 4.0.0 package as your new PATH_TO_YOUR_OLAT/olat3. All user data is located in the olatdata directory which should not be located in the PATH_TO_YOUR_OLAT/olat3. The olatdata directory and the database won't be changed when installing the new code.

#cd PATH_TO_YOUR_OLAT
#rm olat3 (if olat3 is a symlink, otherwise: mv olat3 olat3.2.1)
#unzip OLAT-4.0.0.zip
#ln -s OLAT-4.0.0-FINAL-XXXXX olat3
#cd olat3
#cp olat.properties.default olat.properties
#vi olat.properties
#ant config-all
#ant install

Update your database manually according to PATH_TO_YOUR_OLAT/olat3/database/alter_3_2_1_to_4_0_0.sql

Now start tomcat. The first launch might take some time if you have a big userbase and a lot of groups because the efficiency statements for each user get calculated. The efficiency statement calulation runs only once.

Upgrading from 3.2.0 to 3.2.1

3.2.1 is a minor bugfix release. There are no database changes, it is only a code replacement for the 3.2.0 release, the installation should be easy. We compiled this distribution using a Java 1.5 compiler (but on 1.4 source level).A compiler bug in the 1.4 compiler could produce null pointers without stacktraces in the logfile which made this change necessary.

Install OLAT as described in the installation chapter but DON'T RUN 'ant dbsetup'!! We recommend to move your existing installation from PATH_TO_YOUR_OLAT/olat3 to PATH_TO_YOUR_OLAT/olat3.2.0 and install the 3.2.1. package as your new PATH_TO_YOUR_OLAT/olat3. All user data is located in the olatdata directory which should not be located in the PATH_TO_YOUR_OLAT/olat3. The olatdata directory and the database won't be changed when installing the new code.

#cd PATH_TO_YOUR_OLAT
#rm olat3 (if olat3 is a symlink, otherwise: mv olat3 olat3.2.0)
#unzip OLAT-3.2.1.zip
#ln -s OLAT-3.2.1-FINAL-XXXXX olat3
#cd olat3
#cp olat.properties.default olat.properties
#vi olat.properties
#ant config-all
#ant install

Now start tomcat.

Upgrading from 3.1.4 to 3.2.0

One of the major topics of the 3.2 release is full UTF-8 support, therefore it's necessary while upgrading from 3.1.4 to 3.2.0 to convert all courses and the dump of the database. Likewise there are added some files to the ContentPackages, so that they are offline readable.

Conversion of the existing Filesystem

To convert the existing filesystem you need to start a shell and run the main method of the java class "Convert314To32" with several parameters and the -Djava.ext.dirs option.

cd OLAT_HOME/webapp/WEB-INF/classes

java -Djava.ext.dirs=../lib org.olat.migration.Convert314To32 \
OLAT_HOME/webapp/static/cp_offline_menu_mat \
OLAT_DATA/bcroot/repository \
OLAT_DATA/bcroot/course

In order to make it clear below an example with OLAT_HOME=/usr/local/opt/olat/olatlive and OLAT_DATA=/usr/local/opt/olat/olatdata

cd /usr/local/opt/olat/olatlive/webapp/WEB-INF/classes

java -Djava.ext.dirs=../lib org.olat.migration.Convert314To32 \
/usr/local/opt/olat/olatlive/webapp/static/cp_offline_menu_mat \
/usr/local/opt/olat/olatdata/bcroot/repository \
/usr/local/opt/olat/olatdata/bcroot/course
'/usr/local/opt/olat/olatlive/webapp/static/cp_offline_menu_mat'
'/usr/local/opt/olat/olatdata/bcroot/repository'
'/usr/local/opt/olat/olatdata/bcroot/course'

is this ok (type 'yes')
yes
Adding offline files to content packaging
> >> >>>
imsmanifest.xml found in:
/usr/local/opt/olat/olatdata/bcroot/repository/70997909950872/_unzipped_
zip-file found in: /usr/local/opt/olat/olatdata/bcroot/repository/70997909950872/cp-demo.zip
...
...
...
Adding header to internal course xml files
converting /usr/local/opt/olat/olatdata/bcroot/course/70997909950887/editortreemodel.xml
converting /usr/local/opt/olat/olatdata/bcroot/course/70997909950887/runstructure.xml
...
... 
...

Converting and Altering of the database

  1. Dump the olat database after you stopped the tomcat server.

    mysqldump -u [olat_db_user] -p olat > olat.sql
  2. Insert the lines below at the begin of the dump olat.sql

    CREATE DATABASE olat;
    USE olat; SET AUTOCOMMIT=0;
    SET FOREIGN_KEY_CHECKS=0;

    and at the end of olat.sql:

    COMMIT;
  3. Start the conversion from iso-8859-1 to utf8 using iconv.

    iconv -f iso-8859-1 -t utf8 olat.sql > olat-iconv.sql
  4. Drop the olat database and insert the converted dump.

    mysql -u [olat_db_user] -p < olat-iconv.sql
  5. And finally execute the sql-statements in alter_3_1_4_to_3_2_0.sql.

    mysql -u [olat_db_user] -p < OLAT_HOME/database/alter_3_1_4_to_3_2_0.sql

Upgrading from 3.1.3 to 3.1.4

Install OLAT as described in the installation chapter but DON'T RUN 'ant dbsetup'!! We recommend to move your existing installation from PATH_TO_YOUR_OLAT/olat3 to PATH_TO_YOUR_OLAT/olat3.1.3 and install the 3.1.4 package as your new PATH_TO_YOUR_OLAT/olat3. All user data is located in the olatdata directory which should not be located in the PATH_TO_YOUR_OLAT/olat3. The olatdata directory and the database won't be changed when installing the new code.

#cd PATH_TO_YOUR_OLAT
#rm olat3 (if olat3 is a symlink, otherwise: mv olat3 olat3.1.3)
#unzip OLAT-3.1.4.zip
#ln -s OLAT-3.1.4-FINAL-XXXXX olat3
#cd olat3
#cp olat.properties.default olat.properties
#vi olat.properties
#ant config-all
#ant install

Update your database manually according to PATH_TO_YOUR_OLAT/olat3/database/alter_3_1_3_to_3_1_4.sql

Now start tomcat. The first launch might take some time.

Upgrading from 3.1.2 to 3.1.3

Install OLAT as described in the installation chapter but DON'T RUN 'ant dbsetup'!! We recommend to move your existing installation from PATH_TO_YOUR_OLAT/olat3 to PATH_TO_YOUR_OLAT/olat3.1.2 and install the 3.1.3 package as your new PATH_TO_YOUR_OLAT/olat3. All user data is located in the olatdata directory which should not be located in the PATH_TO_YOUR_OLAT/olat3. The olatdata directory and the database won't be changed when installing the new code.

#cd PATH_TO_YOUR_OLAT
#rm olat3 (if olat3 is a symlink, otherwise: mv olat3 olat3.1.2)
#unzip OLAT-3.1.3.zip
#ln -s OLAT-3.1.3-FINAL-XXXXX olat3
#cd olat3
#vi olat.properties
#ant config-all
#ant install

Update your database manually according to PATH_TO_YOUR_OLAT/olat3/database/alter_3_1_2_to_3_1_3.sql

Now start tomcat. The first launch might take some time.

Upgrading from 3.1.0 to 3.1.2

Install OLAT as described in the installation chapter but DON'T RUN 'ant dbsetup'!! We recommend to move your existing installation from PATH_TO_YOUR_OLAT/olat3 to PATH_TO_YOUR_OLAT/olat3.1.0 and install the 3.1 package as your new PATH_TO_YOUR_OLAT/olat3. All user data is located in the olatdata directory which should not be located in the PATH_TO_YOUR_OLAT/olat3. The olatdata directory and the database won't be changed when installing the new code.

#cd PATH_TO_YOUR_OLAT
#rm olat3 (if olat3 is a symlink, otherwise: mv olat3 olat3.1.0)
#unzip OLAT-3.1.2.zip
#ln -s OLAT-3.1.2-FINAL-XXXXX olat3
#cd olat3
#vi olat.properties
#ant config-all
#ant install

Update your database manually according to PATH_TO_YOUR_OLAT/olat3/database/alter_3_1_0_to_3_1_1.sql (there are no updates from 3.1.1 to 3.1.2, the 3.1.1 was never made public)

Now start tomcat. The first launch might take some time.

Upgrading from 3.0.1 to 3.1

Install OLAT as described in the installation chapter but DON'T RUN 'ant dbsetup'!! We recommend to move your existing installation from PATH_TO_YOUR_OLAT/olat3 to PATH_TO_YOUR_OLAT/olat3.0.0 and install the 3.1 package as your new PATH_TO_YOUR_OLAT/olat3. All user data is located in the olatdata directory which should not be located in the PATH_TO_YOUR_OLAT/olat3. The olatdata directory and the database won't be changed when installing the new code.

#cd PATH_TO_YOUR_OLAT
#rm olat3 (if olat3 is a symlink, otherwise: mv olat3 olat3.0.1)
#unzip OLAT-3.1.zip
#ln -s OLAT-3.1-FINAL-XXXXX olat3
#cd olat3
#vi olat.properties
#ant config-all
#ant install

Update your database manually according to PATH_TO_YOUR_OLAT/olat3/database/alter_3_0_1_to_3_1_0.sql

Now start tomcat. The first launch might take some time.

Upgrading from 3.0.0 to 3.0.1

Install OLAT as described in the installation chapter but DON'T RUN 'ant dbsetup'!! We recommend to move your existing installation from PATH_TO_YOUR_OLAT/olat3 to PATH_TO_YOUR_OLAT/olat3.0.0 and install the 3.0.1 package as your new PATH_TO_YOUR_OLAT/olat3. All user data is located in the olatdata directory which should not be located in the PATH_TO_YOUR_OLAT/olat3. The olatdata directory and the database won't be changed when installing the new code. Example linux shell commands:

#cd PATH_TO_YOUR_OLAT
#rm olat3 (if olat3 is a symlink, otherwise: mv olat3 olat3.0.0)
#unzip OLAT-3.0.1.zip
#ln -s OLAT-3.0.1-FINAL-20040804 olat3
#cd olat3
#vi olat.properties
#ant config-all
#ant install

Update your database manually according to PATH_TO_YOUR_OLAT/olat3/database/alter_3_0_0_to_3_0_1.sql

Now start tomcat. The first launch might take some time.

9.12. Upgrading from 2.x

OLAT 3.x is not compatible with OLAT 2.x. Install OLAT 3.0 as a new installation as described in chapter 2. To migrate your data from your existing OLAT 2.x installation you need to install the newest 2.x release and then follow the migration instruction described in the 2.x to 3.0 migration guide.

Chapter 10. Contact, mailinglists and support

10.1. Mailinglists

If you have any questions about the code or the usage of OLAT please contact us using one of our mailinglists. You will find them at http://lists.olat.org

Please follow the usual netiquette on mailing lists. The more detailed, polite and patient you are, the faster and better is the answer you will receive.

For personal questions you can contact us via info@olat.org. Please do not ask questions on this address that are of general interest, use the mailinglists for this instead.

10.2. Support

For professional OLAT support, hosting, training (developers, administrators or authors) or customization please visit the homepage of frentix .

Frentix GmbH is a spin-off company from the University of Zurich that has great experience in developing and deploying the LMS OLAT.

Chapter 11. OLAT software license

See OLAT Software License for details of the Open Source license.

Chapter 12. Change history

See the release notes on olat.org . For a roadmap of our upcoming versions, please visit the OLAT roadmap page .

Visit http://bugs.olat.org to get detailed information about changes. You can following development activity on http://fisheye.olat.org