Upgrading to Mifos X 16.06.01 on Ubuntu

Important

Before you begin, please take backup of database, war and community-app

Step 1: Stop running tomcat server

Shutdown tomcat gracefully
ubuntu@host:~$ /etc/init.d/tomcat7 stop

If tomcat fails to shutdown gracefully then get the process id of the MIfos X war running on tomcat (Since it is java application, process information contains 'java' word)

Search all java process
ubuntu@host:~$ ps -ef | grep java
root      1189     1  0 12:28 ?        00:02:20 /usr/bin/java -Djava.util.logging.config.file=/usr/share/tomcat7/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xms512m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:MaxPermSize=512m -Djava.endorsed.dirs=/usr/share/tomcat7/endorsed -classpath /usr/share/tomcat7/bin/bootstrap.jar:/usr/share/tomcat7/bin/tomcat-juli.jar -Dcatalina.base=/usr/share/tomcat7 -Dcatalina.home=/usr/share/tomcat7 -Djava.io.tmpdir=/usr/share/tomcat7/temp org.apache.catalina.startup.Bootstrap start

Note: If system running multiple Java applications then it will list all the process id, please select the process id corresponding to tomcat server that is running Mifos X application

ubuntu@host:~$ sudo kill -9 1189

Step 2: Uninstall Java, if Java version is less than Java 8

Q: How to Check Java version?
A:  Java -version
 
Java 1.8.x is same as Java 8

Skip Step 2 and Step 3 if your machine has Java version 8 (1.8)

 

1) Remove all the Java related packages (Sun, Oracle, OpenJDK, IcedTea plugins, GIJ): 

dpkg-query -W -f='${binary:Package}\n' | grep -E -e '^(ia32-)?(sun|oracle)-java' -e '^openjdk-' -e '^icedtea' -e '^(default|gcj)-j(re|dk)' -e '^gcj-(.*)-j(re|dk)' -e '^java-common' | xargs sudo apt-get -y remove sudo apt-get -y autoremove

2) Purge config files:

dpkg -l | grep ^rc | awk '{print($2)}' | xargs sudo apt-get -y purge

3) Remove Java config and cache directory:

sudo bash -c 'ls -d /home/*/.java' | xargs sudo rm -rf

4) Remove manually installed JVMs:

