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