DHIS2 over Ubuntu 20.04

Dear All, I have been installing DHIS2 over Ubuntu 20.04.I have been facing the following error while I try to browse the site using http://localhost:8080/
server1@server:~$ sudo tail -f /home/dhis/tomcat-dhis/logs/catalina.out
<2>Caused by: org.hisp.dhis.external.location.LocationManagerException: External directory not set
<2> at org.hisp.dhis.external.location.DefaultLocationManager.buildDirectory(DefaultLocationManager.java:303)
<2> at org.hisp.dhis.external.location.DefaultLocationManager.getFileForReading(DefaultLocationManager.java:233)
<2> at org.hisp.dhis.external.location.DefaultLocationManager.getInputStream(DefaultLocationManager.java:206)
<2> at org.hisp.dhis.external.location.DefaultLocationManager.getInputStream(DefaultLocationManager.java:199)
<2> at org.hisp.dhis.external.conf.DefaultDhisConfigurationProvider.loadDhisConf(DefaultDhisConfigurationProvider.java:332)
<2> … 44 more
<2>
<6>Deployment of web application archive [/home/dhis/tomcat-dhis/webapps/ROOT.war] has finished in [29,715] ms
<6>Server startup in [29,955] milliseconds

Hi @Jaware

Welcome to the community! :tada:

