miércoles, 23 de julio de 2014

Configurando JDK 8 Oracle en OpenSUSE 12.3

Instalando Oracle Java JDK en openSUSE


Descargarse el RPM adecuado para tu arquitectura de PC. Lo sabrás ejecutando en un terminal :

$ uname -m


Si te responde con i486 o i586 o i686 tu arquitectura es de 32 bits. Si por el contrario te responde con x86_64 tu arquitectura es de 64 bits.

A fecha de hoy el rpm a descargar de la web de Oracle será uno de estos dos según tu arquitectura:
  • jdk-8u11-linux-i586.rpm (Arquitectura de 32 bits)
  • jdk-8u11-linux-x64.rpm (Arquitectura de 64 bits)
Una vez descargados, supongamos que quedan en el directorio "/tmp" abrimos un nuevo terminal como root e instalamos el paquete RPM con :

tuHostName:/tmp # rpm -ivh jdk-8u11-linux-x64.rpm

En caso de que la máquina fuera de 32 bits ....

tuHostName:/tmp # rpm -ivh jdk-8u11-linux-i586.rpm

Terminamos a que se instale y luego grabamos el siguiente script con un editor de texto y lo llamamos "instalaOracleJDK8", por ejemplo:

#!/bin/bash
#La variable JDKDIR apuntará al directorio raiz de la instalacion del JDK (Oracle coloca sus paquetes RPM de Java JDK y JRE en "/usr/java/")
export JDKDIR=jdk1.8.0_11

sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/appletviewer.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/extcheck.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/idlj.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/jar.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/jarsigner.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/java.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/javac.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/javadoc.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/javafxpackager.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/javah.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/javap.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/javaws.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/jcmd.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/jconsole.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/jdb.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/jdeps.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/jhat.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/jinfo.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/jjs.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/jmap.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/jmc.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/jps.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/jrunscript.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/jsadebugd.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/jstack.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/jstat.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/jstatd.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/jvisualvm.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/keytool.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/native2ascii.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/orbd.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/pack200.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/policytool.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/rmic.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/rmid.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/rmiregistry.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/schemagen.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/serialver.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/servertool.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/tnameserv.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/unpack200.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/wsgen.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/wsimport.1)
sudo gzip $(readlink -f /usr/java/$JDKDIR/man/man1/xjc.1)



