Projet

Général

Profil

StageVidal » Historique » Version 37

Maurice Vidal, 20/05/2012 21:41

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 1 Laurent GUERBY
h1. Questions
137 1 Laurent GUERBY
138 1 Laurent GUERBY
h2. A propos du DRBD + MX redondant
139 1 Laurent GUERBY
140 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 ?*
141 1 Laurent GUERBY
142 1 Laurent GUERBY
Réponse : il y a trois choses séparées :
143 1 Laurent GUERBY
144 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.
145 1 Laurent GUERBY
# configurer deux VM qui ont un bout de disque répliqué avec DRBD, bien documenter le setup DRBD
146 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.
147 1 Laurent GUERBY
148 1 Laurent GUERBY
A chaque fois l'objectif "documenter" est bien sur d'utiliser [[Puppet]] 
149 1 Laurent GUERBY
150 1 Laurent GUERBY
La partie DRBD du MX viendra uniquement a la fin, c'est la plus complexe.
151 1 Laurent GUERBY
152 37 Maurice Vidal
h2. PUPPET : Déploiement de BIND et UNBOUND (sur deux machines)
153 37 Maurice Vidal
154 37 Maurice Vidal
*Puppet est ce que l’on peut appeler un gestionnaire de configuration.
155 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).*
156 37 Maurice Vidal
157 37 Maurice Vidal
Puppet est donc un outil de centralisation de l’administration de systèmes hétérogènes ou homogènes
158 37 Maurice Vidal
Au travers du serveur puppet (PuppetMaster), chaque machine, appelée noeud (node), fait tourner Puppetd, qui :
159 37 Maurice Vidal
+Applique la configuration initiale pour le noeud concerné.+
160 37 Maurice Vidal
+Applique les nouveautés de configuration au fil du temps.+
161 37 Maurice Vidal
+S’assure de manière régulière que la machine correspond bien à la config voulu.+
162 37 Maurice Vidal
163 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 :
164 37 Maurice Vidal
+des recettes de configuration+ (recipes)
165 37 Maurice Vidal
+des fichiers+
166 37 Maurice Vidal
+des modèles+ (qui sont des fichiers avec des variables de remplacement)
167 37 Maurice Vidal
+des objets ruby+ (c’est là l’extensibilité de l’application)
168 37 Maurice Vidal
 Et bien évidemment : Puppet est un logiciel libre écrit en Ruby, multiplateforme : BSD (Free, MacOS ...), Linux (Redhat, Debian, Suse ...), Sun (OPENSolaris ...).
169 37 Maurice Vidal
170 37 Maurice Vidal
Puppet fournit un langage déclaratif simple :
171 37 Maurice Vidal
+classes+ (permet de définir les configurations de chaque service) 
172 37 Maurice Vidal
+héritage+ (permet de regrouper les configurations communes) 
173 37 Maurice Vidal
+types d’objets particuliers+ (définis par puppet, ou par des modules)  +fonctions utilisateur+ 
174 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)
175 37 Maurice Vidal
176 37 Maurice Vidal
h3. *Exemples de types d’objets internes :*
177 37 Maurice Vidal
178 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.
179 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). 
180 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.) 
181 37 Maurice Vidal
+User+, permet de gérer les utilisateurs UNIX (dans /etc/passwd) indépendemment de l’OS utilisé.
182 37 Maurice Vidal
183 37 Maurice Vidal
h3. *Puppet fonctionne selon le modèle client/serveur :*
184 37 Maurice Vidal
185 37 Maurice Vidal
!http://img15.hostingpics.net/pics/54901331cs.jpg!
186 37 Maurice Vidal
187 37 Maurice Vidal
*Pré-requis :*
188 37 Maurice Vidal
189 37 Maurice Vidal
Nous prenons l'exemple que notre serveur Puppet à pour hostname : puppetmaster, et nos clients portent le nom de : puppetcli1, puppetcli2.
190 37 Maurice Vidal
191 37 Maurice Vidal
Comme nom de domaine nous prenons l'exemple de l'université de Perpignan : univ-perp.fr
192 37 Maurice Vidal
193 37 Maurice Vidal
*Et les adresses IP sont donc :*
194 37 Maurice Vidal
195 37 Maurice Vidal
!http://img15.hostingpics.net/pics/229745tab.jpg!
196 37 Maurice Vidal
197 37 Maurice Vidal
198 37 Maurice Vidal
h3. *Installation de Puppet*
199 37 Maurice Vidal
200 37 Maurice Vidal
Serveur :	# apt-get install puppetmaster
201 37 Maurice Vidal
Clients : 	# apt-get install puppet
202 37 Maurice Vidal
203 37 Maurice Vidal
Ici nous utilisons la version 2.6.2 de Puppet. Lors de l’installation, un utilisateur « puppet » sera créé.
204 37 Maurice Vidal
205 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 :
206 37 Maurice Vidal
207 37 Maurice Vidal
192.168.1.15	puppetmaster	puppetmaster.univ-perp.fr
208 37 Maurice Vidal
209 37 Maurice Vidal
De même sur le serveur il faut rajouter les noms des 3 machines clientes de la même façon.
210 37 Maurice Vidal
A ce stade nous n'avons pas de serveurs DNS, justement nous allons le(s) déployer :)
211 37 Maurice Vidal
212 37 Maurice Vidal
Il est important (si l'on a un pare-feu) d'ouvrir les ports 8140 coté serveur :
213 37 Maurice Vidal
*iptables -A INPUT -p tcp -m state --state NEW -s 192.168.1.0/24 --dport 8140 -j ACCEPT*
214 37 Maurice Vidal
215 37 Maurice Vidal
De plus il est important de pouvoir regarder les logs (tant sur le serveur que sur les clients) :
216 37 Maurice Vidal
*tailf /var/log/daemon.log*			
217 37 Maurice Vidal
218 37 Maurice Vidal
h3. *Configuration de Puppet*
219 37 Maurice Vidal
220 37 Maurice Vidal
DEMANDE DE CERTIFICAT
221 37 Maurice Vidal
222 37 Maurice Vidal
*Serveur :*
223 37 Maurice Vidal
Il faut modifier le fichier /etc/puppet/puppet.conf, il doit ressembler à ceci :
224 37 Maurice Vidal
225 37 Maurice Vidal
<pre>
226 37 Maurice Vidal
[main]
227 37 Maurice Vidal
logdir=/var/log/puppet
228 37 Maurice Vidal
vardir=/var/lib/puppet
229 37 Maurice Vidal
ssldir=/var/lib/puppet/ssl
230 37 Maurice Vidal
rundir=/var/run/puppet
231 37 Maurice Vidal
factpath=$vardir/lib/facter
232 37 Maurice Vidal
templatedir=$confdir/templates
233 37 Maurice Vidal
234 37 Maurice Vidal
[master]
235 37 Maurice Vidal
report=true
236 37 Maurice Vidal
reports=log,store
237 37 Maurice Vidal
modulepath=/etc/puppet/modules
238 37 Maurice Vidal
</pre>
239 37 Maurice Vidal
240 37 Maurice Vidal
*Clients :*
241 37 Maurice Vidal
242 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 :
243 37 Maurice Vidal
244 37 Maurice Vidal
<pre>
245 37 Maurice Vidal
[main]
246 37 Maurice Vidal
...
247 37 Maurice Vidal
server=puppetmaster.univ-perp.fr
248 37 Maurice Vidal
</pre>
249 37 Maurice Vidal
250 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.
251 37 Maurice Vidal
252 37 Maurice Vidal
*puppetcli1# puppetd --waitforcert 60 --test*
253 37 Maurice Vidal
ou
254 37 Maurice Vidal
*puppetcli1# puppet agent --waitforcert 60 --test*
255 37 Maurice Vidal
256 37 Maurice Vidal
Le serveur va ensuite visualiser les demandes :
257 37 Maurice Vidal
*puppetmaster#puppetca --list*
258 37 Maurice Vidal
259 37 Maurice Vidal
Puis il va signer les demandes :
260 37 Maurice Vidal
*puppetmaster#puppetca --sign puppetcli1*			
261 37 Maurice Vidal
ou 
262 37 Maurice Vidal
*puppetmaster#puppetca --sign --all* 		(pour tous d'un coup)
263 37 Maurice Vidal
264 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.
265 37 Maurice Vidal
266 37 Maurice Vidal
Tout d'abord laissez moi vous montrer à quoi va ressembler l'arborescence de votre serveur puppet :
267 37 Maurice Vidal
268 37 Maurice Vidal
!http://img15.hostingpics.net/pics/481782tree.jpg!
269 37 Maurice Vidal
270 37 Maurice Vidal
271 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 :
272 37 Maurice Vidal
273 37 Maurice Vidal
<pre>
274 37 Maurice Vidal
[files]
275 37 Maurice Vidal
path /etc/puppet/files
276 37 Maurice Vidal
allow *.univ-perp.fr
277 37 Maurice Vidal
</pre>
278 37 Maurice Vidal
279 37 Maurice Vidal
Nous venons d'autoriser seulement les machines provenant du domaine à pouvoir recevoir des fichiers du répertoire /etc/puppet/files/
280 37 Maurice Vidal
281 37 Maurice Vidal
Il faut également créer le fichier : /etc/puppet/namespaceauth.conf et y rajouter :
282 37 Maurice Vidal
283 37 Maurice Vidal
<pre>
284 37 Maurice Vidal
[puppetrunner]
285 37 Maurice Vidal
allow *
286 37 Maurice Vidal
</pre>
287 37 Maurice Vidal
288 37 Maurice Vidal
289 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).
290 37 Maurice Vidal
/etc/puppet/manifests/site.pp :
291 37 Maurice Vidal
292 37 Maurice Vidal
<pre>
293 37 Maurice Vidal
import "node"
294 37 Maurice Vidal
import "modules.pp"
295 37 Maurice Vidal
import "cron"
296 37 Maurice Vidal
</pre>
297 37 Maurice Vidal
298 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 :
299 37 Maurice Vidal
300 37 Maurice Vidal
<pre>
301 37 Maurice Vidal
node basenode {
302 37 Maurice Vidal
	include crontab
303 37 Maurice Vidal
}
304 37 Maurice Vidal
node 'puppetcli1.univ-perp.fr' inherits basenode {
305 37 Maurice Vidal
	include unbound, resolv
306 37 Maurice Vidal
}
307 37 Maurice Vidal
node 'puppetcli2.univ-perp.fr' inherits basenode {
308 37 Maurice Vidal
	include bind, resolv
309 37 Maurice Vidal
}</pre>
310 37 Maurice Vidal
311 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.
312 37 Maurice Vidal
 
