Projet

Général

Profil

StageVidal » Historique » Version 38

Maurice Vidal, 20/05/2012 21:49

1 1 Laurent GUERBY
h1. StageVidal
2 1 Laurent GUERBY
3 11 Maurice Vidal
Références : http://chiliproject.tetaneutral.net/projects/tetaneutral/wiki/Stages2012
4 16 Maurice Vidal
5 20 Maurice Vidal
NickName sur l'IRC de l'association : 
6 16 Maurice Vidal
*<pre>
7 16 Maurice Vidal
_Mvidal_
8 16 Maurice Vidal
</pre>*
9 11 Maurice Vidal
10 31 Laurent GUERBY
h2. TODO
11 31 Laurent GUERBY
12 31 Laurent GUERBY
outils de communication de fichier IRC
13 31 Laurent GUERBY
14 31 Laurent GUERBY
http://paste.debian.net/164858/
15 31 Laurent GUERBY
http://pastebin.com
16 31 Laurent GUERBY
17 37 Maurice Vidal
h1. Tutoriel SSH :
18 37 Maurice Vidal
19 37 Maurice Vidal
L'objectif présenté ici est de mettre en place une connexion sécurisée entre un client et un serveur à travers une zone non fiable (Internet) grâce à un tunnel crypté. Nous nous serviront d'un système de clé SSH qui servira à nous authentifier : une clé privée que nous garderons sur le poste local, et une clé publique que nous mettrons dans le serveur.
20 37 Maurice Vidal
21 37 Maurice Vidal
Nous allons prendre comme exemple, le poste distant de l'association pvm3.tetaneutral.net (qui jouera le rôle du serveur), et comme poste local, pc_local.
22 37 Maurice Vidal
23 37 Maurice Vidal
Sur le poste distant il faut installer le package openssh-server :
24 37 Maurice Vidal
*aptitude install openssh-server*
25 37 Maurice Vidal
26 37 Maurice Vidal
Et sur le poste local il faut installer le package openssh-client :
27 37 Maurice Vidal
*aptitude install openssh-client*
28 37 Maurice Vidal
29 37 Maurice Vidal
h3. Configuration du poste local :
30 37 Maurice Vidal
31 37 Maurice Vidal
Nous allons commencer par générer une clé SSH.
32 37 Maurice Vidal
33 37 Maurice Vidal
*ssh-keygen*
34 37 Maurice Vidal
	(/root/.ssh/id_rsa) : 
35 37 Maurice Vidal
	enter passphrase :
36 37 Maurice Vidal
	enter same passphrase :
