Puppet Automation · 6 min read · Feb 07, 2026
Automatisation de la Configuration & Gestion Centralisée Avec Puppet sur Ubuntu
Automatisation de la Configuration & Gestion Centralisée Avec Puppet sur Ubuntu
Auteur : Kent Brede
Basé sur http://reductivelabs.com/trac/puppet/wiki/InstallationGuide
Introduction
Ceci est un tutoriel étape par étape sur la façon d’installer le composant serveur de Puppet (puppetmaster) sur une machine, et le client Puppet (puppetd) sur une autre. Nous effectuons ensuite un test simple pour nous assurer que Puppet fonctionne correctement.
Si vous n’êtes pas familier avec Puppet, c’est un outil d’automatisation de configuration qui vous permet de centraliser la gestion des différentes saveurs *nix fonctionnant sur votre réseau. Puppet prend en charge la gestion centrale des aspects importants de vos systèmes, tels que : fichiers, paquets, utilisateurs, services, cron, montages, etc. Pour une description plus complète, visitez Reductive Labs.
Contexte
Cette installation est effectuée sur Ubuntu 6.06 LTS Server, mais devrait fonctionner pour la plupart des saveurs Debian/Ubuntu avec quelques modifications mineures.
Au moment de la rédaction de cet article, les paquets Puppet actuels pour Ubuntu peuvent être trouvés dans Feisty. Cherchez les paquets Debian actuels dans Unstable.
Au cours de ce tutoriel, nous utiliserons example.com comme nom de domaine. Le serveur sera donné le nom d’hôte “puppet” et l’IP 192.168.10.1. Le nom d’hôte du client est “pclient” avec l’IP 192.168.10.2.
1. Exigences Réseau
Si le DNS n’est pas configuré sur votre réseau, vérifiez que les fichiers hosts sur le serveur et le client incluent des entrées pour les deux machines. Pour ce scénario, les entrées suivantes seraient ajoutées à /etc/hosts. Utilisez votre éditeur de texte préféré pour ajouter des lignes reflétant vos propres paramètres réseau similaires aux lignes ci-dessous.
192.168.10.1 puppet.example.com puppet
192.168.10.2 pclient.example.com pclient
Le serveur fonctionne sur le port 8140. Assurez-vous qu’aucun pare-feu ne bloque le port 8140 entre les deux machines.
2. Configuration d’Apt
Beaucoup des paquets dont nous avons besoin se trouvent dans le dépôt universe. Si les lignes suivantes ne sont pas décommentées dans “sources.list,” utilisez votre éditeur de texte préféré pour les trouver et les décommenter sur le serveur.
puppet:# vim /etc/apt/sources.list
# deb http://us.archive.ubuntu.com/ubuntu/ dapper universe
# deb http://security.ubuntu.com/ubuntu dapper-security universe
Puisque nous utilisons une version antérieure d’Ubuntu, configurons apt afin de récupérer facilement les paquets Puppet depuis Feisty. Ajustez les sources si nécessaire pour refléter votre version de l’OS. Si vous n’êtes pas familier avec les étapes de cette section, consultez la section 3.10 dans l’Apt-Howto.
Ouvrez “sources.list” et ajoutez les deux lignes qui suivent.
puppet:# vim /etc/apt/sources.list
deb http://us.archive.ubuntu.com/ubuntu/ feisty universe
deb http://security.ubuntu.com/ubuntu feisty-security universe
Mettez à jour votre liste de sources.
puppet:# apt-get update
Effectuez les mêmes étapes ci-dessus sur “pclient.”
Ensuite, configurons apt pour tirer les paquets dont nous avons besoin pour notre configuration Puppet depuis Feisty, mais permettre à tous les autres paquets de venir du dépôt Dapper. Ajoutez les lignes suivantes au fichier “preferences.”
Sur le serveur :
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
Sur le 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. Exigences Logicielles
En préparation de notre installation de Puppet, nous avons besoin de quelques bibliothèques et paquets installés à la fois sur le serveur et le client. Au moment de la rédaction de cet article, si cet ensemble n’est pas installé en premier, une boucle de dépendance se produira.
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. Installation du Client
Installez Puppet et Facter depuis Feisty.
pclient:# apt-get -t feisty install facter puppet
5. Installation du Serveur
Installez Puppet, Facter et Puppetmaster. Le script post-installation essaiera de démarrer le serveur et échouera comme présenté. Ne vous inquiétez pas. Nous créerons le manifeste lors de l’étape 6.
puppet:# apt-get -t feisty install facter puppet puppetmaster
…..
Démarrage de l’outil de gestion de configuration puppet master
Le manifeste /etc/puppet/manifests/site.pp doit exister [échec]
6. Préparation du Serveur
Le serveur (puppetmasterd) nécessite qu’un manifeste soit en place avant de pouvoir fonctionner. Écrivons un manifeste qui indique à puppet de créer un fichier “/tmp/testfile” sur le client.
puppet:# vim /etc/puppet/manifests/site.pp
# Créer "/tmp/testfile" s'il n'existe pas.
class test_class {
file { "/tmp/testfile":
ensure => present,
mode => 644,
owner => root,
group => root
}
}
# indiquer à puppet sur quel client exécuter la classe
node pclient {
include test_class
}
Maintenant, démarrez le serveur puppet.
puppet:# /etc/init.d/puppetmaster start
6. Préparation du Client
Les clients se connecteront par défaut à un serveur sur votre réseau avec un nom d’hôte de “puppet.” Si le nom d’hôte de votre serveur n’est pas “puppet,” une directive doit être insérée dans le fichier de configuration puppetd “puppetd.conf.” Même si nous n’en avons pas besoin dans ce cas, nous le ferons à des fins de démonstration.
Ouvrez “/etc/puppet/puppetd.conf” avec votre éditeur de texte préféré et ajoutez “server = puppet.example.com” au fichier existant comme l’exemple ci-dessous l’indique.
pclient:# vim /etc/puppet/puppetd.conf
[puppetd]
server = puppet.example.com
# Assurez-vous que tous les messages de log sont envoyés au bon répertoire
# Ce répertoire doit être accessible en écriture par l'utilisateur puppet
logdir=/var/log/puppet
vardir=/var/lib/puppet
rundir=/var/run
7. Signer les Clés
Pour que les deux systèmes communiquent de manière sécurisée, nous devons créer des certificats SSL signés. Vous devez être connecté à la fois sur les machines serveur et client pour cette étape suivante.
Du côté client, exécutez.
pclient:# puppetd –server puppet.example.com –waitforcert 60 –test
Vous devriez voir le message suivant.
err: Aucun certificat ; fonctionnement avec une fonctionnalité réduite.
info: Création d’une nouvelle demande de certificat pour pclient.example.con
info: Demande de certificat
warnings: le certificat pair ne sera pas vérifié dans cette session SSL
notice: Certificat non reçu
Ensuite, du côté serveur, exécutez la commande suivante pour vérifier que le client attend que le certificat soit signé.
puppet:# puppetca –list
pclient.example.con
Puis signez le certificat.
puppet:# puppetca –sign pclient.example.com
Certificat signé pclient.example.com
Si tout s’est bien passé, vous devriez voir ce message sur pclient.
info: Demande de certificat
warnings: le certificat pair ne sera pas vérifié dans cette session SSL
notice: Ignorer –listen lors de l’exécution unique
info: Mise en cache de la configuration à /etc/puppet/localconfig.yaml
notice: Démarrage de l’exécution de configuration
notice: //pclient/test_class/File[/tmp/testfile]/ensure: créé
info: Création du fichier d’état /var/lib/puppet/state/state.yaml
notice: Exécution de configuration terminée en 0.11 secondes
8. Test
Vérifiez et assurez-vous que le fichier a été créé.
pclient:# ls -l /tmp/testfile
-rw-r–r– 1 root root 0 2007-02-18 18:28 /tmp/testfile
Pour un test, modifions le manifeste et demandons à Puppet de modifier le mode du fichier. Changez la ligne, “mode => 644,” en “mode => 600,”
puppet:# vim /etc/puppet/manifests/site.pp
# Créer "/tmp/testfile" s'il n'existe pas.
class test_class {
file { "/tmp/testfile":
ensure => present,
mode => 600,
owner => root,
group => root
}
}
# indiquer à puppet sur quel client exécuter la classe
node pclient {
include test_class
}
Sur le client, exécutez puppetd en mode verbeux (-v) et une seule fois (-o).
pclient:# puppetd -v -o
Vous devriez voir le message suivant, qui indique que /tmp/testfile a changé de mode 644 à 600.
notice: Ignorer –listen lors de l’exécution unique
info: La configuration est à jour
notice: Démarrage de l’exécution de configuration
notice: //pclient/test_class/File[/tmp/testfile]/mode: mode changé ‘644’ à ‘600’
notice: Exécution de configuration terminée en 0.26 secondes
Pour vérifier que le travail a été effectué correctement.
pclient:# ls -l /tmp/testfile
-rw——- 1 root root 0 2007-02-18 18:28 /tmp/testfile
9. Conclusion
Félicitations, les tests sont terminés et vous avez une configuration Puppet fonctionnelle. Votre prochaine étape est de créer un manifeste fonctionnel, de tester un peu plus, puis de démarrer le démon puppetd du côté client. Puppetd, par défaut, interrogera automatiquement le serveur toutes les 30 minutes.
pclient:# /etc/init.d/puppet start
Pour plus d’informations, visitez Reductive Labs. Pour une aide amicale et compétente, rejoignez Puppet Users ou passez par #puppet sur irc.freenode.net.
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.