No todo van a ser paquetes (con perdón). Hoy nos toca instalar Tomcat sobre un servidor con Debian 4. Y queremos hacerlo con la última versión disponible para ello, asà que en vez de esperar a que los aguerridos mantenedores de Debian nos ofrezcan el .deb vamos a poner manos a la obra y a hacerlo por nosotros mismos. ¿Preparados?
Lo primero que necesitamos es la última versión del JDK de Java que en estos momentos es la 6u7. Pulsamos el botón de download, elegimos la plataforma (Linux64 en mi caso) y nos bajamos el .bin en, por ejemplo, el directorio /opt/java
. Una vez allà lo hacemos ejecutable (chmod u+x jdk-6u7-linux-x64.bin
) y lanzamos el instalador (./jdk-6u7-linux-x64.bin
). Aparte de aceptar la licencia no hay nada más que hacer salvo borrar el instalador una vez que hemos terminado la operación (rm jdk-6u7-linux-x64.bin
).
En segundo lugar nos bajamos también los binarios de la última versión de Tomcat (en estos momentos la 6.0.18), los dejamos en el directorio /opt
, los descomprimimos allà (tar xvfz apache-tomcat-6.0.18.tar.gz
) y borramos también el archivo de origen (rm apache-tomcat-6.0.18.tar.gz
).
Para probar que todo va bien podemos hacer una primera ejecución manual. Para ello indicamos mediante una variable de entorno que queremos usar la máquina virtual de Java del JDK que acabamos de instalar (export JAVA_HOME=/opt/java/jdk1.6.0_07
) y lanzamos el script que inicia el Tomcat:
nim:/opt/apache-tomcat-6.0.18# /opt/apache-tomcat-6.0.18/bin/startup.sh
Using CATALINA_BASE: /opt/apache-tomcat-6.0.18
Using CATALINA_HOME: /opt/apache-tomcat-6.0.18
Using CATALINA_TMPDIR: /opt/apache-tomcat-6.0.18/temp
Using JRE_HOME: /opt/java/jdk1.6.0_07
Para compobar localmente que el servicio está activo podemos ejecutar netstat y comprobar que tenemos un proceso java escuchando en el puerto 8080:
nim:/opt/apache-tomcat-6.0.18# netstat -tapn
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:548 0.0.0.0:* LISTEN 2512/afpd
tcp 0 0 0.0.0.0:901 0.0.0.0:* LISTEN 2567/inetd
tcp 0 0 0.0.0.0:43335 0.0.0.0:* LISTEN 2736/rpc.statd
tcp 0 0 0.0.0.0:616 0.0.0.0:* LISTEN 2557/rpc.mountd
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 2373/mysqld
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2056/portmap
tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN 2811/perl
tcp 0 0 0.0.0.0:113 0.0.0.0:* LISTEN 2567/inetd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 2672/vsftpd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 2627/master
tcp 0 0 0.0.0.0:50492 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:4700 0.0.0.0:* LISTEN 2514/cnid_metad
tcp6 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 5938/java
tcp6 0 0 :::8009 :::* LISTEN 5938/java
tcp6 0 0 :::8080 :::* LISTEN 5938/java
tcp6 0 0 :::80 :::* LISTEN 2787/apache2
tcp6 0 0 :::22 :::* LISTEN 2667/sshd
tcp6 0 0 ::ffff:192.168.1.6:22 ::ffff:192.168.1.:55905 ESTABLISHED5768/sshd: josemari
tcp6 0 0 ::ffff:192.168.1.6:80 ::ffff:80.36.186.:28953 ESTABLISHED3445/apache2
tcp6 0 0 ::ffff:192.168.1.6:80 ::ffff:80.36.186.:28944 TIME_WAIT -
tcp6 0 528 ::ffff:192.168.1.6:22 ::ffff:192.168.1.:46264 ESTABLISHED5726/sshd: josemari
O, mucho más fácil, probamos a conectarnos desde un navegador y por http al puerto 8080 de la máquina donde estamos realizando la instalación para ver al simpático gatito que hace las veces de mascota del proyecto:
Vale, ahora nos queda sólo que resolver un par de detalles: crear un usuario para que no se ejecute con privilegios de root y configurarlo como servicio para que se integre en el arranque y parada normales del servidor donde está instalado. Lo primero es bien fácil (useradd tomcat
). Para lo segundo vamos a utilizar jsvc y vamos a tener que trabajárnoslo un poco más.
Tomcat se distribuye con un archivo .tar con los fuentes de jsvc y un ejemplo del script que necesitamos personalizar para integrar Tomcat en el inicio de nuestro servidor. Lo primero que tenemos que hacer es entrar en el directorio donde hemos dejado nuestro Tomcat (cd /opt/apache-tomcat-6.0.18/bin
) y descomprimir estos fuentes (tar xvfz jsvc-src.tar.gz
). Luego tenemos que asegurarnos de que nuestro servidor tiene instalados dos paquetes necesarios para la compilación: autoconf y build-essential (apt-get install autoconf build-essential
). En tercer lugar entramos en el directorio dónde se nos han descomprimidos los fuentes y realizamos la compilación ejecutando secuencialmente los siguientes comandos:
nim:/opt/apache-tomcat-6.0.18/bin/jsvc-src# autoconf
nim:/opt/apache-tomcat-6.0.18/bin/jsvc-src# ./configure
nim:/opt/apache-tomcat-6.0.18/bin/jsvc-src# mak
e
Por último copiamos el resultado al directorio bin de tomcat (cp jsvc ..
) y vamos a probar, también manualmente, que el resultado es el correcto. Recordar que ahora mismo tenemos nuestro Tomcat arrancado, asà que lo primero que tenemos que hacer es pararlo (/opt/apache-tomcat-6.0.18/bin/shutdown.sh
). Luego modificamos el propietario del directorio donde tenemos el código de nuestro Tomcat para hacerlo pertenecer al usuario que hemos creado para su ejecución (chown -R tomcat:tomcat /opt/apache-tomcat-6.0.18
). Y ahora ya podemos probar si funciona el arranque mediante jsvc con el siguiente comando:
nim:/opt/apache-tomcat-6.0.18# bin/jsvc -Djava.endorsed.dirs=./common/endorsed -cp ./bin/bootstrap.jar -home /opt/java/jdk1.6.0_07 -user tomcat -outfile ./logs/catalina.out -errfile ./logs/catalina.err org.apache.catalina.startup.Bootstrap
¿Arranca? Estupendo. Si volvemos a ejecutar de nuevo netstat -tapn
vemos que el programa que tiene abierto el puerto 8080 ya no es java como antes sino jsvc. También podemos ver al ejecutar ps -ef | grep catalina que hemos lanzado dos procesos diferentes: uno que realiza la inicialización y que aparece lanzado por el root y otro, hijo de este, que será el responsable posterior de nuestro Tomcat y que se ejecuta con los privilegios del usuario limitado que hemos creado para ello.
Nos restan unos detallitos y ya terminamos. Nuestro Tomcat trae una plantilla denominada Tomcat5.sh
en el directorio /opt/apache-tomcat-6.0.18/bin/jsvc-src/native
y que nos servirá de base para nuestro script de inicio. Nos situamos en ese directorio (cd /opt/apache-tomcat-6.0.18/bin/jsvc-src/native
), hacemos una copia de la plantilla (cp Tomcat5.sh Tomcat6.sh
) y hacemos los cambios necesarios sobre el archivo que hemos creado para adecuarlo a nuestras necesidades. Os dejo aquà el mÃo para que lo descargueÃs.
Ahora ya sólo tenemos que marcarlo como ejecutable (chmod u+x Tomcat6.sh), crear un enlace dinámico a este fichero en el directorio /etc/init.d
(ln -s /opt/apache-tomcat-6.0.18/bin/jsvc-src/native/Tomcat6.sh /etc/init.d/tomcat6
) y, lo más importante, dar instrucciones al sistema para que ejecute el daemon en el inicio y lo detenga al apagar el sistema con el siguiente comando:
nim:/etc/init.d# update-rc.d tomcat6 defaults 99
Por último y en caso de errores, recordad que existen unos ficheritos que se llaman logs y en los que encontraréis valiosas pistas para que tratéis de resolver los problemas por vosotros mismos. Los logs del Tomcat que hemos instalado aquà se encuentran en el directorio /opt/apache-tomcat-6.0.18/logs
. Buena suerte.