コミュニティークックブックに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で管理してレシピ内で利用したいと思います。
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'
キー値の名前がダサいのはご愛嬌で・・・。
こんな書き方で大丈夫なのかな。
recipe/default.rbの設定
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
ゴリゴリっていう感じです。
recipe/default/jdk.sh.erbの設定
export JAVA_HOME=<%= node['java']['symlink_java_dir'] %> export PATH=$PATH:$JAVA_HOME/bin
実行
knife solo cook サーバ名でうまくインストールされるとjava -versionでバージョン表示されると思います。
ChefもそうですがVagrantとの組み合わせは本当に便利ですねー。
vagrant destory -f
で削除して、
vagrant up knife solo bootstrap サーバ名
で同じ環境が準備されるのは本当に衝撃的です。
ただ、それなりのレシピを書くにはそれなりのレシピを見てしっかりと読まないといけないと思います。
本番運用用のレシピはまだ書けないのですが簡単な開発環境をセットアップするレシピを書くくらいはできそう。
ちなみに、WindowsでChefとVagrantを実行しているのですが今のところ順調です。