313 37 Maurice Vidal
Il faut également créer le fichier /etc/puppet/manifests/modules.pp qui va référencer les modules du serveur :
314 37 Maurice Vidal
315 37 Maurice Vidal
<pre>
316 37 Maurice Vidal
import "unbound"
317 37 Maurice Vidal
import "bind"
318 37 Maurice Vidal
</pre>
319 37 Maurice Vidal
320 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.
321 37 Maurice Vidal
322 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 :
323 37 Maurice Vidal
324 37 Maurice Vidal
<pre>
325 37 Maurice Vidal
class crontab {
326 37 Maurice Vidal
	cron { "synchronisation puppet":
327 37 Maurice Vidal
		command => "/usr/sbin/puppetd --test --server=puppetmaster.univ-perp.fr",
328 37 Maurice Vidal
		minute => "*/15"
329 37 Maurice Vidal
	}
330 37 Maurice Vidal
}
331 37 Maurice Vidal
</pre>
332 37 Maurice Vidal
333 37 Maurice Vidal
Passons à la configuration des modules :
334 37 Maurice Vidal
335 37 Maurice Vidal
h3. Création des modules :
336 37 Maurice Vidal
337 37 Maurice Vidal
*mkdir -p /etc/puppet/modules/unbound/{files,manifests,templates}*
338 37 Maurice Vidal
*mkdir -p /etc/puppet/modules/bind/{files,manifests,templates}*
339 37 Maurice Vidal
340 37 Maurice Vidal
Le dossier MANIFESTS permet de répertorier le fichier init.pp qui défini le coeur du module.
341 37 Maurice Vidal
Le dossier FILES contient les fichiers statiques, ceux qui ne changent pas d'un node à l'autre.
342 37 Maurice Vidal
Le dossier TEMPLATES contient les fichiers de configurations variant d'un hôte à l'autre.
343 37 Maurice Vidal
344 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 :+
345 37 Maurice Vidal
346 37 Maurice Vidal
Ici nous faisons la résolution du domaine : univ-perp.fr avec pour serveur DNS : puppetcli1
347 37 Maurice Vidal
348 37 Maurice Vidal
<pre>
349 37 Maurice Vidal
### Simple recursive caching DNS
350 37 Maurice Vidal
## /etc/unbound.conf
351 37 Maurice Vidal
server:
352 37 Maurice Vidal
	verbosity: 1
353 37 Maurice Vidal
 	outgoing-range: 60
354 37 Maurice Vidal
	interface: 192.168.1.16
355 37 Maurice Vidal
 	do-ip4: yes
356 37 Maurice Vidal
 	do-udp: yes
357 37 Maurice Vidal
	do-tcp: yes
358 37 Maurice Vidal
 	access-control: 0.0.0.0/0 allow         	#On autorise l’ensemble d’INTERNET à interroger le DNS
359 37 Maurice Vidal
 chroot: ""                                         		#Pas de chroot par défaut
360 37 Maurice Vidal
 logfile: "/var/log/unbound.log"         		#On défini le fichier de log
361 37 Maurice Vidal
 use-syslog: no                      			#Log par défaut dans syslog
362 37 Maurice Vidal
 hide-identity: yes             			
363 37 Maurice Vidal
 hide-version: yes              			
364 37 Maurice Vidal
 harden-glue: yes					#On dit que le serveur fait autorité sur la zone
365 37 Maurice Vidal
private-domain: "univ-perp.fr."  				#On définit le suffix dns du réseau local
366 37 Maurice Vidal
 local-zone: "univ-perp.fr." static				#on définit qui s'occupe de quoi dans le domaine
367 37 Maurice Vidal
local-data: "univ-perp.fr. IN MX 10 puppetcli2.univ-perp.fr."	#service de messagerie
368 37 Maurice Vidal
local-data: "univ-perp.fr. IN NS puppetcli1.univ-perp.fr."		#service DNS
369 37 Maurice Vidal
local-data: "puppetmaster.univ-perp.fr. IN A 192.168.1.15"  	     	 #résolution : nom -> adresse
370 37 Maurice Vidal
local-data: "puppetcli1.univ-perp.fr. IN A 192.168.1.16"
371 37 Maurice Vidal
local-data: "puppetcli2.univ-perp.fr. IN A 192.168.1.17"
372 37 Maurice Vidal
local-data-ptr: "192.168.1.15 puppetmaster.univ-perp.fr." 		 #résolution inverse : adresse -> nom
373 37 Maurice Vidal
local-data-ptr: "192.168.1.16 puppetcli1.univ-perp.fr."
374 37 Maurice Vidal
local-data-ptr: "192.168.1.17 puppetcli2.univ-perp.fr."
375 37 Maurice Vidal
python:
376 37 Maurice Vidal
remote-control:
377 37 Maurice Vidal
forward-zone:
378 37 Maurice Vidal
	name: "."
