Empaquetando Java de Oracle para Debian

Algo que la gente de Debian ya tiene resuelto en cierta medida y que anoto aquí para futuras referencias.

Debian tiene un paquete con varias herramientas para crear empaquetados de los entornos de Java procedentes de Oracle. La página web del wiki de Debian explica varios casos pero en el fondo lo que hay que hacer es sencillo:

  1. Instalar el paquete java-package.
  2. Descargar el software desde Oracle.
  3. Invocar el programa principal de construcción del paquete con el archivo descargado.
  4. Instalar el paquete resultante.
  5. Configurar el sistema para que lo emplee como java principal si es necesario (que suele serlo).
$ fakeroot make-jpkg ~/jre-8u101-linux-x64.tar.gz 
Creating temporary directory: /tmp/make-jpkg.7gV9f1fIGr
Loading plugins: /usr/share/java-package/common.sh /usr/share/java-package/javase.sh /usr/share/java-package/jdk-doc.sh /usr/share/java-package/jdk.sh /usr/share/java-package/jre.sh /usr/share/java-package/oracle-jdk-doc.sh /usr/share/java-package/oracle-jdk.sh /usr/share/java-package/oracle-jre.sh

Detected Debian build architecture: amd64
Detected Debian GNU type: x86_64-linux-gnu

Detected product:
    Java(TM) Runtime Environment (JRE)
    Standard Edition, Version 8 Update 101
    Oracle(TM)
Is this correct [Y/n]: 
Checking free diskspace: done.

In the next step, the binary file will be extracted. Probably a
license agreement will be displayed. Please read this agreement
carefully. If you do not agree to the displayed license terms, the
package will not be built.

Press [Return] to continue: 
Testing extracted archive... okay.

Create debian package:
dpkg-buildpackage: paquete fuente oracle-java8-jre
dpkg-buildpackage: versión de las fuentes 8u101
dpkg-buildpackage: distribución de las fuentes unstable
dpkg-buildpackage: fuentes modificadas por Debian Java 
...
dpkg-buildpackage: subida sólo de binarios (no se incluye ninguna fuente)
    copy oracle-java8-jre_8u101_amd64.deb into directory /home/victor/tmp/

The Debian package has been created in the current directory.
You can install the package as root with:

    dpkg -i oracle-java8-jre_8u101_amd64.deb


Removing temporary directory: done

Una vez instalado el paquete sólo resta indicar al sistema que emplee dicha versión como la predeterminada en el sistema. Lo habitual es hacerlo con el mecanismo de alternativas del sistema:

~/tmp$ sudo update-alternatives --list java
[sudo] password for victor: 
/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java
/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
/usr/lib/jvm/jre-8-oracle-x64/bin/java
~/tmp$ sudo update-alternatives --config java
Existen 3 opciones para la alternativa java (que provee /usr/bin/java).

  Selección   Ruta                                            Prioridad  Estado
------------------------------------------------------------
  0            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      modo automático
  1            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      modo manual
  2            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      modo manual
* 3            /usr/lib/jvm/jre-8-oracle-x64/bin/java           317       modo manual

Pulse <Intro> para mantener el valor por omisión [*] o pulse un número de selección:

Pero dentro de java-package existe otro útil que agiliza un poco el asunto. Se llama update-java-alternatives:

~/tmp $ sudo update-java-alternatives -l
java-1.6.0-openjdk-amd64 1061 /usr/lib/jvm/java-1.6.0-openjdk-amd64
java-1.7.0-openjdk-amd64 1071 /usr/lib/jvm/java-1.7.0-openjdk-amd64
jre-8-oracle-x64 317 /usr/lib/jvm/jre-8-oracle-x64
~/tmp$ sudo update-java-alternatives -s jre-8-oracle-x64
~/tmp$ 

Así que si conocemos el nombre podemos emplear directamente el parámetro -s y quedará fijado como alternativa predeterminada.