Cambiar las preferencias de Java en Red Hat/CentOS

En Linux es posible tener múltiples versiones de un mismo programa instalados al mismo tiempo. Aunque obviamente solo una versión puede ser la versión por defecto. En líneas generales estas preferencias se almacenan como enlaces simbólicos en /etc/alternatives, y se gestionan a través del comando alternatives el cual permite añadir y eliminar versiones de un software así como configurar la versión por defecto.

En esta entrada se verá como usar el comando alternatives para añadir una nueva versión de Java al sistema y como cambiar la versión de Java por defecto del sistema por la nueva versión añadida.

Listar las versiones disponibles

1
alternatives --display <nombre>

Ejemplo, listar las versiones de java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
[root@atlassian_node5 /]# alternatives --display java
java - status is auto.
link currently points to /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
/usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java - priority 170111
slave keytool: /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/keytool
slave orbd: /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/orbd
slave pack200: /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/pack200
slave rmid: /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/rmid
slave rmiregistry: /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/rmiregistry
slave servertool: /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/servertool
slave tnameserv: /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/tnameserv
slave unpack200: /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/unpack200
slave jre_exports: /usr/lib/jvm-exports/jre-1.7.0-openjdk.x86_64
slave jre: /usr/lib/jvm/jre-1.7.0-openjdk.x86_64
slave java.1.gz: /usr/share/man/man1/java-java-1.7.0-openjdk.1.gz
slave keytool.1.gz: /usr/share/man/man1/keytool-java-1.7.0-openjdk.1.gz
slave orbd.1.gz: /usr/share/man/man1/orbd-java-1.7.0-openjdk.1.gz
slave pack200.1.gz: /usr/share/man/man1/pack200-java-1.7.0-openjdk.1.gz
slave rmid.1.gz: /usr/share/man/man1/rmid-java-1.7.0-openjdk.1.gz
slave rmiregistry.1.gz: /usr/share/man/man1/rmiregistry-java-1.7.0-openjdk.1.gz
slave servertool.1.gz: /usr/share/man/man1/servertool-java-1.7.0-openjdk.1.gz
slave tnameserv.1.gz: /usr/share/man/man1/tnameserv-java-1.7.0-openjdk.1.gz
slave unpack200.1.gz: /usr/share/man/man1/unpack200-java-1.7.0-openjdk.1.gz
/usr/lib/jvm/jre-1.5.0-gcj/bin/java - priority 1500
slave keytool: /usr/lib/jvm/jre-1.5.0-gcj/bin/keytool
slave orbd: (null)
slave pack200: (null)
slave rmid: (null)
slave rmiregistry: /usr/lib/jvm/jre-1.5.0-gcj/bin/rmiregistry
slave servertool: (null)
slave tnameserv: (null)
slave unpack200: (null)
slave jre_exports: /usr/lib/jvm-exports/jre-1.5.0-gcj
slave jre: /usr/lib/jvm/jre-1.5.0-gcj
slave java.1.gz: (null)
slave keytool.1.gz: (null)
slave orbd.1.gz: (null)
slave pack200.1.gz: (null)
slave rmid.1.gz: (null)
slave rmiregistry.1.gz: (null)
slave servertool.1.gz: (null)
slave tnameserv.1.gz: (null)
slave unpack200.1.gz: (null)
Current `best' version is /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java.

Añadir una nueva versión de software

1
alternatives --install <link> <nombre> <ejecutable> <prioridad>

Ejemplo, añadir una nueva versión de java cuyo ejecutable se localiza en /apps/java/bin/java así como todo el software accesorio (javaws, policytool, keytool…):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@atlassian_node5 /]# NEW_JAVA_PATH=/apps/java
[root@atlassian_node5 /]# alternatives --install /usr/bin/java java $NEW_JAVA_PATH/bin/java 120 \
--slave /usr/bin/javaws javaws $NEW_JAVA_PATH/bin/javaws \
--slave /usr/bin/policytool policytool $NEW_JAVA_PATH/bin/policytool \
--slave /usr/bin/keytool keytool $NEW_JAVA_PATH/bin/keytool \
--slave /usr/bin/orbd orbd $NEW_JAVA_PATH/bin/orbd \
--slave /usr/bin/pack200 pack200 $NEW_JAVA_PATH/bin/pack200 \
--slave /usr/bin/rmid rmid $NEW_JAVA_PATH/bin/rmid \
--slave /usr/bin/rmiregistry rmiregistry $NEW_JAVA_PATH/bin/rmiregistry \
--slave /usr/bin/servertool servertool $NEW_JAVA_PATH/bin/servertool \
--slave /usr/bin/tnameserv tnameserv $NEW_JAVA_PATH/bin/tnameserv \
--slave /usr/bin/unpack200 unpack200 $NEW_JAVA_PATH/bin/unpack200 \
--slave /usr/lib/jvm/jre jre $NEW_JAVA_PATH/ \
--slave /usr/lib/jvm-exports/jre jre_exports $NEW_JAVA_PATH/

Eliminar una versión software:

1
alternative --remove <nombre> <ejecutable>

Ejemplo, eliminar la versión de java cuyo ejecutable se localiza en /apps/java/bin/java:

1
alternatives --remove java /usr/lib/jvm/jre-1.5.0-gcj/bin/java

Cambiar la versión por defecto

1
alternatives --set <nombre> <ejecutable>

Ejemplo, configurar como opción por defecto de java la versión localizada en /apps/java/bin/java:

1
2
3
[root@atlassian_node5 /]# alternatives --set java /apps/java/bin/java
[root@atlassian_node5 /]# alternatives --display java|grep "point"
link currently points to /apps/java/bin/java

Entradas de interés

Contenidos
  1. 1. Listar las versiones disponibles
  2. 2. Añadir una nueva versión de software
  3. 3. Eliminar una versión software:
  4. 4. Cambiar la versión por defecto