web-dev-qa-db-fra.com

apt-get update et apt-get upgrade dans Chef

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 .

17
Marius Butuc

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.

  1. 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.
  2. Les mises à niveau automatisées de tous les packages sur le système peuvent avoir des effets secondaires inattendus sur le système en cours d'exécution (les cas Edge sont nombreux et éventuellement épineux, je ne peux donc pas les couvrir tous).

À 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.

44
jtimberman

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.

0
jorfus