# Añadiendo alternative Java compiler
sudo /usr/sbin/update-alternatives --install /usr/bin/javac javac /usr/java/$JDKDIR/bin/javac 3 \
--slave /usr/bin/appletviewer appletviewer /usr/java/$JDKDIR/bin/appletviewer \
--slave /usr/share/man/man1/appletviewer.1.gz appletviewer.1.gz /usr/java/$JDKDIR/man/man1/appletviewer.1.gz \
--slave /usr/bin/extcheck extcheck /usr/java/$JDKDIR/bin/extcheck \
--slave /usr/share/man/man1/extcheck.1.gz extcheck.1.gz /usr/java/$JDKDIR/man/man1/extcheck.1.gz \
--slave /usr/bin/jar jar /usr/java/$JDKDIR/bin/jar \
--slave /usr/share/man/man1/jar.1.gz jar.1.gz /usr/java/$JDKDIR/man/man1/jar.1.gz \
--slave /usr/bin/jarsigner jarsigner /usr/java/$JDKDIR/bin/jarsigner \
--slave /usr/share/man/man1/jarsigner.1.gz jarsigner.1.gz /usr/java/$JDKDIR/man/man1/jarsigner.1.gz \
--slave /usr/lib64/jvm/java java_sdk /usr/java/$JDKDIR \
--slave /usr/share/man/man1/javac.1.gz javac.1.gz /usr/java/$JDKDIR/man/man1/javac.1.gz \
--slave /usr/bin/javadoc javadoc /usr/java/$JDKDIR/bin/javadoc \
--slave /usr/share/man/man1/javadoc.1.gz javadoc.1.gz /usr/java/$JDKDIR/man/man1/javadoc.1.gz \
--slave /usr/bin/javah javah /usr/java/$JDKDIR/bin/javah \
--slave /usr/share/man/man1/javah.1.gz javah.1.gz /usr/java/$JDKDIR/man/man1/javah.1.gz \
--slave /usr/bin/javap javap /usr/java/$JDKDIR/bin/javap \
--slave /usr/share/man/man1/javap.1.gz javap.1.gz /usr/java/$JDKDIR/man/man1/javap.1.gz \
--slave /usr/share/man/man1/jcmd.1.gz jcmd.1.gz /usr/java/$JDKDIR/man/man1/jcmd.1.gz \
--slave /usr/bin/jconsole jconsole /usr/java/$JDKDIR/bin/jconsole \
--slave /usr/share/man/man1/jconsole.1.gz jconsole.1.gz /usr/java/$JDKDIR/man/man1/jconsole.1.gz \
--slave /usr/bin/jdb jdb /usr/java/$JDKDIR/bin/jdb \
--slave /usr/share/man/man1/jdb.1.gz jdb.1.gz /usr/java/$JDKDIR/man/man1/jdb.1.gz \
--slave /usr/bin/jhat jhat /usr/java/$JDKDIR/bin/jhat \
--slave /usr/share/man/man1/jhat.1.gz jhat.1.gz /usr/java/$JDKDIR/man/man1/jhat.1.gz \
--slave /usr/bin/jinfo jinfo /usr/java/$JDKDIR/bin/jinfo \
--slave /usr/share/man/man1/jinfo.1.gz jinfo.1.gz /usr/java/$JDKDIR/man/man1/jinfo.1.gz \
--slave /usr/bin/jmap jmap /usr/java/$JDKDIR/bin/jmap \
--slave /usr/share/man/man1/jmap.1.gz jmap.1.gz /usr/java/$JDKDIR/man/man1/jmap.1.gz \
--slave /usr/bin/jps jps /usr/java/$JDKDIR/bin/jps \
--slave /usr/share/man/man1/jps.1.gz jps.1.gz /usr/java/$JDKDIR/man/man1/jps.1.gz \
--slave /usr/bin/jrunscript jrunscript /usr/java/$JDKDIR/bin/jrunscript \
--slave /usr/share/man/man1/jrunscript.1.gz jrunscript.1.gz /usr/java/$JDKDIR/man/man1/jrunscript.1.gz \
--slave /usr/bin/jsadebugd jsadebugd /usr/java/$JDKDIR/bin/jsadebugd \
--slave /usr/share/man/man1/jsadebugd.1.gz jsadebugd.1.gz /usr/java/$JDKDIR/man/man1/jsadebugd.1.gz \
--slave /usr/bin/jstack jstack /usr/java/$JDKDIR/bin/jstack \
--slave /usr/share/man/man1/jstack.1.gz jstack.1.gz /usr/java/$JDKDIR/man/man1/jstack.1.gz \
--slave /usr/bin/jstat jstat /usr/java/$JDKDIR/bin/jstat \
--slave /usr/share/man/man1/jstat.1.gz jstat.1.gz /usr/java/$JDKDIR/man/man1/jstat.1.gz \
--slave /usr/bin/jstatd jstatd /usr/java/$JDKDIR/bin/jstatd \
--slave /usr/share/man/man1/jstatd.1.gz jstatd.1.gz /usr/java/$JDKDIR/man/man1/jstatd.1.gz \
--slave /usr/bin/native2ascii native2ascii /usr/java/$JDKDIR/bin/native2ascii \
--slave /usr/share/man/man1/native2ascii.1.gz native2ascii.1.gz /usr/java/$JDKDIR/man/man1/native2ascii.1.gz \
--slave /usr/bin/pack200 pack200 /usr/java/$JDKDIR/bin/pack200 \
--slave /usr/share/man/man1/pack200.1.gz pack200.1.gz /usr/java/$JDKDIR/man/man1/pack200.1.gz \
--slave /usr/bin/rmic rmic /usr/java/$JDKDIR/bin/rmic \
--slave /usr/share/man/man1/rmic.1.gz rmic.1.gz /usr/java/$JDKDIR/man/man1/rmic.1.gz \
--slave /usr/bin/schemagen schemagen /usr/java/$JDKDIR/bin/schemagen \
--slave /usr/share/man/man1/schemagen.1.gz schemagen.1.gz /usr/java/$JDKDIR/man/man1/schemagen.1.gz \
--slave /usr/bin/serialver serialver /usr/java/$JDKDIR/bin/serialver \
--slave /usr/share/man/man1/serialver.1.gz serialver.1.gz /usr/java/$JDKDIR/man/man1/serialver.1.gz \
--slave /usr/bin/unpack200 unpack200 /usr/java/$JDKDIR/bin/unpack200 \
--slave /usr/share/man/man1/unpack200.1.gz unpack200.1.gz /usr/java/$JDKDIR/man/man1/unpack200.1.gz \
--slave /usr/bin/wsgen wsgen /usr/java/$JDKDIR/bin/wsgen \
--slave /usr/share/man/man1/wsgen.1.gz wsgen.1.gz /usr/java/$JDKDIR/man/man1/wsgen.1.gz \
--slave /usr/bin/wsimport wsimport /usr/java/$JDKDIR/bin/wsimport \
--slave /usr/share/man/man1/wsimport.1.gz wsimport.1.gz /usr/java/$JDKDIR/man/man1/wsimport.1.gz \
--slave /usr/bin/xjc xjc /usr/java/$JDKDIR/bin/xjc \
--slave /usr/share/man/man1/xjc.1.gz xjc.1.gz /usr/java/$JDKDIR/man/man1/xjc.1.gz

