Frage Sind die Konfigurationsverwaltungstools (Puppet, Chef) in der Lage, installierte Pakete auf dem neuesten Stand zu halten?


Dies ist wahrscheinlich eine einfache Frage für diejenigen unter Ihnen, die bereits Konfigurationsverwaltungstools ausführen. Sind Konfigurationsmanagement-Tools wie Puppet oder Chef der richtige Ansatz, um installierte Pakete auf dem neuesten Stand zu halten?

Angenommen, ich betreibe mehrere Server, die hauptsächlich auf Debian und Ubuntu basieren. Erleichtern die Konfigurationsverwaltungstools das Aktualisieren von Paketen, die von den Repositorys installiert wurden, wenn Sicherheitsupdates oder Fehlerkorrekturen auftreten?

Ich laufe gerade "unbeaufsichtigte Upgrades" Damit die Systeme Sicherheitsupdates automatisch installieren können, muss ich mich trotzdem mit den Servern verbinden und ausführen aptitude update && aptitude safe-upgrade immer wieder. Das wird natürlich langweilig, langwierig und fehleranfällig, je mehr Server es gibt.

Sind Tools wie Puppet oder Chef der richtige Ansatz, um installierte Pakete auf dem neuesten Stand zu halten? Verwenden Sie diese Tools, um eine manuelle Ausführung zu vermeiden aptitude oder ein Äquivalent auf 15 Servern? Ich bin mir ziemlich sicher, dass die Antwort auf diese Fragen "Ja, natürlich!"

Wo finde ich jedoch weitere Informationen zu diesem speziellen Anwendungsfall? Ich hatte noch nicht die Zeit, Puppet oder Chef gründlich zu studieren, und die Beispielkochbücher oder -klassen zeigen nur mehr oder weniger triviale Beispiele für die Installation eines bestimmten Pakets, wie zum Beispiel ssh. Haben Sie irgendwelche Ressourcen zu empfehlen, abgesehen von der offiziellen Dokumentation (ich werde natürlich die Dokumente studieren, sobald ich weiß, welche der Tools für mich geeignet sind).


28
2017-12-14 12:28


Ursprung


nette frage, ich habe ein tutorial gelesen [was ich nicht finden kann] erwähnen, debian mit puppe auf dem neuesten Stand zu halten, aber habe es nie selbst ausprobiert. Es wird interessant sein, die Antworten derjenigen zu sehen, die es in der Produktion verwenden - pQd


Antworten:


Marionette (ich bin mir ziemlich sicher, Chefkoch auch) bindet sich an Ihre apt-get/lecker Software-Repositories. Da sie sich schwer tun, herauszufinden, welche Pakete verfügbar sind, heißt das ensure => latest funktioniert einfach für Ubuntu / CentOS / Debian. Solange Sie die richtigen Dateien richtig eingerichtet haben (/etc/apt/sources.list, usw).


10
2018-01-10 19:53



Antworten, die Puppet oder ähnliches beinhalten, um jedes Paket zu verwalten, bedeuten, dass Sie jedes Paket in Puppet verfolgen müssen, selbst diejenigen, die Teil der grundlegenden Linux-Distributionsinstallation sind. Mit Tools wie unattended-upgrades oder yum-cron zu Automatisiere die Updates ist viel weniger Arbeit - verwenden Sie einfach Puppet / Chef / Ansible, um diese Tools zu konfigurieren. - RichVel


Sie können es mit einer Puppe tun, Sie tun entweder:

ensure => latest,

oder

ensure=> "1.0.2",

um die letzte / erforderliche Version anzugeben. d.h.

package { apache2: ensure => "2.0.12-2" }
package { apache2: ensure => latest }

Dies bedeutet zumindest, dass Sie auf allen Systemen die gleiche Version angeben können und verhindern können, dass sich Server automatisch (möglicherweise gefährlich) selbst aktualisieren. Ich habe diese Methode in der Produktion auf einer Reihe von Websites verwendet, und es funktioniert sehr gut.

Das Ausführen von unbeaufsichtigten Upgrades macht mir ein bisschen Angst, besonders wenn sie missionskritische Pakete, Kernel, MySQL-Bibliotheken, Apache usw. aktualisieren. Vor allem, wenn das Installationsskript den Dienst möglicherweise neu starten möchte!


23
2017-12-14 13:38



Danke für die Antwort! Es scheint also möglich zu sein, Pakete, die über Puppet installiert wurden, auf dem neuesten Stand zu halten. Gut zu wissen. Aber was ist mit Servern, die verschiedene Versionen von Paketen ausführen? Wie in Debian Lenny vs Ubuntu 8.04 und 9.10? Muss ich manuell auf Versionen achten? Ich habe noch etwas zu tun, scheint es. Ich bin mir nicht sicher, was ich erwartet habe, vielleicht etwas in der Art von Canonical's Landschaft welches eine Webschnittstelle und andere mehr oder weniger ausgefallene Sachen zum Aktualisieren von Paketen auf mehreren Servern bietet. - daff
Für Server mit unterschiedlichen Versionen wird dies kompliziert. Sie müssen verschiedene Blöcke in Ihrem Marionettenmanifest haben, in denen Facter das Schlüsselwort lsb_release oder debian_version von / etc aufruft und dann Entscheidungen darüber trifft, welches Paket installiert werden soll. Ich habe Landscape nicht in Wut auf Produktionsservern gesehen, ich nehme an, es ist ziemlich teuer. - Tom O'Connor
ensure => latest stellt immer sicher, dass alles auf dem neuesten Stand ist, was immer Ihr Repository zur Verfügung stellt. - womble♦


Ich denke, das ist wahrscheinlich die falsche Frage. Die Verwendung von Konfigurationsverwaltungstools wie Puppet und Chef, um Ihre Infrastruktur zu erhalten, ist ein riesiger Schritt vorwärts von dem Versuch, alles manuell zu erledigen. Das Problem, Ihre Paketversionen aktuell und synchron zu halten, wird von keinem dieser Tools direkt gelöst. Um dies ordnungsgemäß zu automatisieren, müssen Sie die Paketdepots selbst unter Ihre Kontrolle bringen.

Die Art und Weise, wie ich das tue, ist ein dediziertes Yum-Repo (für Redhat / Fedora / CentOS; ein APT-Repository für Debian / Ubuntu), das die Pakete enthält, die mir für eine bestimmte Site wichtig sind. Dies sind im Allgemeinen die Abhängigkeiten der Anwendung selbst (Ruby, PHP, Apache, Nginx, Bibliotheken usw.) und sicherheitskritischer Pakete.

Sobald Sie diese Konfiguration vorgenommen haben (normalerweise können Sie einfach die erforderlichen Pakete aus dem Upstream-Repo spiegeln, um damit zu beginnen), können Sie Puppets "secure => latest" -Syntax verwenden, um sicherzustellen, dass alle Ihre Maschinen mit dem Repo auf dem neuesten Stand sind.

Es wäre ratsam, ein "Staging" -Repo zu verwenden, damit Sie aktualisierte Versionen von Paketen testen können, bevor Sie sie munter in die Produktion rollen. Dies ist einfach mit Puppet ohne Doppelreplikation mit Repository-Vorlagen möglich.

Die Automatisierung der Paketversionierung ermutigt Sie dazu, alle Ihre Produktionssysteme miteinander zu synchronisieren, da die Verwaltung mehrerer Repos und Pakete für verschiedene Betriebssystemdistros, -versionen und -architekturen sehr zeitaufwändig ist und wahrscheinlich zu allen unbekannten Problemen und Inkompatibilitäten führt.

Alle diese Ratschläge gelten gleichermaßen für Ruby-Edelsteine, Python-Eier und andere Paketsysteme, die Sie verwenden können.

Ich habe ein bisschen geschrieben Marionetten-Tutorial Das sollte Ihnen helfen, schnell mit Puppet aufzustehen. Sie können eine benutzerdefinierte Repo-Definition auf Ihren Maschinen bereitstellen, indem Sie Puppet als ersten Schritt verwenden, um Paketversionen unter Kontrolle zu bringen.


17
2018-02-25 15:02





Diese Frage ist alt, aber ich dachte, ich würde auf eine aktuelle Art und Weise antworten, da eine aktuell existierende Antwort damals nicht verfügbar war.

Wenn Sie eine Puppe oder einen Koch verwenden, schauen Sie in mcollective nach. Es ist ein sehr nettes Werkzeug der Puppetlabs, das es erlaubt, Befehle an Servergruppen zu senden. http://docs.puppetlabs.com/mcollective/

Es hat auch ein apt-Plugin, mit dem ein Update auf einer beliebigen Anzahl von Servern durchgeführt werden kann: http://projects.puppetlabs.com/projects/mcollective-plugins/wiki/AgentApt


5
2017-07-26 17:58





Während Puppet / Chef mögliche Anwärter für diese Funktionalität sind, um sie zu halten alles auf dem aktuellen System erfordert entweder benutzerdefinierte Typen oder Auflistung jedes Pakets (einschließlich darunterliegender Systembibliotheken wie libc6) als Ressourcen mit ensure => latest. Für den speziellen Fall von automatisierten Paketaktualisierungen sollten Sie sich die cron-apt Paket, das macht, was Sie wollen.


4
2017-12-16 07:43



oder einfach einen exec-Job von "yum update" mit einer hohen Splay-Zeit rausschmeißen. Funktioniert für mich jedenfalls. - Sirex


Ich weiß, das ist ein bisschen spät für Ihre ursprüngliche Frage, aber hier ist es im Geiste von "besser spät als nie".

Ich benutze Cfengine 3, um dies auf mehreren Servern zu tun. Ich gebe eine explizite Liste von Paketen für die automatische Aktualisierung an und vermeide so die Aktualisierung alles Pakete ohne ein wenig vorsichtig zu sein. Es funktioniert großartig und cfengine 3 ist sehr leicht.

Hier ist ein Versprechensausschnitt aus meiner cfengine-Konfiguration:

    packages:
            "apache2"
                    package_method => "apt",
                    package_policy => "update";

Hoffe das hilft.


4
2018-01-25 11:56





Ich stimme Jonathan zu. Der Cfengine 3-Ansatz ist gut, da Sie alle Aspekte der Paketverwaltung steuern können, ohne auf niedriger Ebene rekodieren zu müssen.


2
2018-02-17 04:44





Wir benutzen Marionette + apt-dater.


2
2018-02-17 09:16