Instalar versiones java, uso de diferentes versiones en Linux

Esto puede parecer una trivialidad, pero he visto a mucha gente no tener nada claro como tener en una misma máquina, varios servidores de aplicaciones Java ejecutando sobre diferentes versiones.

Para comenzar por cuestiones de seguridad lo más recomendable es que por cada servidor de aplicaciones que tengamos en ejecución, el propietario de la instalación sea un usuario diferente, este mismo usuario es el que ejecuta el servidor de aplicaciones.

En resumidas cuentas, para cada usuario podemos configurar su entorno de ejecución por defecto, de tal forma que no es necesario tocar nada en los servidores de aplicaciones para indicar que Java debe usar.

Pongamos el ejemplo de que queremos ejecutar Tomcat 8, con Java 8 y Tomcat 6 con Java 1.5.

Lo primero que haremos será descargar y descomprimir las versiones de Java 8 (http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) y 1.5 (desde las versiones archivadas http://www.oracle.com/technetwork/java/javase/archive-139210.html).

Yo prefiero descargar los *.tgz o para las versiones antiguas .bin (nada rpm) para tener perfectamente controlado donde instalar el software.

Vamos a descomprimir los Javas en /opt:

Source   
[root@nostromo opt]# pwd
/opt
[root@nostromo opt]# ls -lrt
total 199332
-rw-r--r-- 1 root root  44191305 abr 17 12:45 jdk-1_5_0_22-linux-amd64.bin
-rw-r--r-- 1 root root 159910666 abr 17 12:49 jdk-8u5-linux-i586.tar.gz
 
[root@nostromo opt]# tar xfz jdk-8u5-linux-i586.tar.gz
...
 
[root@nostromo opt]# chmod +x jdk-1_5_0_22-linux-amd64.bin
...
[root@nostromo opt]# ls -l
total 199336
drwxr-xr-x 9 root root      4096 oct  9  2009 jdk1.5.0_22
-rwxr-xr-x 1 root root  44191305 abr 17 12:45 jdk-1_5_0_22-linux-amd64.bin
drwxr-xr-x 8   10  143      4096 mar 18 09:03 jdk1.8.0_05
-rw-r--r-- 1 root root 159910666 abr 17 12:49 jdk-8u5-linux-i586.tar.gz

Creamos los usuarios de sistema operativo (llamada más simple imposible):

Source   
[root@nostromo ~]# adduser tomcat8
[root@nostromo ~]# adduser tomcat6

Descargamos Tomcat 8 (de http://tomcat.apache.org/download-80.cgi) y Tomcat 6 (de http://tomcat.apache.org/download-60.cgi), los dejamos en /opt. Descomprimimos y damos propiedad a los usuarios creados:

Source   
[root@nostromo opt]# ls -l
total 215020
-rw-r--r-- 1 root root   7065481 abr 17 12:56 apache-tomcat-6.0.39.tar.gz
-rw-r--r-- 1 root root   8993812 abr 17 12:56 apache-tomcat-8.0.5.tar.gz
drwxr-xr-x 9 root root      4096 oct  9  2009 jdk1.5.0_22
-rwxr-xr-x 1 root root  44191305 abr 17 12:45 jdk-1_5_0_22-linux-amd64.bin
drwxr-xr-x 8   10  143      4096 mar 18 09:03 jdk1.8.0_05
-rw-r--r-- 1 root root 159910666 abr 17 12:49 jdk-8u5-linux-i586.tar.gz
[root@nostromo opt]# tar xfz apache-tomcat-6.0.39.tar.gz
[root@nostromo opt]# tar xfz apache-tomcat-8.0.5.tar.gz
[root@nostromo opt]# ls -l
total 215028
drwxr-xr-x 9 root root      4096 abr 17 12:59 apache-tomcat-6.0.39
-rw-r--r-- 1 root root   7065481 abr 17 12:56 apache-tomcat-6.0.39.tar.gz
drwxr-xr-x 9 root root      4096 abr 17 12:59 apache-tomcat-8.0.5
-rw-r--r-- 1 root root   8993812 abr 17 12:56 apache-tomcat-8.0.5.tar.gz
drwxr-xr-x 9 root root      4096 oct  9  2009 jdk1.5.0_22
-rwxr-xr-x 1 root root  44191305 abr 17 12:45 jdk-1_5_0_22-linux-amd64.bin
drwxr-xr-x 8   10  143      4096 mar 18 09:03 jdk1.8.0_05
-rw-r--r-- 1 root root 159910666 abr 17 12:49 jdk-8u5-linux-i586.tar.gz
[root@nostromo opt]# tar xfz apache-tomcat-6.0.39.tar.gz
[root@nostromo opt]# tar xfz apache-tomcat-8.0.5.tar.gz
[root@nostromo opt]# ls -l
total 215028
drwxr-xr-x 9 tomcat6 tomcat6      4096 abr 17 12:59 apache-tomcat-6.0.39
-rw-r--r-- 1 root    root      7065481 abr 17 12:56 apache-tomcat-6.0.39.tar.gz
drwxr-xr-x 9 tomcat8 tomcat8      4096 abr 17 12:59 apache-tomcat-8.0.5
-rw-r--r-- 1 root    root      8993812 abr 17 12:56 apache-tomcat-8.0.5.tar.gz
drwxr-xr-x 9 root    root         4096 oct  9  2009 jdk1.5.0_22
-rwxr-xr-x 1 root    root     44191305 abr 17 12:45 jdk-1_5_0_22-linux-amd64.bin
drwxr-xr-x 8      10     143      4096 mar 18 09:03 jdk1.8.0_05
-rw-r--r-- 1 root    root    159910666 abr 17 12:49 jdk-8u5-linux-i586.tar.gz

En esta situación tenemos los usuarios creados, javas y tomcats instalados además de modificados los permisos.

Vamos a configurar el usuario tomcat6, para que coja por defecto el Java 1.5:

 

Source   
[root@nostromo opt]# su - tomcat6
[tomcat6@nostromo ~]$ ls /opt/jdk1.5.0_22/
bin  COPYRIGHT  demo  include  jre  lib  LICENSE  man  README.html  sample  src.zip  THIRDPARTYLICENSEREADME.txt
[tomcat6@nostromo ~]$ cat .bash_profile
# .bash_profile
 
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
 
# User specific environment and startup programs
 
PATH=$PATH:$HOME/.local/bin:$HOME/bin
 
export PATH

 

Editamos el .bash_profile (en RedHat/CentOS, en un Ubuntu encontraremos un .profile) y modificamos para que quere algo como:

 

Source   
# .bash_profile
 
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
 
# User specific environment and startup programs
 
export JAVA_HOME=/opt/jdk1.5.0_22
PATH=$JAVA_HOME/bi:$PATH:$HOME/.local/bin:$HOME/bin
 
export PATH

 

Lo que se ha hecho es definir la variable JAVA_HOME para que apunte a la instalación Java a utilizar, esta variable recomendable tenerla definida para muchos servidores de aplicaciones, facilita mucho la configuración. Además se ha añadido en el PATH el directorio bin de la instalación de Java.

Una vez modificado el .bash_profile, salimos de la sesión y volvemos a entrar. Podemos verificar que la versión que utiliza el usuario es la requerida y además ejecutamos Tomcat 6 sin problemas con el Java adecuado, luego lo paramos para que podemos verificar la instalación de Tomcat 8 y que no haya un conflicto de puertos:

Source   
[tomcat6@nostromo ~]$ vi .bash_profile
[tomcat6@nostromo ~]$ exit
logout
[root@nostromo opt]# su - tomcat6
Último inicio de sesión:jue abr 17 13:04:26 CEST 2014en pts/1
[tomcat6@nostromo ~]$ java -version
java version "1.5.0_22"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03)
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_22-b03, mixed mode)
[tomcat6@nostromo ~]$ /opt/apache-tomcat-6.0.39/bin/startup.sh
Using CATALINA_BASE:   /opt/apache-tomcat-6.0.39
Using CATALINA_HOME:   /opt/apache-tomcat-6.0.39
Using CATALINA_TMPDIR: /opt/apache-tomcat-6.0.39/temp
Using JRE_HOME:        /opt/jdk1.5.0_22
Using CLASSPATH:       /opt/apache-tomcat-6.0.39/bin/bootstrap.jar
[tomcat6@nostromo ~]$ ps -fe | grep java
tomcat6  16658     1 68 13:12 pts/1    00:00:06 /opt/jdk1.5.0_22/bin/java -Djava.util.logging.config.file=/opt/apache-tomcat-6.0.39/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/opt/apache-tomcat-6.0.39/endorsed -classpath /opt/apache-tomcat-6.0.39/bin/bootstrap.jar -Dcatalina.base=/opt/apache-tomcat-6.0.39 -Dcatalina.home=/opt/apache-tomcat-6.0.39 -Djava.io.tmpdir=/opt/apache-tomcat-6.0.39/temp org.apache.catalina.startup.Bootstrap start
tomcat6  16681 16593  0 13:12 pts/1    00:00:00 grep --color=auto java
[tomcat6@nostromo ~]$ /opt/apache-tomcat-6.0.39/bin/shutdown.sh
Using CATALINA_BASE:   /opt/apache-tomcat-6.0.39
Using CATALINA_HOME:   /opt/apache-tomcat-6.0.39
Using CATALINA_TMPDIR: /opt/apache-tomcat-6.0.39/temp
Using JRE_HOME:        /opt/jdk1.5.0_22
Using CLASSPATH:       /opt/apache-tomcat-6.0.39/bin/bootstrap.jar
[tomcat6@nostromo ~]$
[tomcat6@nostromo ~]$ ps -fe | grep java
tomcat6  17029 16933  0 13:20 pts/1    00:00:00 grep --color=auto java

