Install Tomcat 7 and Java 1.7 on CentOS 6 RHEL 6
In this post we will cover how to install the Apache Tomcat 7 and jre 1.7 on CentOS 6 and RHEL 6. This process doesn’t use the rpm’s from the Redhat repositories, but uses the latest tar balls from Apache and Oracle. We will also be using service accounts to control Tomcat and its processes.
Download latest Tomcat from http://tomcat.apache.org/download-70.cgi. Version 7.0.40 is the curent version at the time of this post.
Download the latest Java 1.7 jdk from http://www.oracle.com/technetwork/java/javase/downloads/index.html, click on the JDK download buton. You will want jdk-7u21-linux-x64.tar.gz tarball.
Copy the downloaded tarballs to /tmp directory on your server.
Change directory to /opt or the directory of your choice on the server. I am using /opt for this post to contain Java and Tomcat.
$ cd /opt
Make the tomcat directory and change to it.
$ mkdir tomcat
$ cd tomcat
This step is optional to create individual instances by name for tomcat. Doing this allows you to run multiple instances of tomcat on a server. For this example tomcat-inst1 is what we will be using.
$ mkdir tomcat-inst1
$ cd tomcat-inst1
untar Tomcat in the instance you will be running.
$ tar -xvzf /tmp/apache-tomcat-7.0.40.tar.gz
Create a symlink called tomcat-current. This will allow you to untar newer versions of Tomcat and juwst update the symlink.
$ ln -sf apache-tomcat-7.0.40 tomcat-current
Create tomcat service account and set the UID to 520
$ useradd -u 520 -c “Tomcat Service Account” -d /opt/tomcat -m -s /bin/bash tomcat
Change ownership of the tomcat directory to the tomcat user.
$ cd /opt $ chown -R tomcat:tomcat tomcat
Create an init.d script to start the Tomcat instance at reboot. There is not one available when using Apache supplied tarball install. Copy the below code and save as tomcat-inst1 in /etc/init.d directory, modify the instance name variable.
#!/bin/bash # # Startup script for the Tomcat 7.0 Servlet/JSP Container # # chkconfig: 345 98 02 # description: Tomcat is the servlet container that is used in the # official Reference Implementation for the Java Servlet # and JavaServer Pages technologies. # Source function library. . /etc/rc.d/init.d/functions INSTANCE=tomcat-inst1 export INSTANCE CATALINA_HOME=/app/tomcat/${INSTANCE}/tomcat-current # Source configuration. [ -f /etc/sysconfig/${INSTANCE} ] && . /etc/sysconfig/${INSTANCE} RETVAL=0 start() { if [ -f /var/run/${INSTANCE}_restart ] then /bin/rm /var/run/${INSTANCE}_restart fi echo -n $"Starting $prog: " if [ ! -f /var/lock/subsys/${INSTANCE} ]; then su - tomcat -c "INST_NAME=${INSTANCE} $CATALINA_HOME/bin/startup.sh" if [ $RETVAL = 0 ]; then success $"$prog startup" touch /var/lock/subsys/${INSTANCE} else failure $"$prog startup" fi fi echo return $RETVAL } stop() { /bin/touch /var/run/${INSTANCE}_restart echo -n $"Stopping $prog: " if [ -f /var/lock/subsys/${INSTANCE} ]; then su - tomcat -c "$CATALINA_HOME/bin/shutdown.sh -force" if [ $RETVAL = 0 ]; then success $"$prog shutdown" rm -f /var/lock/subsys/${INSTANCE} else failure $"$prog shutdown" fi fi echo return $RETVAL } stopforce() { /bin/touch /var/run/${INSTANCE}_restart echo -n $"Forcefully Stopping $prog: " if [ -f /var/lock/subsys/${INSTANCE} ]; then su - tomcat -c "$CATALINA_HOME/bin/shutdown.sh -force" if [ $RETVAL = 0 ]; then success $"$prog shutdown" rm -f /var/lock/subsys/${INSTANCE} else failure $"$prog shutdown" fi fi echo return $RETVAL } status() { local base=${1##*/} if [ -f /var/lock/subsys/${base} ]; then echo $"${base} is running..." return 0 else echo $"${base} is stopped." return 3 fi } getpid() { tomcatpid=`ps auwwwx | grep -v grep |grep -i /${INSTANCE}/ | awk '{print $2}'` echo "The PID for ${INSTANCE} is ${tomcatpid}." echo } threaddump() { getpid kill -3 ${tomcatpid} echo "Thread dump has been sent to where stdout is logged." echo } # See how we were called. case "$1" in start) start ;; stop) stop ;; stopforce) stopforce ;; status) status ${INSTANCE} ;; restart|reload) stopforce start ;; condrestart) if [ -f /var/lock/subsys/${INSTANCE} ] ; then stop start fi ;; getpid) getpid ;; threaddump) threaddump ;; *) echo $"Usage: $prog {start|stop|stopforce|restart|condrestart|reload|status|getpid|threaddump}" exit 1 esac exit $RETVAL
Make the following changes
# Source function library.
. /etc/rc.d/init.d/functions
INSTANCE=tomcat-inst1
export INSTANCE
CATALINA_HOME=/app/tomcat/${INSTANCE}/tomcat-current
Set init script to run at startup.
$ chkconfig --levels 345 tomcat-inst1 on
Setup Java jdk 1.7
$ cd /opt $ mkdir java $ cd java
Untar the tarball
$ tar -xzvf /tmp/jdk-7u21-linux-x64.tar.gz
Create the symlink
$ ln -sf jdk1.7.0_21 current
Create setenv.sh in /opt/tomcat/tomcat-inst1/tomcat-current/bin/ . In this exaple there is a ENV_LEVEL which you can omit the two lines or use them. This is for maintaining different developement levels set to correct environment (DEV, INT, CERT, PROD) if you want to use them.
#Java Home for this Tomcat Instance JAVA_HOME=/app/java/current #Set Java Options (Memory minimum/maximum? JAVA_OPTS="-server -Xms1024m -Xmx1024m" #Modify umask so that group has r+w umask 02 CATALINA_PID=${CATALINA_HOME}/bin/catalina.pid ENV_LEVEL=DEV export ENV_LEVEL $ chmod 755 setenv.sh $ chown tomcat:tomcat setenv.sh
Modify tomcat-users.xml to set password and roles access.
$ cd /opt/tomcat/tomcat-inst1/tomcat-current/conf
Make a backup of the current file.
$ mv tomcat-users.xml tomcat-users.xml.orig
Create a new file with the following contents and set the passwords to your liking.
$ vi tomcat_users.xml <?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="manager-gui"/> <role rolename="tomcat"/> <role rolename="admin"/> <user username="manager" password="tommgr" roles="manager-gui,admin"/> <user username="tomcat" password="tomcat" roles="tomcat"/> </tomcat-users> chmod 600 tomcat-users.xml chown tomcat:tomcat tomcat-users.xml
Now we can start Tomcat up and should be working.
Leave a Reply