Search This Blog

Setup XNAT on Ubuntu 16.04

  1. Create user xnat to run Tomcat service:
    sudo useradd -u 6667 -d /opt/xnat -s /bin/bash xnat
  2. Install PostgreSQL:
    sudo apt-get install postgresql
    then edit /etc/postgresql/9.5/main/postgresql.conf file:
    standard_conforming_strings=off
    , and restart PostgreSQL server:
    sudo /etc/init.d/postgresql restart
  3. Install Java 7
    Current XNAT (v1.6.5) requires Java 7. Java 8 will NOT work. Type the commands below to install Java 7:
    sudo add-apt-repository ppa:webupd8team/java
    sudo apt-get update
    sudo apt-get install oracle-java7-installer oracle-java7-set-default
  4. Install Tomcat 7
    Current XNAT v1.6.5 requires Tomcat7. However, DO NOT install tomcat7 from Ubuntu Repository. It was compiled with Java 8 and will cause this problem. Instead, you should download from offical Tomcat web site. Type the command below to install tomcat:
    cd /opt
    sudo wget http://apache.mirror.serversaustralia.com.au/tomcat/tomcat-7/v7.0.70/bin/apache-tomcat-7.0.70.tar.gz
    sudo tar zxvf apache-tomcat-7.0.70.tar.gz
    sudo ln -s /opt/apache-tomcat-7.0.70 /opt/tomcat7
    sudo chown -R xnat:xnat /opt/apache-tomcat-7.0.70
    sudo chown -R xnat:xnat /opt/tomcat7
    then set startup scripts permissions:
    sudo chmod +x /opt/tomcat7/bin/startup.sh
    sudo chmod +x /opt/tomcat7/bin/shutdown.sh
    and you need to set JAVA_OPTS in /opt/tomcat7/bin/catalina.sh and insert the following line at the start:
    JAVA_OPTS="-XX:MaxPermSize=1024m -Xmx8192m"
    NOTE: you need to set MaxPermSize and MaxHeapSize(Xmx) in JAVA_OPTS. Otherwise, OutOfMemoryError will occur when you load XNAT web app.
  5. Install Maven:
    sudo apt-get install maven
  6. Download and extract XNAT 1.6.5:
    cd /opt
    sudo wget ftp://ftp.nrg.wustl.edu/pub/xnat/xnat-1.6.5.tar.gz
    sudo tar zxvf xnat-1.6.5.tar.gz
    sudo chown -R xnat:xnat /opt/xnat
  7. Prepare XNAT directories:
    sudo mkdir /data/xnat/archive
    sudo mkdir /data/xnat/prearchive
    sudo mkdir /data/xnat/ftp
    sudo mkdir /data/xnat/cache
    sudo mkdir /data/xnat/build
    NOTE: '/data/xnat' should be the mount point for large storage for XNAT.
  8. Set up environment variables for xnat user, by editting .bashrc file:
    sudo su xnat
    vi ~/.bashrc
    add the following:
    # JAVA
    export JAVA_HOME=/usr/lib/jvm/java-7-oracle
    export PATH=$JAVA_HOME/bin:$PATH
    
    # Tomcat
    export TOMCAT_HOME=/opt/tomcat7
    export PATH=$PATH:$TOMCAT_HOME/bin
    
    # XNAT
    export XNAT_HOME=/opt/xnat
    export PATH=$PATH:$XNAT_HOME/bin
  9. Create XNAT database user xnat01:
    sudo su postgres
    createuser -U postgres -S -D -R -P xnat01
    Note: set and remember the password for db user xnat01, you will need it in the XNAT build.properties file.
  10. Create XNAT database:
    sudo su postgres
    createdb -U postgres -O xnat01 xnat
  11. Edit /opt/xnat/build.properties:
    su xnat
    cd /opt/xnat
    cp build.properties.sample build.properties
    vi build.properties
    and the content should be like below:
    maven.appserver.home = /opt/tomcat7
    
    xnat.site.title=XNAT
    xdat.project.name=xnat
    xdat.project.db.name=xnat
    xdat.project.db.driver=org.postgresql.Driver
    xdat.project.db.connection.string=jdbc:postgresql://localhost/xnat
    xdat.project.db.user=xnat01
    xdat.project.db.password=XXXXXXX
    xdat.archive.location=/data/xnat/archive
    xdat.prearchive.location=/data/xnat/prearchive
    xdat.cache.location=/data/xnat/cache
    xdat.ftp.location=/data/xnat/ftp
    xdat.build.location=/data/xnat/build
    xdat.mail.server=mail.yourdomain.org
    xdat.mail.port=25
    xdat.mail.protocol=smtp
    xdat.mail.username=
    xdat.mail.password=
    xdat.mail.admin=xnat-admin@yourdomain.org
    xdat.url=http://192.168.100.12:8080/xnat
    xdat.require_login=true
    xdat.enable_new_registrations=false
    xdat.security.channel=any
    xdat.enable_csrf_token=true
    Note: xdat.url need to be set to the public ip or address instead of localhost if you want the XNAT server to be accessed from other computers.
  12. Edit project.properties file. and replace the 'maven.repo.remote' line with
    maven.repo.remote=https://nrgxnat.artifactoryonline.com/nrgxnat/xnat-maven1

    NOTE: You need to do this because the offical XNAT maven repository is down.
  13. Run setup.sh script to build:
    sudo su xnat
    cd /opt/xnat
    bin/setup.sh
  14. Create Database tables & views:
    cd /opt/xnat
    psql xnat01 -h localhost -d xnat -f deployments/xnat/sql/xnat.sql
    Note: you need supply the password for db user xnat01.
  15. Store initial security settings:
    sudo su xnat
    cd /opt/xnat/deployments/xnat
    StoreXML -project xnat -l security/security.xml -allowDataDeletion true
  16. Store Example Custom Variable Sets:
    sudo su xnat
    cd /opt/xnat/deployments/xnat
    StoreXML -dir ./work/field_groups -u admin -p admin -allowDataDeletion true
  17. Deploy the web app
    sudo su xnat
    cd /opt/xnat
    bin/update.sh -Ddeploy=true
  18. Now start Tomcat7 server:
    sudo su xnat
    /opt/tomcat7/bin/startup.sh
  19. When open the xnat web page in browser the first name, it will take a very long time to load as it is loading the XNAT web app in Tomcat.


Key points

  • Install JAVA 7. Java 8 does not work.
  • Download Tomcat 7 binary from offical Tomcat web site. DO NOT install from Ubuntu Repository.
  • Set Java MaxPermSize and Xmx(MaxHeapSize) in JAVA_OPTS for Tomcat7 startup script catalina.sh. Missing this step will cause OutOfMemoryError when load XNAT web app
  • Official XNAT maven repository site is down. Edit project.properties to replace it with https://nrgxnat.artifactoryonline.com/nrgxnat/xnat-maven1
  • Tomat7 server is run as xnat user.