web-dev-qa-db-fra.com

Comment télécharger et installer Oracle Java à l'aide d'un script?

Le populaire WebUpd8 Team PPA n'est pas mis à jour.

Il a toujours des versions obsolètes comme 8u45.

J'ai téléchargé manuellement JDK à partir du site Oracle et l'ai remplacé.

Existe-t-il un moyen de vérifier automatiquement la version la plus récente d’Oracle Java et de la télécharger, si elle a été mise à jour?

Je vois que le problème principal est de le télécharger. J'ai regardé dans les scripts Oracle-Java8-installer et trouvé des liens étranges à partir desquels ils le téléchargent.

Le tarball ne peut pas être téléchargé directement à partir du site Oracle sans accepter de licence. L'installateur a également vérifié cela. Mais je ne comprends pas vraiment comment accepter la licence en ligne de commande.

Ce script pourrait être ajouté à cron.

Juste au cas où le PPA n'est jamais mis à jour, ou s'il y a des retards comme celui-ci.

4
Pilot6

Voici le script basé sur @ A.B. répondre.

Ce script installe Oracle Java 8 64 bits. À chaque exécution, il vérifie la version et met à jour Java vers la dernière version disponible.

Il peut être placé sur cron.daily ou cron.weekly, pour vérifier les mises à jour.

#!/bin/sh

J_INSTALL_DIR=/usr/lib/jvm/Java-8-Oracle

URL=$(curl -s http://www.Oracle.com/technetwork/Java/javase/downloads/jdk8-downloads-2133151.html | \
    awk "/downloads\['/ && ! /demos/ && /\['files'\]/ && /linux-x64/ && /\.tar\.gz/" | \
    grep -o 'http.*\.tar\.gz') 

AVAILABLE=$(echo $URL | grep -o -P 'jdk-8u.{0,2}' | cut -d "u" -f 2)
CURRENT=$("$J_INSTALL_DIR"/bin/Java -version 2>&1 | awk '/version/ {print $3}' | cut -d_ -f 2 | tr -d '"')

