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

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

У нее все еще устаревшие версии, такие как 8u45.

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

Есть ли способ автоматически проверить последнюю версию Oracle java и загрузить ее, если она была обновлена?

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

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

Этот скрипт может быть добавлен в cron.

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

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

2 ответа

Скрипт работает совместно с PPU WebUpd8. Поэтому сначала установите 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'\
    )

Oracle Java 8

/downloads\['/ - Мы нужна область downloads /\['files'\]/. Нам нужна область files /linux-x64/ - целевая архитектура, которую вы могли бы адаптировать. /\.tar\.gz/ - Формат файла, который вы могли бы адаптировать. Если вы это сделаете, не забудьте tar.gz в grep -o 'http.*\.tar\.gz' ! /demos/ - No demos

Сценарий для Oracle Java 8, x64, tar.gz [ ! d31]
#!/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"};
6
ответ дан 23 May 2018 в 18:51
  • 1
    Спасибо. Следующая реальная проблема заключается в том, как угадать ссылку на следующую версию. Последний был ...8u45-b14.... Может быть, проверить все `bnn? – Pilot6 26 July 2015 в 13:49
  • 2
    @ Pilot6 Я все еще обдумываю = \ – A.B. 26 July 2015 в 13:53
  • 3
    Это круто! Теперь легко написать скрипт, который проверяет текущую версию Java, сравнивает ее с доступной. При необходимости он загрузит tar и установит. – Pilot6 26 July 2015 в 14:31
  • 4
    Знаешь что? Я не уверен, что ссылка jdk8-downloads-2133151.html останется после обновления версии. – Pilot6 26 July 2015 в 22:43
  • 5
    Таким образом, весь смысл не имеет смысла. Они меняют его каждый раз. Кто-то должен обновить ссылку, как это сделано в ppa. – Pilot6 26 July 2015 в 22:55

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

Предостережения:

Проверяет текущую архитектуру ядра, чтобы выбрать версию Java для проверки обновлений и, в конечном итоге, загрузить . Сценарий основывается на текущей структуре страницы на https://www.java .com / EN / скачать / manual.jsp; обновление структуры страницы на стороне Oracle может сломать ее; Проверяет текущую версию Java на последнюю версию Java, доступную для загрузки по адресу https://www.java.com/en/download/manual.jsp
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
ответ дан 23 May 2018 в 18:51
  • 1
    java -version - плохая идея, если у вас установлено несколько версий Java, а Java по умолчанию не является Oracle Java. – A.B. 26 July 2015 в 18:16
  • 2
    извините, вот идет улыбка :) – A.B. 26 July 2015 в 18:32
  • 3
    @ A.B. Эй, не беспокойтесь;). Да, это предполагает единственную установку Oracle Java, я упомянул об этом в разделе «Предостережения». раздел. – kos 26 July 2015 в 18:42

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

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