# Añadiendo alternative Java application launcher
sudo /usr/sbin/update-alternatives --install /usr/bin/java java /usr/java/$JDKDIR/jre/bin/java 3 \
--slave /usr/share/man/man1/java.1.gz java.1.gz /usr/java/$JDKDIR/man/man1/java.1.gz \
--slave /usr/lib64/jvm/jre jre /usr/java/$JDKDIR/jre \
--slave /usr/lib64/jvm-exports/jre jre_exports /usr/lib64/jvm-exports/jdk_Oracle \
--slave /usr/bin/keytool keytool /usr/java/$JDKDIR/jre/bin/keytool \
--slave /usr/share/man/man1/keytool.1.gz keytool.1.gz /usr/java/$JDKDIR/man/man1/keytool.1.gz \
--slave /usr/bin/orbd orbd /usr/java/$JDKDIR/jre/bin/orbd \
--slave /usr/share/man/man1/orbd.1.gz orbd.1.gz /usr/java/$JDKDIR/man/man1/orbd.1.gz \
--slave /usr/bin/policytool policytool /usr/java/$JDKDIR/jre/bin/policytool \
--slave /usr/share/man/man1/policytool.1.gz policytool.1.gz /usr/java/$JDKDIR/man/man1/policytool.1.gz \
--slave /usr/bin/rmid rmid /usr/java/$JDKDIR/jre/bin/rmid \
--slave /usr/share/man/man1/rmid.1.gz rmid.1.gz /usr/java/$JDKDIR/man/man1/rmid.1.gz \
--slave /usr/bin/rmiregistry rmiregistry /usr/java/$JDKDIR/jre/bin/rmiregistry \
--slave /usr/share/man/man1/rmiregistry.1.gz rmiregistry.1.gz /usr/java/$JDKDIR/man/man1/rmiregistry.1.gz \
--slave /usr/bin/servertool servertool /usr/java/$JDKDIR/jre/bin/servertool \
--slave /usr/share/man/man1/servertool.1.gz servertool.1.gz /usr/java/$JDKDIR/man/man1/servertool.1.gz \
--slave /usr/bin/tnameserv tnameserv /usr/java/$JDKDIR/jre/bin/tnameserv \
--slave /usr/share/man/man1/tnameserv.1.gz tnameserv.1.gz /usr/java/$JDKDIR/man/man1/tnameserv.1.gz

