コミュニティークックブックにJavaのクックブックがあるのですが、今回はこれを使わずに独自でOracle Javaをインストールするレシピを書いてみました。
なんというか、大人の事情でJavaのインストールする場所や、ディレクトリ構成までガチガチにきまっているような場合向けです。
初めて書いたレシピなので色々不備やバージョンアップする時どうするという根本的な問題はあるかもしれませんが、最初のインストールだけはできます。
また、各プラットフォームについては考慮しておりません。
インストールするディレクトリ構成
Javaのホームディレクトリ:/usr/java
Javaのバージョン:1.7.0_60
Javaの本体ファイル名:jdk-7u60-linux-x64.tar.gz
インストールディレクトリ名:jdk1.7.0_60
インストールディレクトリ:/usr/java/jdk1.7.0_60
シンボリックリンク名:/usr/java/jdk
となるようにレシピを書きました。基本的には/usr/java/jdkのシンボリックリンクをJAVA_HOMEとして利用します。
attributes/default.rbの設定
今回は、バージョン情報やインストールディレクトリ名をAttributesで管理してレシピ内で利用したいと思います。
[ruby]
default['java']['java_dir'] = '/usr/java'
default['java']['version'] = '1.7.0_60'
default['java']['archive_name'] = 'jdk-7u60-linux-x64.tar.gz'
default['java']['install_dir_name'] = 'jdk1.7.0_60'
default['java']['install_java_dir'] = node['java']['java_dir'] + "/" + default['java']['install_dir_name']
default['java']['symlink_java_dir'] = node['java']['java_dir'] + '/jdk'
[/ruby]
キー値の名前がダサいのはご愛嬌で・・・。
こんな書き方で大丈夫なのかな。
recipe/default.rbの設定
[ruby]
cookbook_file "#{Chef::Config[:file_cache_path]}/#{node['java']['archive_name']}" do
mode 00644
end
directory node['java']['java_dir'] do
owner "root"
group "root"
mode "0755"
action :create
end
bash "install java" do
code <<-EOF
cd #{Chef::Config[:file_cache_path]}
tar zxf #{node['java']['archive_name']} -C #{node['java']['java_dir']}
EOF
creates node['java']['install_java_dir']
end
link node['java']['symlink_java_dir'] do
to node['java']['install_java_dir']
end
template "/etc/profile.d/jdk.sh" do
source "jdk.sh.erb"
owner "root"
group "root"
mode 0644
end
[/ruby]
ゴリゴリっていう感じです。
recipe/default/jdk.sh.erbの設定
[ruby]
export JAVA_HOME=<%= node['java']['symlink_java_dir'] %>
export PATH=$PATH:$JAVA_HOME/bin
[/ruby]
実行
knife solo cook サーバ名でうまくインストールされるとjava -versionでバージョン表示されると思います。
ChefもそうですがVagrantとの組み合わせは本当に便利ですねー。
[bash]
vagrant destory -f
[/bash]
で削除して、
[bash]
vagrant up
knife solo bootstrap サーバ名
[/bash]
で同じ環境が準備されるのは本当に衝撃的です。
ただ、それなりのレシピを書くにはそれなりのレシピを見てしっかりと読まないといけないと思います。
本番運用用のレシピはまだ書けないのですが簡単な開発環境をセットアップするレシピを書くくらいはできそう。
ちなみに、WindowsでChefとVagrantを実行しているのですが今のところ順調です。