D'abord et avant tout, si vous avez les moyens d'accueillir un module interne de référentiel, je recommande généralement que vous générez un paquet natif pour votre plate-forme cible(s), et l'utilisation de l' package
des ressources pour les gérer, plutôt que de construire à partir de la source. Je sais que c'est pas toujours disponible ou possible, alors ...
La méthode que vous faites un "./configure && make && make install" style script d'installation de la quantité dépend du type de logiciel que vous utilisez. Le plus souvent, il suffit de cocher pour le fichier cible de l'existence. Parfois, il est souhaitable de déterminer quelle version, et la version du programme de sortie lorsqu'elle est exécutée avec la bonne option de ligne de commande. Je vais utiliser vos ressources ci-dessus comme point de départ pour ces exemples. Notez que vous pouvez utiliser bash
comme un raccourci pour script
des ressources qui ont interprète bash
.
Hypothèses: Le programme est installé à l' /usr/local/bin/program
et prend un argument --version
, probablement pour afficher le numéro de version. J'ai mis le cd, de configurer et de faire des commandes en collaboration avec &&
, car on peut supposer que si l'un tombe en panne, nous ne devons pas tenter de continuer l'exécution.
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
Au lieu d'utiliser wget
c'est un peu mieux utiliser l' remote_file
des ressources comme c'est idempotent sur son propre. Notez que l' checksum
paramètre est ajoutée, avec la valeur d'un attribut. Ce paramètre indique le Chef de ne pas télécharger le fichier distant si la cible local de fichier correspond à la somme de contrôle. C'est une somme de contrôle SHA256. Aussi, cette ressource en informera le script à exécuter immédiatement, donc après qu'il est téléchargé. Le script est configuré avec l'action de l' :nothing
de sorte qu'il sera exécuté si le remote_file est téléchargé.
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
Aussi, /tmp
peuvent être effacés sur votre système lors du redémarrage. Il est recommandé que vous téléchargez à un autre endroit qui n'est pas supprimé, comme le Chef de file de l'emplacement du cache, qui est la valeur de Chef::Config[:file_cache_path]
. Par exemple:
remote_file "#{Chef::Config[:file_cache_path]}/program.tar.gz" do
...
end
Pour d'autres exemples, vous pouvez voir "source" recettes dans les livres de recettes partagées par les Opscode ici: http://github.com/opscode/cookbooks. php
, python
, gnu_parallel
, et nagios
livres de cuisine ont tous "source" des recettes.