379 37 Maurice Vidal
	forward-addr: 192.168.1.1	# DNS de la Box
380 37 Maurice Vidal
</pre>
381 37 Maurice Vidal
382 37 Maurice Vidal
383 37 Maurice Vidal
Passons à la configuration du fichier principal : /etc/puppet/modules/unbound/manifests/init.pp :
384 37 Maurice Vidal
385 37 Maurice Vidal
<pre>
386 37 Maurice Vidal
class unbound {
387 37 Maurice Vidal
	package { unbound: ensure => installed }
388 37 Maurice Vidal
	file { "/etc/unbound/unbound.conf":
389 37 Maurice Vidal
		require => package["unbound"],		
390 37 Maurice Vidal
		notify => Service["unbound"],
391 37 Maurice Vidal
		mode => 644,
392 37 Maurice Vidal
		owner => "root",
393 37 Maurice Vidal
		group => "root",
394 37 Maurice Vidal
		source => "puppet:///modules/unbound/unbound.conf"
395 37 Maurice Vidal
		}	
396 37 Maurice Vidal
	service { unbound: ensure => running,
397 37 Maurice Vidal
			enable => true
398 37 Maurice Vidal
	}	}
399 37 Maurice Vidal
class resolv {
400 37 Maurice Vidal
	file { "/etc/resolv.conf":
401 37 Maurice Vidal
		require => Class["unbound"],
402 37 Maurice Vidal
		ensure => present,
403 37 Maurice Vidal
		content => "domain univ-perp.fr 
404 37 Maurice Vidal
search univ-perp.fr
405 37 Maurice Vidal
nameserver $ipaddress"
406 37 Maurice Vidal
	}
407 37 Maurice Vidal
}
408 37 Maurice Vidal
</pre>
409 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:///
410 37 Maurice Vidal
411 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 :
412 37 Maurice Vidal
*Adresse IP 
413 37 Maurice Vidal
Hostname 
414 37 Maurice Vidal
Distribution et version 
415 37 Maurice Vidal
Toutes autres variables locales définies par l’utilisateur.*
416 37 Maurice Vidal
417 37 Maurice Vidal
Il est disponible sur les noeuds utilisant Puppetd, il fournit des variables utilisables dans les templates puppet.
418 37 Maurice Vidal
419 37 Maurice Vidal
Configuration du module BIND 
420 37 Maurice Vidal
421 37 Maurice Vidal
Voici le fichier de configuration /etc/puppet/modules/bind/manifests/init.pp :
422 37 Maurice Vidal
423 37 Maurice Vidal
<pre>
424 37 Maurice Vidal
class bind {
425 37 Maurice Vidal
	package { bind9: ensure => installed }
426 37 Maurice Vidal
	file { "/etc/bind/named.conf.local":
427 37 Maurice Vidal
		require => package ["bind9"],
428 37 Maurice Vidal
		ensure => present,
429 37 Maurice Vidal
		mode => 644,
430 37 Maurice Vidal
		owner => "root",
431 37 Maurice Vidal
		group => "bind",
432 37 Maurice Vidal
		source => "puppet:///modules/bind/named.conf.local" }
433 37 Maurice Vidal
	file { "/etc/bind/named.conf.options":
434 37 Maurice Vidal
		require => package ["bind9"],
435 37 Maurice Vidal
		ensure => present,
436 37 Maurice Vidal
		mode => 644,
437 37 Maurice Vidal
                	owner => "root",
438 37 Maurice Vidal
              		 group => "bind",
439 37 Maurice Vidal
                	source => "puppet:///modules/bind/named.conf.options" }
440 37 Maurice Vidal
	file { "/var/cache/bind/db.univ-perp.fr":
441 37 Maurice Vidal
		require => package ["bind9"],
442 37 Maurice Vidal
		ensure => present,
443 37 Maurice Vidal
                	mode => 644,
444 37 Maurice Vidal
               		 owner => "root",
445 37 Maurice Vidal
                	group => "bind",
446 37 Maurice Vidal
                	source => "puppet:///modules/bind/db.univ-perp.fr" }
447 37 Maurice Vidal
	file { "/var/cache/bind/rev.univ-perp.fr":
448 37 Maurice Vidal
		require => package ["bind9"],
449 37 Maurice Vidal
                	ensure => present,
450 37 Maurice Vidal
                	mode => 644,
451 37 Maurice Vidal
                	owner => "root",
452 37 Maurice Vidal
               		 group => "bind",
453 37 Maurice Vidal
                	source => "puppet:///modules/bind/rev.univ-perp.fr" }
454 37 Maurice Vidal
	service { bind9: ensure => running, 
455 37 Maurice Vidal
		enable => true ,
456 37 Maurice Vidal
		require => package ["bind9"],
457 37 Maurice Vidal
	}	 
458 37 Maurice Vidal
}
459 37 Maurice Vidal
</pre>
460 37 Maurice Vidal
461 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. 
462 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:///
463 37 Maurice Vidal
464 37 Maurice Vidal
Passons aux fichiers de configurations : /etc/puppet/modules/bind/files/named.conf.local :
465 37 Maurice Vidal
466 37 Maurice Vidal
<pre>
467 37 Maurice Vidal
// La zone primaire univ-perp.fr
468 37 Maurice Vidal
zone "univ-perp.fr" {
469 37 Maurice Vidal
      type master;
470 37 Maurice Vidal
      file "/var/cache/bind/db.univ-perp.fr"; };
471 37 Maurice Vidal
// La zone inverse
472 37 Maurice Vidal
zone "1.168.192.in-addr.arpa" {
473 37 Maurice Vidal
      type master;
474 37 Maurice Vidal
      file "/var/cache/bind/rev.univ-perp.fr";
475 37 Maurice Vidal
};
476 37 Maurice Vidal
</pre>
477 37 Maurice Vidal
478 37 Maurice Vidal
Puis le fichier : /etc/puppet/modules/bind/files/named.conf.options :
479 37 Maurice Vidal
480 37 Maurice Vidal
<pre>
481 37 Maurice Vidal
options {
482 37 Maurice Vidal
	directory "/var/cache/bind";
483 37 Maurice Vidal
forwarders {
484 37 Maurice Vidal
 	8.8.8.8;
485 37 Maurice Vidal
 };
486 37 Maurice Vidal
	auth-nxdomain no;    # conform to RFC1035
487 37 Maurice Vidal
	listen-on { any; };
488 37 Maurice Vidal
	allow-query { any ; };
489 37 Maurice Vidal
};
490 37 Maurice Vidal
</pre>
491 37 Maurice Vidal
492 37 Maurice Vidal
Le fichier de zone primaire UNIV-PERP.FR : /etc/puppet/modules/bind/files/db.univ-perp.fr :
493 37 Maurice Vidal
494 37 Maurice Vidal
<pre>
495 37 Maurice Vidal
;
496 37 Maurice Vidal
; BIND data file for univ-perp.fr
497 37 Maurice Vidal
;
498 37 Maurice Vidal
$TTL    604800
499 37 Maurice Vidal
@       IN      SOA     puppetcli2.univ-perp.fr. admin.univ-perp.fr. (
500 37 Maurice Vidal
                 201205091         ; Serial
501 37 Maurice Vidal
                       604800         ; Refresh
502 37 Maurice Vidal
                        86400         ; Retry
503 37 Maurice Vidal
                      2419200         ; Expire
504 37 Maurice Vidal
                       604800 )       ; Negative Cache TTL
