Как загрузить и установить Java Oracle сценарием?

Популярная Команда WebUpd8 PPA не обновляется.

Это имеет все еще устаревшие версии как 8u45.

Я вручную загрузил JDK с сайта Oracle и заменил его.

Существует ли способ автоматически проверить Oracle последняя версия Java и загрузить ее, если это было обновлено?

Я вижу, что основная проблема состоит в том, чтобы загрузить его. Я заглянул oracle-java8-installer сценарии и видят некоторые странные ссылки, с которых они загружают его.

tarball не может быть загружен непосредственно с сайта Oracle, не принимая лицензию. Установщик проверил это также. Но я действительно не совсем добираюсь, как принять лицензию из командной строки.

Этот сценарий мог быть добавлен к крону.

На всякий случай PPA никогда не обновляется, или если существуют задержки как это время.

4
задан 26 July 2015 в 17:58

3 ответа

Вот сценарий на основе @A.B. ответ.

Этот сценарий устанавливает 64-разрядный Oracle java 8. На каждом выполнении это проверяет версию и обновляет Java к последнему доступному.

Это может быть помещено в cron.daily или cron.weekly, для проверки на обновления.

#!/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

Для тестирования его теперь можно установить CURRENT=45 в сценарии.

, Но некоторые незначительные улучшения может быть сделан, как fontconfig.

сценарий может быть загружен от github также.

запросы Получения по запросу и жалобы приветствуются.

0
ответ дан 1 December 2019 в 09:14

Это автоматически загрузит последнюю версию Java Oracle для архитектуры в настоящее время рабочего ядра, однако на данный момент пропускает часть установки ( примечание: в примерах я проверил текущую версию Java по файлу пользовательского текста для спуфинга фактической версии 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
  • Проверки архитектура в настоящее время рабочего ядра для выбора, какую версию Java проверить на обновления и в конечном счете загрузить
  • Проверки текущая версия Java против последней версии Java доступной для скачивания в https://www.java.com/en/download/manual.jsp
  • Позволяет пользователю решить, загрузить ли новую версию или не

Протесты:

  • На данный момент, это принимает единственную установку Oracle Java
  • , сценарий полагается на текущую структуру страницы в https://www.java.com/en/download/manual.jsp; обновление структуры страницы на стороне Oracle могло бы повредить его;
  • сценарий полагается на имя файла последней версии доступной для скачивания чтобы к extabilish последняя версия; например, последняя 64-разрядная версия доступная для скачивания, названный jre-8u51-linux-x64.tar.gz, будет интерпретироваться как Обновление Java 8 51 (с точки зрения версий Java, 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
ответ дан 1 December 2019 в 09:14

Сценарий работает в сочетании с WebUpd8 PPA. Поэтому установите Java PPA сначала.

Если существует новая версия в PPA, то это установлено через диспетчер пакетов. Тем временем сценарий может установить более новую версию, это там - новая версия на веб-сайте Oracle.


Несколько соображений

Загрузите версию через wget, например:

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

Получите URL с (для linux-x64 и 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')

Все в одном

для Oracle Java 8 через 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'\
    )

Объяснение

  • /downloads\['/ – Нам нужно downloads область

  • /\['files'\]/ – Нам нужно files область

  • /linux-x64/ – Целевая архитектура

    То, что Вы могли адаптироваться.

  • /\.tar\.gz/ – Формат файла

    То, что Вы могли адаптироваться.

    Если Вы делаете это, не забывайте tar.gz в grep -o 'http.*\.tar\.gz'

  • ! /demos/ – Никакие демонстрации


Сценарий для 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

Полезный

Перечислите всю архитектуру и форматы файлов с этой командой:

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

Демонстрационный вывод

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
ответ дан 1 December 2019 в 09:14

Другие вопросы по тегам:

Похожие вопросы: