Her şeyden önce, ben genelde hedef platformu (ler) için doğal paketleri oluşturmak önerilir ve onları yönetmek yerine etmek package
kaynağı kullanmak kaynaktan yapı. Ben stil yükleme komut İdempotent çalıştığınız yazılımın türüne bağlıdır "& & & & make install ./configure"
bir hale yöntemi ... o zaman kullanılabilir veya uygulanabilir olmadığını biliyoruz, bu yüzden ile. Çoğu zaman, hedef dosyanın varlığını kontrol etmek yeterlidir. Bazen, hangi sürümün gerekli olduğunu ve uygun komut satırı seçeneği ile çalıştırıldığında programın hangi sürümünün çıkacağını belirlemek istenebilir. Bu örnekler için yukarıdaki kaynağınızı bir başlangıç noktası olarak kullanacağım. bash
, bash
yorumlayıcısına sahip script
kaynakları için bir kısayol olarak kullanabileceğinizi unutmayın.
Varsayımlar: Program /usr/local/bin/program
'a yüklenir ve sürüm numarasını görüntülemek için muhtemelen bir --version
argümanını alır. Ben cd koymak, yapılandırmak ve komutları &&
ile birlikte yapmak, çünkü muhtemelen başarısız olursa, yürütmeye devam etmemeliyiz. Yerine wget
kullanmanın
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
kendi başına İdempotent olduğu gibi remote_file
kaynağı kullanmak için biraz daha iyidir. checksum
parametresinin, bir özellik olarak değeriyle eklendiğini unutmayın. Bu parametre, yerel hedef dosyasının sağlama toplamıyla eşleşmesi durumunda, şefe uzak dosyayı indirmemesini söyler. Bu bir SHA256 sağlama toplamıdır. Ayrıca, bu kaynak, komut dosyasını hemen indirilmeye, böylece indirildikten sonra bildirir. Komut dosyası eylem :nothing
ile ayarlanır, böylece yalnızca remote_file indirilirse çalıştırılır. Ayrıca
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
başlatmanın ardından sisteminizde silinebilir.
Chef::Config[:file_cache_path]
'un değeri olan Chef'in dosya önbellek konumu gibi silinmeyen başka bir konuma indirmeniz önerilir. Örneğin:
http://github.com/opscode/cookbooks: Daha fazla örnek için
remote_file "#{Chef::Config[:file_cache_path]}/program.tar.gz" do
...
end
, buradan Opscode tarafından paylaşılan çeşitli yemek kitaplarında "kaynak" tarifleri görebilirsiniz. php
, python
, gnu_parallel
ve nagios
yemek kitaplarının hepsinin "kaynak" tarifleri vardır.
NOT: '' remote_file'' ile ilgili bir hata '' z.gz'' gibi '' .gz'' uzantılı bir dosyaya '' zıplama '' verebilir. Yani 'tar -zxf'' başarısız olacaktır çünkü gerçekten bir gzip değildir. – Evgeny
Bu cevabı beğendim – Galen
Daha fazla açıklayabiliyor musunuz? Jtimberman, programın ve sürümün –