最新のJDKのrpmをコマンドで取得する

2017/07/31

最新のJDKのrpmをコマンドで取得し、yum installする。手動でダウンロードせず、JDKの更新がスクリプトで実施可能になる。

$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の方が簡単。

wgetの-Oオプションでファイル名を指定しなくてもダウンロードできるが、複数回wgetしたときに-Oオプションがないと、ダウンロードしたファイルが.1のようにサフィックス付きで保存されてしまう。最終的にyum installする際にファイル名が必要になるので、先にファイル名を取得して-Oオプションに設定するのがいい。

最後にyum installする。

今回は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を取得する必要がある。

-Java, Linux