37 37 Maurice Vidal
38 37 Maurice Vidal
Par défaut la clé publique sera créée au nom de /root/.ssh/id_rsa.pub et la clé privée au nom de /root/.ssh/id_rsa.
39 37 Maurice Vidal
40 37 Maurice Vidal
En laissant chacun de ces champs vides, le chemin sera celui utilisé par défaut et aucune passphrase ne sera nécessaire. La passphrase sert uniquement à protéger la clé privé si on craint de ne pas la garder en sûreté sur son poste local.
41 37 Maurice Vidal
42 37 Maurice Vidal
On vérifie que les clés soient bien créées (exemple type) : 
43 37 Maurice Vidal
44 37 Maurice Vidal
*ls /root/.ssh/*		
45 37 Maurice Vidal
id_rsa		id_rsa.pub		know_hosts
46 37 Maurice Vidal
47 37 Maurice Vidal
h3. Configuration du poste distant :
48 37 Maurice Vidal
49 37 Maurice Vidal
Nous allons modifier le fichier de configuration se trouvant dans /root/.shh/authorized_keys pour venir y ajouter la clé publique (id_rsa.pub) du poste local, ce lui permettra de venir se connecter au serveur
50 37 Maurice Vidal
51 37 Maurice Vidal
Si nous avons récupéré la clé publique sur le serveur, nous pouvons l'insérer dans le fichier des clés autorisées :
52 37 Maurice Vidal
*cat id_rsa.pub >> ~/.ssh/authorized_keys*
53 37 Maurice Vidal
54 37 Maurice Vidal
Le fichier de configuration pour le démon SSHD se situe à /etc/ssh/sshd_config, on le modifie pour améliorer la sécurité. Quelques options importantes :
55 37 Maurice Vidal
56 37 Maurice Vidal
57 37 Maurice Vidal
* ListenAddress X.X.X.X:X    		Change le port d’écoute, ainsi l’intrus ne peut être 						complètement sûr de l’exécution d’un  démon SSHD					(c’est de la sécurité par l’obscurité).
58 37 Maurice Vidal
* Protocole 2   				Désactiver le protocole version 1, car il a des défauts de 					conception qui facilite le crack de mots de passe.
59 37 Maurice Vidal
* PermitRootLogin no 			Cette option permet de ne pas autoriser la connexion en 					root sur la machine.
60 37 Maurice Vidal
* PermitEmptyPasswords no   		Les mots de passe vides sont un affront au système de 					sécurité.
61 37 Maurice Vidal
* PasswordAuthentication yes 		 Il est plus sûr d’autoriser l’accès à la machine 						uniquement aux utilisateurs avec des clés SSH placées 					dans le  fichier /root/.ssh/authorized_keys, il faut donc 					placer cette option à "no".
62 37 Maurice Vidal
* SyslogFacility AUTH 		Fichiers journaux.
63 37 Maurice Vidal
* LogLevel INF                   Fichiers journaux.
64 37 Maurice Vidal
* 
65 37 Maurice Vidal
66 37 Maurice Vidal
Une fois le fichier de configuration prêt, il ne reste plus qu'à relancer le service :
67 37 Maurice Vidal
*/etc/init.d/ssh reload*
68 37 Maurice Vidal
69 37 Maurice Vidal
h3. Commandes utiles :
70 37 Maurice Vidal
71 37 Maurice Vidal
Se connecter en SSH sur le port 443 de la machine pvm3 de tetaneutral.net :
72 37 Maurice Vidal
*ssh -p 443 root@pvm3.tetaneutral.net*
73 37 Maurice Vidal
74 37 Maurice Vidal
Copier le fichier distant /var/log/mail.log sur son poste local (il ne faut pas être connecté en SSH) :
75 37 Maurice Vidal
*scp -P 443 root@pvm3.tetaneutral.net:/var/log/mail.log /tmp/*
76 37 Maurice Vidal
Inversement pour copier un fichier local vers un poste distant (ne pas être connecté en SSH) 
77 37 Maurice Vidal
*scp -P 443 fichier_local root@pvm1.tetaneutral.net:/home/maumau/lol.txt*
78 37 Maurice Vidal
79 37 Maurice Vidal
h3. Pour se déconnecter : 
80 37 Maurice Vidal
81 37 Maurice Vidal
*CTRL + d*
82 37 Maurice Vidal
83 37 Maurice Vidal
h3. Voir les log de ssh :
84 37 Maurice Vidal
85 37 Maurice Vidal
*tailf /var/log/auth.log*
86 37 Maurice Vidal
87 37 Maurice Vidal
h1. PROJET PUPPET : DRBD + MX REDONDANT
88 37 Maurice Vidal
89 33 Maurice Vidal
h2. Roadmap
90 20 Maurice Vidal
91 14 Maurice Vidal
Semaine 01, 09/04 - 13/04 : Prise en main de l'existant (SSH, IRC, Machines Virtuelles)
92 13 Maurice Vidal
Semaine 02, 16/04 - 20/04 : Documentation sur le gestionnaire Puppet
93 1 Laurent GUERBY
Semaine 03, 23/04 - 28/04 : Maîtrise et configuration de Puppet
94 1 Laurent GUERBY
Semaine 04, 30/04 - 04/05 : Déploiement de Bind, Unbound et de Postfix via Puppet
95 25 Maurice Vidal
Semaine 05, 07/05 - 11/05 : Documentation sur DRBD 
96 26 Maurice Vidal
Semaine 06, 14/05 - 18/05 : Mise en place d'un MX redondant grâce à DRBD
97 26 Maurice Vidal
98 37 Maurice Vidal
h2. Aides Tutoriels sur Puppet
99 26 Maurice Vidal
100 26 Maurice Vidal
http://doc.ubuntu-fr.org/puppet
101 1 Laurent GUERBY
http://www.crium.univ-metz.fr/docs/system/puppet.html
102 18 Maurice Vidal
http://www.octopuce.fr/Puppet-Administration-systeme-centralisee
103 19 Maurice Vidal
http://bitfieldconsulting.com/puppet-tutorial-2
104 1 Laurent GUERBY
http://www.craigdunn.org/2010/08/part-2-puppet-2-6-1-configure-puppetmaster-and-puppetd/
105 1 Laurent GUERBY
http://docs.puppetlabs.com/guides/environment.html
106 1 Laurent GUERBY
http://projects.puppetlabs.com/projects/puppet/wiki/Simplest_Puppet_Install_Pattern
107 1 Laurent GUERBY
http://chiliproject.tetaneutral.net/projects/tetaneutral/wiki/PUPPET
108 1 Laurent GUERBY
http://finninday.net/wiki/index.php/Zero_to_puppet_in_one_day
109 1 Laurent GUERBY
http://madeinsyria.fr/2011/06/howto-puppet-administration-et-industrialisation-de-masse/
110 27 Maurice Vidal
http://jeyg.info/mise-en-place-de-puppet-un-gestionnaire-de-configuration-linuxunix/
111 1 Laurent GUERBY
http://www.deimos.fr/blocnotesinfo/index.php?title=Puppet_:_Solution_de_gestion_de_fichier_de_configuration
112 1 Laurent GUERBY
http://bitfieldconsulting.com/puppet-tutorial
113 1 Laurent GUERBY
http://www.unixgarden.com/index.php/gnu-linux-magazine/les-sysadmins-jouent-a-la-poupee
114 1 Laurent GUERBY
115 37 Maurice Vidal
h2. Aides Tutoriels sur DRBD
116 20 Maurice Vidal
117 13 Maurice Vidal
http://wapiti.telecom-lille1.eu/commun/ens/peda/options/ST/RIO/pub/exposes/exposesrio2007/legrand-playez/howto.htm
118 13 Maurice Vidal
http://www.drbd.org/users-guide-emb/p-work.html
119 13 Maurice Vidal
http://doc.ubuntu-fr.org/drbd
120 14 Maurice Vidal
http://doc.ubuntu-fr.org/tutoriel/mirroring_sur_deux_serveurs
121 13 Maurice Vidal
122 37 Maurice Vidal
h2. Aides Tutoriels sur UnBound
123 1 Laurent GUERBY
124 14 Maurice Vidal
http://www.deimos.fr/blocnotesinfo/index.php?title=Fichier:Installing_And_Using_The_Unbound_Name_Server.pdf
125 14 Maurice Vidal
http://unbound.net/documentation/index.html
126 14 Maurice Vidal
http://www.howtoforge.com/installing-using-unbound-nameserver-on-debian-etch
127 14 Maurice Vidal
http://www.bortzmeyer.org/unbound.html
128 14 Maurice Vidal
129 37 Maurice Vidal
h2. Aides Tutoriels sur BIND
130 14 Maurice Vidal
131 21 Maurice Vidal
http://fr.wikibooks.org/wiki/Le_syst%C3%A8me_d%27exploitation_GNU-Linux/Le_serveur_de_noms_Bind
132 14 Maurice Vidal
http://www.deimos.fr/blocnotesinfo/index.php?title=Installation_et_configuration_d%27un_serveur_Bind9_primaire_(Master)
133 17 Maurice Vidal
http://www.howtoforge.com/traditional_dns_howto
134 1 Laurent GUERBY
http://coagul.org/drupal/article/installation-d%E2%80%99-serveur-dns-bind-9-sur-debian
135 1 Laurent GUERBY
136 38 Maurice Vidal
h2. Aides Tutoriels sur Postfix Ldap
137 38 Maurice Vidal
138 38 Maurice Vidal
http://www.bizeul.net/?2005/05/27/7-serveur-de-messagerie-multi-domaines-avec-postfix-openldap-et-courier
139 38 Maurice Vidal
http://www.mp-poissy.ac-versailles.fr/Formations/05-06/Pdf/courrier_ldap.pdf
140 38 Maurice Vidal
http://blog.wains.be/2010/01/25/postfix-virtual-usersgroupsaliases-stored-in-ldap/
141 38 Maurice Vidal
http://wiki.linuxwall.info/doku.php/fr:ressources:dossiers:postfix:ldap
142 38 Maurice Vidal
http://www.mp-poissy.ac-versailles.fr/Formations/05-06/Pdf/courrier_ldap.pdf
143 38 Maurice Vidal
http://www.404blog.net/?p=36
144 38 Maurice Vidal
http://www.linux-france.org/prj/inetdoc/cours/admin.reseau.ldap.synthese/admin.reseau.ldap.srvr.html
145 38 Maurice Vidal
146 1 Laurent GUERBY
h1. Questions
147 1 Laurent GUERBY
148 1 Laurent GUERBY
h2. A propos du DRBD + MX redondant
149 1 Laurent GUERBY
150 37 Maurice Vidal
*j'aurais voulu savoir si il faut que l'on mette en place 1 Bind et 1 Unbound et que l'on y fasse un DRBD sur les sections /etc de chacun de ces deux serveurs ?*
151 1 Laurent GUERBY
152 1 Laurent GUERBY
Réponse : il y a trois choses séparées :
153 1 Laurent GUERBY
154 1 Laurent GUERBY
# configurer deux VM une avec bind et une avec unbound. Comme une partie des fichiers de configuration sont différents pour le moment pas de DRBD, juste bien documenter.
155 1 Laurent GUERBY
# configurer deux VM qui ont un bout de disque répliqué avec DRBD, bien documenter le setup DRBD
156 1 Laurent GUERBY
# configurer deux VM qui sont MX primaire et secondaire d'un domaine, verifier que ça marche. Ensuite essayer de rajouter DRBD pour rendre le setup totalement fiable dans le sens qu'aucune perte de mail entrant n'est possible.
157 1 Laurent GUERBY
158 1 Laurent GUERBY
A chaque fois l'objectif "documenter" est bien sur d'utiliser [[Puppet]] 
159 1 Laurent GUERBY
160 1 Laurent GUERBY
La partie DRBD du MX viendra uniquement a la fin, c'est la plus complexe.
161 1 Laurent GUERBY
162 37 Maurice Vidal
h2. PUPPET : Déploiement de BIND et UNBOUND (sur deux machines)
163 37 Maurice Vidal
164 37 Maurice Vidal
*Puppet est ce que l’on peut appeler un gestionnaire de configuration.
165 37 Maurice Vidal
C’est un outil qui facilite le contrôle et la mise à jour de configurations tout en offrant la possibilité de faire abstraction de l’OS et de l’architecture concernée. Puppet va permettre de déployer des fichiers, des services, des packages, des commandes et même un cron au travers de clients qui deviendront des Serveurs (exemple : BIND, UNBOUND).*
166 37 Maurice Vidal
167 37 Maurice Vidal
Puppet est donc un outil de centralisation de l’administration de systèmes hétérogènes ou homogènes
168 37 Maurice Vidal
Au travers du serveur puppet (PuppetMaster), chaque machine, appelée noeud (node), fait tourner Puppetd, qui :
169 37 Maurice Vidal
+Applique la configuration initiale pour le noeud concerné.+
170 37 Maurice Vidal
+Applique les nouveautés de configuration au fil du temps.+
171 37 Maurice Vidal
+S’assure de manière régulière que la machine correspond bien à la config voulu.+
172 37 Maurice Vidal
173 37 Maurice Vidal
La communication est assurée via des canaux chiffrés, en utilisant le protocole HTTPS de communication de ruby, et donc SSL (une mini-pki est fournie). Puppetmaster sait servir :
174 37 Maurice Vidal
+des recettes de configuration+ (recipes)
175 37 Maurice Vidal
+des fichiers+
176 37 Maurice Vidal
+des modèles+ (qui sont des fichiers avec des variables de remplacement)
177 37 Maurice Vidal
+des objets ruby+ (c’est là l’extensibilité de l’application)
178 37 Maurice Vidal
 Et bien évidemment : Puppet est un logiciel libre écrit en Ruby, multiplateforme : BSD (Free, MacOS ...), Linux (Redhat, Debian, Suse ...), Sun (OPENSolaris ...).
179 37 Maurice Vidal
180 37 Maurice Vidal
Puppet fournit un langage déclaratif simple :
181 37 Maurice Vidal
+classes+ (permet de définir les configurations de chaque service) 
182 37 Maurice Vidal
+héritage+ (permet de regrouper les configurations communes) 
183 37 Maurice Vidal
+types d’objets particuliers+ (définis par puppet, ou par des modules)  +fonctions utilisateur+ 
184 37 Maurice Vidal
+abonnement d’instances à d’autres instances+ (ex : un service est abonné à son fichier de conf, la modif de l’un entraînera le redémarrage de l’autre)
185 37 Maurice Vidal
186 37 Maurice Vidal
h3. *Exemples de types d’objets internes :*
187 37 Maurice Vidal
188 37 Maurice Vidal
+File+, permet de demander qu’un fichier existe, dispose de certains droits, et corresponde éventuellement à un certain contenu, fournit statiquement, ou à travers un modèle (template) avec substitution de variables.
189 37 Maurice Vidal
+Service+, permet de déclarer un service, de s’assurer qu’il fonctionne, de le redémarrer dans certaines conditions (par exemple quand la configuration est modifiée). 
190 37 Maurice Vidal
+Package+, permet de demander l’installation, la mise à jour ou la désinstallation d’un package, en utilisant le système de packaging natif de l’OS utilisé (ports, deb, packages MacosX etc.) 
191 37 Maurice Vidal
+User+, permet de gérer les utilisateurs UNIX (dans /etc/passwd) indépendemment de l’OS utilisé.
192 37 Maurice Vidal
193 37 Maurice Vidal
h3. *Puppet fonctionne selon le modèle client/serveur :*
194 37 Maurice Vidal
195 37 Maurice Vidal
!http://img15.hostingpics.net/pics/54901331cs.jpg!
196 37 Maurice Vidal
197 37 Maurice Vidal
*Pré-requis :*
198 37 Maurice Vidal
199 37 Maurice Vidal
Nous prenons l'exemple que notre serveur Puppet à pour hostname : puppetmaster, et nos clients portent le nom de : puppetcli1, puppetcli2.
200 37 Maurice Vidal
201 37 Maurice Vidal
Comme nom de domaine nous prenons l'exemple de l'université de Perpignan : univ-perp.fr
202 37 Maurice Vidal
203 37 Maurice Vidal
*Et les adresses IP sont donc :*
204 37 Maurice Vidal
205 37 Maurice Vidal
!http://img15.hostingpics.net/pics/229745tab.jpg!
206 37 Maurice Vidal
207 37 Maurice Vidal
208 37 Maurice Vidal
h3. *Installation de Puppet*
209 37 Maurice Vidal
210 37 Maurice Vidal
Serveur :	# apt-get install puppetmaster
211 37 Maurice Vidal
Clients : 	# apt-get install puppet
212 37 Maurice Vidal
213 37 Maurice Vidal
Ici nous utilisons la version 2.6.2 de Puppet. Lors de l’installation, un utilisateur « puppet » sera créé.
214 37 Maurice Vidal
215 37 Maurice Vidal
Tout d'abord il faut que le fichier hosts de chaque client référence l'adresse IP, le hostname et le FQDN du serveur. Ainsi il faut rajouter dans /etc/hosts :
216 37 Maurice Vidal
217 37 Maurice Vidal
192.168.1.15	puppetmaster	puppetmaster.univ-perp.fr
218 37 Maurice Vidal
219 37 Maurice Vidal
De même sur le serveur il faut rajouter les noms des 3 machines clientes de la même façon.
220 37 Maurice Vidal
A ce stade nous n'avons pas de serveurs DNS, justement nous allons le(s) déployer :)
221 37 Maurice Vidal
222 37 Maurice Vidal
Il est important (si l'on a un pare-feu) d'ouvrir les ports 8140 coté serveur :
223 37 Maurice Vidal
*iptables -A INPUT -p tcp -m state --state NEW -s 192.168.1.0/24 --dport 8140 -j ACCEPT*
224 37 Maurice Vidal
225 37 Maurice Vidal
De plus il est important de pouvoir regarder les logs (tant sur le serveur que sur les clients) :
226 37 Maurice Vidal
*tailf /var/log/daemon.log*			
227 37 Maurice Vidal
228 37 Maurice Vidal
h3. *Configuration de Puppet*
229 37 Maurice Vidal
230 37 Maurice Vidal
DEMANDE DE CERTIFICAT
231 37 Maurice Vidal
232 37 Maurice Vidal
*Serveur :*
233 37 Maurice Vidal
Il faut modifier le fichier /etc/puppet/puppet.conf, il doit ressembler à ceci :
234 37 Maurice Vidal
235 37 Maurice Vidal
<pre>
236 37 Maurice Vidal
[main]
237 37 Maurice Vidal
logdir=/var/log/puppet
238 37 Maurice Vidal
vardir=/var/lib/puppet
239 37 Maurice Vidal
ssldir=/var/lib/puppet/ssl
240 37 Maurice Vidal
rundir=/var/run/puppet
241 37 Maurice Vidal
factpath=$vardir/lib/facter
242 37 Maurice Vidal
templatedir=$confdir/templates
243 37 Maurice Vidal
244 37 Maurice Vidal
[master]
245 37 Maurice Vidal
report=true
246 37 Maurice Vidal
reports=log,store
247 37 Maurice Vidal
modulepath=/etc/puppet/modules
248 37 Maurice Vidal
</pre>
249 37 Maurice Vidal
250 37 Maurice Vidal
*Clients :*
251 37 Maurice Vidal
252 37 Maurice Vidal
Ici il faut rajouter le FQDN (ou Hostname s'il n'y a pas de domaine) du serveur, ainsi dans /etc/puppet/puppet.conf :
253 37 Maurice Vidal
254 37 Maurice Vidal
<pre>
255 37 Maurice Vidal
[main]
256 37 Maurice Vidal
...
257 37 Maurice Vidal
server=puppetmaster.univ-perp.fr
258 37 Maurice Vidal
</pre>
259 37 Maurice Vidal
260 37 Maurice Vidal
Une fois cette modification faite, il n'y pas plus qu'à demander au serveur Puppet de signer notre certificat, car rappelons que PUPPET utilise le SSL, il est donc plus sécurisé qu'un NFS.
261 37 Maurice Vidal
262 37 Maurice Vidal
*puppetcli1# puppetd --waitforcert 60 --test*
263 37 Maurice Vidal
ou
264 37 Maurice Vidal
*puppetcli1# puppet agent --waitforcert 60 --test*
265 37 Maurice Vidal
266 37 Maurice Vidal
Le serveur va ensuite visualiser les demandes :
267 37 Maurice Vidal
*puppetmaster#puppetca --list*
268 37 Maurice Vidal
269 37 Maurice Vidal
Puis il va signer les demandes :
270 37 Maurice Vidal
*puppetmaster#puppetca --sign puppetcli1*			
271 37 Maurice Vidal
ou 
272 37 Maurice Vidal
*puppetmaster#puppetca --sign --all* 		(pour tous d'un coup)
273 37 Maurice Vidal
274 37 Maurice Vidal
Le serveur est prêt à l'emploi, et les clients ont un certificat signé. Passons à une configuration axé sur le déploiement de Bind et d'Unbound.
275 37 Maurice Vidal
276 37 Maurice Vidal
Tout d'abord laissez moi vous montrer à quoi va ressembler l'arborescence de votre serveur puppet :
277 37 Maurice Vidal
278 37 Maurice Vidal
!http://img15.hostingpics.net/pics/481782tree.jpg!
279 37 Maurice Vidal
280 37 Maurice Vidal
281 37 Maurice Vidal
Afin d'utiliser Puppet un minimum, nous allons lui demander de déployer UNBOUND sur une machine cliente (puppetcli1). Il va falloir configurer le serveur, ainsi /etc/puppet/fileserver.conf :
282 37 Maurice Vidal
283 37 Maurice Vidal
<pre>
284 37 Maurice Vidal
[files]
285 37 Maurice Vidal
path /etc/puppet/files
286 37 Maurice Vidal
allow *.univ-perp.fr
287 37 Maurice Vidal
</pre>
288 37 Maurice Vidal
289 37 Maurice Vidal
Nous venons d'autoriser seulement les machines provenant du domaine à pouvoir recevoir des fichiers du répertoire /etc/puppet/files/
290 37 Maurice Vidal
291 37 Maurice Vidal
Il faut également créer le fichier : /etc/puppet/namespaceauth.conf et y rajouter :
292 37 Maurice Vidal
293 37 Maurice Vidal
<pre>
294 37 Maurice Vidal
[puppetrunner]
295 37 Maurice Vidal
allow *
296 37 Maurice Vidal
</pre>
297 37 Maurice Vidal
298 37 Maurice Vidal
299 37 Maurice Vidal
Le daemon du client va initialement interroger le fichier /etc/puppet/manifests/site.pp du serveur, c'est pourquoi dans ce fichier nous allons importer tous les fichiers .pp (spécialement conçu pour Puppet).
300 37 Maurice Vidal
/etc/puppet/manifests/site.pp :
301 37 Maurice Vidal
302 37 Maurice Vidal
<pre>
303 37 Maurice Vidal
import "node"
304 37 Maurice Vidal
import "modules.pp"
305 37 Maurice Vidal
import "cron"
306 37 Maurice Vidal
</pre>
307 37 Maurice Vidal
308 37 Maurice Vidal
Ensuite pour éviter de déployer UNBOUND sur tous les nodes, nous allons spécifier lesquels vont recevoir la classe UNBOUND que nous créerons (dans le fichier init.pp du module Unbound). Ainsi dans le fichier /etc/puppet/manifests/node.pp :
309 37 Maurice Vidal
310 37 Maurice Vidal
<pre>
311 37 Maurice Vidal
node basenode {
312 37 Maurice Vidal
	include crontab
313 37 Maurice Vidal
}
314 37 Maurice Vidal
node 'puppetcli1.univ-perp.fr' inherits basenode {
315 37 Maurice Vidal
	include unbound, resolv
316 37 Maurice Vidal
}
317 37 Maurice Vidal
node 'puppetcli2.univ-perp.fr' inherits basenode {
318 37 Maurice Vidal
	include bind, resolv
319 37 Maurice Vidal
}</pre>
320 37 Maurice Vidal
321 37 Maurice Vidal
Ici nous créons un faux node (client puppet) nommé basenode en lui incluant la classe "crontab", et les nodes puppetli1 et puppetcli2 héritent de basenode (autrement dit de la classe crontab). Ensuite nous leurs attribuons la classe unbound et resolv pour puppetcli1 puis bind et resolv pour puppetcli2.
322 37 Maurice Vidal
 
323 37 Maurice Vidal
Il faut également créer le fichier /etc/puppet/manifests/modules.pp qui va référencer les modules du serveur :
324 37 Maurice Vidal
325 37 Maurice Vidal
<pre>
326 37 Maurice Vidal
import "unbound"
327 37 Maurice Vidal
import "bind"
328 37 Maurice Vidal
</pre>
329 37 Maurice Vidal
330 37 Maurice Vidal
On peut appeler un module, le nom d'un répertoire, en effet il est recommandé de créer des modules pour chaque service afin de rendre la configuration plus souple.
331 37 Maurice Vidal
332 37 Maurice Vidal
Pour finir sur la configuration de base, nous allons mettre en place un cron qui se déploiera sur les clients afin de lancer une synchronisation avec le serveur, ainsi quand le cron arrive à son échéance (15 minutes) il va permettre de checker toutes modifications du client puppet. Donc on va créer le fichier /etc/puppet/manifests/cron.pp :
333 37 Maurice Vidal
334 37 Maurice Vidal
<pre>
335 37 Maurice Vidal
class crontab {
336 37 Maurice Vidal
	cron { "synchronisation puppet":
337 37 Maurice Vidal
		command => "/usr/sbin/puppetd --test --server=puppetmaster.univ-perp.fr",
338 37 Maurice Vidal
		minute => "*/15"
