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