Years ago someone experienced a similar issue with similar errors. (Dhis.war deployment issue - #13) If you could share the complete Catalina.out log (without sensitive info), it would probably help a lot!

The solution seemed to be related to the environment. Please, what are the versions for the Java, Postgresql, and dhis2, are you trying to install? More info about the configuration will help, too!

Thanks!

HI @Gassim, I have been using (PostgreSQL) 12.12,openjdk version “11.0.17” 2022-10-18 and tomcat 9 and dhis2-stable-2.36.3.war or a war file located at https://releases.dhis2.org/2.36/dhis2-stable-2.36.3.war.
Regards,Jaware

Thanks! It might be a configuration issue, have you resolved it?

Could you share the full log (without the sensitive info)? Thanks!

Hi @Gassim,

I was channging the java to ava-8-openjdk and below the error

See log

server@server:~$ sudo tail -f /home/dhis/tomcat-dhis/logs/catalina.out
[sudo] password for server:
<2> at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1154)
<2> at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:581)
<2> at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:74)
<2> at org.apache.catalina.connector.Connector.initInternal(Connector.java:1010)
<2> … 13 more
<2>
<6>Server initialization in [1,247] milliseconds
<6>Starting service [Catalina]
<6>Starting Servlet engine: [Apache Tomcat/9.0.31 (Ubuntu)]
<6>Deploying web application archive [/home/dhis/tomcat-dhis/webapps/ROOT.war]
<6>Server version name: Apache Tomcat/9.0.31 (Ubuntu)
<6>Server built: Nov 18 2022 19:07:15 UTC
<6>Server version number: 9.0.31.0
<6>OS Name: Linux
<6>OS Version: 5.15.0-57-generic
<6>Architecture: amd64
<6>Java Home: /usr/lib/jvm/java-8-openjdk-amd64/jre
<6>JVM Version: 1.8.0_352-8u352-ga-1~20.04-b08
<6>JVM Vendor: Private Build
<6>CATALINA_BASE: /home/dhis/tomcat-dhis
<6>CATALINA_HOME: /usr/share/tomcat9
<6>Command line argument: -Djava.util.logging.config.file=/home/dhis/tomcat-dhis/conf/logging.properties
<6>Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
<6>Command line argument: -Xms4000m
<6>Command line argument: -Xmx7000m
<6>Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
<6>Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
<6>Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
<6>Command line argument: -Dignore.endorsed.dirs=
<6>Command line argument: -Dcatalina.base=/home/dhis/tomcat-dhis
<6>Command line argument: -Dcatalina.home=/usr/share/tomcat9
<6>Command line argument: -Djava.io.tmpdir=/home/dhis/tomcat-dhis/temp
<6>Loaded APR based Apache Tomcat Native library [1.2.23] using APR version [1.6.5].
<6>APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
<6>APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
<6>OpenSSL successfully initialized [OpenSSL 1.1.1f 31 Mar 2020]
<6>Initializing ProtocolHandler [“http-nio-8080”]
<2>Failed to initialize component [Connector[HTTP/1.1-8080]]
<2>org.apache.catalina.LifecycleException: Protocol handler initialization failed
<2> at org.apache.catalina.connector.Connector.initInternal(Connector.java:1013)
<2> at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
<2> at org.apache.catalina.core.StandardService.initInternal(StandardService.java:533)
<2> at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
<2> at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:1057)
<2> at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
<2> at org.apache.catalina.startup.Catalina.load(Catalina.java:584)
<2> at org.apache.catalina.startup.Catalina.load(Catalina.java:607)
<2> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
<2> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
<2> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
<2> at java.lang.reflect.Method.invoke(Method.java:498)
<2> at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:303)
<2> at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)
<2>Caused by: java.net.BindException: Address already in use
<2> at sun.nio.ch.Net.bind0(Native Method)
<2> at sun.nio.ch.Net.bind(Net.java:461)
<2> at sun.nio.ch.Net.bind(Net.java:453)
<2> at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:222)
<2> at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:85)
<2> at org.apache.tomcat.util.net.NioEndpoint.initServerSocket(NioEndpoint.java:229)
<2> at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:212)
<2> at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1141)
<2> at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1154)
<2> at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:581)
<2> at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:74)
<2> at org.apache.catalina.connector.Connector.initInternal(Connector.java:1010)
<2> … 13 more
<2>
<6>Server initialization in [489] milliseconds
<6>Starting service [Catalina]
<6>Starting Servlet engine: [Apache Tomcat/9.0.31 (Ubuntu)]
<6>Deploying web application archive [/home/dhis/tomcat-dhis/webapps/ROOT.war]
<6>At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.

  • INFO 2023-01-08T13:59:08,248 System property dhis2.home not set (LogOnceLogger.java [main])
  • INFO 2023-01-08T13:59:08,338 Environment variable DHIS2_HOME not set (LogOnceLogger.java [main])
  • INFO 2023-01-08T13:59:08,368 Directory /opt/dhis2 cannot be created (LogOnceLogger.java [main])
    <2>Error deploying web application archive [/home/dhis/tomcat-dhis/webapps/ROOT.war]
    <2>java.lang.IllegalStateException: Error starting child
    <2> at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:720)
    <2> at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
    <2> at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
    <2> at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:977)
    <2> at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1848)
    <2> at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    <2> at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    <2> at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    <2> at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)
    <2> at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:772)
    <2> at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:427)
    <2> at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1575)
    <2> at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)
    <2> at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
    <2> at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)
    <2> at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366)
    <2> at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:936)
    <2> at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
    <2> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    <2> at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
    <2> at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
    <2> at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    <2> at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    <2> at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
    <2> at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
    <2> at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
    <2> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    <2> at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
    <2> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    <2> at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
    <2> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    <2> at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
    <2> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    <2> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    <2> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    <2> at java.lang.reflect.Method.invoke(Method.java:498)
    <2> at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
    <2> at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:478)
    <2>Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
    <2> at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
    <2> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
    <2> at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
    <2> … 37 more
    <2>Caused by: java.lang.IllegalStateException: Properties could not be loaded
    <2> at org.hisp.dhis.external.conf.DefaultDhisConfigurationProvider.loadDhisConf(DefaultDhisConfigurationProvider.java:344)
    <2> at org.hisp.dhis.external.conf.DefaultDhisConfigurationProvider.init(DefaultDhisConfigurationProvider.java:114)
    <2> at org.hisp.dhis.webapi.servlet.DhisWebApiWebAppInitializer.getConfig(DhisWebApiWebAppInitializer.java:115)
    <2> at org.hisp.dhis.webapi.servlet.DhisWebApiWebAppInitializer.onStartup(DhisWebApiWebAppInitializer.java:61)
    <2> at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:174)
    <2> at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5135)
    <2> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    <2> … 38 more
    <2>Caused by: org.hisp.dhis.external.location.LocationManagerException: External directory not set
    <2> at org.hisp.dhis.external.location.DefaultLocationManager.buildDirectory(DefaultLocationManager.java:243)
    <2> at org.hisp.dhis.external.location.DefaultLocationManager.getFileForReading(DefaultLocationManager.java:173)
    <2> at org.hisp.dhis.external.location.DefaultLocationManager.getInputStream(DefaultLocationManager.java:146)
    <2> at org.hisp.dhis.external.location.DefaultLocationManager.getInputStream(DefaultLocationManager.java:139)
    <2> at org.hisp.dhis.external.conf.DefaultDhisConfigurationProvider.loadDhisConf(DefaultDhisConfigurationProvider.java:333)
    <2> … 44 more
    <2>
    <6>Deployment of web application archive [/home/dhis/tomcat-dhis/webapps/ROOT.war] has finished in [157,334] ms
    <6>Server startup in [157,791] milliseconds
1 Like

It seems that you are missing your DHIS2_HOME variable in your settings. This can be achieved in several ways as explained here: System Administration Guide - DHIS2 Documentation

1 Like

Hi @Jaware,

You can try with OpenJDK 11 (sudo apt-get install openjdk-11-jdk), Tomcat 9 and DHIS 2.37. Have a look: DHIS2 Installation on Ubuntu 20.04 LTS – Digital Ocean – DHIS2 Web Portal

Jaime correctly pointed out that you are missing DHIS2_HOME.

Thank you