Présentation
Puppet est un outils de gestion de la configuration de serveurs, il permet le télédéploiement de configuration sur un ensemble de serveurs en quelques minutes. L’intérêt de cette solution open source réside dans son support multi-plateformes (basé sur ruby), sa sécurité (ssl), son développement actif et sa relative simplicité à mettre en oeuvre. A noter que depuis début 2011 la société Puppetlabs propose une version Puppet Enterprise (support + package sur demande).
Il existe une version Legacy (0.25.x) qui comporte de nombreux bugs et manque de fonctionnalités l'article ci dessous ne traite que de la version stable 2.6.x et supérieure
Prérequis
- Disposez de plusieurs serveurs à administrer sans quoi le gain de temps et d'énergie ne sera pas effectif.
- Notions en administration système.
Systèmes supportés
Puppet fonctionne sur la plupart des système Uni* et dans une moindre mesure Windows. voir ici pour plus de détails.
Installation
Puppet est présent dans les dépôts, installez les paquets puppet, facter et puppetmaster (pour le serveur maître) :
- Sur le client : apt-get install puppet
- Sur le master : apt-get install puppetmaster
gem install facter
gem install puppetConfiguration
Maître
Fichiers de configuration
Les fichiers de configuration sont donnés à titre d'exemple vous êtes libre d'indiquer d'autres paramètres.
On modifie le fichier /etc/puppet/puppet.conf [main] logdir = /var/log/puppet vardir = /var/lib/puppet ssldir = $vardir/ssl rundir = /var/run/puppet confdir = $vardir factpath = $vardir/lib/facter pluginsync = false server = hostnameduserveur report = true reports = log,store [master] templatedir = $vardir/templates modulepath = $vardir/modules libdir = $vardir/plugins syslogfacility = user
Parefeu
On modifie également notre firewall afin de laissez passer les flux :
iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -s ipdumaster \
--sport 8140 -d ipduclient -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED -s ipduclient -d \
ipdumaster --dport 8140 -j ACCEPT
Esclave
Configuration de l'agent Puppet
/etc/puppet/puppet.conf
/etc/puppet/auth.conf
[main] server = hostnamedevotremaster report = true rundir = /var/run/puppet/ runinterval = 50 [agent] listen=true
Le paramètre listen et les fichiers auth.conf et namespaceauth.conf sont nécéssaire pour activer le déploiement à partir du master (puppet kick ou puppetrun) si vous ne souhaitez pas utiliser ces commandes, ces fichier sont inutiles.
path /run method save allow *
/etc/puppet/namespaceauth.conf
[puppetrunner] allow * [puppetbucket] allow * [puppetreports] allow * [resource] allow * [kick] allow *
Parefeu
Si vous disposez d'un parefeu actif il faut songer à ouvrir le port 8139 :
iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -s ipduclient --sport 8139 -d ipdumaster -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED \-s ipdumaster -d ipduclient --dport 8139 -j ACCEPT
Validation
Avant de pouvoir utilisez un client il faut préalablement le valider auprès du master. Pour cela sur le client lancer la commande :
Cela va générer un certificat que l'on nous demanderas de valider, pour cela sur le serveur :puppetd --test
doit nous retourner le nom du serveur en attente de validation ensuite on signe le certificat en attente :puppetca --list nomduclient
ou bienpuppetca --sign nomduclient
puppetca -s nomduclient
Déploiement à partir du master
Pour lancer le puppetd –test sans devoir être connecté à chaque client on lance
puppet kick nomduclientou encore puppetrun nomduclient
Si cela ne fonctionne pas vérifiez bien qu'un déploiement sur le client est fonctionnel ainsi que l'ouverture des ports du parefeu.
Problèmes
Désactivez le déploiement automatique d'un client
Un client puppetd qui tourne en daemon à la fâcheuse tendance d'être configuré pour exécuter un puppetd –test à intervalle régulier. Pour solutionner ce problème tout en gardant un démon à l'écoute du puppetrun du master il faut lancer le process puppetd avec l'option –no-client soit :
pour automatiser l'ensemble on pourra le rajouter dans le fichier /etc/init.d/puppetpuppetd --no-client
err: Could not retrieve catalog: Could not parse for environment development: Could not match ''
Ce problème peut survenir au cours d'un déploiement, il s'agit d'un mauvais encodage du/des fichier(s) de scripts puppet lorsque il ont été créé à partir d'un poste sous Windows, pour résoudre ce soucis un petit coup de dos2unix fera l'affaire
:
dos2unix le/fichier/de/script
no certificate found and waitforcert is disabled
warning: peer certificate won't be verified in this SSL session Exiting; no certificate found and waitforcert is disabledLe certificat n'a pas encore été signé sur le master.
Run of Puppet configuration client already in progress
notice: Run of Puppet configuration client already in progress; skippingIndique que Puppet est déjà en cours d’exécution sur la machine. certificate verify failed
err: Could not retrieve catalog from remote server: SSL_connectreturned=1 errno=0 state=SSLv3 read server certificate B:certificate verify failed
indique que le certificat que possède le client diffère de celui du master, aussi la solution la plus simple est de régénérer un certificat sur le client puis de le signer sur le master. pour ce faire on supprime le certificat précédent.
rm -rf /etc/puppet/sslLe répertoire peut différer en fonction de votre configuration, il s'agit de la valeur de la variable ssldir dans le fichier /etc/puppet/puppet.conf
On effectue une nouvelle tentative de déploiement qui vas générer un nouveau certificat On peut ensuite signer le certificat sur le puppetmaster et déployer de nouveau.puppetd --test info: Creating a new SSL key for votreserveur.fr warning: peer certificate won't be verified in this SSL session info: Caching certificate for ca warning: peer certificate won't be verified in this SSL session warning: peer certificate won't be verified in this SSL session info: Creating a new SSL certificate request for votreserveur.fr info: Certificate Request fingerprint (md5): 80:AE:23:1C:03:DF:5D:65:0D:8F:04:82:AC:D2:BF:C1
Si le problème persiste toujours il s'agit alors sans doute d'une mauvaise synchronisation horaire entre le client et le master.
err: Could not request certificate: Neither PUB key nor PRIV key:: header too long
Si lors du lancement de la commande puppetd –test vous obtenez cette erreur
Ce problème survient lorsque le système de fichier sur lequel Puppet essaye de créer le certificat est plein.puppetd --test info: Creating a new SSL key for hostnameduserveur warning: peer certificate won't be verified in this SSL session info: Caching certificate for ca warning: peer certificate won't be verified in this SSL session warning: peer certificate won't be verified in this SSL session info: Caching certificate_request for hostnameduserveur err: Cached certificate for ca failed: header too long warning: peer certificate won't be verified in this SSL session info: Caching certificate for ca warning: peer certificate won't be verified in this SSL session err: Cached certificate for ca failed: header too long warning: peer certificate won't be verified in this SSL session info: Caching certificate for ca warning: peer certificate won't be verified in this SSL session Exiting; no certificate found and waitforcert is disabled puppetd --test err: Could not request certificate: Neither PUB key nor PRIV key::header too long Exiting; failed to retrieve certificate and waitforcert is disabled