Se puede ver que el propietario del proceso es el adecuado.

Para el usuario tomcat8, los pasos son exactamente iguales, cambiando lógicamente la ubicación de Java y las llamadas al arranque de Tomcat:

Source   
[tomcat6@nostromo ~]$ exit
logout
[root@nostromo opt]# su - tomcat8
[tomcat8@nostromo ~]$ vi .bash_profile
[tomcat8@nostromo ~]$ cat .bash_profile
# .bash_profile
 
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
 
# User specific environment and startup programs
export JAVA_HOME=/opt/jdk1.8.0_05
PATH=$JAVA_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin
 
export PATH
[tomcat8@nostromo ~]$ exit
logout
[root@nostromo opt]# su - tomcat8
Último inicio de sesión:jue abr 17 13:14:45 CEST 2014en pts/1
[tomcat8@nostromo ~]$ java -version
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) Server VM (build 25.5-b02, mixed mode)
[tomcat8@nostromo ~]$ /opt/apache-tomcat-8.0.5/bin/startup.sh
Using CATALINA_BASE:   /opt/apache-tomcat-8.0.5
Using CATALINA_HOME:   /opt/apache-tomcat-8.0.5
Using CATALINA_TMPDIR: /opt/apache-tomcat-8.0.5/temp
Using JRE_HOME:        /opt/jdk1.8.0_05
Using CLASSPATH:       /opt/apache-tomcat-8.0.5/bin/bootstrap.jar:/opt/apache-tomcat-8.0.5/bin/tomcat-juli.jar
Tomcat started.
[tomcat8@nostromo ~]$ ps -fe | grep java
tomcat8  17087     1 99 13:21 pts/1    00:00:04 /opt/jdk1.8.0_05/bin/java -Djava.util.logging.config.file=/opt/apache-tomcat-8.0.5/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/opt/apache-tomcat-8.0.5/endorsed -classpath /opt/apache-tomcat-8.0.5/bin/bootstrap.jar:/opt/apache-tomcat-8.0.5/bin/tomcat-juli.jar -Dcatalina.base=/opt/apache-tomcat-8.0.5 -Dcatalina.home=/opt/apache-tomcat-8.0.5 -Djava.io.tmpdir=/opt/apache-tomcat-8.0.5/temp org.apache.catalina.startup.Bootstrap start
tomcat8  17117 17039  0 13:21 pts/1    00:00:00 grep --color=auto java
[tomcat8@nostromo ~]$ /opt/apache-tomcat-8.0.5/bin/shutdown.sh
Using CATALINA_BASE:   /opt/apache-tomcat-8.0.5
Using CATALINA_HOME:   /opt/apache-tomcat-8.0.5
Using CATALINA_TMPDIR: /opt/apache-tomcat-8.0.5/temp
Using JRE_HOME:        /opt/jdk1.8.0_05
Using CLASSPATH:       /opt/apache-tomcat-8.0.5/bin/bootstrap.jar:/opt/apache-tomcat-8.0.5/bin/tomcat-juli.jar

 

Hemos estado trabajando con Tomcat como servidor de aplicaciones pero es aplicable a cualquier servidor de aplicaciones, JBoss, Weblogic, etc… incluso a cualquier software Java en linea de comandos.

Espero que os sirva de ayuda…

2 thoughts on “Instalar versiones java, uso de diferentes versiones en Linux

  1. Gracias por la ayuda:
    Hola estoy tratando ejecutar el servicio según entiendo debo de realizar estos pasos:
    Para ejecutar tomcat 6
    1. Debo entrar como usuario tomcat6
    2. luego ejecutar /opt/apache-tomcat-8.0.5/bin/startup.sh
    3. Pero cuando me dirijo al navegador y coloco la dirección 192.168.1.4:8080 no consigo conectarme con apachetomcat

    Por favor indícame si estoy haciendo algo mal.

Deja un comentario