ICT-Infrastruktur für Bildungsaufgaben
8. Konfigurationsmanagement
Thomas Leitner <thomas.leitner@univie.ac.at>
Fakultät für Mathematik, Universität Wien Sommersemester 2013
Letzte Änderung: 2013-09-20 20:46:17 +0200
Inhalt
Puppet (Konfigurationsverwaltung)
Puppet
Puppet ist eine Konfigurationsmanagementsystem (geschrieben in der Programmiersprache Ruby).
Der große Vorteil dabei ist, dass Puppet weiß, wie die verschiedensten Änderungen auf den unterstützten Betriebssystemen durchgeführt werden müssen.
Es wird dabei der gewünschte Zustand, in dem sich das System befinden soll, mit Hilfe einer deklarativen Sprache in Dateien mit der Endung
.pp
(sogenannten Manifesten) definiert.Die Sprache erlaubt unter anderem die Definition von Ressourcen, die auf dem System (nicht) vorhanden sein sollen, wobei konditionelle Ausdrücke verwendet werden können.
Die Client-Software von Puppet interpretiert das Manifest und erstellt daraus einen Katalog, der spezifisch für das System ist. Der Inhalt des Katalog wird dann mit dem aktuellen Zustand abgeglichen und nötige Änderungen werden durchgeführt.
Die Dokumentation zu Puppet ist sehr ausführlich, beginnen sollte man mit Learning Puppet (erklärt grundlegenden Begriffe und Funktionsweisen).
Puppet - Nutzungsvarianten
Puppet kann sowohl mit als auch ohne Server betrieben werden. Beide Varianten haben Vor- und Nachteile. Werden viele System mit Puppet verwaltet, sollte man die Server-Variante verwenden.
Zum Betrieb ohne Server braucht man nur das Paket puppet-common installieren. Diese Variante ist zum Beispiel ideal für die Konfiguration eines oder weniger Systeme (z.B. zur Konfiguration des eigenen Rechners).
Für den Server-Betrieb benötigt man das Paket puppetmaster für den Server und das Paket puppet für die Clients. Nach der Installation läuft der Server mit einer Standardkonfiguration.
Das Konfigurationsverzeichnis ist
/etc/puppet
mit den folgenden Dateien:auth.conf
→ Allgemeine Zugriffssteuerungfileserver.conf
→ Zugriffssteuerung für die Dateiserverkomponentepuppet.conf
→ KonfigurationsdateiDie Konfigurationsdatei enthält Blöcke für die verschiedenen Komponenten (
agent
,master
, …),in denen die Konfigurationsoptionen gesetzt werden können.
Puppet - Facter
Puppet benutzt das Programm Facter, um Informationen über ein System herauszufinden. Wie Puppet ist auch Facter in Ruby implementiert und kann um zusätzliche Informationsmodule erweitert werden.
Die durch Facter gewonnen Informationen können in Manifesten als Variablen und somit auch in
Bedingungen benutzt werden.
Beispielausgabe:
$ facter | head -n 5 architecture => amd64 augeasversion => 0.10.0
boardmanufacturer => Oracle Corporation boardproductname => VirtualBox
boardserialnumber => 0
Puppet - Module
Neben der Definition von Ressourcen in Manifesten können auch Dateien und Templates zur Verwendung hinterlegt werden.
Um die Wiederverwendbarkeit zu erhöhen, können zusammengehörige Manifeste, Dateien und Templates in Module verpackt werden.
Es gibt mittlerweile schon sehr viele vorgefertigte Module, die man einbinden kann. Die Webseite Puppet Forge wird von den Entwicklern von Puppet betreut und enthält eine Vielzahl an Modulen.
Puppet - Beispielmanifest case $operatingsystem {
centos, redhat: { $service_name = 'ntpd' } debian, ubuntu: { $service_name = 'ntp' } }
package { 'ntp': ensure => installed } service { 'ntp':
name => $service_name, ensure => running,
enable => true,
subscribe => File['ntp.conf'], }
file { 'ntp.conf':
path => '/etc/ntp.conf', ensure => file,
require => Package['ntp'],
source => "puppet:///modules/ntp/ntp.conf", }
Puppet - ohne Server
Einzelne Änderungen an Ressourcen können über
puppet resource
gemacht werden bzw.kann über diesen Befehl der Zustand einer Ressource als Puppet-Manifest ausgegeben werden.
$ puppet resource user root shell=/bin/sh
notice: /User[root]/shell: shell changed '/bin/bash' to '/bin/sh' user { 'root':
ensure => 'present', shell => '/bin/sh', }
Der Befehl
puppet apply
wird benutzt, um ein ganzes Manifest auf ein System anzuwenden.Dazu wird kein Server benötigt.
$ puppet apply manifest.pp
Puppet - mit Server
Die Standardserverkonfiguration nach der Installation des Pakets reicht für wenige Clients aus (bei vielen Clients sollte man einen anderen als den eingebauten Webserver Webrick verwenden).
Damit ein Client weiß, wie der zu nutzende Server heißt, muss man in der Hauptkonfigurationsdatei im Block
agent
die Variableserver
auf die IP-Adresse (oder den DNS-Namen) des Serverssetzen.
Die Kommunikation zwischen Client und Server wird über SSL verschlüsselt und jeder Client braucht ein gültiges, vom Server signiertes Zertifikat, um einen Katalog zu bekommen. Daher wird beim erstmaligen Aufruf von
puppet agent
ein Zertifikatsfehler ausgegebgen.Um diesen Fehler zu beheben, muss am Server die Zertifikatsanfrage bestätigt und das Client- Zertifikat mittels
puppet cert sign HOSTNAME
signiert werden. Danach sollte der Client ohne Problem auf den Server zugreifen können.Bei einer Anfrage des Clients interpretiert der Server das in
/etc/puppet/manifests/site.pp
definierte Manifest und erstellt daraus einen Katalog, der an den Client zurückgesandt und auf das System angewandt wird.Puppet - Beispiele
Anlegen eines lokalen Benutzers und einer lokalen Gruppe (Ressourcen user und group) Installation von Paketen, die verschiedene Namen unter verschiedenen Distributionen haben (Ressource package)
Erstellen eines Moduls zur Einrichtung eines OpenSSH-Servers Ändern von Dateien mit Hilfe von augeas
Copyright und Lizenz
Copyright: Thomas Leitner thomas.leitner@univie.ac.at Lizenz: Creative Commons CC BY-NC-SA
„Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen 3.0 Österreich.“ - http://creativecommons.org/licenses/by-nc-sa/3.0/at/