Si package "nginx"
dans Chef est traduit en apt-get install nginx
sur un nœud Ubuntu, ce qui peut être écrit dans une recette de Chef qui se traduirait en:
apt-get -y update
apt-get -y upgrade
Impossible de comprendre à partir du apt
cookbook .
La recette par défaut du livre de recettes Optcode "apt" s'exécutera apt-get update
pour s'assurer que le cache du paquet est mis à jour. Nous vous recommandons de l'insérer très tôt dans la liste d'exécution de votre nœud afin que les packages ultérieurs puissent être installés avec les versions correctes.
En règle générale, nous déconseillons aux utilisateurs d’utiliser "apt-get upgrade
" dans une recette, pour plusieurs raisons.
apt-get
peut mettre à niveau un package dont la configuration est en conflit ou qui pose d'autres problèmes qui ne peuvent pas être résolus sans exécuter à nouveau la commande ou les autres commandes apt/dpkg manuellement.À la place, utilisez l'action "upgrade" pour les packages qui doivent toujours être mis à jour vers la dernière version.
package "nginx" do
action :upgrade
end
Si vous réutilisez un livre de recettes qui définit le livre de recettes, vous pouvez écrire une recette qui modifie l'action de la ressource existante, comme ceci:
resources("package[nginx]").action(:upgrade)
La méthode #resources
dans une recette recherchera dans la collection de ressources la ressource spécifiée (package nginx). Ensuite, l'envoi de la méthode #action
avec l'argument :upgrade
indiquera à Chef que l'action doit consister à mettre à niveau.
Edit Update : Faites attention lorsque vous choisissez des paquetages qui seraient automatiquement mis à jour de cette façon. Un changement en amont dans un package peut avoir des effets néfastes sur le système. Cela est particulièrement vrai si un tel paquet redémarre les services qu’il gère au cours des scripts de post-installation. Connaissez votre infrastructure et, en cas de doute, exécutez votre propre référentiel de packages contenant les packages critiques dont vous avez besoin pour la pile d'applications.
La recette du chef Apt ne sera pas mise à jour avec chaque chef cuisinier. L'attribut qui le contrôle s'appelle periodic_update_min_delay
et est défini sur 86400 (l'attribut doit s'appeler sec_delay). Si le fichier suivant existe et a plus de 24 heures, apt mettra à jour le cache.
/var/lib/apt/periodic/update-success-stamp
Il semble également que la recette d'apt (default.rb) inclue une directive pour forcer une mise à jour que votre recette pourrait appeler.
# For other recipes to call to force an update
execute 'apt-get update' do
Si vous le faites bien, vous voudrez que not_if évite de le lancer trop souvent, vous pouvez aussi l'appeler vous-même manuellement. J'en ai eu marre de jouer avec cela et j'ai fini par appeler apt-get update dans une strophe avant mon installation.
execute "apt-get-update" do
command "apt-get update"
end
Je pense que la solution à long terme pour les mises à jour de sécurité consiste à définir le délai de mise à jour à quelques heures.