sudo rm -rf /usr/lib/jvm/*

5) Remove Java entries, if there is still any, from the alternatives:

for g in ControlPanel java java_vm javaws jcontrol jexec keytool mozilla-javaplugin.so orbd pack200 policytool rmid rmiregistry servertool tnameserv unpack200 appletviewer apt extcheck HtmlConverter idlj jar jarsigner javac javadoc javah javap jconsole jdb jhat jinfo jmap jps jrunscript jsadebugd jstack jstat jstatd native2ascii rmic schemagen serialver wsgen wsimport xjc xulrunner-1.9-javaplugin.so; do sudo update-alternatives --remove-all $g; done

6) Search for possible remaining Java directories:

sudo updatedb sudo locate -b '\pack200'

7) Check for java is removed 

java -version


Step 3: Install Java 8

 Follow Step 3 in installing Java 8 if you have removed Java in last step.

              1) Install Java 8  

                  sudo apt-get update 

                  sudo apt-get install oracle-java8-installer  

 

java license agreement

On prompting for accepting oracle java agreement, accept the agreement by pressing y(yes) key.

 
On completion of java installation,one could verify the installed version by & should be 1.8v:-
# java -version 

                       2) Check for java is installed 

                  java -version 

You should see this below message:- 

java version "1.8.0_77"

Java(TM) SE Runtime Environment (build 1.8.0_77-b03)

Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)

 

Step 4: Uninstall existing Tomcat 

No need to uninstall the tomcat server if it's version is 7.0.69 and above
apt-get remove (If tomcat was install useing apt-get))
ubuntu@host:~$ sudo apt-get remove tomcat7

Failed to uninstall

if you get message 'Package 'tomcat7' is not installed, so not removed' then that mean tomcat was not installed using apt-get install instead it was installed by downloading tar.zip

 

 

              sudo find / -name tomcat7        

                    3) Remove all tomcat directories


                        sudo rm -r /usr/share/tomcat7
                        sudo rm -r /var/lib/tomcat7
                        sudo rm -r /var/log/tomcat7
                        sudo rm -r /etc/init.d/tomcat7  

                    4) Search for all remaining tomcat directories & remove them too. 

              sudo find / -name tomcat7

 

Step 5: Tomcat Installation

Install the tomcat server only if you have uninstalled it in previous step.

                        1) Install Tomact :


                # cd ~


                # sudo wget http://mirror.fibergrid.in/apache/tomcat/tomcat-7/v7.0.69/bin/apache-tomcat-7.0.69.tar.gz


                # cd /usr/share 

                # sudo tar xvf /home/ubuntu/apache-tomcat-7.0.69.tar.gz 

                # sudo mv apache-tomcat-7.0.69 tomcat7

Note

For latest release you can download it from , this link:-:- https://tomcat.apache.org/download-70.cgi →Go to Core→ Select "tar.gz" File

                         2) Install nano - text editor 

               # sudo apt-get install nano

 

Server Time and Date Settings(Optional)

 Check date:

# date
 and if needed update using the command


# dpkg-reconfigure tzdata 


Step 6: Tomcat setup

1) Enabling SSL

To enable tomcat SSL (https), generate and store a key:

# sudo keytool -genkey -keyalg RSA -alias tomcat -keystore /usr/share/tomcat.keystore

set keystore password

 

set password to: xyz123

(Bad for security, but just to get all installed and instructions on how to change it will be provided later in this guide)

This gets stored in /usr/share/tomcat7 as tomcat.keystore 

2) Updating server.xml configuration file

It is located at /usr/share/tomcat7/conf/server.xml path

# sudo nano /usr/share/tomcat7/conf/server.xml 

nano shortcut keys

 
Tip: To delete line by line you could use ctrl+k
To exit you could use ctrl+x
To confirm say yes & you could use y
then click on enter button to save

copy and replace below content into it

server.xml
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
    <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
    <Listener className="org.apache.catalina.core.JasperListener" />
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

    <GlobalNamingResources>
        <Resource name="UserDatabase" auth="Container"
            type="org.apache.catalina.UserDatabase"
            description="User database that can be updated and saved"
            factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
            pathname="conf/tomcat-users.xml" />

        <Resource type="javax.sql.DataSource"
                name="jdbc/mifosplatform-tenants"
                factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
                driverClassName="org.drizzle.jdbc.DrizzleDriver"
                url="jdbc:mysql:thin://localhost:3306/mifosplatform-tenants"
                username="root"
                password="mysql"
                initialSize="3"
                maxActive="10"
                maxIdle="6"
                minIdle="3"
                validationQuery="SELECT 1"
                testOnBorrow="true"
                testOnReturn="true"
                testWhileIdle="true"
                timeBetweenEvictionRunsMillis="30000"
                minEvictableIdleTimeMillis="60000"
                logAbandoned="true"
                suspectTimeout="60"
                />
    </GlobalNamingResources>

    <Service name="Catalina"> 
        <Connector protocol="org.apache.coyote.http11.Http11Protocol"
            port="443" maxThreads="200" scheme="https"
            secure="true" SSLEnabled="true"
            keystoreFile="/usr/share/tomcat.keystore"
            keystorePass="xyz123"
            clientAuth="false" sslProtocol="TLS"
            URIEncoding="UTF-8"
            compression="force"
            compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css"/>

            <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

            <Engine name="Catalina" defaultHost="localhost">

                <Realm className="org.apache.catalina.realm.LockOutRealm">

                    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                        resourceName="UserDatabase"/>
                </Realm>

                <Host name="localhost" appBase="webapps"
                        unpackWARs="true" autoDeploy="true">
                        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                            prefix="localhost_access_log." suffix=".txt"
                            pattern="%h %l %u %t &quot;%r&quot; %s %b" />

                </Host>
            </Engine>
    </Service>
</Server>


 

3) Download drizzle jdbc connector

Place it under lib folder 

# cd /usr/share/tomcat7/lib

# sudo wget http://central.maven.org/maven2/org/drizzle/jdbc/drizzle-jdbc/1.3/drizzle-jdbc-1.3.jar


4) Edit /etc/init.d/tomcat7

# sudo nano /etc/init.d/tomcat7

copy below red colored content into it & exit by pressing ctrl+x then confirm with y for yes. 

# Tomcat auto-start
#
# description: Auto-starts tomcat
# processname: tomcat
# pidfile: /var/run/tomcat.pid

case $1 in
start)
sh /usr/share/tomcat7/bin/startup.sh
;;
stop)
sh /usr/share/tomcat7/bin/shutdown.sh
;;
restart)
sh /usr/share/tomcat7/bin/shutdown.sh
sh /usr/share/tomcat7/bin/startup.sh
;;
esac
exit 0

# sudo chmod 755 /etc/init.d/tomcat7

Link this script to the startup folders with a symbolic link.Execute these two commands.

# sudo ln -s /etc/init.d/tomcat7 /etc/rc1.d/K99tomcat
# sudo ln -s /etc/init.d/tomcat7 /etc/rc2.d/S99tomcat

  • Step 7:Download and extract Fineract platform:    

# cd /usr/src

# sudo wget https://sourceforge.net/projects/mifos/files/Mifos%20X/fineractplatform-16.06.01.RELEASE.zip

# sudo apt-get install unzip

# sudo unzip fineractplatform-16.06.01.RELEASE.zip

# cd fineractplatform-16.06.01.RELEASE

For latest release you can download from or If wget/download fails, this link:- http://sourceforge.net/projects/mifos/files/Mifos%20X/ )

Step 8: Droping Mifos into Tomcat  

1) Copy fineract-platform and community app into Tomcat's webapps folder:  

# cd /usr/src/fineractplatform-16.06.01.RELEASE

# sudo cp fineract-provider.war /usr/share/tomcat7/webapps/

# sudo cp -r apps/community-app/ /usr/share/tomcat7/webapps/ 

# sudo cp -r api-docs/ /usr/share/tomcat7/webapps/

# cd /usr/share/tomcat7/webapps

# sudo mv ROOT OLDROOT

# sudo mv community-app ROOT  

2) Create a directory for reports (pentahoReports):  

# sudo -i 

# cp -r /usr/src/fineractplatform-16.06.01.RELEASE/pentahoReports /root/.mifosx  

pentahoReports & upload directory

Pentaho Reports

If /pentahoReports  is not copied into /root/.mifosx, penatoh reports,ex:accounting reports will fail with:

Income Statement.prpt","defaultUserMessage":"Unable to create key: No loader was able to handle the given key data: /usr/share/tomcat7/.mifosx/pentahoReports/Income Statement.prpt","userMessageGlobalisationCode":"error.msg.reporting.error","parameterName":null,"value"

Upload Directory

  • .fineract directory gets created automatically, if not created then Clients > Upload Documents  will fail with:  "Error error.msg.document.save"  (firebug, network tab)
  • Access to this directory should be restricted to authorized personnel only.
    While all accounting related information is stored in a database, submitted documents are simply stored in orginal format as uploaded. Mifos will store user uploaded files/documents relating to clients,loans,etc   in .fineract/

3) and finally to start  

sudo /etc/init.d/tomcat7 start  

Setup is complete and mifos should be running. 

OPTIONAL:
*in separate terminal you may watch your Mifos(logs) come to life like this: 

tail -f /usr/share/tomcat7/logs/catalina.out 

(if all is good, after a while of loading, you should see something like: Root WebApplicationContext: initialization completed in 45876 ms)

Important

Important  

You could access Mifos X through any internet browser:- 

https://server ip address  with you earlier credentails

Note: Since in this instruction page, we have provided port number as 443 in server.xml page so need to provide port number. Since we have renamed community-app as ROOT no need to provide /community-app