先日の記事に引き続き、ChefでTomcatをバイナリインストールする練習です。
取り急ぎ、先日の記事でなんとなくのレシピの骨子になるようなものを書きました。
今回は、具体的にレシピを書いて行ってとりあえず動くところまではもっていけました。
が、多分グダグダのレシピになっています。バージョンがベタ書きになっていたりして非常にメンテナス性の悪いものなので、後日修正したいと思います。
今の状態でレシピの全文を書いてもあまり意味がないと思いますので、先日のレシピの骨子にしたがって要所となる部分だけ記載していきたいと思います。
Tomcatアーカイブファイルの転送
[bash]
cookbook_file "#{Chef::Config[:file_cache_path]}/apache-tomcat-7.0.54.tar.gz" do
mode 00644
end
[/bash]
バイナリファイルはfiles/defaultディレクトリに配置しておきます。
これで、Chefのテンポラリディレクトリにファイルが転送されます。
Tomcatユーザー、グループの作成
[bash]
user "tomcat" do
comment "tomcat user"
home "/home/tomcat"
shell "/bin/false"
password nil
supports :manage_home => true
action [:create, :manage]
end
group "tomcat" do
members ['tomcat']
action :create
end
[/bash]
Tomcatを実行するためのユーザーとグループを作成しています。ユーザーリソースでは、パスワードをなしにしてさらにログインシェルを/bin/falseとしログインできないようにしてあります。
グループリソースでは、tomcatユーザーをグループに追加するようにしてあります。
アーカイブ・ファイルの展開と配置
これが大変だった。
Chef実践入門の3章まで読んでいましたが、理解が弱かった部分があり多少インターネットで検索しました。
[bash]
bash "install tomcat7" do
code <<-EOF
cd #{Chef::Config[:file_cache_path]}
tar zxf apache-tomcat-7.0.54.tar.gz -C /var
chown -R tomcat.tomcat /var/apache-tomcat-7.0.54
EOF
creates "/var/tomcat7"
end
link "/var/tomcat7" do
to "/var/apache-tomcat-7.0.54"
end
template "/etc/profile.d/tomcat.sh" do
source "tomcat.sh.erb"
owner "root"
group "root"
mode 0644
end
[/bash]
tarでアーカイブを解凍して、tomcatオーナーに変更してます。createsというのは条件みたいなもので、この場合/var/tomcat7が存在する場合はこのリソースを実行しないようになります。まぁ実行する度にインストールしないようにするための抑止です。
インストールしたディレクトリにシンボリックリンクを作成してます。
また、Tomcat用の環境設定ファイルも合わせて配置してTomcatの起動ファイルから読み込みます。
起動ファイルの作成
[bash]
template "/etc/rc.d/init.d/tomcat7" do
source "init.rc.erb"
owner "root"
group "root"
mode 0755
end
[/bash]
templates/default/init.rc.erbを配置してあります。
サービスへの追加、起動
実はここ、うまくいっておりません。
[bash]
bash "chkconfig tomcat7" do
code <<-EOL
chkconfig --add tomcat7
EOL
end
service "tomcat7" do
action [:enable, :start]
end
[/bash]
サービスへの追加はできているのですが実行後にTomcatが起動しないので現在調査中。
コマンドラインから起動シェルを実行すればうまくいくので、リソースの使い方が間違っているのだと思います。
まとめ
色々調べたりはしましたが、極端に時間をかけることなくTomcatのバイナリインストールが行えました。
しかしながら、バージョンなどの環境情報がハードコーディングしてあるので次はこの値をAttributeに移動させるなどしてもう少し改良していきたいと思います。