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