[Java] OracleJDKの取得方法が大きく変わりました
こんにちは。こむろ@東京です。
2017/05/23に気づいたのですが、curlやwgetで実行しているOracleJDKの取得でエラーが出るようになっています。先日(2017/05/22)からChefでも同じような現象があることをStackoverflowで確認しました。
わたしが担当しているプロジェクトで、GoldenAMI作成で使用しているAnsibleでOracleJDKのインストールに失敗したため、原因を調査していましたので共有します。自動スクリプトなどでOracleJDKを自動的にインストールしている構成を取っている方は高い確率で失敗すると思われるため、注意が必要です。
AnsibleのJDKインストールで突然の死
AnsibleでOracleJDKのインストールを行っています。2017/05/23突然死しました。
amazon-ebs: TASK *********************************************** amazon-ebs: An exception occurred during task execution. To see the full traceback, use -vvv. The error was: _rpm.error: error reading package header amazon-ebs: fatal: [127.0.0.1]: FAILED! => {"changed": false, "failed": true, "module_stderr": "Traceback (most recent call last):\n File \"/home/ec2-user/.ansible/tmp/ansible-tmp-1495534639.04-67292847979865/yum\", line 3881, in <module>\n main()\n File \"/home/ec2-user/.ansible/tmp/ansible-tmp-1495534639.04-67292847979865/yum\", line 1029, in main\n disablerepo, disable_gpg_check, exclude, repoquery)\n File \"/home/ec2-user/.ansible/tmp/ansible-tmp-1495534639.04-67292847979865/yum\", line 946, in ensure\n res = install(module, pkgs, repoq, yum_basecmd, conf_file, en_repos, dis_repos)\n File \"/home/ec2-user/.ansible/tmp/ansible-tmp-1495534639.04-67292847979865/yum\", line 550, in install\n nvra = local_nvra(module, spec)\n File \"/home/ec2-user/.ansible/tmp/ansible-tmp-1495534639.04-67292847979865/yum\", line 467, in local_nvra\n header = ts.hdrFromFdno(fd)\n File \"/usr/lib64/python2.7/dist-packages/rpm/transaction.py\", line 160, in hdrFromFdno\n raise rpm.error(\"error reading package header\")\n_rpm.error: error reading package header\n", "module_stdout": "", "msg": "MODULE FAILURE", "parsed": false}
調査してみると、どうやら利用しようとしていたOracleJDK(8u45)のRPMのダウンロードに失敗しているようです。元々このプロジェクト開始の時点で採用していた jdk-8u45-linux-x64.rpm
を利用していました。過去利用できていたダウンロードリンクは以下のとおりです。
http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm
過去のOracleJDKの取得
基本的にOracleJDKの取得にはライセンスへのAgreementが必要です。しかし、インストールスクリプトなどを利用して自動的に構築したい場合は、そういったチェックボックスなどを操作することができません。 そこでCookieを付与して取得することができていたようです。
wget --no-check-certificate --no-cookies \ --header "Cookie: oraclelicense=accept-securebackup-cookie" \ http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm
こちらのコマンドは現在利用できません。
そもそもURLが変更されてる
アーカイブのURLが変更されているため、既存のURLでアクセスしようとすると404が返却されます。
$ wget --no-check-certificate --no-cookies \ > --header "Cookie: oraclelicense=accept-securebackup-cookie" \ > http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm --2017-05-24 09:24:23-- http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm Resolving download.oracle.com... 110.232.152.75, 110.232.152.81 Connecting to download.oracle.com|110.232.152.75|:80... connected. HTTP request sent, awaiting response... 302 Moved Temporarily Location: https://edelivery.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm [following] --2017-05-24 09:24:23-- https://edelivery.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm Resolving edelivery.oracle.com... 23.66.100.58, 2600:1417:5d:2b0::2d3e, 2600:1417:5d:295::2d3e Connecting to edelivery.oracle.com|23.66.100.58|:443... connected. HTTP request sent, awaiting response... 302 Moved Temporarily Location: http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm?AuthParam=1495585584_afcbca2c9a9ca13b3df3aa80b48ab394 [following] --2017-05-24 09:24:24-- http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm?AuthParam=1495585584_afcbca2c9a9ca13b3df3aa80b48ab394 Connecting to download.oracle.com|110.232.152.75|:80... connected. HTTP request sent, awaiting response... 404 Not Found 2017-05-24 09:24:25 ERROR 404: Not Found.
最終的に 404 Not Found が返却されています。様々な情報を確認したところ、アーカイブのURLが変更されているようです。 *1 http://download.oracle.com/otn/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm
が正しいURLです。 -pub
が削除されています。
Authorization Failed
URLを修正して再度実行します。
$ wget --no-check-certificate --no-cookies \ --header "Cookie: oraclelicense=accept-securebackup-cookie" \ http://download.oracle.com/otn/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm
実行結果は以下の通りです。
$ wget --no-check-certificate --no-cookies \ > --header "Cookie: oraclelicense=accept-securebackup-cookie" \ > http://download.oracle.com/otn/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm --2017-05-24 09:26:02-- http://download.oracle.com/otn/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm Resolving download.oracle.com... 110.232.152.75, 110.232.152.81 Connecting to download.oracle.com|110.232.152.75|:80... connected. HTTP request sent, awaiting response... 302 Moved Temporarily Location: https://edelivery.oracle.com/akam/otn/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm [following] --2017-05-24 09:26:03-- https://edelivery.oracle.com/akam/otn/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm Resolving edelivery.oracle.com... 23.66.100.58, 2600:1417:5d:295::2d3e, 2600:1417:5d:2b0::2d3e Connecting to edelivery.oracle.com|23.66.100.58|:443... connected. HTTP request sent, awaiting response... 302 Moved Temporarily Location: https://login.oracle.com/pls/orasso/orasso.wwsso_app_admin.ls_login?Site2pstoreToken=v1.2~CA55CD32~B3D651F6BB6C170709D0AFCD31FE320E32286E72462C28E377BBDCD417911576AFFEE4309C5F0FEA530BD64F33E414045D348BFF8B80D6C036DE28683DABF16E8DDCEBA5BF514015980E4ECE71742BCD80E7508EE23E35A08B475AD57773EDFE9AA2CE437B1F716FEED1C960FBEAD2F4320EAE63A209071FD46170C4B6ECF48FB2FF8F4E7DE1A60411DCBD181414754F1C363FBF53CF80D89B8E5EFC33ED1B5763CDB6DD3FDE18512C06FF5F5F5AC9458446CA7972408C405330777E6EEA4FB14BD228B61647638584C239D5A39CAA37E8D472143FB3EBA55B848E65FAD067BDCAE05FC2F5B8F60190E787CB6DEC009E [following] --2017-05-24 09:26:03-- https://login.oracle.com/pls/orasso/orasso.wwsso_app_admin.ls_login?Site2pstoreToken=v1.2~CA55CD32~B3D651F6BB6C170709D0AFCD31FE320E32286E72462C28E377BBDCD417911576AFFEE4309C5F0FEA530BD64F33E414045D348BFF8B80D6C036DE28683DABF16E8DDCEBA5BF514015980E4ECE71742BCD80E7508EE23E35A08B475AD57773EDFE9AA2CE437B1F716FEED1C960FBEAD2F4320EAE63A209071FD46170C4B6ECF48FB2FF8F4E7DE1A60411DCBD181414754F1C363FBF53CF80D89B8E5EFC33ED1B5763CDB6DD3FDE18512C06FF5F5F5AC9458446CA7972408C405330777E6EEA4FB14BD228B61647638584C239D5A39CAA37E8D472143FB3EBA55B848E65FAD067BDCAE05FC2F5B8F60190E787CB6DEC009E Resolving login.oracle.com... 209.17.4.8 Connecting to login.oracle.com|209.17.4.8|:443... connected. HTTP request sent, awaiting response... 401 Authorization Required Username/Password Authentication Failed.
どうやら過去のJDKバージョンのアーカイブには認証が必須になったようです。
最新版を取得してみる
最新版は、 jdk-8u131
です。こちらを同じコマンドでダウンロードしてみます。
$ wget --no-check-certificate --no-cookies \ > --header "Cookie: oraclelicense=accept-securebackup-cookie" \ > http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm --2017-05-24 09:30:40-- http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm Resolving download.oracle.com... 110.232.152.75, 110.232.152.81 Connecting to download.oracle.com|110.232.152.75|:80... connected. HTTP request sent, awaiting response... 302 Moved Temporarily Location: https://edelivery.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm [following] --2017-05-24 09:30:40-- https://edelivery.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm Resolving edelivery.oracle.com... 23.66.100.58, 2600:1417:5d:295::2d3e, 2600:1417:5d:2b0::2d3e Connecting to edelivery.oracle.com|23.66.100.58|:443... connected. HTTP request sent, awaiting response... 302 Moved Temporarily Location: http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm?AuthParam=1495585961_100a5114b32afb32e9e44d5c0e9fc95d [following] --2017-05-24 09:30:41-- http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm?AuthParam=1495585961_100a5114b32afb32e9e44d5c0e9fc95d Connecting to download.oracle.com|110.232.152.75|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 169983496 (162M) [application/x-redhat-package-manager] Saving to: ‘jdk-8u131-linux-x64.rpm’ jdk-8u131-linux-x64.rpm 100%[===============================================>] 162.11M 16.7MB/s in 9.1s 2017-05-24 09:30:50 (17.8 MB/s) - ‘jdk-8u131-linux-x64.rpm’ saved [169983496/169983496]
最新は正常に今まで通りダウンロードできました。
http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
URLが大きく変更されています。
d54c1d3a095b4ff2b6607d096fa80163
こちらの値はバージョン毎に異なるようです。そのため 8u131
や -b11
といったバージョン情報を変数化して切り替えていた場合は、同時にこのハッシュ値のような値も変更する必要があります。
まとめ
- JDKの過去バージョンのアーカイブは認証が必要になっている(2017/05/24現在)
- JDKダウンロードリンクのパスの規則性が大きく変更されている
自動取得するスクリプトなどを記述している場合は、いまいちど正常に取得出来るかを確認した方が良いかもしれません。
参照
脚注
- いつ変更されたかは不明 ↩