339 37 Maurice Vidal
	}
340 37 Maurice Vidal
}
341 37 Maurice Vidal
</pre>
342 37 Maurice Vidal
343 37 Maurice Vidal
Passons à la configuration des modules :
344 37 Maurice Vidal
345 37 Maurice Vidal
h3. Création des modules :
346 37 Maurice Vidal
347 37 Maurice Vidal
*mkdir -p /etc/puppet/modules/unbound/{files,manifests,templates}*
348 37 Maurice Vidal
*mkdir -p /etc/puppet/modules/bind/{files,manifests,templates}*
349 37 Maurice Vidal
350 37 Maurice Vidal
Le dossier MANIFESTS permet de répertorier le fichier init.pp qui défini le coeur du module.
351 37 Maurice Vidal
Le dossier FILES contient les fichiers statiques, ceux qui ne changent pas d'un node à l'autre.
352 37 Maurice Vidal
Le dossier TEMPLATES contient les fichiers de configurations variant d'un hôte à l'autre.
353 37 Maurice Vidal
354 37 Maurice Vidal
+Maintenant que les modules sont crées, nous plaçons le fichier de configuration d'Unbound que voici : /etc/puppet/modules/unbound/files/unbound.conf :+
355 37 Maurice Vidal
356 37 Maurice Vidal
Ici nous faisons la résolution du domaine : univ-perp.fr avec pour serveur DNS : puppetcli1
357 37 Maurice Vidal
358 37 Maurice Vidal
<pre>
359 37 Maurice Vidal
### Simple recursive caching DNS
360 37 Maurice Vidal
## /etc/unbound.conf
361 37 Maurice Vidal
server:
362 37 Maurice Vidal
	verbosity: 1
363 37 Maurice Vidal
 	outgoing-range: 60
364 37 Maurice Vidal
	interface: 192.168.1.16
365 37 Maurice Vidal
 	do-ip4: yes
366 37 Maurice Vidal
 	do-udp: yes
367 37 Maurice Vidal
	do-tcp: yes
368 37 Maurice Vidal
 	access-control: 0.0.0.0/0 allow         	#On autorise l’ensemble d’INTERNET à interroger le DNS
369 37 Maurice Vidal
 chroot: ""                                         		#Pas de chroot par défaut
370 37 Maurice Vidal
 logfile: "/var/log/unbound.log"         		#On défini le fichier de log
371 37 Maurice Vidal
 use-syslog: no                      			#Log par défaut dans syslog
372 37 Maurice Vidal
 hide-identity: yes             			
373 37 Maurice Vidal
 hide-version: yes              			
