CentOS で最新の JDK を自動インストールする
CentOS で JDK を CUI でインストールする手順が紹介されていても「ブラウザで最新 URL を調べて RPM を wget して〜」みたいなものが多くて。怠惰な私には耐えられなかったので、最新版のリンクを辿って取得するところも perl の WWW::Mechanize を使って自動化してみました。
CentOS 5.5 で動作確認しています。
(2011-05-24 追記)
JDK のダウンロードページの構成が変わっており、JavaScript が使われるようになっているので、この方法ではダウンロードできなくなっています。
Java のアンインストール
私は Desktop とか Server とかのオプションを外してインストールしたので特に必要なかったですが、
あたりを見ると、入っているケースもあるみたいですので、とりあえずやっておいたほうがいいかと。
yum erase java
WWW::Mechanize のインストール
WWW::Mechanize は RPMforge にあるので、リポジトリの設定を追加してインストールを行います。
最新版を入れてしまうと WWW::Mechanize を使った際に
LWP::UserAgent version 5.827 required--this is only version 2.033 at /usr/lib/perl5/vendor_perl/5.8.8/WWW/Mechanize.pm line 106.
のようなエラーが発生してしまうので、
を参考に 1.34 という古めのバージョンを入れています。
cat >/etc/yum.repos.d/rpmforge.repo <<\EOF [rpmforge] name = Red Hat Enterprise $releasever - RPMforge.net - dag mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge enabled = 0 gpgcheck = 0 EOF yum install -y perl-WWW-Mechanize-1.34 --enablerepo=rpmforge
RPMforge を普段から使いたい場合は enabled = 1 にしてください。
ヒアドキュメントで EOF を \EOF にするのは WEB+DB vol.50 の Git 特集を見て以来真似てるんですけど、 'EOF' にするのと同じ効果(変数の展開が行われない)があるみたいですね。
JDK のインストール
今のところこんな感じで動いています。サイトの構成が変わったら書き換えないといけませんけど、まあ仕方ないでしょう。
perl <<\EOF use WWW::Mechanize; use LWP::Simple; my $platform = 'Linux'; #my $platform = 'Linux Intel Itanium' #my $platform = 'Linux x64' my $url = 'http://www.oracle.com/technetwork/java/javase/downloads/'; my $mech = WWW::Mechanize->new(); $mech->get($url); $mech->follow_link(text => 'JDK'); $mech->submit_form(fields => { ($mech->find_all_inputs(id => "dnld_platform"))[0]->name => $platform }); my $link = $mech->find_link(text_regex => qr/jdk-.*-linux-.*-rpm.bin/); getstore($link->url, $link->text); system('/bin/sh', $link->text); EOF
Itanium や x64 環境の場合は $platform 部分を適切なものに変えてから実行してください。