web-dev-qa-db-ja.com

スクリプトでOracle Javaをダウンロードしてインストールする方法は?

人気のある WebUpd8 Team PPA は更新されていません。

8u45などの古いバージョンがまだあります。

OracleサイトからJDKを手動でダウンロードし、置き換えました。

Oracle Java最新バージョンを自動的に確認し、更新されている場合はダウンロードする方法はありますか?

主な問題はダウンロードすることです。 Oracle-Java8-installerスクリプトを見て、ダウンロードする奇妙なリンクを見つけました。

Tarballは、ライセンスに同意しないとOracleサイトから直接ダウンロードできません。インストーラーもチェックしました。しかし、コマンドラインからライセンスを受け入れる方法がわかりません。

このスクリプトは、cronに追加できます。

PPAが更新されない場合、またはこのような遅延がある場合に備えて。

4
Pilot6

@ A.Bに基づいたスクリプトを次に示します。回答。

このスクリプトは、Oracle Java 8 64ビットをインストールします。実行するたびに、バージョンをチェックし、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
Pilot6

このスクリプトは、 WebUpd8 PPA と連動します。したがって、最初にPPAによってJavaをインストールしてください。

PPAに新しいバージョンがある場合、これはパッケージマネージャーを介してインストールされます。それまでの間、スクリプトは新しいバージョンをインストールできます。OracleWebサイトには新しいバージョンがあります。


いくつかの考慮事項

wgetからバージョンをダウンロードします。例:

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

linux-x64およびtar.gz)でURLを取得します

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')

オールインワン

forOracle 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.gzgrep -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
A.B.

これにより、現在実行中のカーネルアーキテクチャの最新のOracle Javaバージョンが自動的にダウンロードされますが、現在のところインストール部分がありません(注:私がチェックした例では実際の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バージョンを https://www.Java.com/en/download/manual.jsp でダウンロード可能な最新のJavaバージョンと照合します。
  • ユーザーが新しいバージョンをダウンロードするかどうかを決定できます

警告:

  • 現在のところ、Oracle Javaの単一インストールを想定しています
  • スクリプトは、 https://www.Java.com/en/download/manual.jsp ;のページの現在の構造に依存しています。 Oracle側のページの構造を更新すると、破損する可能性があります。
  • このスクリプトは、最新バージョンを拡張するために、ダウンロード可能な最新バージョンのファイル名に依存しています。たとえば、jre-8u51-linux-x64.tar.gzという名前のダウンロード可能な最新の64ビットバージョンは、Java 8 Update 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
kos