Puppet est un système de gestion centralisée des configurations. Il permet de déployer très rapidement des configurations sur un parc de serveurs, au moyen d’un système client-serveur cryptés via SSL, un système de droits et de fichiers à déployer. Nous allons voir comment l’installer, mais également quelques astuces de configuration.
Sous Debian
apt-get install puppetmaster
Sous FreeBSD
cd /usr/ports/sysutils/factor
make install clean
cd /usr/ports/sysutils/puppet
make install clean
Allez dans le répertoire /usr/local/etc/puppet. Tous les fichiers de configuration se trouveront ici. Créons déjà l’arborescence des dossiers.
mkdir modules manifests files files/bsd files/debian
Pour créer un module placez vous dans le dossier modules puis créez le répertoire correspondant au nom que vous souhaitez donner à votre module puis le répertoire manifests et enfin créez le fichier init.pp
cd modules
mkdir syslogng-bsd syslogng-bsd/manifests
cd syslogng-bsd/manifests
vi init.pp
Voici la base d’un fichier de configuration.
class syslogng-bsd {
file { "/usr/local/etc/syslog-ng.conf":
path => '/usr/local/etc/syslog-ng.conf',
owner => 'root',
group => 'wheel',
mode => '0644',
source => "puppet://puppetmaster.domain.tld/files/bsd/usr/local/etc/syslog-ng.conf",
}
exec { "service nrpe restart":
command => "/usr/sbin/service syslog-ng restart",
logoutput => false,
subscribe => File["/etc/nrpe.cfg"],
refreshonly => true,
}
}
Détaillons les directives:
class : correspond au nom du module
file : les définitions du fichier de configuration
le premier champ est le nom du fichier
path : le chemin local vers le fichier
owner : le propriétaire du fichier
group : le groupe propriétaire du fichier
mode : les permissions sur le fichier
source : le chemin distant vers le fichier
ensure : type de fichier
exec : la commande à exécuter une fois la modification effectuée
command : chemin absolu de la commande à faire
logoutput : si on affiche la sortie ou non
subscribe : liste des fichiers qu’on vérifie afin de valider le lancement de la commande
refreshonly : exécute la commande uniquement si les fichiers subscribe ont été modifiés
Le paragraphe contenant la directive ensure permet de créer un répertoire, voire une arborescence.
Afin de créer un répertoire, il suffit d’ajouter un fichier de type directory, et de positionner les droits.
file { "/usr/local/etc/nrpe.d/":
ensure => 'directory',
owner => 'root',
group => 'wheel',
mode => '0644',
}
Si les droits, utilisateurs ou groupes sont modifiés, puppet modifiera ceux-ci sans altérer le contenu du répertoire.
Pour configurer un client ouvrez le fichier manifests/site.pp. Voici un exemple:
node "ftp.domain.tld" {
include syslogng-bsd
include proftpd-bsd
}
On inscrit le serveur ftp.domain.tld et on déclare 2 modules actifs, celui du syslog et celui de proftpd. Lorsque celui-ci viendra se connecter il va checker les deux modules et faire les actions programmées.
Créez/ouvrez le fichier fileserver.conf et inscrivez les lignes suivantes:
[files]
path /usr/local/etc/puppet/files/
allow *.domain.tld
allow *.domain2.tld
On déclare que le répertoire réseau puppet/files est dans /usr/local/etc/puppet/files/. On n’autorise que les machines qui sont avec un suffixe DNS connu.
Le service est opérationnel. Vous pouvez le lancer.
service puppetmaster start
Note: il est inutile de redémarrer si vous ne modifiez pas la configuration du serveur mais uniquement les fichiers à distribuer.
Sous FreeBSD:
cd /usr/ports/sysutils/facter
make install clean
cd /usr/ports/sysutils/puppet
make install clean
Sous Debian:
apt-get install puppet
On va configurer le client pour discuter avec le serveur puppetmaster. Ouvrez le fichier /etc/puppet/puppet.conf (ou /usr/local/etc/puppet/puppet.conf sous FreeBSD) et indiquez les lignes suivantes:
[agent]
server=puppetmaster.server.tld
Vous pouvez maintenant démarrer le service:
service puppet start
Pour permettre le client de se connecter au serveur, il faut lui faire contacter déjà une première fois celui-ci:
puppet agent --test
Allez ensuite sur le serveur pour vérifier qu’il est reconnu via la commande
puppet cert list
et ensuite acceptez le certificat
puppet cert sign myserver.domain.tld
Relancez ensuite la première commande pour vérifier que tout va bien.
Il peut parfois être utile de changer de serveur puppet, suite à une migration de serveur ou de version (avec le changement récent de 2.X vers 3.X par exemple).
Lors du changement de serveur vous vous apercevrez tout d’abord qu’il y a des problèmes de certificats. Pour les résoudre, il suffit de vous rendre dans le répertoire de certificats et de supprimer tous les fichiers .pem et .crl dans l’arborescence de certificats puppet
Sous FreeBSD ce répertoire racine est:
/var/puppet/ssl/*
Une fois ces certificats supprimés, il faudra ensuite changer le nom du serveur dans le fichier puppet.conf et enfin relancer la commande puppet agent –test (et valider le certificat sur le serveur)
root@puppetc1> puppet agent --test
Error: Could not request certificate: Neither PUB key nor PRIV key:: header too long
Exiting; failed to retrieve certificate and waitforcert is disabled
Cette erreur survient généralement lorsque puppet essaye d’écrire un fichier alors que le système de fichiers est plein.