まず、あなたが内部のパッケージリポジトリをホストするための手段を持っている場合は何よりも、私は一般的に(s)はあなたがあなたのターゲットプラットフォームのネイティブパッケージをビルドすることをお勧めしますし、それらを管理するためにpackage
リソースを使用するのではなく、ソースからのビルド。私は、スタイルインストールスクリプトの冪等は、あなたが作業しているソフトウェアの種類によって異なり、「& &は& &は、make installを作るに./configure」
あなたが作る方法...それは常に利用できるか、現実的ではありません知っているので、と。多くの場合、ターゲットファイルの存在を確認するだけで十分です。場合によっては、必要なバージョンと、適切なコマンドラインオプションで実行したときに出力されるバージョンを判断することが望ましい場合もあります。これらの例の出発点として上記のリソースを使用します。なお、bash
は、bash
のリソースscript
のショートカットとして使用できます。
前提条件:このプログラムは/usr/local/bin/program
にインストールされており、おそらくバージョン番号を表示するには引数--version
が必要です。私はcd、configure、およびmakeコマンドを&&
と一緒に入れます。なぜなら、おそらく失敗した場合、実行を続行しないでください。
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
パラメータが追加されていることに注意してください。このパラメータは、ローカルターゲットファイルがチェックサムと一致する場合、シェフにリモートファイルをダウンロードしないように指示します。これは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::Config[:file_cache_path]
です。たとえば:http://github.com/opscode/cookbooks:更なる例については
remote_file "#{Chef::Config[:file_cache_path]}/program.tar.gz" do
...
end
、あなたはここでOpscodeが共有するいくつかの料理本で「ソース」のレシピを見ることができます。 php
、python
、gnu_parallel
、nagios
料理本にはすべて「ソース」レシピがあります。
注記: '' remote_file''のバグは '' tar.gz''のように '' .gz''拡張子を持つファイルを '' ungzip''することができます。だから '' tar -zxf''は本当にgzipではないので失敗します。 – Evgeny
私はこの答えが好きです – Galen
@jtimbermanあなたは 'program'と' version'変数がどこに設定されているのかもっと説明してください。 –