SALUT,
étant donné que j'ai galéré pour mettre mon master en place, je vous propose ma version. En esperant aider certain
Voici un tuto donc, en complément de la doc officielle : http://docs.puppetlabs.com/guides/installation.html
+--------------------------------------------------------+
|Red Hat Enterprise Linux Server release 6.5 (Santiago) |
+--------------------------------------------------------+
_________________________________________________________________________________________________________
POST INSTALLATION
installation de ruby :
1- Modifier les Repo si besoin
Code :
- [root@rennspocpuppet]# yum install ruby-rdoc
- Dependencies Resolved
- ================================================================================
- Package Arch Version Repository Size
- ================================================================================
- Installing:
- ruby-rdoc x86_64 1.8.7.352-12.el6_4 Server 376 k
- Installing for dependencies:
- compat-readline5 x86_64 5.2-17.1.el6 Server 129 k
- ruby x86_64 1.8.7.352-12.el6_4 Server 534 k
- ruby-irb x86_64 1.8.7.352-12.el6_4 Server 313 k
- ruby-libs x86_64 1.8.7.352-12.el6_4 Server 1.6 M
- simontuto
- Transaction Summary
- ================================================================================
- Install 5 Package(s)
- Total download size: 3.0 M
- Installed size: 10 M
|
2- Install du rpm
Code :
- [root@rennspocpuppet tmp]# rpm -ivh rubygems-1.3.7-5.el6.noarch.rpm
- Preparing... ########################################### [100%]
- 1:rubygems ########################################### [100%]
|
Le rpm est difficilement trouvable sur la toile, je l'ai up : http://r07tbo.1fichier.com/
ou
http://uploadhero.co/dl/33fb78a4
INSTALLATION
Création de l’utilisateur PUPPET avant l’installation :
Code :
- [root@rennspocpupmaster ~]# mkdir /usr/local/home
- [root@rennspocpupmaster ~]# adduser -c "Puppet user" -d /usr/local/home/puppet -m -U -s
- /bin/bash puppet
|
Installation du serveur PuppetMaster
Ajout dans un premier temps le repository :
Puis
Code :
- [root@rennspocpuppet ~]# yum install puppet-server
- Installed:
- puppet-server.noarch 0:3.4.2-1.el6
- Dependency Installed:
- augeas-libs.x86_64 0:1.0.0-5.el6 facter.x86_64 1:1.7.4-1.el6
- hiera.noarch 0:1.3.0-1.el6 libselinux-ruby.x86_64 0:2.0.94-5.3.el6_4.1
- puppet.noarch 0:3.4.2-1.el6 ruby-augeas.x86_64 0:0.4.1-1.el6
- ruby-rgen.noarch 0:0.6.5-1.el6 ruby-shadow.x86_64 0:1.4.1-13.el6
- rubygem-json.x86_64 0:1.5.5-1.el6
- Complete!
|
Vérification :
Code :
- [root@rennspocpuppet ~]# rpm -qa | grep puppet
- puppet-3.4.2-1.el6.noarch
- puppet-server-3.4.2-1.el6.noarch
- puppetlabs-release-6-7.noarch
|
Configuration de puppet.conf
faire un back up :
Code :
- cp puppet.conf puppet.conf.old
|
puis éditez la conf dans /etc/puppet/:
vi puppet.conf
Code :
- [main]
- logdir=/var/log/puppet
- vardir=/var/lib/puppet
- ssldir=/var/lib/puppet/ssl
- rundir=/var/run/puppet
- factpath=$vardir/lib/facter
- templatedir=$confdir/templates
- [master]
- report=true
- reports=log,store
- modulepath=/etc/puppet/modules
- [agent]
- server=rennspocpuppet.domain
|
Ps: Le master est son propre Agent
Code :
- [root@rennspocpuppet puppet]# /etc/init.d/puppetmaster start
- Starting puppetmaster: [ OK ]
- [root@rennspocpuppet puppet]# /etc/init.d/puppet start
- Starting puppet agent: [ OK ]
|
Certificat
Sur le client faire une demande de certificat :
Code :
- [root@rennspocpupsrv01 ~]# puppet agent --server rennspocpuppet.domain --waitforcert 60 --test
- Info: Retrieving plugin
- Info: Caching catalog for rennspocpupsrv01.domain
|
Vérifier que de base le répertoire des requests est vide sinon celà peut causer des erreurs ( /etc/puppet/ssl/certificate_requests)
Sur le master, il faut signer ce certificat :
Vérif de la présence du nouveau certif :
Code :
- [root@rennspocpuppet puppet]# puppet cert list --all
- "rennspocpupsrv01.domain" (SHA256) 53:C0:D4:26:51:39:24:B8:C6:BC:05:E2:99:23:2F:A9:E7:C7:CE:A5:25:E6:D4:13:90:5D:BD:48:D6:3A:F3:E7*
- + "rennspocpuppet.domain" (SHA256) A7:AD:86:69:B2:4B:C2:XT:2A:85:5D:77:52:A4:00:74:EC:70:7C:B4:19:EF:C9:86:10:02:DE:B7:C7:EA:E4:DE (alt names: "DNS:puppet", "DNS:puppet.domain", "DNS:rennspocpuppet.domain" )**
- *en gras : le nouveau certificat en attente d’être signé
- **le certificat local du master
|
Signons-le via :
Code :
- [root@rennspocpuppet puppet]# puppet cert --sign rennspocpupsrv01.domain
- Notice: Signed certificate request for rennspocpupsrv01.domain
- Notice: Removing file Puppet::SSL::CertificateRequest rennspocpupsrv01.domain at '/var/lib/puppet/ssl/ca/requests/rennspocpupsrv01.domain.pem'
|
Sur le client :
le client retourne :
Code :
- Info: Applying configuration version '1390312822'
- Notice: Finished catalog run in 0.02 seconds
|
Vérifier que le certif est bien enregistré :
Code :
- [root@rennspocpuppet puppet]# puppet cert list --all
- + "rennspocpuppet.domain" (SHA256) A7:AD:86:69:B2:4B:C2:EF:2A:85:5D:77:52:A4:00:74:EC:70:7C:B4:19:EF:C9:86:10:02:DE:B7:C7:EA:E4:DE (alt names: "DNS:puppet", "DNS:puppet.domain", "DNS:rennspocpuppet.domain" )
- + "rennspocpupsrv01.domain" (SHA256) 7A:01:AF:4A:A9:1B:69:16:94:69:29:2E:15:FF:64:CF:93:A9:0C:74:B7:2D:D8:F4:1B:EC:AE:DF:58:DA:E3:F7
|
À présent le client communique avec le Puppet Master, voyons à présent l’application de “manifests”
Code :
- ERREURS RENCONTREES : (tail -f /var/log/puppet/masterhttp.log)
- ERROR OpenSSL::SSL::SSLError: SSL_accept returned=1 errno=0 state=SSLv3 read client certificate A: tlsv1 alert unknown ca
- Probleme dû au fichier de conf et le mauvais repertoire SSL référencé
|
L'installation est à peu prEs pareil. Sauf qu'il ne faut pas installer puppet master. Il faut cependant ajouter le user (voir ci-dessus), ruby etc..
La conf de mon client : puppet.conf
Code :
- [main]
- # The Puppet log directory.
- # The default value is '$vardir/log'.
- logdir = /var/log/puppet
- # Where Puppet PID files are kept.
- # The default value is '$vardir/run'.
- rundir = /var/run/puppet
- # Where SSL certificates are kept.
- # The default value is '$confdir/ssl'.
- #Serveur maitre
- server=rennspocpuppet.domain
- [agent]
- # The file in which puppetd stores a list of the classes
- # associated with the retrieved configuratiion. Can be loaded in
- # the separate ``puppet`` executable using the ``--loadclasses``
- # option.
- # The default value is '$confdir/classes.txt'.
- classfile = $vardir/classes.txt
- # Where puppetd caches the local configuration. An
- # extension indicating the cache format is added automatically.
- # The default value is '$confdir/localconfig'.
- localconfig = $vardir/localconfig
|
Puis démarrer le puppet agent ⇒ /etc/init.d/puppet start
Les Manifestes
Pour se familiariser avec les commandes, j’ai bêtement suivi les premieres instructions de la docs officielle :
Créer les fichiers dans /root/examples/ , puis appliquer les manifests via puppet apply *.pp . La première partie se fait en local.
Code :
- [root@rennspocpuppet manifests]# cat /etc/puppet/manifests/site.pp
- file {'/tmp/test1':
- ensure => file,
- content => "Hi.\n",
- }
- file {'/tmp/test2':
- ensure => directory,
- mode => 0644,
- }
- file {'/tmp/test3':
- ensure => link,
- target => '/tmp/test1',
- }
- notify {"DONE":}
- notify {"Ca ! c'est fait !":}
|
Code :
- [root@rennspocpuppet manifests]# puppet apply site.pp
- Notice: Compiled catalog for rennspocpuppet.rennes.eu.thmulti.com in environment production in 0.09 seconds
- Notice: DONE
- Notice: /Stage[main]/Main/Notify[DONE]/message: defined 'message' as 'DONE'
- Notice: tout est fait
- Notice: /Stage[main]/Main/Notify[tout est fait]/message: defined 'message' as 'tout est fait'
- Notice: Finished catalog run in 0.04 seconds
- [root@rennspocpuppet manifests]# ls -la /tmp/
- -rw-r--r-- 1 root root 4 Jan 22 11:30 test1
- drwxr-xr-x 2 root root 4096 Jan 22 11:30 test2
- lrwxrwxrwx 1 root root 10 Jan 22 11:30 test3 -> /tmp/test1
|
Et concernant le client ?
En tapant la commande ci-dessous, l’agent va alors appliquer les manifests présent dans le repertoire /etc/puppet/manifest du MASTER:
Code :
- [root@rennspocpupsrv01 ~]# puppet agent --test
- Info: Retrieving plugin
- Info: Caching catalog for rennspocpupsrv01.rennes.eu.thmulti.com
- Info: Applying configuration version '1390387005'
- Notice: /Stage[main]/Main/File[/tmp/test1]/ensure: defined content as '{md5}efd42eb5f26bbbc72e5446a3d0febb0f'
- Notice: /Stage[main]/Main/File[/tmp/test3]/ensure: created
- Notice: DONE
- Notice: /Stage[main]/Main/Notify[DONE]/message: defined 'message' as 'DONE'
- Notice: /Stage[main]/Main/File[/tmp/test2]/ensure: created
- Notice: tout est fait
- Notice: /Stage[main]/Main/Notify[tout est fait]/message: defined 'message' as 'tout est fait'
- Notice: Finished catalog run in 0.03 seconds
- [root@rennspocpupsrv01 ~]# ls -la /tmp/
- total 5116
- drwxrwxrwt. 4 root root 4096 Jan 22 11:36 .
- dr-xr-xr-x. 25 root root 4096 Dec 11 12:10 ..
- -rw-r--r-- 1 root root 4 Jan 22 11:36 test1
- drwxr-xr-x 2 root root 4096 Jan 22 11:36 test2
- lrwxrwxrwx 1 root root 10 Jan 22 11:36 test3 -> /tmp/test1
|
Analyse de la requête (début) :
Code :
- [root@rennspocpuppet manifests]# tcpdump -i eth0 host rennspocpupsrv01
- tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
- listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
- 11:41:39.801454 IP rennspocpupsrv01.domain.45470 > rennspocpuppet.domain.8140: Flags [S], seq 1144053067, win 14600, options [mss1460,sackOK,TS val 3634344643 ecr 0,nop,wscale 7], length 0
- 11:41:39.801496 IP rennspocpuppet.domain.8140 > rennspocpupsrv01.domain.45470: Flags [S.], seq 2178572627, ack 1144053068, win 14480, options [mss 1460,sackOK,TS val 159575657 ecr 3634344643,nop,wscale 7], length 0
|
Problème de droit rencontré quand je veux qu'un fichier soit créé dans /etc de mon client suite à l'application d'un manifest. Dans le repertoire /tmp il n'y a pas de soucis.
Arrêt de PUPPET OPEN SOURCE et passage à FABRIC, également OPENSOURCE mais cette fois-ci exploitant le python beaucoup plus democratisé que le ruby.
je combine Fabric avec "Cuisine"
FABRIC
http://docs.fabfile.org/en/1.8/index.html
CUISINE
https://github.com/sebastien/cuisine
Message édité par nomiss le 20-02-2014 à 14:54:23