374 37 Maurice Vidal
 harden-glue: yes					#On dit que le serveur fait autorité sur la zone
375 37 Maurice Vidal
private-domain: "univ-perp.fr."  				#On définit le suffix dns du réseau local
376 37 Maurice Vidal
 local-zone: "univ-perp.fr." static				#on définit qui s'occupe de quoi dans le domaine
377 37 Maurice Vidal
local-data: "univ-perp.fr. IN MX 10 puppetcli2.univ-perp.fr."	#service de messagerie
378 37 Maurice Vidal
local-data: "univ-perp.fr. IN NS puppetcli1.univ-perp.fr."		#service DNS
379 37 Maurice Vidal
local-data: "puppetmaster.univ-perp.fr. IN A 192.168.1.15"  	     	 #résolution : nom -> adresse
380 37 Maurice Vidal
local-data: "puppetcli1.univ-perp.fr. IN A 192.168.1.16"
381 37 Maurice Vidal
local-data: "puppetcli2.univ-perp.fr. IN A 192.168.1.17"
382 37 Maurice Vidal
local-data-ptr: "192.168.1.15 puppetmaster.univ-perp.fr." 		 #résolution inverse : adresse -> nom
383 37 Maurice Vidal
local-data-ptr: "192.168.1.16 puppetcli1.univ-perp.fr."
384 37 Maurice Vidal
local-data-ptr: "192.168.1.17 puppetcli2.univ-perp.fr."
385 37 Maurice Vidal
python:
386 37 Maurice Vidal
remote-control:
387 37 Maurice Vidal
forward-zone:
388 37 Maurice Vidal
	name: "."
389 37 Maurice Vidal
	forward-addr: 192.168.1.1	# DNS de la Box
390 37 Maurice Vidal
</pre>
391 37 Maurice Vidal
392 37 Maurice Vidal
393 37 Maurice Vidal
Passons à la configuration du fichier principal : /etc/puppet/modules/unbound/manifests/init.pp :
394 37 Maurice Vidal
395 37 Maurice Vidal
<pre>
396 37 Maurice Vidal
class unbound {
397 37 Maurice Vidal
	package { unbound: ensure => installed }
398 37 Maurice Vidal
	file { "/etc/unbound/unbound.conf":
399 37 Maurice Vidal
		require => package["unbound"],		
400 37 Maurice Vidal
		notify => Service["unbound"],
401 37 Maurice Vidal
		mode => 644,
402 37 Maurice Vidal
		owner => "root",
403 37 Maurice Vidal
		group => "root",
404 37 Maurice Vidal
		source => "puppet:///modules/unbound/unbound.conf"
405 37 Maurice Vidal
		}	
406 37 Maurice Vidal
	service { unbound: ensure => running,
407 37 Maurice Vidal
			enable => true
408 37 Maurice Vidal
	}	}
409 37 Maurice Vidal
class resolv {
410 37 Maurice Vidal
	file { "/etc/resolv.conf":
411 37 Maurice Vidal
		require => Class["unbound"],
412 37 Maurice Vidal
		ensure => present,
413 37 Maurice Vidal
		content => "domain univ-perp.fr 
414 37 Maurice Vidal
search univ-perp.fr
415 37 Maurice Vidal
nameserver $ipaddress"
416 37 Maurice Vidal
	}
417 37 Maurice Vidal
}
418 37 Maurice Vidal
</pre>
419 37 Maurice Vidal
Pour la classe "unbound", nous venons de lui permettre d'installer le paquet UNBOUND, de lui déployer le fichier de configuration sur /etc/unbound/unbound.conf afin de remplacer l'existant et ensuite nous lui avons forçer le démarrage du daemon UNBOUND. Lors du déploiement d'un fichier, dans le paramètre SOURCE, remarquons qu'il n'est pas nécessaire de référencer le répertoire "files" dans le module, grâce au protocole qui est défini ici : puppet:///
420 37 Maurice Vidal
421 37 Maurice Vidal
Quant à la classe "resolv" est de type TEMPLATES, c'est à dire qu'elle est dynamique, elle s'adapte à l'hôte grâce à son adresse IP qui est remonté grâce aux facts (outils facter qui est compréhensible par PUPPET). En effet Facter est un outil associé à puppet, chargé d’énumérer les paramètres locaux d’un système :
422 37 Maurice Vidal
*Adresse IP 
423 37 Maurice Vidal
Hostname 
424 37 Maurice Vidal
Distribution et version 
425 37 Maurice Vidal
Toutes autres variables locales définies par l’utilisateur.*
426 37 Maurice Vidal
427 37 Maurice Vidal
Il est disponible sur les noeuds utilisant Puppetd, il fournit des variables utilisables dans les templates puppet.
428 37 Maurice Vidal
429 37 Maurice Vidal
Configuration du module BIND 
430 37 Maurice Vidal
431 37 Maurice Vidal
Voici le fichier de configuration /etc/puppet/modules/bind/manifests/init.pp :
432 37 Maurice Vidal
433 37 Maurice Vidal
<pre>
434 37 Maurice Vidal
class bind {
435 37 Maurice Vidal
	package { bind9: ensure => installed }
436 37 Maurice Vidal
	file { "/etc/bind/named.conf.local":
437 37 Maurice Vidal
		require => package ["bind9"],
438 37 Maurice Vidal
		ensure => present,
439 37 Maurice Vidal
		mode => 644,
440 37 Maurice Vidal
		owner => "root",
441 37 Maurice Vidal
		group => "bind",
442 37 Maurice Vidal
		source => "puppet:///modules/bind/named.conf.local" }
443 37 Maurice Vidal
	file { "/etc/bind/named.conf.options":
444 37 Maurice Vidal
		require => package ["bind9"],
445 37 Maurice Vidal
		ensure => present,
446 37 Maurice Vidal
		mode => 644,
447 37 Maurice Vidal
                	owner => "root",
448 37 Maurice Vidal
              		 group => "bind",
449 37 Maurice Vidal
                	source => "puppet:///modules/bind/named.conf.options" }
450 37 Maurice Vidal
	file { "/var/cache/bind/db.univ-perp.fr":
451 37 Maurice Vidal
		require => package ["bind9"],
452 37 Maurice Vidal
		ensure => present,
453 37 Maurice Vidal
                	mode => 644,
454 37 Maurice Vidal
               		 owner => "root",
455 37 Maurice Vidal
                	group => "bind",
456 37 Maurice Vidal
                	source => "puppet:///modules/bind/db.univ-perp.fr" }
457 37 Maurice Vidal
	file { "/var/cache/bind/rev.univ-perp.fr":
458 37 Maurice Vidal
		require => package ["bind9"],
459 37 Maurice Vidal
                	ensure => present,
460 37 Maurice Vidal
                	mode => 644,
461 37 Maurice Vidal
                	owner => "root",
462 37 Maurice Vidal
               		 group => "bind",
463 37 Maurice Vidal
                	source => "puppet:///modules/bind/rev.univ-perp.fr" }
464 37 Maurice Vidal
	service { bind9: ensure => running, 
465 37 Maurice Vidal
		enable => true ,
466 37 Maurice Vidal
		require => package ["bind9"],
467 37 Maurice Vidal
	}	 
468 37 Maurice Vidal
}
469 37 Maurice Vidal
</pre>
470 37 Maurice Vidal
471 37 Maurice Vidal
Ici nous installons (si BIND n'est pas installé) le paquet, puis lui déployons les fichiers de configurations, puis le forçons à être démarré. Nous lui attribuons les droits 644 (par défaut sur Bind), puis le propriétaire root et le groupe bind. 
472 37 Maurice Vidal
Pareillement, ici nous remarquons que pour déployer le fichier, il n'est pas nécessaire de référencer le répertoire "files" dans le module, grâce au protocole qui est défini ici : puppet:///
473 37 Maurice Vidal
474 37 Maurice Vidal
Passons aux fichiers de configurations : /etc/puppet/modules/bind/files/named.conf.local :
475 37 Maurice Vidal
476 37 Maurice Vidal
<pre>
477 37 Maurice Vidal
// La zone primaire univ-perp.fr
478 37 Maurice Vidal
zone "univ-perp.fr" {
479 37 Maurice Vidal
      type master;
480 37 Maurice Vidal
      file "/var/cache/bind/db.univ-perp.fr"; };
481 37 Maurice Vidal
// La zone inverse
482 37 Maurice Vidal
zone "1.168.192.in-addr.arpa" {
483 37 Maurice Vidal
      type master;
484 37 Maurice Vidal
      file "/var/cache/bind/rev.univ-perp.fr";
485 37 Maurice Vidal
};
486 37 Maurice Vidal
</pre>
487 37 Maurice Vidal
488 37 Maurice Vidal
Puis le fichier : /etc/puppet/modules/bind/files/named.conf.options :
489 37 Maurice Vidal
490 37 Maurice Vidal
<pre>
491 37 Maurice Vidal
options {
492 37 Maurice Vidal
	directory "/var/cache/bind";
493 37 Maurice Vidal
forwarders {
494 37 Maurice Vidal
 	8.8.8.8;
495 37 Maurice Vidal
 };
496 37 Maurice Vidal
	auth-nxdomain no;    # conform to RFC1035
497 37 Maurice Vidal
	listen-on { any; };
498 37 Maurice Vidal
	allow-query { any ; };
499 37 Maurice Vidal
};
500 37 Maurice Vidal
</pre>
501 37 Maurice Vidal
502 37 Maurice Vidal
Le fichier de zone primaire UNIV-PERP.FR : /etc/puppet/modules/bind/files/db.univ-perp.fr :
503 37 Maurice Vidal
504 37 Maurice Vidal
<pre>
505 37 Maurice Vidal
;
506 37 Maurice Vidal
; BIND data file for univ-perp.fr
507 37 Maurice Vidal
;
508 37 Maurice Vidal
$TTL    604800
509 37 Maurice Vidal
@       IN      SOA     puppetcli2.univ-perp.fr. admin.univ-perp.fr. (
510 37 Maurice Vidal
                 201205091         ; Serial
511 37 Maurice Vidal
                       604800         ; Refresh
512 37 Maurice Vidal
                        86400         ; Retry
513 37 Maurice Vidal
                      2419200         ; Expire
514 37 Maurice Vidal
                       604800 )       ; Negative Cache TTL
515 37 Maurice Vidal
@      	 IN      NS      puppetcli2.univ-perp.fr.
516 37 Maurice Vidal
puppetcli2    	IN      A       192.168.1.17
517 37 Maurice Vidal
puppetcli1 	IN      A       192.168.1.16
518 37 Maurice Vidal
puppetmaster	IN 	A	192.168.1.15
519 37 Maurice Vidal
</pre>
520 37 Maurice Vidal
521 37 Maurice Vidal
Et pour finir le fichier de zone inverse ARPA : /etc/puppet/modules/bind/rev.univ-perp.fr :
522 37 Maurice Vidal
523 37 Maurice Vidal
<pre>
524 37 Maurice Vidal
;
525 37 Maurice Vidal
; BIND data file for 192.168.1
526 37 Maurice Vidal
;
527 37 Maurice Vidal
$TTL    604800
528 37 Maurice Vidal
@       IN      SOA     puppetcli2.univ-perp.fr. (
529 37 Maurice Vidal
                 201209051         ; Serial
530 37 Maurice Vidal
                       604800         ; Refresh
531 37 Maurice Vidal
                        86400         ; Retry
532 37 Maurice Vidal
                      2419200         ; Expire
533 37 Maurice Vidal
                       604800 )       ; Negative Cache TTL
534 37 Maurice Vidal
@      IN      NS      puppetcli2.univ-perp.fr.
535 37 Maurice Vidal
16     IN      PTR     puppetcli1.univ-perp.fr.
536 37 Maurice Vidal
15	IN	PTR	puppetmaster.univ-perp.fr.
537 37 Maurice Vidal
</pre>
538 37 Maurice Vidal
539 37 Maurice Vidal
h3. *Configuration des templates* 
540 37 Maurice Vidal
541 37 Maurice Vidal
Variables prédéfinie:
542 37 Maurice Vidal
543 37 Maurice Vidal
Ici nous allons vous montrer comment on peut adapter les fichiers de configurations que nous déployons suivant le node.
544 37 Maurice Vidal
Ainsi chaque node aura un paramètre différent d’un autre node, il s’agit du template. Nous allons prendre le cas du fichier de configuration d’Unbound. Sur le serveur Puppet il faut déplacer le fichier /etc/puppet/modules/unbound/files/unbound.conf dans /etc/puppet/modules/unbound/templates/unbound.conf.erb.
545 37 Maurice Vidal
546 37 Maurice Vidal
En effet lorsqu’on créé un template, il doit être sous l’extension "erb".
547 37 Maurice Vidal
En effet nous allons nous servir de la variable "ipaddress" disponible grâce à l’outil facter, ainsi en étant sur le client, il suffit de lancer la commande : *puppetcli1 # facter*	pour obtenir les informations des variables de la machine locale.
548 37 Maurice Vidal
549 37 Maurice Vidal
Nous allons renseigner la variable "ipaddress" grâce aux balises de début: <%=  et aux balises de fin: %>
550 37 Maurice Vidal
Ainsi :
551 37 Maurice Vidal
552 37 Maurice Vidal
Puppetmaster *head /etc/puppet/modules/unbound/templates/unbound.conf.erb*
553 37 Maurice Vidal
554 37 Maurice Vidal
<pre>
555 37 Maurice Vidal
server:
556 37 Maurice Vidal
	verbosity: 1
557 37 Maurice Vidal
 	outgoing-range: 60
558 37 Maurice Vidal
	interface: <%=  ipaddress %>
559 37 Maurice Vidal
 	do-ip4: yes
560 37 Maurice Vidal
 	do-udp: yes
561 37 Maurice Vidal
	do-tcp: yes
562 37 Maurice Vidal
 	access-control: 192.168.1.0/24 allow         
563 37 Maurice Vidal
 chroot: ""                                         	
564 37 Maurice Vidal
 logfile: "/var/log/unbound.log"      
565 37 Maurice Vidal
</pre> 
566 37 Maurice Vidal
567 37 Maurice Vidal
A chaque fois que nous utiliserons les fichiers templates, il faudra changer le chemin source du fichier du serveur Puppet du fichier init.pp, dans cet exemple : /etc/puppet/modules/unbound/manifests/init.pp :
568 37 Maurice Vidal
On remplace : 	source => "puppet:///modules/unbound/unbound.conf" 
569 37 Maurice Vidal
Par :		content => template("/etc/puppet/modules/unbound/templates/unbound.conf.erb"),
570 37 Maurice Vidal
571 37 Maurice Vidal
h3. *Création de variables:*
572 37 Maurice Vidal
573 37 Maurice Vidal
Nous allons maintenant créer des variables qui s’utiliseront uniquement sur les nodes définis. Nous poursuivons sur l’exemple d’Unbound qui se déploiera sur le client : puppetcli1.univ-perp.fr. Dans un premier temps il faut créer la variable dans le fichier /etc/puppet/manifests/node.pp :
574 37 Maurice Vidal
575 37 Maurice Vidal
> node ‘puppetcli1.univ-perp.fr' inherits basenode { 
576 37 Maurice Vidal
> *$network = “192.168.1.0”*
577 37 Maurice Vidal
> include unbound }
578 37 Maurice Vidal
579 37 Maurice Vidal
580 37 Maurice Vidal
Puis l’appliquer sur le fichier /etc/puppet/modules/unbound/templates/unbound.conf.erb :
581 37 Maurice Vidal
Puppetmaster *head /etc/puppet/modules/unbound/templates/unbound.conf.erb*
582 37 Maurice Vidal
583 37 Maurice Vidal
<pre>
584 37 Maurice Vidal
server:
585 37 Maurice Vidal
	verbosity: 1
