Java, Raspberry

Shell script Linux para descargar la última versión de Oracle Java JDK via consola (Raspberry Pi)

¿Quieres saber cómo descargar la última versión del JDK de Java desde la consola de forma automática?

Este artículo lo he escrito a petición de un compañero que necesitaba descargar la última versión disponible del JDK de Oracle en una Raspberry Pi 2 en la que tenía únicamente acceso via consola (sin navegador) en una distribución Raspbian Jessie Lite.

Al tema: no puedes usar el comando «wget» directamente, porque Oracle requiere que «aceptes los términos de licencia» para poder proceder y, además, la página de descarga genera los vínculos a los archivos de forma dinámica.

Por ejemplo, en el momento de escribir este artículo, el link para descargar la última versión de Java JDK 8 para ARM 32 bits es la u141 siendo el link al archivo algo parecido a esto:

http://download.oracle.com/otn/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-arm32-vfp-hflt.tar.gz

Vemos que el link superior contiene un UID («336fa29ff2bb4ef291e347e091f7f4a7» para el caso) obtenido dinámicamente al cargar la página en el navegador.

Así pues, ¿cómo lo hacemos para descargar el JDK usando el comando «wget» si sólo tenemos acceso a la consola?

En primer lugar crea un archivo en cualquier carpeta de tu disco y llámalo -por ejemplo- download_jdk.sh. Para el ejemplo usaremos el editor «nano».

$ nano download_jdk.sh

Ahora, pega el siguiente contenido:

#!/bin/bash

# Puedes cambiar la versión de Java fácilmente
jdk_version=8

# Obtenemos 32 o 64 (bits)
architecture=$(getconf LONG_BIT)

# Dominio principal para la descarga
domain="http://www.oracle.com"

# Página inicial en la que se generan los vínculos de descarga
main_url="$domain/technetwork/java/javase/downloads/index.html"
downloads_page=$(curl -s $main_url | grep -Po "\/technetwork\/java/\javase\/downloads\/jdk${jdk_version}-downloads-.+?\.html" | head -1)

# Expresión regular para obtener el vínculo al archivo que queremos
expression="http\:\/\/download.oracle\.com\/otn-pub\/java\/jdk\/${jdk_version}u[0-9]+\-(.*)+\/jdk-${jdk_version}u[0-9]+(.*)linux-arm${architecture}-vfp-hflt.tar.gz"

# Obtenemos el link
link_to_file=$(curl -s ${domain}${downloads_page} | egrep -o $expression)

# Nombre del archivo de salida (lo borramos si ya existe)
output_file=jdk-$jdk_version.tar.gz
rm -f $output_file

# Descarga del archivo
wget --no-check-certificate \
 --header "Cookie: oraclelicense=accept-securebackup-cookie" \
 --no-cookies \
 -O $output_file \
 $link_to_file

Guarda los cambios (Control+X, Sí/Yes, ENTER).

Ahora ya puedes ejecutar el script directamente con el comando sh (no requiriendo que asignes el atributo +x si no quieres):

$ sh download_jdk.sh

Voilá! Ya tienes tu archivo jdk-8.tar.gz disponible.

Para descomprimirlo puede usar el comando tar:

$ tar -xf jdk-8.tar.gz

Espero te sea de utilidad.

NOTA: Aunque el script está hecho «ad-hoc» para descargar la versión específica para Raspberry (ARM Hard Float) puedes modificarlo fácilmente para que sirva para cualquier otro JDK.
Por ejemplo para descargar la última versión disponible del JDK para Windows de 32 bits:

expression="http\:\/\/download.oracle\.com\/otn-pub\/java\/jdk\/${jdk_version}u[0-9]+\-(.*)+\/jdk-${jdk_version}u[0-9]+(.*)windows-i586.exe"

Y la de 64 bits:

expression="http\:\/\/download.oracle\.com\/otn-pub\/java\/jdk\/${jdk_version}u[0-9]+\-(.*)+\/jdk-${jdk_version}u[0-9]+(.*)windows-x64.exe"

Un comentario en “Shell script Linux para descargar la última versión de Oracle Java JDK via consola (Raspberry Pi)

Deja un comentario