# Añadiendo alternative Web browser plug-in
sudo /usr/sbin/update-alternatives --install /usr/lib64/browser-plugins/javaplugin.so javaplugin /usr/java/$JDKDIR/jre/lib/amd64/libnpjp2.so 3 \
--slave /usr/bin/javaws javaws /usr/java/$JDKDIR/jre/bin/javaws \
--slave /usr/share/man/man1/javaws.1.gz javaws.1.gz /usr/java/$JDKDIR/man/man1/javaws.1.gz

# El usuario puede seleccionar ahora que JAVA, JDK y plugin de JAVA a usar ...
sudo /usr/sbin/update-alternatives --config java
sudo /usr/sbin/update-alternatives --config javac
sudo /usr/sbin/update-alternatives --config javaplugin


Suponiendo que hemos grabado el fichero script también en "/tmp" desde una consola ejecutamos el script con la sentencia :

tuUsuario@tuHostName:/tmp> sh instalaOracleJDK8

Nos pedirá la clave de root, y ejecutará lo necesario para configurar el JDK 8 de Oracle en nuestra máquina. Al final nos saldrá un menú para que elijamos las opciones de Java, el JDK y el plugin del navegador Firefox (Chromium se configura aparte, si tengo tiempo y ganas lo explicaré en otro artículo). Nos fijaremos en las rutas y seleccionaremos la de Oracle. Os adjunto una captura de la salida del script con la opción seleccionada en rojo:

There are 3 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                       Priority   Status
------------------------------------------------------------
  0            /usr/lib64/jvm/jre-1.7.0-openjdk/bin/java   17147     auto mode
  1            /usr/java/jdk1.8.0_11/jre/bin/java          3         manual mode
* 2            /usr/lib64/jdk7_Oracle/bin/java             3         manual mode
  3            /usr/lib64/jvm/jre-1.7.0-openjdk/bin/java   17147     manual mode

Press enter to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/java/jdk1.8.0_11/jre/bin/java to provide /usr/bin/java (java) in manual mode
update-alternatives: warning: skip creation of /usr/lib64/jvm-exports/jre because associated file /usr/lib64/jvm-exports/jdk_Oracle (of link group java) doesn't exist
There are 3 choices for the alternative javac (providing /usr/bin/javac).

  Selection    Path                                         Priority   Status
------------------------------------------------------------
  0            /usr/lib64/jvm/java-1.7.0-openjdk/bin/javac   17147     auto mode
  1            /usr/java/jdk1.8.0_11/bin/javac               3         manual mode
* 2            /usr/lib64/jdk7_Oracle/bin/javac              3         manual mode
  3            /usr/lib64/jvm/java-1.7.0-openjdk/bin/javac   17147     manual mode

Press enter to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/java/jdk1.8.0_11/bin/javac to provide /usr/bin/javac (javac) in manual mode
There are 3 choices for the alternative javaplugin (providing /usr/lib64/browser-plugins/javaplugin.so).

  Selection    Path                                              Priority   Status
------------------------------------------------------------
  0            /usr/lib64/IcedTeaPlugin.so                        17106     auto mode
  1            /usr/java/jdk1.8.0_11/jre/lib/amd64/libnpjp2.so    3         manual mode
  2            /usr/lib64/IcedTeaPlugin.so                        17106     manual mode
* 3            /usr/lib64/jdk7_Oracle/jre/lib/amd64/libnpjp2.so   3         manual mode

Press enter to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/java/jdk1.8.0_11/jre/lib/amd64/libnpjp2.so to provide /usr/lib64/browser-plugins/javaplugin.so (javaplugin) in manual mode



Espero que os sirva de ayuda.

NOTA: Me he basado en la ayuda del wiki de OpenSUSE en la dirección :

http://en.opensuse.org/SDB:Installing_Java#Procedure_with_development_environment_included_.28JDK.29

Corrigiendo ciertos "errorcillos" en el procedimiento... ;-)