586 37 Maurice Vidal
 	outgoing-range: 60
587 37 Maurice Vidal
	interface: <%=  ipaddress %>
588 37 Maurice Vidal
 	do-ip4: yes
589 37 Maurice Vidal
 	do-udp: yes
590 37 Maurice Vidal
	do-tcp: yes
591 37 Maurice Vidal
 	access-control: <%= network %>/24 allow         
592 37 Maurice Vidal
 chroot: ""                                         	
593 37 Maurice Vidal
 logfile: "/var/log/unbound.log"      
594 37 Maurice Vidal
</pre> 
595 37 Maurice Vidal
596 37 Maurice Vidal
La mise en place de templates permet de gagner sensiblement du temps sur la configuration des postes, c’est d’ailleurs pour cette utilisation que l’outil facter a été développé. En effet Puppet sert surtout pour les déploiements massifs, le gain de temps et d'énergie est ainsi effectif.
597 37 Maurice Vidal
598 37 Maurice Vidal
h2. *LANCEMENT DE LA SYNCHRONISATION :*
599 37 Maurice Vidal
600 37 Maurice Vidal
Sur le serveur, il faut initier la connexion :
601 37 Maurice Vidal
*puppetmasterd --no-daemonize --debug*
602 37 Maurice Vidal
603 37 Maurice Vidal
Nous lançon le daemon en mode test, c'est à dire non-démon afin de débugger et vérifier que tout se déroule convenablement.
604 37 Maurice Vidal
605 37 Maurice Vidal
Si on rencontre un problème tel que :
606 37 Maurice Vidal
_Could not run: Could not create PID file: /var/run/puppet/master.pid_
607 37 Maurice Vidal
608 37 Maurice Vidal
Il faut alors supprimer le fichier sur le serveur : # *rm /var/run/puppet/master.pid* relancer la commande :
609 37 Maurice Vidal
*puppetmasterd --no-daemonize –debug*
610 37 Maurice Vidal
611 37 Maurice Vidal
Sur les clients on va vérifier le fichier du serveur /etc/puppet/site.pp avec la commande :
612 37 Maurice Vidal
*puppetd --test --server=puppetmaster.univ-perp.fr*
613 37 Maurice Vidal
614 37 Maurice Vidal
A savoir qu'un cron est mis en place afin d'éviter aux clients de renouveller cette commande manuellement, il faut noter que la commande du serveur : "puppetmasterd --no-daemonize -d" ne doit pas être arrêtée.
615 37 Maurice Vidal
616 37 Maurice Vidal
h2. Mise en place d'un DRBD et GFS2 par Puppet
617 37 Maurice Vidal
618 37 Maurice Vidal
*TOUT CE QUI EST DIS A PARTIR DE MAINTENANT DOIS ETRE IDENTIQUE SUR LES DEUX MACHINES, LANCER LES COMMANDES EN MEME TEMPS :*
619 37 Maurice Vidal
620 37 Maurice Vidal
Nous avons besoins de deux nouvelles machines :
621 37 Maurice Vidal
622 37 Maurice Vidal
Hostname : Machine6 = IP : 192.168.1.66
623 37 Maurice Vidal
Hosntame : Machine7 = IP : 192.168.1.77
624 37 Maurice Vidal
625 37 Maurice Vidal
h3. *Installation :*
626 37 Maurice Vidal
627 37 Maurice Vidal
Au préalable il faut un second disque dur sur chaque machines, de taille minimale de 2G. normalement il apparait tel que : /dev/sdb.
628 37 Maurice Vidal
Nous le partitionnons :
629 37 Maurice Vidal
630 37 Maurice Vidal
*cfdisk /dev/sdb*
631 37 Maurice Vidal
NEW => LOGIQUE => Taille totale (faites entré) => WRITE => yes => "q" pour sortir
632 37 Maurice Vidal
633 37 Maurice Vidal
A la suite de cela, nous obtenons la partition : /dev/sdb5.
634 37 Maurice Vidal
635 37 Maurice Vidal
h3. *Installation des outils :*
636 37 Maurice Vidal
637 37 Maurice Vidal
Sur le puppetmaster, nous allons créer deux nouveaux modules :
638 37 Maurice Vidal
639 37 Maurice Vidal
*mkdir -p /etc/puppet/modules/drbd/{files,manifests,templates}*
640 37 Maurice Vidal
*mkdir -p /etc/puppet/modules/gfs2/{files,manifests,templates}*
641 37 Maurice Vidal
642 37 Maurice Vidal
Puis on rajoute nos deux modules dans le fichier /etc/puppet/manifests/modules.pp :
643 37 Maurice Vidal
644 37 Maurice Vidal
<pre>
645 37 Maurice Vidal
import "drbd"
646 37 Maurice Vidal
import "gfs2"
647 37 Maurice Vidal
</pre>
648 37 Maurice Vidal
649 37 Maurice Vidal
Commençons par l'installation de drbd :
650 37 Maurice Vidal
651 37 Maurice Vidal
*vi /etc/puppet/modules/drbd/manifests/init.pp*
652 37 Maurice Vidal
653 37 Maurice Vidal
<pre>
654 37 Maurice Vidal
class drbd::package {
655 37 Maurice Vidal
	package { "drbd8-utils": ensure => installed }
656 37 Maurice Vidal
}
657 37 Maurice Vidal
class drbd::fic {
658 37 Maurice Vidal
	exec { "modprobe":
659 37 Maurice Vidal
		require => Class["drbd::package"],
660 37 Maurice Vidal
		command => "/sbin/modprobe drbd"
661 37 Maurice Vidal
	}
662 37 Maurice Vidal
	file { "/etc/drbd.d/global_common.conf":
663 37 Maurice Vidal
		require => Class["drbd::package"],
664 37 Maurice Vidal
		ensure => present,
665 37 Maurice Vidal
		source => "puppet:///modules/drbd/global_common.conf"
666 37 Maurice Vidal
	}
667 37 Maurice Vidal
	file { "/etc/drbd.d/r0.res":
668 37 Maurice Vidal
		require => Class["drbd::package"],
669 37 Maurice Vidal
		ensure => present,
670 37 Maurice Vidal
		content => template("/etc/puppet/modules/drbd/templates/r0.res.erb")
671 37 Maurice Vidal
	}
672 37 Maurice Vidal
}
673 37 Maurice Vidal
class drbd::command {
674 37 Maurice Vidal
	exec { "create_ressource":
675 37 Maurice Vidal
		require => File["/etc/drbd.d/r0.res"],
676 37 Maurice Vidal
		command => "/sbin/drbdadm create-md r0"
677 37 Maurice Vidal
	}
678 37 Maurice Vidal
	exec { "start_drbd":
679 37 Maurice Vidal
		require => create_ressource"],
680 37 Maurice Vidal
		command => "/usr/sbin/service drbd start"
681 37 Maurice Vidal
	}
682 37 Maurice Vidal
}
683 37 Maurice Vidal
class drbd::cron1 {
684 37 Maurice Vidal
	file { "/root/overwrite.sh":
685 37 Maurice Vidal
		ensure => present,
686 37 Maurice Vidal
		source => "puppet:///modules/drbd/overwrite.sh"
687 37 Maurice Vidal
	}
688 37 Maurice Vidal
	file { "/root/mkfs.sh":
689 37 Maurice Vidal
		ensure => present,
690 37 Maurice Vidal
		source => "puppet:///modules/drbd/mkfs.sh"
691 37 Maurice Vidal
	}
692 37 Maurice Vidal
}
693 37 Maurice Vidal
class drbd::cron1.1 {
694 37 Maurice Vidal
	cron { "cron_over":
695 37 Maurice Vidal
		require => Class["drbd::cron1"],
696 37 Maurice Vidal
		command => "/root/overwrite.sh",
697 37 Maurice Vidal
		hour => "*/2"
698 37 Maurice Vidal
	}
699 37 Maurice Vidal
	cron { "cron_mkfs":	
700 37 Maurice Vidal
		require => Class["drbd::cron1"],
701 37 Maurice Vidal
		command => "/root/mkfs.sh",
702 37 Maurice Vidal
		hour => "*/3",
703 37 Maurice Vidal
		minute => "*/10"
704 37 Maurice Vidal
	}
705 37 Maurice Vidal
}
706 37 Maurice Vidal
class drbd::cron2  {
707 37 Maurice Vidal
	file { "/root/primary.sh":
708 37 Maurice Vidal
		ensure => present,
709 37 Maurice Vidal
		source => "puppet:///modules/drbd/primary.sh"
710 37 Maurice Vidal
	}
711 37 Maurice Vidal
}
712 37 Maurice Vidal
class drbd::cron2.2 {
713 37 Maurice Vidal
	cron { "cron_primary":
714 37 Maurice Vidal
		require => Class["drbd::cron2"],
715 37 Maurice Vidal
		command => "/root/primary.sh",
716 37 Maurice Vidal
		hour => "*/3"
717 37 Maurice Vidal
	}
718 37 Maurice Vidal
}
719 37 Maurice Vidal
class cron_supp {
720 37 Maurice Vidal
	file { "/root/supp.sh":
721 37 Maurice Vidal
		ensure => present,
722 37 Maurice Vidal
		source => $hostname ? {
723 37 Maurice Vidal
			machine6 => "puppet:///modules/drbd/supp.machine6.sh",
724 37 Maurice Vidal
			machine7 => "puppet:///modules/drbd/supp.machine7.sh"
725 37 Maurice Vidal
		}
726 37 Maurice Vidal
	}
727 37 Maurice Vidal
	cron { "delete_cron":
728 37 Maurice Vidal
		require => File["/root/supp.sh"],
729 37 Maurice Vidal
		command => "/root/supp.sh",
730 37 Maurice Vidal
		hour => "*/3",
731 37 Maurice Vidal
		minute => "35"
732 37 Maurice Vidal
	}
733 37 Maurice Vidal
}
734 37 Maurice Vidal
</pre>
735 37 Maurice Vidal
736 37 Maurice Vidal
Puis nous mettons à disposition le fichier de configuration de drbd,
737 37 Maurice Vidal
*vi /etc/puppet/modules/drbd/files/global_common.conf*
738 37 Maurice Vidal
739 37 Maurice Vidal
<pre>
740 37 Maurice Vidal
global {
741 37 Maurice Vidal
	usage-count no;
742 37 Maurice Vidal
}
743 37 Maurice Vidal
common {
744 37 Maurice Vidal
	protocol C;
745 37 Maurice Vidal
	syncer {
746 37 Maurice Vidal
		rate 100M;
747 37 Maurice Vidal
	}
748 37 Maurice Vidal
}</pre>
749 37 Maurice Vidal
750 37 Maurice Vidal
Et on utilise un template pour l'autre partie du fichier de configuration,
751 37 Maurice Vidal
*vi /etc/puppet/modules/drbd/templates/r0.res.erb*
752 37 Maurice Vidal
753 37 Maurice Vidal
<pre>
754 37 Maurice Vidal
resource r0 {
755 37 Maurice Vidal
	device /dev/drbd0;
756 37 Maurice Vidal
	disk <%= disk %>;
757 37 Maurice Vidal
	meta-disk internal;
758 37 Maurice Vidal
	startup {
759 37 Maurice Vidal
		wfc-timeout 120;
760 37 Maurice Vidal
		degr-wfc-timeout 120;
761 37 Maurice Vidal
		become-primary-on both;
762 37 Maurice Vidal
	}
763 37 Maurice Vidal
	disk { on-io-error detach; }
764 37 Maurice Vidal
	net {
765 37 Maurice Vidal
		allow-two-primaries;
766 37 Maurice Vidal
		after-sb-0pri discard-zero-changes;
767 37 Maurice Vidal
		after-sb-1pri discard-secondary;
768 37 Maurice Vidal
		after-sb-2pri disconnect;
769 37 Maurice Vidal
	}
770 37 Maurice Vidal
	on <%= node1name %> {
771 37 Maurice Vidal
		address <%= node1ip %>:7788;
772 37 Maurice Vidal
	}
773 37 Maurice Vidal
		on <%= node2name %> {
774 37 Maurice Vidal
		address <%= node2ip %>:7788;
775 37 Maurice Vidal
	}
776 37 Maurice Vidal
}
777 37 Maurice Vidal
</pre>
778 37 Maurice Vidal
779 37 Maurice Vidal
On va ensuite modifier sur le serveur Puppet le fichier :
780 37 Maurice Vidal
/etc/puppet/manifests/node.pp :
781 37 Maurice Vidal
782 37 Maurice Vidal
<pre>
783 37 Maurice Vidal
node 'machine6.univ-perp.fr' {
784 37 Maurice Vidal
	$pptmasterip = "192.168.1.15"
785 37 Maurice Vidal
	$pptmastername = "puppetmaster"
786 37 Maurice Vidal
	$pptmasterfqdn = "puppetmaster.univ-perp.fr"
787 37 Maurice Vidal
	$node1ip = "192.168.1.66"
788 37 Maurice Vidal
	$node1name = "machine6"
789 37 Maurice Vidal
	$node1fqdn = "machine6.univ-perp.fr"
790 37 Maurice Vidal
	$node2ip = "192.168.1.77"
791 37 Maurice Vidal
	$node2name = "machine7"
792 37 Maurice Vidal
	$node2fqdn = "machine7.univ-perp.fr"
793 37 Maurice Vidal
	$disk = "/dev/sdb5"
794 37 Maurice Vidal
	include drbd::package, drbd::fic, drbd::command, drbd::cron1, drbd::cron1.1, cron_supp
795 37 Maurice Vidal
}
796 37 Maurice Vidal
node 'machine7.univ-perp.fr' {
797 37 Maurice Vidal
	$pptmasterip = "192.168.1.15"
798 37 Maurice Vidal
	$pptmastername = "puppetmaster"
799 37 Maurice Vidal
	$pptmasterfqdn = "puppetmaster.univ-perp.fr"
800 37 Maurice Vidal
	$node1ip = "192.168.1.66"
801 37 Maurice Vidal
	$node1name = "machine6"
802 37 Maurice Vidal
	$node1fqdn = "machine6.univ-perp.fr"
803 37 Maurice Vidal
	$node2ip = "192.168.1.77"
804 37 Maurice Vidal
	$node2name = "machine7"
805 37 Maurice Vidal
	$node2fqdn = "machine7.univ-perp.fr"
806 37 Maurice Vidal
	$disk = "/dev/sdb5"
807 37 Maurice Vidal
	include drbd::package, drbd::fic, drbd::command, drbd::cron2, drbd::cron2.2, cron_supp
808 37 Maurice Vidal
}
809 37 Maurice Vidal
</pre>
810 37 Maurice Vidal
811 37 Maurice Vidal
Maintenant voyons les fichiers bash que nous utiliserons pour les différents 'cron' :
812 37 Maurice Vidal
*cat /etc/puppet/modules/drbd/files/overwrite.sh*
813 37 Maurice Vidal
<pre>
814 37 Maurice Vidal
#!/bin/bash
815 37 Maurice Vidal
drbdadm -- --overwrite-data-of-peer primary r0
816 37 Maurice Vidal
</pre>
817 37 Maurice Vidal
818 37 Maurice Vidal
*cat /etc/puppet/modules/drbd/files/mkfs.sh*
819 37 Maurice Vidal
<pre>
820 37 Maurice Vidal
#!/bin/bash
821 37 Maurice Vidal
mkfs.gfs2 -t cluster1:gfs2 -p lock_dlm -j 2 /dev/drbd0
822 37 Maurice Vidal
</pre>
823 37 Maurice Vidal
824 37 Maurice Vidal
*cat /etc/puppet/modules/drbd/files/primary.sh*
825 37 Maurice Vidal
<pre>
826 37 Maurice Vidal
#!/bin/bash
827 37 Maurice Vidal
drbdadm primary r0
828 37 Maurice Vidal
</pre>
829 37 Maurice Vidal
830 37 Maurice Vidal
*cat /etc/puppet/modules/drbd/files/supp.machine6.sh*
831 37 Maurice Vidal
<pre>
832 37 Maurice Vidal
#!/bin/bash
833 37 Maurice Vidal
rm -r /root/overwrite.sh
834 37 Maurice Vidal
rm -r /root/mkfs.sh
835 37 Maurice Vidal
</pre>
836 37 Maurice Vidal
837 37 Maurice Vidal
*cat /etc/puppet/modules/drbd/files/supp.machine7.sh*
838 37 Maurice Vidal
<pre>
839 37 Maurice Vidal
#!/bin/bash
840 37 Maurice Vidal
rm -r /root/primary.sh
841 37 Maurice Vidal
</pre>
842 37 Maurice Vidal
843 37 Maurice Vidal
Ne pas oublier de mettre le droit d'execution aux fichier bash avec cette commande :
844 37 Maurice Vidal
<pre>
845 37 Maurice Vidal
chmod 744 /etc/puppet/modules/drbd/files/*.sh
846 37 Maurice Vidal
</pre>
847 37 Maurice Vidal
848 37 Maurice Vidal
Il y a des commandes à faire manuellement, moi j'ai préféré utiliser l'ordonnanceur cron.
849 37 Maurice Vidal
850 37 Maurice Vidal
Passons à la configuration de GFS2 :
851 37 Maurice Vidal
852 37 Maurice Vidal
*cat /etc/puppet/modules/gfs2/manifests/init.pp*
853 37 Maurice Vidal
<pre>
854 37 Maurice Vidal
class gfs2::package {
855 37 Maurice Vidal
	package { "cman": ensure => installed }
856 37 Maurice Vidal
	package { "gfs2-tools": ensure => installed }
857 37 Maurice Vidal
	package { "libopenais-dev": ensure => installed }
858 37 Maurice Vidal
}
859 37 Maurice Vidal
class gfs2::fic {
860 37 Maurice Vidal
	file { "/etc/cluster/cluster.conf":
861 37 Maurice Vidal
		require => Class["gfs2::package"],
862 37 Maurice Vidal
		ensure => present,
863 37 Maurice Vidal
		source => "puppet:///modules/gfs2/cluster.conf"
864 37 Maurice Vidal
	}
865 37 Maurice Vidal
}
866 37 Maurice Vidal
class gfs2::command {
867 37 Maurice Vidal
	exec { "stop_network_manager":
868 37 Maurice Vidal
		require => Class["gfs2::fic"],
869 37 Maurice Vidal
		command => "/usr/sbin/service network-manager stop"
870 37 Maurice Vidal
	}
871 37 Maurice Vidal
	exec { "start_cman":
872 37 Maurice Vidal
		require => Exec["stop_network_manager"],
873 37 Maurice Vidal
		command => "/usr/sbin/service cman start"
874 37 Maurice Vidal
	}
875 37 Maurice Vidal
}
876 37 Maurice Vidal
class gfs2::hosts {
877 37 Maurice Vidal
	file { "/etc/hosts":
878 37 Maurice Vidal
		require => Class["gfs2::package"],
879 37 Maurice Vidal
		ensure => present,
880 37 Maurice Vidal
		content => template("/etc/puppet/modules/gfs2/templates/hosts.erb")
881 37 Maurice Vidal
	}
882 37 Maurice Vidal
}
883 37 Maurice Vidal
</pre>
884 37 Maurice Vidal
885 37 Maurice Vidal
Nous voulons être sûr que nos deux machines puissent se joindre :
886 37 Maurice Vidal
*cat /etc/puppet/modules/gfs2/templates/hosts.erb*
887 37 Maurice Vidal
<pre>
888 37 Maurice Vidal
127.0.0.1 		localhost
889 37 Maurice Vidal
<%= pptmasterip %>	<%= pptmastername %>	<%= pptmasterfqdn %>
890 37 Maurice Vidal
<%= node1ip %>		<%= node1name %>	<%= node1fqdn %>
891 37 Maurice Vidal
<%= node2ip %>		<%= node2name %>	<%= node2fqdn %>
892 37 Maurice Vidal
</pre>
893 37 Maurice Vidal
894 37 Maurice Vidal
Il faut également modifier le fichier /etc/puppet/manifests/node.pp afin de rajouter les classes gfs :
895 37 Maurice Vidal
896 37 Maurice Vidal
> node 'machine6.univ-perp.fr' {
897 37 Maurice Vidal
>...
898 37 Maurice Vidal
> 	$disk = "/dev/sdb5"
899 37 Maurice Vidal
>	include drbd::package, drbd::fic, drbd::command, drbd::cron1, drbd::cron1.1, cron_supp, *gfs2::package, gfs2::fic, gfs2::command, gfs2::hosts* 
900 37 Maurice Vidal
>}
901 37 Maurice Vidal
>
902 37 Maurice Vidal
> node 'machine7.univ-perp.fr' {
903 37 Maurice Vidal
>... 	
904 37 Maurice Vidal
> 	$disk = "/dev/sdb5"
905 37 Maurice Vidal
>	include drbd::package, drbd::fic, drbd::command, drbd::cron2, drbd::cron2.2, cron_supp, *gfs2::package, gfs2::fic, gfs2::command, gfs2::hosts* 
906 37 Maurice Vidal
>}
907 37 Maurice Vidal
908 37 Maurice Vidal
Il ne reste plus que le fichier de configuration du cluster, cependant à cause de sa forme (composé de balises) :
909 37 Maurice Vidal
Ainsi le fichier /etc/puppet/modules/gfs2/files/cluster.conf :
910 37 Maurice Vidal
911 37 Maurice Vidal
<pre>
912 37 Maurice Vidal
<?xml version="1.0"?>
913 37 Maurice Vidal
<cluster name="cluster1" config_version="3">
914 37 Maurice Vidal
<cman two_node="1" expected_votes="1"/>
915 37 Maurice Vidal
<clusternodes>
916 37 Maurice Vidal
<clusternode name="machine6" votes="1" nodeid="1">
917 37 Maurice Vidal
        <fence>
918 37 Maurice Vidal
                <method name="single">
919 37 Maurice Vidal
                        <device name="manual" ipaddr="192.168.1.66"/>
920 37 Maurice Vidal
                </method>
921 37 Maurice Vidal
        </fence>
922 37 Maurice Vidal
</clusternode>
923 37 Maurice Vidal
<clusternode name="machine7" votes="1" nodeid="2">
924 37 Maurice Vidal
        <fence>
925 37 Maurice Vidal
                <method name="single">
926 37 Maurice Vidal
                        <device name="manual" ipaddr="192.168.1.77"/>
927 37 Maurice Vidal
                </method>
928 37 Maurice Vidal
        </fence>
929 37 Maurice Vidal
</clusternode>
930 37 Maurice Vidal
</clusternodes>
931 37 Maurice Vidal
<fence_daemon clean_start="1" post_fail_delay="0" post_join_delay="3"/>
932 37 Maurice Vidal
<fencedevices>
933 37 Maurice Vidal
        <fencedevice name="manual" agent="fence_manual"/>
934 37 Maurice Vidal
</fencedevices>
935 37 Maurice Vidal
</cluster>
936 37 Maurice Vidal
</pre>
937 37 Maurice Vidal
938 37 Maurice Vidal
Ici ce qui importe c'est le nom du cluster que l'on y donne (important pour la suite) et le numéro de la version :
939 37 Maurice Vidal
cluster name= *cluster1* config_version= *3* (pour connaitre le numéro de la version : *apt-cache policy gfs2-tools* )
940 37 Maurice Vidal
Egalement le nom des nos noeuds : clusternode name= *machine6* votes="1" nodeid= *1*
941 37 Maurice Vidal
Et pour finir l'adresse IP : device name="manual" ipaddr= *192.168.1.66*
942 37 Maurice Vidal
943 37 Maurice Vidal
Puis sur le PuppetMaster on lance la commande :
944 37 Maurice Vidal
*puppetmasterd --no-daemonize –debug*
945 37 Maurice Vidal
946 37 Maurice Vidal
Et sur les clients :
947 37 Maurice Vidal
*puppetd --test --server=puppetmaster.univ-perp.fr*
948 37 Maurice Vidal
949 37 Maurice Vidal
+On vérifie :+
950 37 Maurice Vidal
Sur les machines clientes, on peut aller vérifier le raid1 :
951 37 Maurice Vidal
*service drbd status*
952 37 Maurice Vidal
953 37 Maurice Vidal
Nous voyons que nous sommes à Primary/Primary UpToDate/UpToDate 
954 37 Maurice Vidal
Ici les machines sont en attentes d'un montage.
955 37 Maurice Vidal
956 37 Maurice Vidal
Maintenant il ne reste plus qu'à créer un répertoire, sur la machine6 :
957 37 Maurice Vidal
*mkdir -p /media/cluster/drbd*
958 37 Maurice Vidal
*mount -t gfs2 /dev/drbd0 /media/cluster/drbd*
959 37 Maurice Vidal
960 37 Maurice Vidal
Et, sur la machine7 :
961 37 Maurice Vidal
*mkdir -p /media/clusterdata/drbd*
962 37 Maurice Vidal
*mount -t gfs2 /dev/drbd0 /media/clusterdata/drbd*
963 37 Maurice Vidal
964 37 Maurice Vidal
h3. *Vérification :*
965 37 Maurice Vidal
966 37 Maurice Vidal
On vérifie :
967 37 Maurice Vidal
*service drbd status*
968 37 Maurice Vidal
969 37 Maurice Vidal
+Il faut que l'on voie nos points de montage.+
970 37 Maurice Vidal
971 37 Maurice Vidal
Sur une machine, n'importe laquelle, écrivez sur votre point de montage, par exemple machine6 :
972 37 Maurice Vidal
*touch /media/cluster/drbd/machine6.txt*
973 37 Maurice Vidal
*ls /media/cluster/drbd*
974 37 Maurice Vidal
On voit notre fichier : machine6.txt
975 37 Maurice Vidal
976 37 Maurice Vidal
Sur l'autre node du cluster (machine7) :
977 37 Maurice Vidal
*ls /media/clusterdata/drbd*
978 37 Maurice Vidal
On voit notre fichier : machine6.txt
979 37 Maurice Vidal
980 37 Maurice Vidal
Pour voir les log du cluster :
981 37 Maurice Vidal
*tailf /var/log/cluster/corosync.log*
982 37 Maurice Vidal
983 37 Maurice Vidal
Grâce à GFS2, il n'est pas nécessaire de démonter le point de montage sur le node (machine7) puis de le remonter afin de voir les écritures, en effet l'écriture se fait mais on ne peut la visualiser tant que le umount/mount n'a pas été réalisé.
984 37 Maurice Vidal
985 37 Maurice Vidal
h3. A la fin de la page je met à disposition un tuto (sans puppet) de l'installation d'un Cluster DRBD GFS2.
986 37 Maurice Vidal
987 37 Maurice Vidal
h2. Mise en place d'un Postfix avec authentification LDAP Sans Puppet (Pas fini)
988 37 Maurice Vidal
989 37 Maurice Vidal
*Le projet n'est pas terminé, j'ai beaucoup travaillé mais j'ai manqué de logique, de bons tutoriels et de temps aussi, j'ai mis beaucoup du temps à comprendre Puppet =(*
990 37 Maurice Vidal
991 37 Maurice Vidal
Grâce au DRBD, les messages ne sont pas perdu, ils sont accessibles par les deux serveurs Postfix. Le but ici est d'avoir des utilisateurs qui peuvent envoyer des mails sur les deux serveurs de messageries (utilisation de Ldap préférable à un serveur NIS).
992 37 Maurice Vidal
993 37 Maurice Vidal
h3. Installer LDAP :
994 37 Maurice Vidal
995 37 Maurice Vidal
*apt-get install slapd ldap-utils*
996 37 Maurice Vidal
*dpkg-reconfigure slapd*
997 37 Maurice Vidal
998 37 Maurice Vidal
Si on ne reconfigure pas ldap (à l'heure des dépôts actuels), il n'est pas possible de se connecter à l'annuaire ldap, que ce soit pour ajouter des entrées avec la commande #ldapadd (erreur : Invalid Credential (49)) car on voit qu'avec la commande #slapcat, le domaine n'est pas celui que nous avons créé dans /etc/ldap/slapd.conf, mais il s'agit du domaine : "nodomain".
999 37 Maurice Vidal
1000 37 Maurice Vidal
A la suite de l'installation, il est nécessaire d'avoir le fichier de configuration /etc/ldap/slapd.conf. Pour cela il faut le copier :
1001 37 Maurice Vidal
*cp /usr/share/doc/slapd/example/slapd.conf /etc/ldap/*
1002 37 Maurice Vidal
1003 37 Maurice Vidal
Ensuite il faut modifier le fichier slapd.conf
1004 37 Maurice Vidal
<pre>
1005 37 Maurice Vidal
suffix          "dc=univ-perp,dc=fr"
1006 37 Maurice Vidal
rootdn          "cn=admin,dc=univ-perp,dc=fr"
1007 37 Maurice Vidal
password-hash   SSHA
1008 37 Maurice Vidal
rootpw          {SSHA}zmQHHtuIgyentPKrBw3lkNHN6JSVg/UW
1009 37 Maurice Vidal
access to attrs=userPassword,shadowLastChange
1010 37 Maurice Vidal
        by dn="cn=admin,dc=univ-perp,dc=fr" write
1011 37 Maurice Vidal
        by anonymous auth
1012 37 Maurice Vidal
        by self write
1013 37 Maurice Vidal
        by * none
1014 37 Maurice Vidal
access to *
1015 37 Maurice Vidal
        by dn="cn=admin,dc=duniv-perp,dc=fr" write
1016 37 Maurice Vidal
        by * none
1017 37 Maurice Vidal
</pre>
1018 37 Maurice Vidal
1019 37 Maurice Vidal
h3. On peut ensuite installer les serveurs de messageries :
1020 37 Maurice Vidal
1021 37 Maurice Vidal
*apt-get install courier-ldap postfix postfix-ldap*
1022 37 Maurice Vidal
1023 37 Maurice Vidal
On peut rajouter des schema fournis par ldap :
1024 37 Maurice Vidal
*cp /usr/share/doc/courier-authlib-ldap/authldap.schema.gz /etc/ldap/schema*
1025 37 Maurice Vidal
*gunzip /etc/ldap/schema/authldap.schema.gz*
1026 37 Maurice Vidal
1027 37 Maurice Vidal
Et rajouter son chemin dans /etc/ldap/slapd.conf :
1028 37 Maurice Vidal
<pre>
1029 37 Maurice Vidal
include /etc/ldap/schema/authldap.schema
1030 37 Maurice Vidal
</pre>
1031 37 Maurice Vidal
1032 37 Maurice Vidal
On redémarre :
1033 37 Maurice Vidal
*service slapd restart*
1034 37 Maurice Vidal
1035 37 Maurice Vidal
Il faut ensuite ajouter des entrées, le mieux c'est avec *phpldapadmin* à l'adresse 127.0.0.1/phpldapadmin, mais avec l'editeur de texte -emacs- *vi et les fichiers .ldif on va plus vite =))*
1036 37 Maurice Vidal
1037 37 Maurice Vidal
*vi exemple-type.ldif*
1038 37 Maurice Vidal
<pre>
1039 37 Maurice Vidal
dn: ou=people, dc=univ-perp, dc=fr
1040 37 Maurice Vidal
objectclass: top 
1041 37 Maurice Vidal
objectclass: organizationalUnit 
1042 37 Maurice Vidal
ou: people 
1043 37 Maurice Vidal
1044 37 Maurice Vidal
dn: cn=gp_tech, ou=people, dc=univ-perp, dc=fr 
1045 37 Maurice Vidal
objectClass: top 
1046 37 Maurice Vidal
objectClass: posixGroup 
1047 37 Maurice Vidal
cn: gp_tech
1048 37 Maurice Vidal
gidNumber: 1111 
1049 37 Maurice Vidal
1050 37 Maurice Vidal
dn: uid=toto1, ou=people, dc=univ-perp, dc=fr
1051 37 Maurice Vidal
objectClass: top 
1052 37 Maurice Vidal
objectClass: posixAccount 
1053 37 Maurice Vidal
objectClass: inetOrgPerson 
1054 37 Maurice Vidal
uid: toto 
1055 37 Maurice Vidal
cn: toto un 
1056 37 Maurice Vidal
sn: toto 
1057 37 Maurice Vidal
givenName: un 
1058 37 Maurice Vidal
uidNumber: 2200 
1059 37 Maurice Vidal
gidNumber: 1111 
1060 37 Maurice Vidal
homeDirectory: /home/toto1 
1061 37 Maurice Vidal
userPassword: mdp2toto1 
1062 37 Maurice Vidal
mail: toto1@univ-perp.fr 
1063 37 Maurice Vidal
1064 37 Maurice Vidal
dn: uid=toto2,ou=people,dc=univ-perp,dc=fr
1065 37 Maurice Vidal
objectClass: top
1066 37 Maurice Vidal
objectClass: inetOrgPerson
1067 37 Maurice Vidal
objectClass: posixAccount
1068 37 Maurice Vidal
uid: toto2
1069 37 Maurice Vidal
cn: toto deux
1070 37 Maurice Vidal
sn: toto
1071 37 Maurice Vidal
uidNumber: 2201
1072 37 Maurice Vidal
gidNumber: 1111
1073 37 Maurice Vidal
mail: toto2@univ-perp.fr
1074 37 Maurice Vidal
homeDirectory: /home/toto2
1075 37 Maurice Vidal
userPassword: mdp2toto2
1076 37 Maurice Vidal
</pre>
1077 37 Maurice Vidal
1078 37 Maurice Vidal
On applique ce changement d'arborescence :
1079 37 Maurice Vidal
*ldapadd -x -f exemple_type.ldif -D cn=admin,dc=univ-perp,dc=fr -W*
1080 37 Maurice Vidal
1081 37 Maurice Vidal
h3. *Configuration de Postfix*
1082 37 Maurice Vidal
1083 37 Maurice Vidal
Il faut modifier le fichier de conf du serveur de messagerie:
1084 37 Maurice Vidal
*vi /etc/postfix/main.cf*
1085 37 Maurice Vidal
1086 37 Maurice Vidal
<pre>
1087 37 Maurice Vidal
...
1088 37 Maurice Vidal
local_recipient_maps = ldap:/etc/postfix/ldap_local_recipient.cf
1089 37 Maurice Vidal
...
1090 37 Maurice Vidal
</pre>
1091 37 Maurice Vidal
1092 37 Maurice Vidal
Puis on créé le fichier ldap_local_recipient.cf :
1093 37 Maurice Vidal
1094 37 Maurice Vidal
<pre>
1095 37 Maurice Vidal
server_host = 192.168.1.66
1096 37 Maurice Vidal
server_port = 389
1097 37 Maurice Vidal
search_base = dc=univ-perp,dc=fe
1098 37 Maurice Vidal
# le %s signifie "adresse du destinataire telle que fourni par la commande "RCPT TO:"
1099 37 Maurice Vidal
query_filter = (mail=%s)
1100 37 Maurice Vidal
result_attribute = mail
1101 37 Maurice Vidal
</pre>
1102 37 Maurice Vidal
1103 37 Maurice Vidal
On peut vérifier si notre serveur de messagerie peut joindre l'annuaire ldap :
1104 37 Maurice Vidal
*postmap -q toto1@univ-perp.fr ldap:/etc/postfix/ldap_local_recipient.cf*
1105 37 Maurice Vidal
1106 37 Maurice Vidal
Le problème c'est que quand je fais un : *telnet 192.168.1.66 25* c'est que le mail est expédié, seulement il n'est pas envoyé à la boite mail, réponse des logs : status=bounced (unknown user: "toto1").