le chef de l'installer et de programmes de mise à jour à partir de la source
J'ai un programme que j'ai créer à partir de la source. Pour cela, je suis en utilisant le script
de ressources. Ce qui est une bonne façon de mettre en œuvre la logique pour l'installation et la mise à jour? Droit maintenant j'ai juste l'installation mis en œuvre avec le haut- not_if
conditionnelle.
script "install_program" do
not_if {File.exists?('/program')}
interpreter "bash"
user "root"
cwd "/tmp"
code <<-EOH
wget http://www.example.com/program.tar.gz
tar -zxf program.tar.gz
cd tarball
./configure
make
make install
EOH
end
Vous devez vous connecter pour publier un commentaire.
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 utilisez le
package
de ressources pour les gérer, plutôt que de construire à partir de la source. Je sais que c'est pas toujours disponible ou possible, donc ...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 pourscript
ressources qui ont interprètebash
.Hypothèses: Le programme est installé à
/usr/local/bin/program
et prend un argument--version
sans doute pour afficher le numéro de version. J'ai mis le cd, de configurer et de faire des commandes en collaboration avec&&
parce que, vraisemblablement, si l'on ne parvient pas à nous de ne pas tenter de continuer l'exécution.Au lieu d'utiliser
wget
c'est un peu mieux utiliser laremote_file
ressources, comme c'est idempotent sur son propre. Notez que lechecksum
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:nothing
de sorte qu'il sera exécuté si le remote_file est téléchargé.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 deChef::Config[:file_cache_path]
. Par exemple: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
, etnagios
livres de cuisine ont tous "source" des recettes.remote_file
peut parfoisungzip
un fichier avec un.gz
extension, commetar.gz
. Donctar -zxf
échoue, car il n'est pas vraiment un gzip.program
etversion
variable sont définiesremote_file
ressources réussit, mais leinstall_program
échec de la ressource. Ensuite, lorsque vous corrigez le problème et exécuter chef encore une fois, le fichier distant est déjà présent, donc ça ne dérange pas exécuter l'une de ces actions, et il ne notifie pas lainstall_program
de ressources, de sorte que le programme n'a pas été installé. Je voudrais trouver un meilleur modèle pour l'installation de logiciels à partir des sources en chef.