Projet

Général

Profil

PUPPET » Historique » Version 14

Mehdi Abaakouk, 09/08/2012 14:27

1 6 Mehdi Abaakouk
h1. Master of Puppet
2 1 Mehdi Abaakouk
3 10 Laurent GUERBY
h2. Misc links
4 10 Laurent GUERBY
5 10 Laurent GUERBY
* http://finninday.net/wiki/index.php/Zero_to_puppet_in_one_day
6 11 Laurent GUERBY
* http://blog.wikimedia.org/2011/09/19/ever-wondered-how-the-wikimedia-servers-are-configured/
7 12 Laurent GUERBY
* https://gerrit.wikimedia.org/r/gitweb?p=operations/puppet.git;a=tree
8 11 Laurent GUERBY
* http://blog.wikimedia.org/2012/04/16/introduction-to-wikimedia-labs/
9 13 Mehdi Abaakouk
* http://docs.puppetlabs.com/references/stable/
10 13 Mehdi Abaakouk
* http://madeinsyria.fr/2011/06/howto-puppet-administration-et-industrialisation-de-masse/
11 10 Laurent GUERBY
12 14 Mehdi Abaakouk
h2. Installation d'un server de mail (roundcube+dovecot+spamassasin+spf+postgrey+postfix en virtual domain) comme celui de ttnn avec puppet
13 14 Mehdi Abaakouk
14 14 Mehdi Abaakouk
Sur votre puppet-master (qui peux être votre machine ou le server lui-meme)
15 14 Mehdi Abaakouk
16 14 Mehdi Abaakouk
<pre>
17 14 Mehdi Abaakouk
apt-get install puppet puppetmaster
18 14 Mehdi Abaakouk
cd /etc/puppet/modules/
19 14 Mehdi Abaakouk
git clone http://git.tetaneutral.net/puppet-mailserver.git mailserver
20 14 Mehdi Abaakouk
21 14 Mehdi Abaakouk
mkdir /etc/puppet/{templates,ssl}
22 14 Mehdi Abaakouk
touch /etc/puppet/templates/<hostname>-{mail,aliases,sender_access,recipient_access}
23 14 Mehdi Abaakouk
</pre>
24 14 Mehdi Abaakouk
25 14 Mehdi Abaakouk
26 14 Mehdi Abaakouk
Créé le fichier /etc/puppet/manifest/site.pp
27 14 Mehdi Abaakouk
<pre>
28 14 Mehdi Abaakouk
node "<HOSTNAME>" {
29 14 Mehdi Abaakouk
        class {'ttnn_mail_master': domains => [ "mydomain.tld", "myotherdomains.tld" ], }
30 14 Mehdi Abaakouk
}
31 14 Mehdi Abaakouk
class ttnn_mail_master ($domains = []) {
32 14 Mehdi Abaakouk
33 14 Mehdi Abaakouk
        class { 'mysql::server':
34 14 Mehdi Abaakouk
                config_hash => {
35 14 Mehdi Abaakouk
                        root_password => "dummy_password"],
36 14 Mehdi Abaakouk
                },
37 14 Mehdi Abaakouk
        }
38 14 Mehdi Abaakouk
39 14 Mehdi Abaakouk
        class { 'apache':}
40 14 Mehdi Abaakouk
        class { 'mailserver::params':
41 14 Mehdi Abaakouk
                domains     => $domains,
42 14 Mehdi Abaakouk
                passwd_content    => template("$fqdn-mail"),
43 14 Mehdi Abaakouk
                aliases_content   => template("$fqdn-aliases"),
44 14 Mehdi Abaakouk
                sender_access_content   => template("$fqdn-sender_access"),
45 14 Mehdi Abaakouk
                recipient_access_content   => template("$fqdn-recipient_access"),
46 14 Mehdi Abaakouk
                ssl_cert_source   => "puppet:///ssl/$fqdn.pem",
47 14 Mehdi Abaakouk
                ssl_key_source   => "puppet:///ssl/$fqdn.key",
48 14 Mehdi Abaakouk
        }
49 14 Mehdi Abaakouk
        class { 'mailserver::spamassassin': }
50 14 Mehdi Abaakouk
        class { 'mailserver::rbl': }
51 14 Mehdi Abaakouk
        class { 'mailserver::greylisting': }