if [ -z $CURRENT ] || [ $AVAILABLE -gt $CURRENT ]; then
    cd /var/cache/Oracle-jdk8-installer
    rm -f jdk-8u"$CURRENT"-linux-x64.tar.gz
    wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" $URL
    tar -xzf jdk-8u"$AVAILABLE"-linux-x64.tar.gz
    rm -rf $J_INSTALL_DIR
    mv jdk1.8.0_"$AVAILABLE"/ $J_INSTALL_DIR

    LATEST=$(LANG=C update-alternatives --display Java | grep ^/ | sed -e 's/.* //g' | sort -n | tail -1)
    if [ -z $LATEST ]; then
        LATEST=1
    else
        J_PATH=$(LANG=C update-alternatives --display Java | grep "priority "$LATEST"" | awk '{print $1}')
        [ $J_PATH = "$J_INSTALL_DIR"/jre/bin/Java ] || LATEST=$((LATEST+1))
    fi  

    #link JRE files
    for f in $J_INSTALL_DIR/jre/bin/*; do
        name=`basename $f`;
        if [ ! -f "/usr/bin/$name" -o -L "/usr/bin/$name" ]; then  #some files, like jvisualvm might not be links
            if [ -f "$J_INSTALL_DIR/man/man1/$name.1.gz" ]; then

                update-alternatives --install /usr/bin/$name $name $J_INSTALL_DIR/jre/bin/$name $LATEST --slave /usr/share/man/man1/$name.1.gz $name.1.gz $J_INSTALL_DIR/man/man1/$name.1.gz
            fi
        else     
                update-alternatives --install /usr/bin/$name $name $J_INSTALL_DIR/jre/bin/$name $LATEST

        fi
    done

    echo "Oracle Java 8 installed"

fi

if [ $AVAILABLE -eq $CURRENT ]; then
    echo "Java is up to date"
fi

Pour le tester maintenant, vous pouvez définir CURRENT=45 dans le script.

Mais quelques améliorations mineures peuvent être apportées, comme fontconfig.

Le script peut être téléchargé à partir de github aussi.

Les demandes de tirage et les plaintes sont les bienvenues.

0
Pilot6

Le script fonctionne en conjonction avec WebUpd8 PPA . Par conséquent, installez d'abord Java par le PPA.

S'il existe une nouvelle version dans le PPA, celle-ci est installée via le gestionnaire de packages. En attendant, le script peut installer une version plus récente. Il existe une nouvelle version sur le site Web Oracle.


Quelques considérations

Téléchargez une version via wget, par exemple:

wget --no-cookies --header \
    "Cookie: oraclelicense=accept-securebackup-cookie" \
    $URL

Obtenir l'URL avec (pour linux-x64 et tar.gz)

URL=$(curl -s http://www.Oracle.com/technetwork/Java/javase/downloads/jdk8-downloads-2133151.html | \
    awk "/downloads\['/ && ! /demos/ && /\['files'\]/ && /linux-x64/ && /\.tar\.gz/" | \
    grep -o 'http.*\.tar\.gz')

Tout en un

pour Oracle Java 8 via l'URL http://www.Oracle.com/technetwork/Java/javase/downloads/jdk8-downloads-2133151.html

wget --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" \
    $(curl -s http://www.Oracle.com/technetwork/Java/javase/downloads/jdk8-downloads-2133151.html | \
        awk "/downloads\['/ && ! /demos/ && /\['files'\]/ && /linux-x64/ && /\.tar\.gz/" | \
        grep -o 'http.*\.tar\.gz'\
    )

Explication

  • /downloads\['/ - Nous avons besoin de la zone downloads

  • /\['files'\]/ - Nous avons besoin de la zone files

  • /linux-x64/ - L'architecture cible

    que vous pourriez adapter.

  • /\.tar\.gz/ - Le format du fichier

    que vous pourriez adapter.

    Si vous faites cela, n'oubliez pas le tar.gz dans grep -o 'http.*\.tar\.gz'

  • ! /demos/ - Pas de démos


Le script pour Oracle Java 8, x64, tar.gz

#!/bin/bash
major_version="8"
target="/usr/lib/jvm/Java-8-Oracle"
Arch="linux-x64"

# This URL is for the major version 8.
download_page="http://www.Oracle.com/technetwork/Java/javase/downloads/jdk8-downloads-2133151.html"

download_url=$(curl -s "$download_page" | \
        awk "/downloads\['/ && ! /demos/ && /\['files'\]/ && /$Arch/ && /\.tar\.gz/" | \
        grep -o 'http.*\.tar\.gz')

server=$(awk -Fjdk-"$major_version"u '{split($2,a,/-/); print a[1]}' <<< "$download_url")
local=$("$target"/bin/Java -version 2>&1 | awk -F_ '/Java version/ {gsub(/"/,""); print $2}')

[ "$local" == "" ] && local=0

filename=$(awk -F'\/' '{print $NF}' <<< "$download_url")

[ "$server" -gt "$local" ] && wget -q -P "/tmp" --no-cookies --show-progress --header \
    "Cookie: oraclelicense=accept-securebackup-cookie" \
    "$download_url" 

if [ -f "$filename" ]; then
    mkdir -p "$target"
    tar -xf "$filename" --strip 1 -C "$target"
fi

exit 0

Utile

Répertoriez toutes les architectures et formats de fichiers avec cette commande:

curl -s http://www.Oracle.com/technetwork/Java/javase/downloads/jdk8-downloads-2133151.html | \
        awk "/downloads\['/ && ! /demos/ && /\['files'\]\['jdk/"

Exemple de sortie

downloads['jdk-8u51-oth-JPR']['files']['jdk-8u51-linux-i586.rpm'] = { "title":"Linux x86", "size":"146.9 MB","filepath":"http://download.Oracle.com/otn-pub/Java/jdk/8u51-b16/jdk-8u51-linux-i586.rpm"};
downloads['jdk-8u51-oth-JPR']['files']['jdk-8u51-linux-i586.tar.gz'] = { "title":"Linux x86", "size":"166.95 MB","filepath":"http://download.Oracle.com/otn-pub/Java/jdk/8u51-b16/jdk-8u51-linux-i586.tar.gz"};
downloads['jdk-8u51-oth-JPR']['files']['jdk-8u51-linux-x64.rpm'] = { "title":"Linux x64", "size":"145.19 MB","filepath":"http://download.Oracle.com/otn-pub/Java/jdk/8u51-b16/jdk-8u51-linux-x64.rpm"};
downloads['jdk-8u51-oth-JPR']['files']['jdk-8u51-linux-x64.tar.gz'] = { "title":"Linux x64", "size":"165.25 MB","filepath":"http://download.Oracle.com/otn-pub/Java/jdk/8u51-b16/jdk-8u51-linux-x64.tar.gz"};
downloads['jdk-8u51-oth-JPR']['files']['jdk-8u51-macosx-x64.dmg'] = { "title":"Mac OS X x64", "size":"222.09 MB","filepath":"http://download.Oracle.com/otn-pub/Java/jdk/8u51-b16/jdk-8u51-macosx-x64.dmg"};
downloads['jdk-8u51-oth-JPR']['files']['jdk-8u51-solaris-sparcv9.tar.Z'] = { "title":"Solaris SPARC 64-bit (SVR4 package)", "size":"139.36 MB","filepath":"http://download.Oracle.com/otn-pub/Java/jdk/8u51-b16/jdk-8u51-solaris-sparcv9.tar.Z"};
downloads['jdk-8u51-oth-JPR']['files']['jdk-8u51-solaris-sparcv9.tar.gz'] = { "title":"Solaris SPARC 64-bit", "size":"98.8 MB","filepath":"http://download.Oracle.com/otn-pub/Java/jdk/8u51-b16/jdk-8u51-solaris-sparcv9.tar.gz"};
downloads['jdk-8u51-oth-JPR']['files']['jdk-8u51-solaris-x64.tar.Z'] = { "title":"Solaris x64 (SVR4 package)", "size":"139.79 MB","filepath":"http://download.Oracle.com/otn-pub/Java/jdk/8u51-b16/jdk-8u51-solaris-x64.tar.Z"};
downloads['jdk-8u51-oth-JPR']['files']['jdk-8u51-solaris-x64.tar.gz'] = { "title":"Solaris x64", "size":"96.45 MB","filepath":"http://download.Oracle.com/otn-pub/Java/jdk/8u51-b16/jdk-8u51-solaris-x64.tar.gz"};
downloads['jdk-8u51-oth-JPR']['files']['jdk-8u51-windows-i586.exe'] = { "title":"Windows x86", "size":"176.02 MB","filepath":"http://download.Oracle.com/otn-pub/Java/jdk/8u51-b16/jdk-8u51-windows-i586.exe"};
downloads['jdk-8u51-oth-JPR']['files']['jdk-8u51-windows-x64.exe'] = { "title":"Windows x64", "size":"180.51 MB","filepath":"http://download.Oracle.com/otn-pub/Java/jdk/8u51-b16/jdk-8u51-windows-x64.exe"};
7
A.B.

Cela téléchargera automatiquement la dernière version d'Oracle Java pour l'architecture du noyau en cours d'exécution, mais la partie d'installation manque (pour le moment) ( note: dans les exemples que j'ai vérifiés la version actuelle de Java par rapport à un fichier texte personnalisé afin d'usurper la version actuelle de Java )

JavaUpdater.sh

#!/bin/bash
echo 'Checking for a new Java Version...'
kern_Arch=$(uname -r | sed 's/.*-\(.*\)/\1/')
if [ "$kern_Arch" = AMD64 ]; then
    Java_ver=' x64'
fi
current_version=$(Java -version 2>&1 >/dev/null | sed -n '1s/.*"\([^"]*\)"/\1/p')
latest_version_url=$(curl https://www.Java.com/en/download/manual.jsp 2>/dev/null | grep -Po -m 1 "href=\"\K[^\"]*(?=.*Linux${Java_ver} en JRE)"
)
latest_version=$(curl $latest_version_url 2>/dev/null | sed -n 's/.*File=jre-\([0-9]\)u\([0-9]\{2\}\).*/1.\1.0_\2/p')
if [ "$current_version" = "$latest_version" ]; then
    echo 'No new Java version available. Aborting.'
    exit 1
