最新のJDKのrpmをコマンドで取得し、yum installする。手動でダウンロードせず、JDKの更新がスクリプトで実施可能になる。
$ SITE=http://www.oracle.com $ URL=${SITE}$(curl -s $SITE/technetwork/java/javase/downloads/index.html | egrep -m1 -o "/technetwork/java/javase/downloads/jdk.+-downloads-[0-9]+\.html") $ DOWNLOAD_URL=$(curl -s "$URL" | egrep -o "http://download\.oracle\.com/otn-pub/java/jdk/.*x64\.rpm") $ FNAME=$(basename $DOWNLOAD_URL) $ wget -q --no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-cookie" $DOWNLOAD_URL -O $FNAME
$URL
は以下のような文字列になる。
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
JDKダウンロード先のhtmlファイルがJDKのversionによってバラバラになるので、Java SEのダウンロードのトップページであるhttp://www.oracle.com/technetwork/java/javase/downloads/index.htmlにcurlでアクセスし、最新のJDKのダウンロード先URLをegrepで取得している。
このURLは、rpmやtar.gz、exeなどプラットフォーム別のJDKファイルがダウンロードできるページを指している。curlでアクセスし、x64.rpmで終わる文字列をegrepで取得して$DOWNLOAD_URL
に格納すると、$DOWNLOAD_URL
は以下のような文字列になる。
http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.rpm
実際のダウンロード画面では”Accept License Agreement”のラジオボタンにチェックを入れないとダウンロードできないが、Cookieに規定の文字列を入れることでチェックを入れたのと同じになるため、wgetの–headerでCookieを指定し、$DOWNLOAD_URL
にwgetでアクセスしてrpmをダウンロードしている。
最新のJDKをダウンロードした時のファイル名を取得したければ、$DOWNLOAD_URL
の最後を見ればいい。${変数名##パターン}
で変数展開に前方一致でのマッチ部分削除(最長マッチ)を適用する、あるいはbasename
コマンドで取得できる。basenameの方が簡単。
$ echo ${DOWNLOAD_URL##*/} jdk-8u144-linux-x64.rpm $ basename $DOWNLOAD_URL jdk-8u144-linux-x64.rpm
wgetの-O
オプションでファイル名を指定しなくてもダウンロードできるが、複数回wgetしたときに-O
オプションがないと、ダウンロードしたファイルが.1
のようにサフィックス付きで保存されてしまう。最終的にyum installする際にファイル名が必要になるので、先にファイル名を取得して-O
オプションに設定するのがいい。
最後にyum installする。
# rpmファイルは以下に保存するとする。 $ mv $FNAME /usr/local/src/ $ sudo yum -y install /usr/local/src/$FNAME $ java -version
今回はJREではなくJDKで、x64のrpmを前提として実行した。
egrepでURLを検索する箇所でjdk
の代わりにjre
あるいはserver-jre
と指定すればJREが取得できる。
jreの場合はそのままrpmが取得できるが、server-jreの方はrpmがないので、DOWNLOAD_URLを検索する箇所でx64\.rpm
の代わりにlinux-x64\.tar\.gz
を指定するなどして、目的のDOWNLOAD_URLを取得する必要がある。
Copyright © 2017 システム開発メモ All Rights Reserved.