何よりもまず、内部パッケージ リポジトリをホストする手段がある場合は、通常、package
ソースからビルドするのではなく、ターゲット プラットフォーム用のネイティブ パッケージをビルドし、リソースを使用してそれらを管理することをお勧めします。私はそれが常に利用可能または実行可能であるとは限らないことを知っているので...
「./configure && make && make install」スタイルのインストール スクリプトを冪等にする方法は、使用しているソフトウェアの種類によって異なります。ほとんどの場合、ターゲット ファイルの存在を確認するだけで十分です。場合によっては、必要なバージョンと、適切なコマンドライン オプションで実行したときにプログラムが出力するバージョンを決定することが望ましい場合があります。これらの例の出発点として、上記のリソースを使用します。interpreter を持つリソースbash
のショートカットとして使用できることに注意してください。script
bash
前提: プログラムは にインストールされ、おそらくバージョン番号を表示するために/usr/local/bin/program
引数を取ります。--version
cd、configure、make の各コマンドを 1 つにまとめまし&&
た。これは、1 つのコマンドが失敗した場合、実行を継続しようとしてはならないためです。
bash "install_program" do
not_if "/usr/local/bin/program --version | grep -q '#{node[:program][:version]}'"
user "root"
cwd "/tmp"
code <<-EOH
wget http://www.example.com/program-#{node[:program][:version]}.tar.gz -O /tmp/program-#{node[:program][:version]}.tar.gz
tar -zxf program-#{node[:program][:version]}.tar.gz
(cd program-#{node[:program][:version]}/ && ./configure && make && make install)
EOH
end
これを使用する代わりに、リソースwget
を使用することをおremote_file
勧めします。これは、それ自体が冪等であるためです。checksum
パラメータが追加され、値が属性として追加されることに注意してください。このパラメーターは、ローカル ターゲット ファイルがチェックサムと一致する場合、Chef にリモート ファイルをダウンロードしないように指示します。これは SHA256 チェックサムです。また、このリソースはスクリプトをすぐに実行するように通知するため、ダウンロード後. スクリプトにはアクションが設定されている:nothing
ため、remote_file がダウンロードされた場合にのみ実行されます。
remote_file "/tmp/program-#{node[:program][:version]}.tar.gz" do
source "http://www.example.com/program-#{node[:program][:version]}.tar.gz"
checksum node[:program][:checksum]
notifies :run, "bash[install_program]", :immediately
end
bash "install_program" do
user "root"
cwd "/tmp"
code <<-EOH
tar -zxf program-#{node[:program][:version]}.tar.gz
(cd program-#{node[:program][:version]}/ && ./configure && make && make install)
EOH
action :nothing
end
また、/tmp
システムの再起動時に消去される場合があります。の値である Chef のファイル キャッシュの場所など、削除されていない別の場所にダウンロードすることをお勧めしますChef::Config[:file_cache_path]
。例えば:
remote_file "#{Chef::Config[:file_cache_path]}/program.tar.gz" do
...
end
さらなる例については、Opscode が共有するいくつかのクックブックで「ソース」レシピを参照できます: http://github.com/opscode/cookbooks。php
、python
、gnu_parallel
、およびクックブックにnagios
はすべて「ソース」レシピがあります。