martes, 31 de mayo de 2011

Instalación de Sun JDK en Linux para "torpes"

Sencillo ¿¿no...??

Java Coffee House, Thamel, Kathmandu, NepalEs una tarea que seguramente todos hemos realizado: aplicaciones de escritorio, plug-in para el navegador, servidores J2EE...

Este último caso es al que me he enfrentado recientemente: Instalación de JDK 1.6 Update 18 para montar un Weblogic Server 10.3.2 para Grid Control 11g. Y me he encontrado con una situación, infinidad de manuales y ninguno que me guste.

Aunque es una tarea relativamente sencilla creo que se merece unas lineas.

Introducción
Cualquier aplicación escrita en Java debería poder ejecutarse si tenemos instalado el Runtime adecuado, que no es más que un entorno de ejecución Java donde nuestra aplicación encontrará todo lo que necesita para funcionar.

Eso implica instalar la versión correcta a nuestro sistema, ya que para que las aplicaciones sean "portables" es necesario una gran cantidad de versiones del Runtime de Java que se adapten perfectamente a nuestro sistema.

Ésto supone un primer problema:

¿Qué versión de Java descargo?
Varias aclaraciones, aunque las versiones de Java se nombran con números: 4, 5 y 6; el paquete que descarguemos añade un 1 delante: 1.4, 1.5 y 1.6. No he perdido mucho tiempo en buscar información sobres esto, pero si alguien conoce la explicación... encantado de añadirlo.

Hay multitud de ediciones diferentes, me voy a centrar en el JDK de la Java Platform Standard Edition (Java SE): Java SE Downloads

Pero como quizás no sea la adecuada para ti, puedes descargar cualquier versión desde el "archivo" de Oracle: Archive: Java[tm] Technology Products Download

A donde os redireccionará el antiguo enlace de Sun: http://java.sun.com/products/archive/ y donde se puede encontrar cualquier versión que necesites. En mi caso la recomendada para Grid Control es la JDK 1.6 Update 18.

coffee klatschInstalación
Hay dos opciones de instalación: RPM o auto-instalable. Si vuestro sistema utiliza packetes RPM, creo que no hay duda, y sobre la instalación tampoco creo que las tengamos:
  1. Una vez descargado el archivo jdk-6u18-linux-x64-rpm.bin lo convertimos en ejecutable con: $ chmod u+x jdk-6u18-linux-x64-rpm.bin
  2. Ejecutamos $ ./jdk-6u18-linux-x64-rpm.bin y seguimos las pocas indicaciones.
  3. Borramos los RPMs si queremos ahorrar espacio.
No dudo que esta parte la habréis hecho infinidad de veces, justo después ¿os encontráis con ésto?

# java -version
java version "1.5.0"
gij (GNU libgcj) version 4.4.5 20101112 (Red Hat 4.4.5-2)

Configuración
A partir del 2006 Sun liberaliza Java, por lo que nos encontramos varias alternativas lo suficientemente válidas para la mayoría de casos. En el ejemplo anterior GNU Compiler for Java pero también se puede optar por OpenJDK.

Para el caso que describo, Weblogic Server necesita el Development Kit de Sun, sin opciones, si configuramos el JAVA_HOME y el PATH con la nueva instalación, ya podríamos acabar, pero...

Gracias al comando "alternatives" podremos gestionar tanto los "runtimes" que tenga nuestro sistema como el nuevo que acabamos de instalar, evitando muchas de las confusiones que puede ocasionar la configuración "manual".

La instalación que hemos realizado la tenemos en /usr/java, además de dos enlaces latest y default que nos servirían en el caso utilizar solo el JDK de Sun. Los "runtimes" que vengan en el sistema seguramente estarán en /usr/lib/jvm, por lo que hacemos un enlace a la nueva instalación:

# ln -s /usr/java/jdk1.6.0_18 /usr/lib/jvm/java-1.6.0-sun

Averiguamos la prioridad de las instalaciones:

# alternatives --display java | grep priori

Lo siguiente será instalar nuestra nueva "alternativa" java con un nivel de prioridad superior al de las ya instaladas:

# alternatives --install /usr/bin/java java /usr/lib/jvm/java-1.6.0-sun/bin/java 16050 \
--slave /usr/bin/rmiregistry rmiregistry /usr/lib/jvm/java-1.6.0-sun/bin/rmiregistry \
--slave /usr/lib/jvm/jre jre /usr/lib/jvm/java-1.6.0-sun/jre/ \
--slave /usr/lib/jvm/jdk jdk /usr/lib/jvm/java-1.6.0-sun

Si nos interesa, podemos hacer lo mismo con el kit de desarrollo completo:

# alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-1.6.0-sun/bin/javac 16050 \
--slave /usr/lib/jvm/java java_sdk /usr/lib/jvm/java-1.6.0-sun \
--slave /usr/bin/javadoc javadoc /usr/lib/jvm/java-1.6.0-sun/bin/javadoc \
--slave /usr/bin/javah javah /usr/lib/jvm/java-1.6.0-sun/bin/javah \
--slave /usr/bin/jar jar /usr/lib/jvm/java-1.6.0-sun/bin/jar \
--slave /usr/bin/rmic rmic /usr/lib/jvm/java-1.6.0-sun/bin/rmic \

Por último, volvemos a configurar la alternativa basándonos en la prioridad:

# alternatives --auto java
# alternatives --auto javac

Y por último, la configuración del man obtenida del siguiente blog:

# (cd /usr/lib/jvm/java-1.6.0-sun; txt="alternatives --install /usr/share/man/man1/java.1 \
man-java.1 /usr/lib/jvm/java/man/man1/java.1 1421 "; \
for f in man/man1/*; do f=`basename $f`; if [ "x$f" != "xjava.1"]; \
then txt="$txt --slave /usr/share/man/man1/$f man-$f /usr/lib/jvm/java/man/man1/$f"; fi; done; `$txt`);

El resultado debería ser parecido a:

# java -version
java version "1.6.0_18"
Java(TM) SE Runtime Environment
Java HotSpot(TM) Server VM

Coffee #2
Entorno
No, no podemos obviar las variables de entorno. Para ello crearemos un archivo en /etc/profiles.d llamado java.sh con el siguiente contenido:

#!/bin/sh
export JAVA_HOME=/usr/lib/jvm/jdk
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

Oracle
Solo a modo anecdótico, os dejo las recomendaciones de Oracle para el JDK de una instalación de Weblogic Server, digo anecdótico porque creo que para temas no "estrictamente" relaciondos con sus productos no siempre es la mejor fuente de información:
  • No se debe actualizar el JDK, es importante seguir la matriz de versiones certificadas.
  • Instalar en un lugar seguro (¿WTF?), Oracle recomienda ubicarlo bajo el
    directorio $ORACLE_HOME/Middleware, incluso a costa de recibir mensaje de error durante la instalación de WLS (totalmente en desacuerdo, si somos capaces de instalar un Grid Control, deberíamos serlo de mantener el JDK "a salvo"!!)
  • Recomendable jdk 1.6.0_18,  parecen haberse "estancado" en la versión 10.3.2 de WLS, por lo que la versión de JDK queda también condicionada.
Referencias

Imagen: Java Coffee House, Thamel, Kathmandu, Nepal
Imagen: coffee klatsch
Imagen: Coffee #2

No hay comentarios: