Puppet Anleitung · 6 min read · Feb 07, 2026
Konfigurationsautomatisierung & zentrale Verwaltung mit Puppet auf Ubuntu
Konfigurationsautomatisierung & zentrale Verwaltung mit Puppet auf Ubuntu
Autor: Kent Brede
Basierend auf http://reductivelabs.com/trac/puppet/wiki/InstallationGuide
Einführung
Dies ist ein Schritt-für-Schritt-Tutorial, wie man die Serverkomponente von Puppet (puppetmaster) auf einer Maschine und den Puppet-Client (puppetd) auf einer anderen installiert. Anschließend führen wir einen einfachen Test durch, um sicherzustellen, dass Puppet ordnungsgemäß funktioniert.
Wenn Sie mit Puppet nicht vertraut sind, ist es ein Tool zur Konfigurationsautomatisierung, das es Ihnen ermöglicht, die Verwaltung der verschiedenen *nix-Varianten in Ihrem Netzwerk zu zentralisieren. Puppet unterstützt die zentrale Verwaltung der wichtigen Aspekte Ihrer Systeme, wie: Dateien, Pakete, Benutzer, Dienste, Cron, Mounts usw. Für eine umfassendere Beschreibung besuchen Sie Reductive Labs.
Hintergrund
Diese Installation wird auf Ubuntu 6.06 LTS Server durchgeführt, sollte jedoch mit leichten Modifikationen für die meisten Debian/Ubuntu-Varianten funktionieren.
Zum Zeitpunkt des Schreibens sind die aktuellen Puppet-Pakete für Ubuntu in Feisty zu finden. Suchen Sie nach aktuellen Debian-Paketen in Unstable.
Während dieses Tutorials verwenden wir example.com als unseren Domainnamen. Der Server erhält den Hostnamen “puppet” und die IP 192.168.10.1. Der Client-Hostname ist “pclient” mit der IP 192.168.10.2.
1. Netzwerkanforderungen
Wenn DNS in Ihrem Netzwerk nicht eingerichtet ist, überprüfen Sie die Hosts-Dateien auf beiden Servern und Clients, um sicherzustellen, dass Einträge für beide Maschinen vorhanden sind. Für dieses Szenario würden die folgenden Einträge zu /etc/hosts hinzugefügt. Verwenden Sie Ihren bevorzugten Texteditor, um Zeilen hinzuzufügen, die Ihre eigenen Netzwerkeinstellungen ähnlich den folgenden Zeilen widerspiegeln.
192.168.10.1 puppet.example.com puppet
192.168.10.2 pclient.example.com pclient
Der Server läuft auf Port 8140. Stellen Sie sicher, dass keine Firewall den Port 8140 zwischen den beiden Maschinen blockiert.
2. Apt-Setup
Viele der benötigten Pakete befinden sich im Universe-Repository. Wenn die folgenden Zeilen in “sources.list” nicht auskommentiert sind, suchen Sie mit Ihrem bevorzugten Texteditor nach ihnen und kommentieren Sie sie auf dem Server aus.
puppet:# vim /etc/apt/sources.list
# deb http://us.archive.ubuntu.com/ubuntu/ dapper universe
# deb http://security.ubuntu.com/ubuntu dapper-security universe
Da wir eine frühere Version von Ubuntu verwenden, lassen Sie uns apt so konfigurieren, dass wir Puppet-Pakete einfach aus Feisty abrufen können. Passen Sie die Quellen nach Bedarf an, um Ihre OS-Version widerzuspiegeln. Wenn Sie mit den Schritten in diesem Abschnitt nicht vertraut sind, siehe Abschnitt 3.10 im Apt-Howto.
Öffnen Sie “sources.list” und fügen Sie die beiden folgenden Zeilen hinzu.
puppet:# vim /etc/apt/sources.list
deb http://us.archive.ubuntu.com/ubuntu/ feisty universe
deb http://security.ubuntu.com/ubuntu feisty-security universe
Aktualisieren Sie Ihre Quellliste.
puppet:# apt-get update
Führen Sie die gleichen Schritte oben auf “pclient” aus.
Als nächstes konfigurieren wir apt, um die Pakete, die wir für unser Puppet-Setup benötigen, aus Feisty abzurufen, aber alle anderen Pakete aus dem Dapper-Repository zu beziehen. Fügen Sie die folgenden Zeilen zur “preferences”-Datei hinzu.
Auf dem Server:
puppet:# vim /etc/apt/preferences
Package: *
Pin: release a=dapper
Pin-Priority: 700
Package: facter
Pin: release a=feisty
Pin-Priority: 500
Package: puppet
Pin: release a=feisty
Pin-Priority: 500
Package: puppetmaster
Pin: release a=feisty
Pin-Priority: 500
Auf dem Client:
pclient:# vim /etc/apt/preferences
Package: *
Pin: release a=dapper
Pin-Priority: 700
Package: facter
Pin: release a=feisty
Pin-Priority: 500
Package: puppet
Pin: release a=feisty
Pin-Priority: 500
3. Softwareanforderungen
Zur Vorbereitung unserer Puppet-Installation müssen einige Bibliotheken und Pakete sowohl auf dem Server als auch auf dem Client installiert werden. Zum Zeitpunkt des Schreibens, wenn dieses Set nicht zuerst installiert wird, entsteht eine Abhängigkeitsschleife.
puppet:# apt-get install libopenssl-ruby rdoc irb1.8 libopenssl-ruby1.8 libreadline-ruby1.8 libruby1.8 rdoc1.8 ruby1.8
pclient:# apt-get install libopenssl-ruby rdoc irb1.8 libopenssl-ruby1.8 libreadline-ruby1.8 libruby1.8 rdoc1.8 ruby1.8
4. Client-Installation
Installieren Sie Puppet und Facter aus Feisty.
pclient:# apt-get -t feisty install facter puppet
5. Serverinstallation
Installieren Sie Puppet, Facter und Puppetmaster. Das Post-Installationsskript versucht, den Server zu starten und schlägt fehl, wie dargestellt. Machen Sie sich keine Sorgen darum. Wir werden das Manifest in Schritt 6 erstellen.
puppet:# apt-get -t feisty install facter puppet puppetmaster
…..
Starte Puppet-Konfigurationsmanagement-Tool Master-Server
Manifest /etc/puppet/manifests/site.pp muss existieren [Fehler]
6. Servervorbereitung
Der Server (puppetmasterd) benötigt ein Manifest, das vorhanden ist, bevor er ausgeführt werden kann. Lassen Sie uns ein Manifest schreiben, das Puppet anweist, eine Datei “/tmp/testfile” auf dem Client zu erstellen.
puppet:# vim /etc/puppet/manifests/site.pp
# Erstelle "/tmp/testfile", wenn es nicht existiert.
class test_class {
file { "/tmp/testfile":
ensure => present,
mode => 644,
owner => root,
group => root
}
}
# Sage Puppet, auf welchem Client die Klasse ausgeführt werden soll
node pclient {
include test_class
}
Jetzt starten Sie den Puppet-Server.
puppet:# /etc/init.d/puppetmaster start
6. Client-Vorbereitung
Clients verbinden sich standardmäßig mit einem Server in Ihrem Netzwerk mit dem Hostnamen “puppet.” Wenn der Hostname Ihres Servers nicht “puppet” ist, muss eine Direktive in die Puppetd-Konfigurationsdatei “puppetd.conf” eingefügt werden. Obwohl wir das in diesem Fall nicht benötigen, werden wir es zu Demonstrationszwecken tun.
Öffnen Sie “/etc/puppet/puppetd.conf” mit Ihrem bevorzugten Texteditor und fügen Sie “server = puppet.example.com” zur vorhandenen Datei hinzu, wie im folgenden Beispiel angegeben.
pclient:# vim /etc/puppet/puppetd.conf
[puppetd]
server = puppet.example.com
# Stellen Sie sicher, dass alle Protokollnachrichten im richtigen Verzeichnis gesendet werden
# Dieses Verzeichnis muss für den Puppet-Benutzer beschreibbar sein
logdir=/var/log/puppet
vardir=/var/lib/puppet
rundir=/var/run
7. Schlüssel signieren
Damit die beiden Systeme sicher kommunizieren können, müssen wir signierte SSL-Zertifikate erstellen. Sie sollten auf beiden Servern und Client-Maschinen für diesen nächsten Schritt angemeldet sein.
Führen Sie auf der Client-Seite aus.
pclient:# puppetd –server puppet.example.com –waitforcert 60 –test
Sie sollten die folgende Nachricht sehen.
err: Kein Zertifikat; läuft mit reduzierter Funktionalität.
info: Erstelle eine neue Zertifikatsanforderung für pclient.example.con
info: Fordere Zertifikat an
warnung: Peer-Zertifikat wird in dieser SSL-Sitzung nicht überprüft
notice: Zertifikat nicht erhalten
Als nächstes führen Sie auf der Serverseite den folgenden Befehl aus, um zu überprüfen, ob der Client auf das Zertifikat wartet, das signiert werden soll.
puppet:# puppetca –list
pclient.example.con
Dann signieren Sie das Zertifikat.
puppet:# puppetca –sign pclient.example.com
Signiert pclient.example.com
Wenn alles gut gelaufen ist, sollten Sie diese Nachricht auf pclient sehen.
info: Fordere Zertifikat an
warnung: Peer-Zertifikat wird in dieser SSL-Sitzung nicht überprüft
notice: Ignoriere –listen bei einmaligem Ausführen
info: Konfiguration wird in /etc/puppet/localconfig.yaml zwischengespeichert
notice: Starte Konfigurationslauf
notice: //pclient/test_class/File[/tmp/testfile]/ensure: erstellt
info: Erstelle Zustandsdatei /var/lib/puppet/state/state.yaml
notice: Konfigurationslauf in 0.11 Sekunden abgeschlossen
8. Test
Überprüfen Sie und stellen Sie sicher, dass die Datei erstellt wurde.
pclient:# ls -l /tmp/testfile
-rw-r–r– 1 root root 0 2007-02-18 18:28 /tmp/testfile
Für einen Test lassen Sie uns das Manifest bearbeiten und Puppet anweisen, den Dateimodus zu ändern. Ändern Sie die Zeile, “mode => 644,” in “mode => 600,”
puppet:# vim /etc/puppet/manifests/site.pp
# Erstelle "/tmp/testfile", wenn es nicht existiert.
class test_class {
file { "/tmp/testfile":
ensure => present,
mode => 600,
owner => root,
group => root
}
}
# Sage Puppet, auf welchem Client die Klasse ausgeführt werden soll
node pclient {
include test_class
}
Auf dem Client führen Sie puppetd im ausführlichen Modus (-v) und nur einmal (-o) aus.
pclient:# puppetd -v -o
Sie sollten die folgende Nachricht sehen, die besagt, dass /tmp/testfile von Modus 644 auf 600 geändert wurde.
notice: Ignoriere –listen bei einmaligem Ausführen
info: Konfiguration ist auf dem neuesten Stand
notice: Starte Konfigurationslauf
notice: //pclient/test_class/File[/tmp/testfile]/mode: Modus geändert ‘644’ auf ‘600’
notice: Konfigurationslauf in 0.26 Sekunden abgeschlossen
Um zu überprüfen, ob die Arbeit ordnungsgemäß abgeschlossen wurde.
pclient:# ls -l /tmp/testfile
-rw——- 1 root root 0 2007-02-18 18:28 /tmp/testfile
9. Fazit
Herzlichen Glückwunsch, der Test ist abgeschlossen und Sie haben ein funktionierendes Puppet-Setup. Ihr nächster Schritt besteht darin, ein funktionales Manifest zu erstellen, weitere Tests durchzuführen und dann den puppetd-Daemon auf der Client-Seite zu starten. Puppetd wird standardmäßig alle 30 Minuten automatisch den Server abfragen.
pclient:# /etc/init.d/puppet start
Für weitere Informationen besuchen Sie Reductive Labs.
Für freundliche, kompetente Hilfe treten Sie Puppet Users bei oder schauen Sie bei #puppet im irc.freenode.net vorbei.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.