Puppet install
| Fiche express | |
|---|---|
| Type | Script d'installation (historique) |
| Cible | RHEL/CentOS 6, Puppet 3.x |
| Composants | Puppet Master + Puppet Dashboard + Librarian |
| Voir aussi | Puppet · Puppet opensource · Puppet-dashboard · Puppet forge |
Puppet install documente un script d'installation « tout-en-un » historique qui met en place, sur un serveur RHEL/CentOS 6, un Puppet Master en édition open source servi par Apache/Passenger, accompagné de Puppet Dashboard (interface web de reporting) et de Librarian-puppet (gestionnaire de dépendances de modules, ancêtre de r10k).
Cette page complète Puppet opensource : là où « Puppet opensource » détaille pas à pas la configuration manuelle du master et de ses fichiers (puppet.conf, site.pp, auth.conf...), cette page présente un script shell condensé qui automatise l'ensemble de la chaîne — master, dashboard et gestion de modules — pour un déploiement de référence.
(à vérifier) Ce script date de l'époque Puppet 3.x / Ruby 1.9.3 via RVM et Passenger 5.0.14 : il est conservé à titre de référence historique et pour sa structure pédagogique, mais une installation moderne s'appuierait plutôt sur les paquets officiels du système, Puppet enterprise, ou un provisionnement par conteneur. Ne pas exécuter tel quel en une seule fois : il est prévu pour être suivi commande par commande, avec vérification à chaque étape.
Prérequis système
Dépôt Puppet Labs et paquets de compilation nécessaires à Ruby et aux gems natives :
rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm yum -y install gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel \ libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel git
Installation de Ruby via RVM
Le script installe une version de Ruby dédiée via RVM plutôt que de dépendre du Ruby système :
curl -sSL https://rvm.io/mpapis.asc | gpg2 --import - curl -L get.rvm.io | bash -s stable source /etc/profile.d/rvm.sh rvm install 1.9.3
Installation des paquets Puppet, Dashboard et MySQL
yum -y install puppet-server httpd httpd-devel mod_ssl ruby-devel rubygems gcc-c++ \ curl-devel zlib-devel make automake openssl-devel puppet-dashboard \ mysql-server mysql augeas iotop /etc/init.d/mysqld start mysql_secure_installation
Démarrage ponctuel du master au premier plan, le temps que Puppet génère son autorité de certification (CA) et ses certificats SSL locaux :
puppet master --verbose --no-daemonize
Librarian-puppet et gestion des modules
Librarian-puppet télécharge automatiquement les modules déclarés dans un Puppetfile, à l'image d'un gestionnaire de dépendances applicatif.
gem install librarian-puppet touch /etc/puppet/Modulefile librarian-puppet init
Exemple de Puppetfile pointant vers le Puppet Forge public et une sélection de modules communautaires :
cat >/etc/puppet/Puppetfile <<EOF #!/usr/bin/env ruby #^syntax detection forge "http://forge.puppetlabs.com" # use dependencies defined in Modulefile modulefile mod 'puppetlabs/stdlib' mod 'puppetlabs/concat' mod 'puppetlabs/firewall' mod 'puppetlabs/ntp' mod 'puppetlabs/haproxy' mod 'puppetlabs/nginx' mod 'puppetlabs/git' mod 'example42/logrotate' mod 'dwerder/graphite' mod 'pdxcat/collectd' EOF librarian-puppet install --verbose
Puppet Master en Apache/Passenger
Installation de Passenger et du module Apache associé :
gem install rack passenger passenger-install-apache2-module
VirtualHost Apache du master, écoutant sur le port standard 8140 avec authentification client par certificat SSL :
cat >/etc/httpd/conf.d/puppetmaster.conf <<EOF
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-5.0.14/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-5.0.14
PassengerDefaultRuby /usr/bin/ruby
</IfModule>
PassengerHighPerformance On
PassengerMaxPoolSize 2
PassengerMaxRequests 1000
PassengerPoolIdleTime 600
Listen 8140
<VirtualHost *:8140>
SSLEngine On
SSLProtocol All -SSLv2
SSLCipherSuite HIGH:!ADH:RC4+RSA:-MEDIUM:-LOW:-EXP
SSLCertificateFile /var/lib/puppet/ssl/certs/puppet.example.tld.pem
SSLCertificateKeyFile /var/lib/puppet/ssl/private_keys/puppet.example.tld.pem
SSLCertificateChainFile /var/lib/puppet/ssl/ca/ca_crt.pem
SSLCACertificateFile /var/lib/puppet/ssl/ca/ca_crt.pem
SSLCARevocationFile /var/lib/puppet/ssl/ca/ca_crl.pem
SSLVerifyClient optional
SSLVerifyDepth 1
SSLOptions +StdEnvVars +ExportCertData
RequestHeader set X-SSL-Subject %{SSL_CLIENT_S_DN}e
RequestHeader set X-Client-DN %{SSL_CLIENT_S_DN}e
RequestHeader set X-Client-Verify %{SSL_CLIENT_VERIFY}e
DocumentRoot /usr/share/puppet/rack/puppetmasterd/public/
<Directory /usr/share/puppet/rack/puppetmasterd/>
Options None
AllowOverride None
Order Allow,Deny
Allow from All
</Directory>
</VirtualHost>
EOF
mkdir -p /usr/share/puppet/rack/puppetmasterd
mkdir /usr/share/puppet/rack/puppetmasterd/public /usr/share/puppet/rack/puppetmasterd/tmp
cp /usr/share/puppet/ext/rack/config.ru /usr/share/puppet/rack/puppetmasterd/
chown puppet /usr/share/puppet/rack/puppetmasterd/config.ru
apachectl configtest
service httpd restart
Note : les chemins passenger-5.0.14 et ruby/gems/1.8 sont spécifiques à la version installée par RVM/gem au moment de l'exécution — ils doivent être adaptés à l'environnement réel (voir la sortie de passenger-install-apache2-module).
Coloration syntaxique Vim
Récupération du fichier de coloration syntaxique des manifests Puppet (voir Puppet.vim pour le détail du fichier) :
mkdir -p ~/.vim/syntax cd ~/.vim/syntax/ curl -sO http://downloads.puppetlabs.com/puppet/puppet.vim
Base de données et déploiement de Puppet Dashboard
Création de la base MySQL dédiée au dashboard :
CREATE DATABASE dashboard CHARACTER SET utf8; CREATE USER 'dashboard'@'localhost' IDENTIFIED BY 'ChangeMe_StrongPassword!'; GRANT ALL PRIVILEGES ON dashboard.* TO 'dashboard'@'localhost';
Fichier de configuration de la connexion base de données du dashboard :
cat >/usr/share/puppet-dashboard/config/database.yml <<EOF production: database: dashboard username: dashboard password: ChangeMe_StrongPassword! encoding: utf8 adapter: mysql development: database: dashboard_development username: dashboard password: encoding: utf8 adapter: mysql test: database: dashboard_test username: dashboard password: encoding: utf8 adapter: mysql EOF cd /usr/share/puppet-dashboard/ rake RAILS_ENV=production db:migrate
VirtualHost Apache du dashboard (port 3000), avec restriction d'accès par IP sur les endpoints de reporting et authentification basique sur le reste de l'interface :
cat >/etc/httpd/conf.d/dashboard.conf <<EOF
<IfModule mod_passenger.c>
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-5.0.14
PassengerDefaultRuby /usr/bin/ruby
</IfModule>
PassengerHighPerformance On
PassengerMaxPoolSize 2
PassengerMaxRequests 1000
PassengerPoolIdleTime 600
PassengerStatThrottleRate 120
<VirtualHost *:3000>
ServerName puppet.example.tld
DocumentRoot /usr/share/puppet-dashboard/public/
<Directory /usr/share/puppet-dashboard/public/>
Options None
AllowOverride None
Order Allow,Deny
Allow from All
</Directory>
ErrorLog /var/log/httpd/puppet.example.tld_error.log
LogLevel warn
CustomLog /var/log/httpd/puppet.example.tld_access.log combined
<Location /reports/upload>
<Limit POST>
Order allow,deny
Allow from localhost
Allow from 127.0.0.1
Allow from 203.0.113.10
Satisfy any
</Limit>
</Location>
<Location /nodes>
<Limit GET>
Order allow,deny
Allow from localhost
Allow from 127.0.0.1
Allow from 203.0.113.10
Satisfy any
</Limit>
</Location>
<Location "/">
AuthType basic
AuthName "Puppet Dashboard"
Require valid-user
AuthBasicProvider file
AuthUserFile /etc/httpd/users
</Location>
</VirtualHost>
EOF
htpasswd -c /etc/httpd/htpasswd adminuser
touch /usr/share/puppet-dashboard/log/production.log
chmod 0666 /usr/share/puppet-dashboard/log/production.log
Activation des services
Le master et le dashboard sont désormais servis par Apache/Passenger : les services standalone puppetmaster et puppet-dashboard sont donc désactivés au profit d'httpd et des workers du dashboard.
chkconfig puppetmaster off chkconfig puppet-dashboard off rvm use system chkconfig httpd on chkconfig mysqld on chkconfig puppet-dashboard-workers on # Nettoyage des paquets de compilation devenus inutiles yum remove gcc-c++ make automake
Voir aussi
- Puppet — page hub de la sous-branche Puppet
- Puppet opensource — installation manuelle pas à pas, orientée configuration
- Puppet-dashboard — interface web de reporting
- Puppet forge — dépôt public de modules consommé par Librarian-puppet
- Puppet client — configuration des agents qui se connectent à ce master
- Puppet.vim — coloration syntaxique des manifests