chefでtarballを転送してmakeする
サーバ側でwgetしてもいいんですが、outboundのhttp通信がFWで制限されている機器があったりします。
リバースでsshトンネルを掘ってもいいんですが、複数台のサーバからそれぞれtarballを取ってくるのも帯域の無駄遣いだったりするので、cookbook_fileを使ってtarballを展開します。
まずは対象のtarballを取得
wgetでもブラウザでも
tarballをfile/default以下へおく
site-cookbook以下にfugaというレシピがあるなら、site-cookbook/fuga/files/default以下です。
x.y.zはバージョンです。
$ mv download/fuga-x.y.z.tar.gz chef/site-cookbook/fuga/files/default
versionをattributeで指定
バージョンを変数としてattributeで指定します。attribute/default.rbへ以下の行を追加。ついでにソースを展開するところも指定。
default['fuga'][:version] = "x.y.z" default['fuga'][:makedir] = "/home/hoge/fuga"
nodeに書く時とattributeに書く時と文法が違うのはなんでなんだろ。
レシピでcookbook_fileを指定
makedir = node['fuga']['makedir'] version = node['fuga']['version'] cookbook_file "#{makedir}/fuga-#{version}.tar.gz" do source "fuga-#{version}.tar.gz" mode 0644 end
これで /home/hoge/fuga 以下へ files/defaultへおいたファイルが転送されます。
rootで実行されるのでパーミッションは適当に。
あとはmakeするスクリプトを書く
script "make_fuga" do interpreter "bash" user "hoge" group "hoge" cwd node['fuga']['makedir'] code <<-EOH tar -zxvf fuga-#{version}.tar.gz cd fuga-#{version} ./configure make EOH end