505 37 Maurice Vidal
@      	 IN      NS      puppetcli2.univ-perp.fr.
506 37 Maurice Vidal
puppetcli2    	IN      A       192.168.1.17
507 37 Maurice Vidal
puppetcli1 	IN      A       192.168.1.16
508 37 Maurice Vidal
puppetmaster	IN 	A	192.168.1.15
509 37 Maurice Vidal
</pre>
510 37 Maurice Vidal
511 37 Maurice Vidal
Et pour finir le fichier de zone inverse ARPA : /etc/puppet/modules/bind/rev.univ-perp.fr :
512 37 Maurice Vidal
513 37 Maurice Vidal
<pre>
514 37 Maurice Vidal
;
515 37 Maurice Vidal
; BIND data file for 192.168.1
516 37 Maurice Vidal
;
517 37 Maurice Vidal
$TTL    604800
518 37 Maurice Vidal
@       IN      SOA     puppetcli2.univ-perp.fr. (
519 37 Maurice Vidal
                 201209051         ; Serial
520 37 Maurice Vidal
                       604800         ; Refresh
521 37 Maurice Vidal
                        86400         ; Retry
522 37 Maurice Vidal
                      2419200         ; Expire
523 37 Maurice Vidal
                       604800 )       ; Negative Cache TTL
524 37 Maurice Vidal
@      IN      NS      puppetcli2.univ-perp.fr.
525 37 Maurice Vidal
16     IN      PTR     puppetcli1.univ-perp.fr.
526 37 Maurice Vidal
15	IN	PTR	puppetmaster.univ-perp.fr.
527 37 Maurice Vidal
</pre>
528 37 Maurice Vidal
529 37 Maurice Vidal
h3. *Configuration des templates* 
530 37 Maurice Vidal
531 37 Maurice Vidal
Variables prédéfinie:
532 37 Maurice Vidal
533 37 Maurice Vidal
Ici nous allons vous montrer comment on peut adapter les fichiers de configurations que nous déployons suivant le node.
534 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.
535 37 Maurice Vidal
536 37 Maurice Vidal
En effet lorsqu’on créé un template, il doit être sous l’extension "erb".
537 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.
538 37 Maurice Vidal
539 37 Maurice Vidal
Nous allons renseigner la variable "ipaddress" grâce aux balises de début: <%=  et aux balises de fin: %>
540 37 Maurice Vidal
Ainsi :
541 37 Maurice Vidal
542 37 Maurice Vidal
Puppetmaster *head /etc/puppet/modules/unbound/templates/unbound.conf.erb*
543 37 Maurice Vidal
544 37 Maurice Vidal
<pre>
545 37 Maurice Vidal
server:
546 37 Maurice Vidal
	verbosity: 1
547 37 Maurice Vidal
 	outgoing-range: 60
548 37 Maurice Vidal
	interface: <%=  ipaddress %>
549 37 Maurice Vidal
 	do-ip4: yes
550 37 Maurice Vidal
 	do-udp: yes
551 37 Maurice Vidal
	do-tcp: yes
552 37 Maurice Vidal
 	access-control: 192.168.1.0/24 allow         
553 37 Maurice Vidal
 chroot: ""                                         	
554 37 Maurice Vidal
 logfile: "/var/log/unbound.log"      
555 37 Maurice Vidal
</pre> 
556 37 Maurice Vidal
557 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 :
558 37 Maurice Vidal
On remplace : 	source => "puppet:///modules/unbound/unbound.conf" 
559 37 Maurice Vidal
Par :		content => template("/etc/puppet/modules/unbound/templates/unbound.conf.erb"),
560 37 Maurice Vidal
561 37 Maurice Vidal
h3. *Création de variables:*
562 37 Maurice Vidal
563 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 :
564 37 Maurice Vidal
565 37 Maurice Vidal
> node ‘puppetcli1.univ-perp.fr' inherits basenode { 
566 37 Maurice Vidal
> *$network = “192.168.1.0”*
567 37 Maurice Vidal
> include unbound }
568 37 Maurice Vidal
569 37 Maurice Vidal
570 37 Maurice Vidal
Puis l’appliquer sur le fichier /etc/puppet/modules/unbound/templates/unbound.conf.erb :
571 37 Maurice Vidal
Puppetmaster *head /etc/puppet/modules/unbound/templates/unbound.conf.erb*
572 37 Maurice Vidal
573 37 Maurice Vidal
<pre>
574 37 Maurice Vidal
server:
575 37 Maurice Vidal
	verbosity: 1
576 37 Maurice Vidal
 	outgoing-range: 60
577 37 Maurice Vidal
	interface: <%=  ipaddress %>
578 37 Maurice Vidal
 	do-ip4: yes
579 37 Maurice Vidal
 	do-udp: yes
580 37 Maurice Vidal
	do-tcp: yes
581 37 Maurice Vidal
 	access-control: <%= network %>/24 allow         
582 37 Maurice Vidal
 chroot: ""                                         	
583 37 Maurice Vidal
 logfile: "/var/log/unbound.log"      
