wake-up-neo.com

apt-get Update und apt-get Upgrade in Chef

Wenn package "nginx" in Chef in apt-get install nginx auf einem Ubuntu-Knoten übersetzt wird, was kann in ein Chef-Rezept geschrieben werden, das in folgende Sprache übersetzt wird: 

apt-get -y update
apt-get -y upgrade

Konnte aus dem apt-Kochbuch nicht herausfinden.

17
Marius Butuc

Das Standardrezept von Opscode "apt" cookbook führt apt-get update aus, um sicherzustellen, dass der Paketcache aktualisiert wird. Wir empfehlen, dies frühzeitig in die Laufliste Ihres Knotens aufzunehmen, damit Pakete später mit den richtigen Versionen installiert werden können.

Generell empfehlen wir nicht, dass Benutzer "apt-get upgrade" aus mehreren Gründen in einem Rezept verwenden.

  1. apt-get aktualisiert möglicherweise ein Paket, das in Konflikt stehende Konfigurationen oder andere Probleme aufweist, die nicht behoben werden können, ohne den Befehl erneut auszuführen oder andere Befehle apt/dpkg manuell auszuführen.
  2. Automatisierte Upgrades aller Pakete auf dem System können ungewollte Nebeneffekte auf dem laufenden System haben (die Edge-Fälle sind zahlreich und möglicherweise dornig, daher kann ich sie nicht alle behandeln).

Verwenden Sie stattdessen die Aktion "Upgrade" für Pakete, die immer auf die neueste Version aktualisiert werden sollen.

package "nginx" do
  action :upgrade
end

Wenn Sie ein Kochbuch wiederverwenden, das das Kochbuch definiert, können Sie ein Rezept schreiben, das die Aktion der vorhandenen Ressource wie folgt ändert:

resources("package[nginx]").action(:upgrade)

Die #resources-Methode in einem Rezept sucht in der Ressourcensammlung nach der angegebenen Ressource (Paket nginx). Wenn Sie die #action-Methode mit dem Argument :upgrade senden, wird Chef darauf hingewiesen, dass die Aktualisierung durchgeführt werden soll.

Bearbeiten Update : Seien Sie vorsichtig, wenn Sie Pakete auswählen, die auf diese Weise automatisch aktualisiert werden. Eine Upstream-Änderung in einem Paket kann sich nachteilig auf das System auswirken. Dies gilt insbesondere, wenn ein solches Paket einen Neustart der Dienste ausführt, die während der Nachinstallationsskripts verwaltet werden. Informieren Sie sich über Ihre Infrastruktur und führen Sie im Zweifelsfall Ihr eigenes Paket-Repository mit den kritischen Paketen aus, die Sie für den Anwendungsstapel benötigen.

44
jtimberman

Das Rezept des Apt-Chefs wird nicht bei jedem Kochdurchlauf aktualisiert. Das Attribut, das dies steuert, heißt periodic_update_min_delay und ist auf 86400 gesetzt (Das Attribut sollte sec_delay heißen). Wenn die folgende Datei vorhanden ist und älter als 24 Stunden ist, aktualisiert apt den Cache.

/var/lib/apt/periodic/update-success-stamp

Es scheint auch, dass das apt-Rezept (default.rb) eine Anweisung enthält, um eine Aktualisierung zu erzwingen, die Ihr Rezept aufrufen könnte.

# For other recipes to call to force an update
execute 'apt-get update' do

Wenn Sie dies jedoch tun, sollten Sie not_if verwenden, um zu vermeiden, dass es zu oft ausgeführt wird. Dann können Sie es auch manuell aufrufen. Ich hatte es satt, mich damit zu beschäftigen, und am Ende rief ich apt-get update in einer Zeilengruppe vor meiner Installation an.

execute "apt-get-update" do
  command "apt-get update"
end

Ich vermute, die langfristige Lösung für Sicherheitsupdates besteht darin, die Aktualisierungsverzögerung auf einige Stunden einzustellen.

0
jorfus