DevOps | Software Automation | Continuous Integration

Category: Ubuntu (Page 2 of 2)

Starting Dropwizard Application Using Jar Packaging & SysV

By default Debian package will generate an Upstart and SysV script.

This blog will show how we can ship an application in Jar file and start it using SysV

  • Put your jar file somewhere. E.g: /opt
  • Copy the Debian package generated config in /etc into the new app config directory. You might need to reformat the YAML file a bit.

For example:

Some vars might look like this:

timeout: ${sys.TIMEOUT!”5000ms” }

We want to change it to look like:

timeout: 5000ms

  • Uninstall Debian packages

apt-get purge <package>

  • Delete the generated Upstart (/etc/init/<package>.conf) and SysV script (/etc/init.d/<package>)
  • Create a SysV script which looks like this:
#!/bin/bash
#
# dropwizard     This shell script takes care of starting and stopping Dropwizard applications
#
# chkconfig: - 80 20
#
### BEGIN INIT INFO
# Provides: dropwizard
# Required-Start: $network $syslog
# Required-Stop: $network $syslog
# Default-Start:
# Default-Stop:
# Short-Description: start and stop dropwizard
### END INIT INFO

#You just need to replace the {{ var }} below for your application
APPLICATION_NAME="{{ app_name }}"
APPLICATION_USER="{{ app_user }}"
APPLICATION_HOME="{{ app_home }}"
APPLICATION_JAR="{{ app_name }}.jar"
APPLICATION_CONFIG="{{ app_name }}.yml"
APPLICATION_CONFIG_DIR="{{ app_config_dir}}"
APPLICATION_CMD="java {{ additional_java_args }} -jar ${APPLICATION_HOME}/${APPLICATION_JAR} server ${APPLICATION_CONFIG_DIR}/${APPLICATION_CONFIG}"
APPLICATION_SHUTDOWN_WAIT=120

dropwizard_pid() {
    echo `ps aux | grep "${APPLICATION_CMD}" | grep -v grep | awk '{ print $2 }'`
}

start() {
    pid=$(dropwizard_pid)
    if [ -n "$pid" ]
    then
        echo "${APPLICATION_NAME} is already running (pid: $pid)"
    else
        # Start dropwizard
        echo "Starting ${APPLICATION_NAME}"
        su ${APPLICATION_USER} -c "cd ${APPLICATION_HOME}; ${APPLICATION_CMD} > /dev/null &"
    fi
    return 0
}

stop() {
    pid=$(dropwizard_pid)
    if [ -n "$pid" ]
    then
        echo "Stopping ${APPLICATION_NAME}"
        kill $pid

    let kwait=$APPLICATION_SHUTDOWN_WAIT
    count=0
    count_by=5
    until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $kwait ]
    do
        echo "Waiting for processes to exit. Timeout before we kill the pid: ${count}/${kwait}"
        sleep $count_by
        let count=$count+$count_by;
    done

    if [ $count -gt $kwait ]; then
        echo "Killing processes which didn't stop after ${APPLICATION_SHUTDOWN_WAIT} seconds"
        kill -9 $pid
    fi
    else
        echo "${APPLICATION_NAME} is not running"
    fi

    return 0
}

status(){
    pid=$(dropwizard_pid)
    if [ -n "$pid" ]; then
        echo "${APPLICATION_NAME} is running with pid: $pid"
    else
        echo "${APPLICATION_NAME} is not running"
    exit 1
    fi
}


case $1 in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        status
        ;;
    *)
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
    ;;

esac

exit 0
  • Finally, we can start the application by:

service <package> start

How To Install Tomcat8 On Ubuntu 14 Trusty By Extracting Package

Introduction

Tomcat8 package is yet currently available for Ubuntu 14.04. However, we can set up Tomcat8.0.32 on Ubuntu 14.04 by using the package for Tomcat 16.

A Tomcat8 package consists of the following packages:

  • authbind
  • libcommons-collections3-java
  • libcommons-dhcp-java
  • libcommons-pool-java
  • libecj-java
  • libtomcat8-java
  • tomcat8
  • tomcat8-common

Steps:

  • Install Tomcat8.0.32 on a Ubuntu 16 box
  • Inspect the contents of the package

dpkg -c ./path/to/tomcat8_8.0.32-1ubuntu1.3_all.deb

The path showed will be a reference of file structure of a Tomcat 8 installation which we will need to mimic in the Ubuntu 14.04 box

  • Download Tomcat8.0.32 package for Ubuntu 16
  • Extract files from the Debian package:

ar -x tomcat8_8.0.32-1ubuntu1.3_all.deb

  • Extract files from data.tar.gz using tar

tar -xf data.tar.gz

  • The above will produce usr, etc and var folders
  • Move the folders above into /usr, /etc and /var respectively
  • Do the same for libtomcat8-java and tomcat8-common packages
  • Apt-get install the rest of the required packages:

– authbind

–¬†libcommons-collections3-java

– libcommons-dbcp-java

– libcommons-pool-java

– libecj-java

Note: if you are getting dependency issue during the install of libecj-java, fix with “apt-get install -f

  • Create tomcat8 user

groupadd tomcat8

useradd -s /bin/false -g tomcat8 -d /usr/share/tomcat8 tomcat8

  • /usr/share/tomcat8/lib contains symlinks to /usr/share/java/tomcat8 which are extracts from libtomcat8-java
  • Fix file permissions and ownership in /usr, /etc, /var. Some will require ownership of root:tomcat8
Newer posts »

© 2021 Chuan Chuan Law

Theme by Anders NorenUp ↑