584 37 Maurice Vidal
</pre> 
585 37 Maurice Vidal
586 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.
587 37 Maurice Vidal
588 37 Maurice Vidal
h2. *LANCEMENT DE LA SYNCHRONISATION :*
589 37 Maurice Vidal
590 37 Maurice Vidal
Sur le serveur, il faut initier la connexion :
591 37 Maurice Vidal
*puppetmasterd --no-daemonize --debug*
592 37 Maurice Vidal
593 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.
594 37 Maurice Vidal
595 37 Maurice Vidal
Si on rencontre un problème tel que :
596 37 Maurice Vidal
_Could not run: Could not create PID file: /var/run/puppet/master.pid_
597 37 Maurice Vidal
598 37 Maurice Vidal
Il faut alors supprimer le fichier sur le serveur : # *rm /var/run/puppet/master.pid* relancer la commande :
599 37 Maurice Vidal
*puppetmasterd --no-daemonize –debug*
600 37 Maurice Vidal
601 37 Maurice Vidal
Sur les clients on va vérifier le fichier du serveur /etc/puppet/site.pp avec la commande :
602 37 Maurice Vidal
*puppetd --test --server=puppetmaster.univ-perp.fr*
603 37 Maurice Vidal
604 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.
605 37 Maurice Vidal
606 37 Maurice Vidal
h2. Mise en place d'un DRBD et GFS2 par Puppet
607 37 Maurice Vidal
608 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 :*
609 37 Maurice Vidal
610 37 Maurice Vidal
Nous avons besoins de deux nouvelles machines :
611 37 Maurice Vidal
612 37 Maurice Vidal
Hostname : Machine6 = IP : 192.168.1.66
613 37 Maurice Vidal
Hosntame : Machine7 = IP : 192.168.1.77
614 37 Maurice Vidal
615 37 Maurice Vidal
h3. *Installation :*
616 37 Maurice Vidal
617 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.
618 37 Maurice Vidal
Nous le partitionnons :
619 37 Maurice Vidal
620 37 Maurice Vidal
*cfdisk /dev/sdb*
621 37 Maurice Vidal
NEW => LOGIQUE => Taille totale (faites entré) => WRITE => yes => "q" pour sortir
622 37 Maurice Vidal
623 37 Maurice Vidal
A la suite de cela, nous obtenons la partition : /dev/sdb5.
624 37 Maurice Vidal
625 37 Maurice Vidal
h3. *Installation des outils :*
626 37 Maurice Vidal
627 37 Maurice Vidal
Sur le puppetmaster, nous allons créer deux nouveaux modules :
628 37 Maurice Vidal
629 37 Maurice Vidal
*mkdir -p /etc/puppet/modules/drbd/{files,manifests,templates}*
630 37 Maurice Vidal
*mkdir -p /etc/puppet/modules/gfs2/{files,manifests,templates}*
631 37 Maurice Vidal
632 37 Maurice Vidal
Puis on rajoute nos deux modules dans le fichier /etc/puppet/manifests/modules.pp :
633 37 Maurice Vidal
634 37 Maurice Vidal
<pre>
635 37 Maurice Vidal
import "drbd"
636 37 Maurice Vidal
import "gfs2"
637 37 Maurice Vidal
</pre>
638 37 Maurice Vidal
639 37 Maurice Vidal
Commençons par l'installation de drbd :
640 37 Maurice Vidal
641 37 Maurice Vidal
*vi /etc/puppet/modules/drbd/manifests/init.pp*
642 37 Maurice Vidal
643 37 Maurice Vidal
<pre>
644 37 Maurice Vidal
class drbd::package {
645 37 Maurice Vidal
	package { "drbd8-utils": ensure => installed }
646 37 Maurice Vidal
}
647 37 Maurice Vidal
class drbd::fic {
648 37 Maurice Vidal
	exec { "modprobe":
649 37 Maurice Vidal
		require => Class["drbd::package"],
650 37 Maurice Vidal
		command => "/sbin/modprobe drbd"
651 37 Maurice Vidal
	}
652 37 Maurice Vidal
	file { "/etc/drbd.d/global_common.conf":
653 37 Maurice Vidal
		require => Class["drbd::package"],
654 37 Maurice Vidal
		ensure => present,
655 37 Maurice Vidal
		source => "puppet:///modules/drbd/global_common.conf"
656 37 Maurice Vidal
	}
657 37 Maurice Vidal
	file { "/etc/drbd.d/r0.res":
658 37 Maurice Vidal
		require => Class["drbd::package"],
659 37 Maurice Vidal
		ensure => present,
660 37 Maurice Vidal
		content => template("/etc/puppet/modules/drbd/templates/r0.res.erb")
661 37 Maurice Vidal
	}
662 37 Maurice Vidal
}
663 37 Maurice Vidal
class drbd::command {
664 37 Maurice Vidal
	exec { "create_ressource":
665 37 Maurice Vidal
		require => File["/etc/drbd.d/r0.res"],
666 37 Maurice Vidal
		command => "/sbin/drbdadm create-md r0"
667 37 Maurice Vidal
	}
668 37 Maurice Vidal
	exec { "start_drbd":
669 37 Maurice Vidal
		require => create_ressource"],
670 37 Maurice Vidal
		command => "/usr/sbin/service drbd start"
671 37 Maurice Vidal
	}
672 37 Maurice Vidal
}
673 37 Maurice Vidal
class drbd::cron1 {
674 37 Maurice Vidal
	file { "/root/overwrite.sh":
675 37 Maurice Vidal
		ensure => present,
676 37 Maurice Vidal
		source => "puppet:///modules/drbd/overwrite.sh"
677 37 Maurice Vidal
	}
678 37 Maurice Vidal
	file { "/root/mkfs.sh":
679 37 Maurice Vidal
		ensure => present,
680 37 Maurice Vidal
		source => "puppet:///modules/drbd/mkfs.sh"
681 37 Maurice Vidal
	}
682 37 Maurice Vidal
}
683 37 Maurice Vidal
class drbd::cron1.1 {
684 37 Maurice Vidal
	cron { "cron_over":
685 37 Maurice Vidal
		require => Class["drbd::cron1"],
686 37 Maurice Vidal
		command => "/root/overwrite.sh",
687 37 Maurice Vidal
		hour => "*/2"
688 37 Maurice Vidal
	}
689 37 Maurice Vidal
	cron { "cron_mkfs":	
690 37 Maurice Vidal
		require => Class["drbd::cron1"],
691 37 Maurice Vidal
		command => "/root/mkfs.sh",
692 37 Maurice Vidal
		hour => "*/3",
693 37 Maurice Vidal
		minute => "*/10"
694 37 Maurice Vidal
	}
695 37 Maurice Vidal
}
696 37 Maurice Vidal
class drbd::cron2  {
697 37 Maurice Vidal
	file { "/root/primary.sh":
698 37 Maurice Vidal
		ensure => present,
699 37 Maurice Vidal
		source => "puppet:///modules/drbd/primary.sh"
700 37 Maurice Vidal
	}
701 37 Maurice Vidal
}
702 37 Maurice Vidal
class drbd::cron2.2 {
703 37 Maurice Vidal
	cron { "cron_primary":
704 37 Maurice Vidal
		require => Class["drbd::cron2"],
705 37 Maurice Vidal
		command => "/root/primary.sh",
706 37 Maurice Vidal
		hour => "*/3"
707 37 Maurice Vidal
	}
708 37 Maurice Vidal
}
709 37 Maurice Vidal
class cron_supp {
710 37 Maurice Vidal
	file { "/root/supp.sh":
711 37 Maurice Vidal
		ensure => present,
712 37 Maurice Vidal
		source => $hostname ? {
713 37 Maurice Vidal
			machine6 => "puppet:///modules/drbd/supp.machine6.sh",
714 37 Maurice Vidal
			machine7 => "puppet:///modules/drbd/supp.machine7.sh"
715 37 Maurice Vidal
		}
716 37 Maurice Vidal
	}
717 37 Maurice Vidal
	cron { "delete_cron":
718 37 Maurice Vidal
		require => File["/root/supp.sh"],
719 37 Maurice Vidal
		command => "/root/supp.sh",
720 37 Maurice Vidal
		hour => "*/3",
721 37 Maurice Vidal
		minute => "35"
722 37 Maurice Vidal
	}
723 37 Maurice Vidal
}
724 37 Maurice Vidal
</pre>
725 37 Maurice Vidal
726 37 Maurice Vidal
Puis nous mettons à disposition le fichier de configuration de drbd,
727 37 Maurice Vidal
*vi /etc/puppet/modules/drbd/files/global_common.conf*
728 37 Maurice Vidal
729 37 Maurice Vidal
<pre>
730 37 Maurice Vidal
global {
731 37 Maurice Vidal
	usage-count no;
732 37 Maurice Vidal
}
733 37 Maurice Vidal
common {
734 37 Maurice Vidal
	protocol C;
735 37 Maurice Vidal
	syncer {
736 37 Maurice Vidal
		rate 100M;
737 37 Maurice Vidal
	}
738 37 Maurice Vidal
}</pre>
739 37 Maurice Vidal
740 37 Maurice Vidal
Et on utilise un template pour l'autre partie du fichier de configuration,
741 37 Maurice Vidal
*vi /etc/puppet/modules/drbd/templates/r0.res.erb*
742 37 Maurice Vidal
743 37 Maurice Vidal
<pre>
744 37 Maurice Vidal
resource r0 {
745 37 Maurice Vidal
	device /dev/drbd0;
746 37 Maurice Vidal
	disk <%= disk %>;
747 37 Maurice Vidal
	meta-disk internal;
748 37 Maurice Vidal
	startup {
749 37 Maurice Vidal
		wfc-timeout 120;
750 37 Maurice Vidal
		degr-wfc-timeout 120;
751 37 Maurice Vidal
		become-primary-on both;
752 37 Maurice Vidal
	}
753 37 Maurice Vidal
	disk { on-io-error detach; }
754 37 Maurice Vidal
	net {
755 37 Maurice Vidal
		allow-two-primaries;
756 37 Maurice Vidal
		after-sb-0pri discard-zero-changes;
757 37 Maurice Vidal
		after-sb-1pri discard-secondary;
758 37 Maurice Vidal
		after-sb-2pri disconnect;
759 37 Maurice Vidal
	}
760 37 Maurice Vidal
	on <%= node1name %> {
761 37 Maurice Vidal
		address <%= node1ip %>:7788;
762 37 Maurice Vidal
	}
763 37 Maurice Vidal
		on <%= node2name %> {
764 37 Maurice Vidal
		address <%= node2ip %>:7788;
765 37 Maurice Vidal
	}
766 37 Maurice Vidal
}
767 37 Maurice Vidal
</pre>
768 37 Maurice Vidal
769 37 Maurice Vidal
On va ensuite modifier sur le serveur Puppet le fichier :
770 37 Maurice Vidal
/etc/puppet/manifests/node.pp :
771 37 Maurice Vidal
772 37 Maurice Vidal
<pre>
773 37 Maurice Vidal
node 'machine6.univ-perp.fr' {
774 37 Maurice Vidal
	$pptmasterip = "192.168.1.15"
775 37 Maurice Vidal
	$pptmastername = "puppetmaster"
776 37 Maurice Vidal
	$pptmasterfqdn = "puppetmaster.univ-perp.fr"
777 37 Maurice Vidal
	$node1ip = "192.168.1.66"
778 37 Maurice Vidal
	$node1name = "machine6"
779 37 Maurice Vidal
	$node1fqdn = "machine6.univ-perp.fr"
780 37 Maurice Vidal
	$node2ip = "192.168.1.77"
781 37 Maurice Vidal
	$node2name = "machine7"
782 37 Maurice Vidal
	$node2fqdn = "machine7.univ-perp.fr"
783 37 Maurice Vidal
	$disk = "/dev/sdb5"
784 37 Maurice Vidal
	include drbd::package, drbd::fic, drbd::command, drbd::cron1, drbd::cron1.1, cron_supp
785 37 Maurice Vidal
}
786 37 Maurice Vidal
node 'machine7.univ-perp.fr' {
787 37 Maurice Vidal
	$pptmasterip = "192.168.1.15"
788 37 Maurice Vidal
	$pptmastername = "puppetmaster"
789 37 Maurice Vidal
	$pptmasterfqdn = "puppetmaster.univ-perp.fr"
790 37 Maurice Vidal
	$node1ip = "192.168.1.66"
791 37 Maurice Vidal
	$node1name = "machine6"
792 37 Maurice Vidal
	$node1fqdn = "machine6.univ-perp.fr"
793 37 Maurice Vidal
	$node2ip = "192.168.1.77"
794 37 Maurice Vidal
	$node2name = "machine7"
795 37 Maurice Vidal
	$node2fqdn = "machine7.univ-perp.fr"
796 37 Maurice Vidal
	$disk = "/dev/sdb5"
797 37 Maurice Vidal
	include drbd::package, drbd::fic, drbd::command, drbd::cron2, drbd::cron2.2, cron_supp
798 37 Maurice Vidal
}
799 37 Maurice Vidal
</pre>
800 37 Maurice Vidal
801 37 Maurice Vidal
Maintenant voyons les fichiers bash que nous utiliserons pour les différents 'cron' :
802 37 Maurice Vidal
*cat /etc/puppet/modules/drbd/files/overwrite.sh*
803 37 Maurice Vidal
<pre>
804 37 Maurice Vidal
#!/bin/bash
805 37 Maurice Vidal
drbdadm -- --overwrite-data-of-peer primary r0
806 37 Maurice Vidal
</pre>
807 37 Maurice Vidal
808 37 Maurice Vidal
*cat /etc/puppet/modules/drbd/files/mkfs.sh*
809 37 Maurice Vidal
<pre>
810 37 Maurice Vidal
#!/bin/bash
811 37 Maurice Vidal
mkfs.gfs2 -t cluster1:gfs2 -p lock_dlm -j 2 /dev/drbd0
812 37 Maurice Vidal
</pre>
813 37 Maurice Vidal
814 37 Maurice Vidal
*cat /etc/puppet/modules/drbd/files/primary.sh*
815 37 Maurice Vidal
<pre>
816 37 Maurice Vidal
#!/bin/bash
817 37 Maurice Vidal
drbdadm primary r0
818 37 Maurice Vidal
</pre>
819 37 Maurice Vidal
820 37 Maurice Vidal
*cat /etc/puppet/modules/drbd/files/supp.machine6.sh*
821 37 Maurice Vidal
<pre>
822 37 Maurice Vidal
#!/bin/bash
823 37 Maurice Vidal
rm -r /root/overwrite.sh
824 37 Maurice Vidal
rm -r /root/mkfs.sh
825 37 Maurice Vidal
</pre>
826 37 Maurice Vidal
827 37 Maurice Vidal
*cat /etc/puppet/modules/drbd/files/supp.machine7.sh*
828 37 Maurice Vidal
<pre>
829 37 Maurice Vidal
#!/bin/bash
830 37 Maurice Vidal
rm -r /root/primary.sh
831 37 Maurice Vidal
</pre>
832 37 Maurice Vidal
833 37 Maurice Vidal
Ne pas oublier de mettre le droit d'execution aux fichier bash avec cette commande :
834 37 Maurice Vidal
<pre>
835 37 Maurice Vidal
chmod 744 /etc/puppet/modules/drbd/files/*.sh
836 37 Maurice Vidal
</pre>
837 37 Maurice Vidal
838 37 Maurice Vidal
Il y a des commandes à faire manuellement, moi j'ai préféré utiliser l'ordonnanceur cron.
839 37 Maurice Vidal
840 37 Maurice Vidal
Passons à la configuration de GFS2 :
841 37 Maurice Vidal
842 37 Maurice Vidal
*cat /etc/puppet/modules/gfs2/manifests/init.pp*
843 37 Maurice Vidal
<pre>
844 37 Maurice Vidal
class gfs2::package {
845 37 Maurice Vidal
	package { "cman": ensure => installed }
846 37 Maurice Vidal
	package { "gfs2-tools": ensure => installed }
847 37 Maurice Vidal
	package { "libopenais-dev": ensure => installed }
848 37 Maurice Vidal
}
849 37 Maurice Vidal
class gfs2::fic {
850 37 Maurice Vidal
	file { "/etc/cluster/cluster.conf":
851 37 Maurice Vidal
		require => Class["gfs2::package"],
852 37 Maurice Vidal
		ensure => present,
853 37 Maurice Vidal
		source => "puppet:///modules/gfs2/cluster.conf"
854 37 Maurice Vidal
	}
855 37 Maurice Vidal
}
856 37 Maurice Vidal
class gfs2::command {
857 37 Maurice Vidal
	exec { "stop_network_manager":
858 37 Maurice Vidal
		require => Class["gfs2::fic"],
859 37 Maurice Vidal
		command => "/usr/sbin/service network-manager stop"
860 37 Maurice Vidal
	}
861 37 Maurice Vidal
	exec { "start_cman":
862 37 Maurice Vidal
		require => Exec["stop_network_manager"],
863 37 Maurice Vidal
		command => "/usr/sbin/service cman start"
864 37 Maurice Vidal
	}
865 37 Maurice Vidal
}
866 37 Maurice Vidal
class gfs2::hosts {
867 37 Maurice Vidal
	file { "/etc/hosts":
868 37 Maurice Vidal
		require => Class["gfs2::package"],
869 37 Maurice Vidal
		ensure => present,
870 37 Maurice Vidal
		content => template("/etc/puppet/modules/gfs2/templates/hosts.erb")
871 37 Maurice Vidal
	}
872 37 Maurice Vidal
}
873 37 Maurice Vidal
</pre>
874 37 Maurice Vidal
875 37 Maurice Vidal
Nous voulons être sûr que nos deux machines puissent se joindre :
876 37 Maurice Vidal
*cat /etc/puppet/modules/gfs2/templates/hosts.erb*
877 37 Maurice Vidal
<pre>
878 37 Maurice Vidal
127.0.0.1 		localhost
879 37 Maurice Vidal
<%= pptmasterip %>	<%= pptmastername %>	<%= pptmasterfqdn %>
880 37 Maurice Vidal
<%= node1ip %>		<%= node1name %>	<%= node1fqdn %>
881 37 Maurice Vidal
<%= node2ip %>		<%= node2name %>	<%= node2fqdn %>
882 37 Maurice Vidal
</pre>
883 37 Maurice Vidal
884 37 Maurice Vidal
Il faut également modifier le fichier /etc/puppet/manifests/node.pp afin de rajouter les classes gfs :
885 37 Maurice Vidal
886 37 Maurice Vidal
> node 'machine6.univ-perp.fr' {
887 37 Maurice Vidal
>...
888 37 Maurice Vidal
> 	$disk = "/dev/sdb5"
889 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* 
890 37 Maurice Vidal
>}
891 37 Maurice Vidal
>
892 37 Maurice Vidal
> node 'machine7.univ-perp.fr' {
893 37 Maurice Vidal
>... 	
894 37 Maurice Vidal
> 	$disk = "/dev/sdb5"
895 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* 
896 37 Maurice Vidal
>}
897 37 Maurice Vidal
898 37 Maurice Vidal
Il ne reste plus que le fichier de configuration du cluster, cependant à cause de sa forme (composé de balises) :
899 37 Maurice Vidal
Ainsi le fichier /etc/puppet/modules/gfs2/files/cluster.conf :
900 37 Maurice Vidal
901 37 Maurice Vidal
<pre>
902 37 Maurice Vidal
<?xml version="1.0"?>
903 37 Maurice Vidal
<cluster name="cluster1" config_version="3">
904 37 Maurice Vidal
<cman two_node="1" expected_votes="1"/>
905 37 Maurice Vidal
<clusternodes>
906 37 Maurice Vidal
<clusternode name="machine6" votes="1" nodeid="1">
907 37 Maurice Vidal
        <fence>
908 37 Maurice Vidal
                <method name="single">
909 37 Maurice Vidal
                        <device name="manual" ipaddr="192.168.1.66"/>
910 37 Maurice Vidal
                </method>
911 37 Maurice Vidal
        </fence>
912 37 Maurice Vidal
</clusternode>
913 37 Maurice Vidal
<clusternode name="machine7" votes="1" nodeid="2">
914 37 Maurice Vidal
        <fence>
915 37 Maurice Vidal
                <method name="single">
916 37 Maurice Vidal
                        <device name="manual" ipaddr="192.168.1.77"/>
917 37 Maurice Vidal
                </method>
918 37 Maurice Vidal
        </fence>
919 37 Maurice Vidal
</clusternode>
920 37 Maurice Vidal
</clusternodes>
921 37 Maurice Vidal
<fence_daemon clean_start="1" post_fail_delay="0" post_join_delay="3"/>
922 37 Maurice Vidal
<fencedevices>
923 37 Maurice Vidal
        <fencedevice name="manual" agent="fence_manual"/>
924 37 Maurice Vidal
</fencedevices>
925 37 Maurice Vidal
</cluster>
926 37 Maurice Vidal
</pre>
927 37 Maurice Vidal
928 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 :
929 37 Maurice Vidal
cluster name= *cluster1* config_version= *3* (pour connaitre le numéro de la version : *apt-cache policy gfs2-tools* )
930 37 Maurice Vidal
Egalement le nom des nos noeuds : clusternode name= *machine6* votes="1" nodeid= *1*
931 37 Maurice Vidal
Et pour finir l'adresse IP : device name="manual" ipaddr= *192.168.1.66*
932 37 Maurice Vidal
933 37 Maurice Vidal
Puis sur le PuppetMaster on lance la commande :
934 37 Maurice Vidal
*puppetmasterd --no-daemonize –debug*
935 37 Maurice Vidal
936 37 Maurice Vidal
Et sur les clients :
937 37 Maurice Vidal
*puppetd --test --server=puppetmaster.univ-perp.fr*
938 37 Maurice Vidal
939 37 Maurice Vidal
+On vérifie :+
940 37 Maurice Vidal
Sur les machines clientes, on peut aller vérifier le raid1 :
941 37 Maurice Vidal
*service drbd status*
942 37 Maurice Vidal
943 37 Maurice Vidal
Nous voyons que nous sommes à Primary/Primary UpToDate/UpToDate 
944 37 Maurice Vidal
Ici les machines sont en attentes d'un montage.
945 37 Maurice Vidal
946 37 Maurice Vidal
Maintenant il ne reste plus qu'à créer un répertoire, sur la machine6 :
947 37 Maurice Vidal
*mkdir -p /media/cluster/drbd*
948 37 Maurice Vidal
*mount -t gfs2 /dev/drbd0 /media/cluster/drbd*
949 37 Maurice Vidal
950 37 Maurice Vidal
Et, sur la machine7 :
951 37 Maurice Vidal
*mkdir -p /media/clusterdata/drbd*
952 37 Maurice Vidal
*mount -t gfs2 /dev/drbd0 /media/clusterdata/drbd*
953 37 Maurice Vidal
954 37 Maurice Vidal
h3. *Vérification :*
955 37 Maurice Vidal
956 37 Maurice Vidal
On vérifie :
957 37 Maurice Vidal
*service drbd status*
958 37 Maurice Vidal
959 37 Maurice Vidal
+Il faut que l'on voie nos points de montage.+
960 37 Maurice Vidal
961 37 Maurice Vidal
Sur une machine, n'importe laquelle, écrivez sur votre point de montage, par exemple machine6 :
962 37 Maurice Vidal
*touch /media/cluster/drbd/machine6.txt*
963 37 Maurice Vidal
*ls /media/cluster/drbd*
964 37 Maurice Vidal
On voit notre fichier : machine6.txt
965 37 Maurice Vidal
966 37 Maurice Vidal
Sur l'autre node du cluster (machine7) :
967 37 Maurice Vidal
*ls /media/clusterdata/drbd*
968 37 Maurice Vidal
On voit notre fichier : machine6.txt
969 37 Maurice Vidal
970 37 Maurice Vidal
Pour voir les log du cluster :
971 37 Maurice Vidal
*tailf /var/log/cluster/corosync.log*
972 37 Maurice Vidal
973 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é.
974 37 Maurice Vidal
975 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.
976 37 Maurice Vidal
977 37 Maurice Vidal
h2. Mise en place d'un Postfix avec authentification LDAP Sans Puppet (Pas fini)
978 37 Maurice Vidal
979 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 =(*
980 37 Maurice Vidal
981 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).
982 37 Maurice Vidal
983 37 Maurice Vidal
h3. Installer LDAP :
984 37 Maurice Vidal
985 37 Maurice Vidal
*apt-get install slapd ldap-utils*
986 37 Maurice Vidal
*dpkg-reconfigure slapd*
987 37 Maurice Vidal
988 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".
989 37 Maurice Vidal
990 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 :
991 37 Maurice Vidal
*cp /usr/share/doc/slapd/example/slapd.conf /etc/ldap/*
992 37 Maurice Vidal
993 37 Maurice Vidal
Ensuite il faut modifier le fichier slapd.conf
994 37 Maurice Vidal
<pre>
995 37 Maurice Vidal
suffix          "dc=univ-perp,dc=fr"
996 37 Maurice Vidal
rootdn          "cn=admin,dc=univ-perp,dc=fr"
997 37 Maurice Vidal
password-hash   SSHA
998 37 Maurice Vidal
rootpw          {SSHA}zmQHHtuIgyentPKrBw3lkNHN6JSVg/UW
999 37 Maurice Vidal
access to attrs=userPassword,shadowLastChange
1000 37 Maurice Vidal
        by dn="cn=admin,dc=univ-perp,dc=fr" write
1001 37 Maurice Vidal
        by anonymous auth
1002 37 Maurice Vidal
        by self write
1003 37 Maurice Vidal
        by * none
1004 37 Maurice Vidal
access to *
1005 37 Maurice Vidal
        by dn="cn=admin,dc=duniv-perp,dc=fr" write
1006 37 Maurice Vidal
        by * none
1007 37 Maurice Vidal
</pre>
1008 37 Maurice Vidal
1009 37 Maurice Vidal
h3. On peut ensuite installer les serveurs de messageries :
1010 37 Maurice Vidal
1011 37 Maurice Vidal
*apt-get install courier-ldap postfix postfix-ldap*
1012 37 Maurice Vidal
1013 37 Maurice Vidal
On peut rajouter des schema fournis par ldap :
1014 37 Maurice Vidal
*cp /usr/share/doc/courier-authlib-ldap/authldap.schema.gz /etc/ldap/schema*
1015 37 Maurice Vidal
*gunzip /etc/ldap/schema/authldap.schema.gz*
1016 37 Maurice Vidal
1017 37 Maurice Vidal
Et rajouter son chemin dans /etc/ldap/slapd.conf :
1018 37 Maurice Vidal
<pre>
1019 37 Maurice Vidal
include /etc/ldap/schema/authldap.schema
1020 37 Maurice Vidal
</pre>
1021 37 Maurice Vidal
1022 37 Maurice Vidal
On redémarre :
1023 37 Maurice Vidal
*service slapd restart*
1024 37 Maurice Vidal
1025 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 =))*
1026 37 Maurice Vidal
1027 37 Maurice Vidal
*vi exemple-type.ldif*
1028 37 Maurice Vidal
<pre>
1029 37 Maurice Vidal
dn: ou=people, dc=univ-perp, dc=fr
1030 37 Maurice Vidal
objectclass: top 
1031 37 Maurice Vidal
objectclass: organizationalUnit 
1032 37 Maurice Vidal
ou: people 
1033 37 Maurice Vidal
1034 37 Maurice Vidal
dn: cn=gp_tech, ou=people, dc=univ-perp, dc=fr 
1035 37 Maurice Vidal
objectClass: top 
1036 37 Maurice Vidal
objectClass: posixGroup 
1037 37 Maurice Vidal
cn: gp_tech
1038 37 Maurice Vidal
gidNumber: 1111 
1039 37 Maurice Vidal
1040 37 Maurice Vidal
dn: uid=toto1, ou=people, dc=univ-perp, dc=fr
1041 37 Maurice Vidal
objectClass: top 
1042 37 Maurice Vidal
objectClass: posixAccount 
1043 37 Maurice Vidal
objectClass: inetOrgPerson 
1044 37 Maurice Vidal
uid: toto 
1045 37 Maurice Vidal
cn: toto un 
1046 37 Maurice Vidal
sn: toto 
1047 37 Maurice Vidal
givenName: un 
1048 37 Maurice Vidal
uidNumber: 2200 
1049 37 Maurice Vidal
gidNumber: 1111 
1050 37 Maurice Vidal
homeDirectory: /home/toto1 
1051 37 Maurice Vidal
userPassword: mdp2toto1 
1052 37 Maurice Vidal
mail: toto1@univ-perp.fr 
1053 37 Maurice Vidal
1054 37 Maurice Vidal
dn: uid=toto2,ou=people,dc=univ-perp,dc=fr
1055 37 Maurice Vidal
objectClass: top
1056 37 Maurice Vidal
objectClass: inetOrgPerson
1057 37 Maurice Vidal
objectClass: posixAccount
1058 37 Maurice Vidal
uid: toto2
1059 37 Maurice Vidal
cn: toto deux
1060 37 Maurice Vidal
sn: toto
1061 37 Maurice Vidal
uidNumber: 2201
1062 37 Maurice Vidal
gidNumber: 1111
1063 37 Maurice Vidal
mail: toto2@univ-perp.fr
1064 37 Maurice Vidal
homeDirectory: /home/toto2
1065 37 Maurice Vidal
userPassword: mdp2toto2
1066 37 Maurice Vidal
</pre>
1067 37 Maurice Vidal
1068 37 Maurice Vidal
On applique ce changement d'arborescence :
1069 37 Maurice Vidal
*ldapadd -x -f exemple_type.ldif -D cn=admin,dc=univ-perp,dc=fr -W*
1070 37 Maurice Vidal
1071 37 Maurice Vidal
h3. *Configuration de Postfix*
1072 37 Maurice Vidal
1073 37 Maurice Vidal
Il faut modifier le fichier de conf du serveur de messagerie:
1074 37 Maurice Vidal
*vi /etc/postfix/main.cf*
1075 37 Maurice Vidal
1076 37 Maurice Vidal
<pre>
1077 37 Maurice Vidal
...
1078 37 Maurice Vidal
local_recipient_maps = ldap:/etc/postfix/ldap_local_recipient.cf
1079 37 Maurice Vidal
...
1080 37 Maurice Vidal
</pre>
1081 37 Maurice Vidal
1082 37 Maurice Vidal
Puis on créé le fichier ldap_local_recipient.cf :
1083 37 Maurice Vidal
1084 37 Maurice Vidal
<pre>
1085 37 Maurice Vidal
server_host = 192.168.1.66
1086 37 Maurice Vidal
server_port = 389
1087 37 Maurice Vidal
search_base = dc=univ-perp,dc=fe
1088 37 Maurice Vidal
# le %s signifie "adresse du destinataire telle que fourni par la commande "RCPT TO:"
1089 37 Maurice Vidal
query_filter = (mail=%s)
1090 37 Maurice Vidal
result_attribute = mail
1091 37 Maurice Vidal
</pre>
1092 37 Maurice Vidal
1093 37 Maurice Vidal
On peut vérifier si notre serveur de messagerie peut joindre l'annuaire ldap :
1094 37 Maurice Vidal
*postmap -q toto1@univ-perp.fr ldap:/etc/postfix/ldap_local_recipient.cf*
1095 37 Maurice Vidal
1096 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").