52 14 Mehdi Abaakouk
        class { 'mailserver::dovecot':}
53 14 Mehdi Abaakouk
        #       class { 'mailserver::spf': }
54 14 Mehdi Abaakouk
        class { 'mailserver::roundcube': session_key => '<A_RANDOM_STRING>' }
55 14 Mehdi Abaakouk
        class { 'mailserver::postfix': }
56 14 Mehdi Abaakouk
57 14 Mehdi Abaakouk
58 14 Mehdi Abaakouk
}
59 14 Mehdi Abaakouk
</pre>
60 14 Mehdi Abaakouk
61 14 Mehdi Abaakouk
Editer le fichier /etc/puppet/templates/<HOSTNAME>-mail et ajouter des comptes mails:
62 14 Mehdi Abaakouk
<pre>
63 14 Mehdi Abaakouk
toto@mydomain.tld:{PLAIN}clear_password
64 14 Mehdi Abaakouk
toto@myotherdomain.tld:{SHA1}crypted_password
65 14 Mehdi Abaakouk
</pre>
66 14 Mehdi Abaakouk
67 14 Mehdi Abaakouk
Ajouter les certificats et clé ssl (TODO: expliquer comment faire ces fichiers):
68 14 Mehdi Abaakouk
<pre>
69 14 Mehdi Abaakouk
cp mon_certificat.pem(ou.crt) /etc/puppet/ssl/<HOSTNAME>.pem
70 14 Mehdi Abaakouk
cp mon_certificat.key /etc/puppet/ssl/<HOSTNAME>.key
71 14 Mehdi Abaakouk
</pre>
72 14 Mehdi Abaakouk
73 14 Mehdi Abaakouk
Ensuite sur le server de mail (<HOSTNAME>):
74 14 Mehdi Abaakouk
75 14 Mehdi Abaakouk
taper:
76 14 Mehdi Abaakouk
<pre>
77 14 Mehdi Abaakouk
# puppet agent-vt
78 14 Mehdi Abaakouk
...
79 14 Mehdi Abaakouk
</pre>
80 14 Mehdi Abaakouk
81 14 Mehdi Abaakouk
Votre serveur de mail est prét
82 14 Mehdi Abaakouk
83 14 Mehdi Abaakouk
note: si il y a des erreurs, relancer une fois avec de chercher le problème.
84 14 Mehdi Abaakouk
85 14 Mehdi Abaakouk
86 1 Mehdi Abaakouk
h2. Exemple duplication www avec puppet et les backups:
87 6 Mehdi Abaakouk
88 6 Mehdi Abaakouk
Installation d'une vm (ici: puppet-tester) avec ganeti:
89 6 Mehdi Abaakouk
90 6 Mehdi Abaakouk
sur h1:
91 6 Mehdi Abaakouk
<pre>
92 6 Mehdi Abaakouk
./gnt-addvm puppet-tester
93 6 Mehdi Abaakouk
</pre>
94 7 Mehdi Abaakouk
95 7 Mehdi Abaakouk
Sur puppet-tester, restauration du dernier backup de /var/www de www.tetaneutral.net qui se trouve sur h2 (Je passe l'installation de clé pgp):
96 7 Mehdi Abaakouk
97 7 Mehdi Abaakouk
<pre>
98 7 Mehdi Abaakouk
cat www.tetaneutral.net-var-www.20120102.master.tar.gz | gpg -d | tar -xzf - -C /
99 8 Mehdi Abaakouk
cat www.tetaneutral.net-var-www.20120103.tar.gz | gpg -d | tar -xzf - -C /
100 7 Mehdi Abaakouk
cat www.tetaneutral.net-var-www.20120104.tar.gz | gpg -d | tar -xzf - -C /
101 6 Mehdi Abaakouk
</pre>
102 6 Mehdi Abaakouk
103 6 Mehdi Abaakouk
Puis installation de puppet:
104 6 Mehdi Abaakouk
<pre>
105 6 Mehdi Abaakouk
$ apt-get install puppet
106 6 Mehdi Abaakouk
107 6 Mehdi Abaakouk
$ cat /etc/puppet/puppet.conf ajouter:
108 6 Mehdi Abaakouk
[main]
109 6 Mehdi Abaakouk
logdir=/var/log/puppet
110 6 Mehdi Abaakouk
vardir=/var/lib/puppet
111 6 Mehdi Abaakouk
ssldir=/var/lib/puppet/ssl
112 6 Mehdi Abaakouk
rundir=/var/run/puppet
113 6 Mehdi Abaakouk
factpath=$vardir/lib/facter
114 6 Mehdi Abaakouk
templatedir=$confdir/templates
115 6 Mehdi Abaakouk
pluginsync = true
116 6 Mehdi Abaakouk
117 6 Mehdi Abaakouk
[agent]
118 6 Mehdi Abaakouk
server=puppet.tetaneutral.net
119 6 Mehdi Abaakouk
120 6 Mehdi Abaakouk
$ puppet agent --test
121 6 Mehdi Abaakouk
</pre>
122 6 Mehdi Abaakouk
123 6 Mehdi Abaakouk
Sur puppet.teteneutral.net, dans le fichier nodes.pp copie du bloc de la machine www en puppet-tester
124 6 Mehdi Abaakouk
puis on sign la cle de puppet-tester
125 6 Mehdi Abaakouk
<pre>
126 6 Mehdi Abaakouk
puppetca --sign puppet-tester.tetaneutral.net
127 6 Mehdi Abaakouk
</pre>
128 6 Mehdi Abaakouk
129 6 Mehdi Abaakouk
sur puppet-tester, on descend la configuration via puppet:
130 6 Mehdi Abaakouk
131 6 Mehdi Abaakouk
<pre>puppet agent --test</pre>
132 6 Mehdi Abaakouk
133 6 Mehdi Abaakouk
et pour finir on restaure le backup mysql:
134 6 Mehdi Abaakouk
135 1 Mehdi Abaakouk
<pre>
136 1 Mehdi Abaakouk
mysql -u root < www.tetaneutral.net-all-mysql-databases.20120103.sql
137 14 Mehdi Abaakouk
</pre>
138 1 Mehdi Abaakouk
139 13 Mehdi Abaakouk
Et c'est fini !
140 6 Mehdi Abaakouk
141 13 Mehdi Abaakouk
h2. Ajout d'une machine (obsolete):
142 1 Mehdi Abaakouk
143 1 Mehdi Abaakouk
Sur le client:
144 1 Mehdi Abaakouk
145 1 Mehdi Abaakouk
<pre>
146 1 Mehdi Abaakouk
$ apt-get install puppet
147 1 Mehdi Abaakouk
</pre>
148 1 Mehdi Abaakouk
149 1 Mehdi Abaakouk
dans /etc/default/puppet mettre:
150 1 Mehdi Abaakouk
<pre>
151 1 Mehdi Abaakouk
START=yes
152 1 Mehdi Abaakouk
</pre>
153 1 Mehdi Abaakouk
154 1 Mehdi Abaakouk
et dans /etc/puppet/puppet.conf ajouter:
155 1 Mehdi Abaakouk
<pre>
156 6 Mehdi Abaakouk
pluginsync=true
157 6 Mehdi Abaakouk
158 1 Mehdi Abaakouk
[agent]
159 1 Mehdi Abaakouk
server=puppet.tetaneutral.net
160 1 Mehdi Abaakouk
</pre>
161 1 Mehdi Abaakouk
162 1 Mehdi Abaakouk
Ensuite ajouter la machine dans le puppet master, MOUAHAHA:
163 1 Mehdi Abaakouk
Sur le client: 
164 1 Mehdi Abaakouk
<pre>
165 1 Mehdi Abaakouk
$ puppet agent --test
166 1 Mehdi Abaakouk
warning: peer certificate won't be verified in this SSL session
167 1 Mehdi Abaakouk
warning: peer certificate won't be verified in this SSL session
168 1 Mehdi Abaakouk
warning: peer certificate won't be verified in this SSL session
169 1 Mehdi Abaakouk
Exiting; no certificate found and waitforcert is disabled
170 1 Mehdi Abaakouk
</pre>
171 1 Mehdi Abaakouk
172 1 Mehdi Abaakouk
Sur le serveur:
173 1 Mehdi Abaakouk
<pre>
174 1 Mehdi Abaakouk
$ puppetca --list
175 1 Mehdi Abaakouk
www.tetaneutral.net
176 1 Mehdi Abaakouk
177 1 Mehdi Abaakouk
$ puppetca  --sign --all
178 1 Mehdi Abaakouk
notice: Signed certificate request for www.tetaneutral.net
179 1 Mehdi Abaakouk
notice: Removing file Puppet::SSL::CertificateRequest www.tetaneutral.net at '/var/lib/puppet/ssl/ca/requests/www.tetaneutral.net.pem'
180 1 Mehdi Abaakouk
</pre>
181 1 Mehdi Abaakouk
182 1 Mehdi Abaakouk
Sur le client: 
183 1 Mehdi Abaakouk
<pre>
184 1 Mehdi Abaakouk
$ puppet agent --test
185 1 Mehdi Abaakouk
warning: peer certificate won't be verified in this SSL session
186 1 Mehdi Abaakouk
info: Caching certificate for www.tetaneutral.net
187 1 Mehdi Abaakouk
info: Caching certificate_revocation_list for ca
188 1 Mehdi Abaakouk
info: Caching catalog for www.tetaneutral.net
189 1 Mehdi Abaakouk
info: Applying configuration version '1325516709'
190 4 Mehdi Abaakouk
info: Creating state file /var/lib/puppet/state/state.yaml
191 4 Mehdi Abaakouk
notice: Finished catalog run in 0.01 seconds
192 4 Mehdi Abaakouk
</pre>
193 4 Mehdi Abaakouk
194 4 Mehdi Abaakouk
Sur le serveur, on associe les modules au client:
195 4 Mehdi Abaakouk
196 4 Mehdi Abaakouk
<pre>
197 4 Mehdi Abaakouk
$ cat manifests/nodes.pp
198 4 Mehdi Abaakouk
199 4 Mehdi Abaakouk
node basenode {
200 2 Mehdi Abaakouk
    include backup
201 2 Mehdi Abaakouk
    include motd
202 5 Mehdi Abaakouk
}
203 5 Mehdi Abaakouk
204 5 Mehdi Abaakouk
node 'www.tetaneutral.net' inherits basenode {
205 5 Mehdi Abaakouk
}
206 5 Mehdi Abaakouk
</pre>
207 5 Mehdi Abaakouk
208 5 Mehdi Abaakouk
209 5 Mehdi Abaakouk
210 5 Mehdi Abaakouk
h2. Récupération de fichier écrasé par puppet:
211 5 Mehdi Abaakouk
212 1 Mehdi Abaakouk
Voir la liste des fichiers backupés:
213 2 Mehdi Abaakouk
<pre>
214 2 Mehdi Abaakouk
find /var/*/puppet/clientbucket -name paths | while read path ; do echo $(cat $path): $(basename $(dirname $path))  $(stat -c %y $path) ; done
215 2 Mehdi Abaakouk
</pre>
216 2 Mehdi Abaakouk
Ensuite pour voir le fichier:
217 2 Mehdi Abaakouk
<pre>
218 6 Mehdi Abaakouk
A venir ... (un truc avec puppet filebucket ...)
219 2 Mehdi Abaakouk
</pre>
220 2 Mehdi Abaakouk
221 2 Mehdi Abaakouk
h2. Ajout d'un module (ie: un truc/service/user a configurer), ici module motdpour l'exemple :
222 2 Mehdi Abaakouk
223 2 Mehdi Abaakouk
h3. Création du module
224 2 Mehdi Abaakouk
225 2 Mehdi Abaakouk
<pre>
226 2 Mehdi Abaakouk
cd /etc/puppet/modules
227 2 Mehdi Abaakouk
mkdir -p  motd/{files,lib,manifests,templates,tests}
228 2 Mehdi Abaakouk
$ cat motd/manifests/init.pp
229 2 Mehdi Abaakouk
class motd {
230 2 Mehdi Abaakouk
        file {'motd':
231 2 Mehdi Abaakouk
                ensure  => file,
232 2 Mehdi Abaakouk
                path    => '/etc/motd.tail',
233 2 Mehdi Abaakouk
                mode    => 0644,
234 2 Mehdi Abaakouk
                content => "Bienvenue sur ${::hostname}, machine de l'infrastructure ${::domain}\n\nCette machine est geree par puppet toutes modifications effectuee est suceptible d'etre perdu."
235 2 Mehdi Abaakouk
        }
236 2 Mehdi Abaakouk
}
237 2 Mehdi Abaakouk
</pre>
238 2 Mehdi Abaakouk
239 2 Mehdi Abaakouk
240 2 Mehdi Abaakouk
h3. Ajout du module à la liste des modules disponibles
241 1 Mehdi Abaakouk
242 2 Mehdi Abaakouk
<pre>
243 2 Mehdi Abaakouk
$ cat manifests/modules.pp
244 2 Mehdi Abaakouk
import "motd"
245 2 Mehdi Abaakouk
</pre>
246 2 Mehdi Abaakouk
247 2 Mehdi Abaakouk
h3. Utilisation du module pour une node
248 2 Mehdi Abaakouk
249 2 Mehdi Abaakouk
<pre>
250 2 Mehdi Abaakouk
$ cat manifests/nodes.pp
251 6 Mehdi Abaakouk
node 'www.tetaneutral.net' {
252 2 Mehdi Abaakouk
    include motd
253 2 Mehdi Abaakouk
}
254 1 Mehdi Abaakouk
</pre>
255 1 Mehdi Abaakouk
256 1 Mehdi Abaakouk
257 13 Mehdi Abaakouk
h2. Installation du serveur PuppetMaster (obsolete TODO sileht: réécrire)
258 1 Mehdi Abaakouk
259 1 Mehdi Abaakouk
Installation du paquet:
260 1 Mehdi Abaakouk
<pre>
261 1 Mehdi Abaakouk
$ apt-get install puppetmaster
262 1 Mehdi Abaakouk
</pre>
263 1 Mehdi Abaakouk
264 9 Mehdi Abaakouk
Voici le fichier de configuration /etc/puppet/puppet.conf qui permet de maintenir une conf de dev et de prod:
265 1 Mehdi Abaakouk
<pre>
266 9 Mehdi Abaakouk
[main]
267 9 Mehdi Abaakouk
logdir=/var/log/puppet
268 9 Mehdi Abaakouk
vardir=/var/lib/puppet
269 9 Mehdi Abaakouk
ssldir=/var/lib/puppet/ssl
270 9 Mehdi Abaakouk
rundir=/var/run/puppet
271 9 Mehdi Abaakouk
factpath=$vardir/lib/facter
272 9 Mehdi Abaakouk
templatedir=$confdir/templates
273 9 Mehdi Abaakouk
274 9 Mehdi Abaakouk
pluginsync = true
275 9 Mehdi Abaakouk
276 1 Mehdi Abaakouk
[master]
277 1 Mehdi Abaakouk
certname=puppet.tetaneutral.net
278 9 Mehdi Abaakouk
manifest = $confdir/manifests/site_$environment.pp
279 1 Mehdi Abaakouk
</pre>
280 9 Mehdi Abaakouk
281 9 Mehdi Abaakouk
Exemple du fichier site_dev.php
282 9 Mehdi Abaakouk
<pre>
283 9 Mehdi Abaakouk
cat /etc/puppet/manifests/site_dev.pp
284 9 Mehdi Abaakouk
import "classes/*.pp"
285 9 Mehdi Abaakouk
import "keys.pp"
286 9 Mehdi Abaakouk
import "modules.pp"
287 9 Mehdi Abaakouk
import "nodes_dev.pp"
288 9 Mehdi Abaakouk
</pre>
289 9 Mehdi Abaakouk
290 9 Mehdi Abaakouk
Le fichier keys.pp contient les cle ssh des membres, le répertoire classes les fonctions créé pour ttnn (en autres les clés ssh)
291 9 Mehdi Abaakouk
Le fichier modules.pp, la liste des modules à chargé.
292 9 Mehdi Abaakouk
Et enfin nodes_dev.pp la liste des machines puppetisées avec leur configuration.
293 9 Mehdi Abaakouk
294 1 Mehdi Abaakouk
295 1 Mehdi Abaakouk
Dans /etc/puppet/fileserver.conf configurer les autorisations:
296 6 Mehdi Abaakouk
<pre>
297 6 Mehdi Abaakouk
[files]
298 6 Mehdi Abaakouk
  path /etc/puppet/files
299 6 Mehdi Abaakouk
  allow 91.224.149.0/24
300 6 Mehdi Abaakouk
  allow 91.224.148.0/24
301 6 Mehdi Abaakouk
</pre>