[Java] OracleJDKの取得方法が大きく変わりました

170件のシェア(すこし話題の記事)

こんにちは。こむろ@東京です。

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ダウンロードリンクのパスの規則性が大きく変更されている

自動取得するスクリプトなどを記述している場合は、いまいちど正常に取得出来るかを確認した方が良いかもしれません。

参照

脚注

  1. いつ変更されたかは不明

  • n0ts
    • KOMURO, Hiraku

      ありがとうございます!
      やはりURLをかなりしっかりパースする形にしないとダメなのですね・・。
      参考にさせていただきます!