fi
read -n 1 -p "A new Java version is available (${latest_version})! Would you like to download it (y)? " download
echo
if [ "$download" = y ]; then
    filename="$(curl "$latest_version_url" 2> /dev/null | sed -n 's/.*File=\([^&]*\).*/\1/p')"
    wget -q -O "$filename" --show-progress "$latest_version_url"
    echo 'Download completed.'
    exit 0
fi
exit 1
  • Vérifie l'architecture du noyau en cours d'exécution afin de choisir quelle version de Java vérifier les mises à jour et éventuellement la télécharger
  • Vérifie la version actuelle de Java par rapport à la dernière version de Java disponible au téléchargement sur https://www.Java.com/fr/download/manual.jsp
  • Permet à l'utilisateur de décider s'il souhaite télécharger une nouvelle version ou non

Mises en garde:

  • A partir de maintenant, cela suppose une seule installation d'Oracle Java
  • Le script s'appuie sur la structure actuelle de la page à l'adresse https://www.Java.com/en/download/manual.jsp ; une mise à jour de la structure de la page du côté d'Oracle pourrait la casser;
  • Le script s'appuie sur le nom de fichier de la dernière version disponible au téléchargement afin d'extabiliser la dernière version; par exemple, la dernière version 64 bits disponible au téléchargement, nommée jre-8u51-linux-x64.tar.gz, sera interprétée comme Java 8 Update 51 (en termes de Java versions, 1.8.0_51);
user@debian ~/tmp/JavaDownloader
 % tree
.
├── current_version.txt
└── JavaUpdater.sh

0 directories, 2 files
user@debian ~/tmp/JavaDownloader
 % cat current_version.txt 
Java version "1.8.0_50"
Java(TM) SE Runtime Environment (build 1.8.0_50-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.50-b03, mixed mode)
user@debian ~/tmp/JavaDownloader
 % bash JavaUpdater.sh 
Checking for a new Java Version...
A new Java version is available (1.8.0_51)! Would you like to download it (y)? y
jre-8u51-linux-x64. 100%[=====================>]  60.90M  1.21MB/s   in 51s    
Download completed.
user@debian ~/tmp/JavaDownloader
 % tree
.
├── current_version.txt
├── JavaUpdater.sh
└── jre-8u51-linux-x64.tar.gz

0 directories, 3 files
user@debian ~/tmp/JavaDownloader
 % tree
.
├── current_version.txt
├── JavaUpdater.sh
└── jre-8u51-linux-x64.tar.gz

0 directories, 3 files
user@debian ~/tmp/JavaDownloader
 % cat current_version.txt 
Java version "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)
user@debian ~/tmp/JavaDownloader
 % bash JavaUpdater.sh 
Checking for a new Java Version...
No new Java version available. Aborting.
user@debian ~/tmp/JavaDownloader
 % tree
.
├── current_version.txt
├── JavaUpdater.sh
└── jre-8u51-linux-x64.tar.gz

0 directories, 3 files
0
kos