Project

General

Profile

Cluster Ganeti » History » Version 61

Fabien Dupont, 10/12/2013 09:10 AM

1 16 Mehdi Abaakouk
h1. Cluster Ganeti
2 1 Mehdi Abaakouk
3 9 Mehdi Abaakouk
{{>toc}}
4 9 Mehdi Abaakouk
5 25 Laurent GUERBY
h2. Liens
6 25 Laurent GUERBY
7 25 Laurent GUERBY
talk par iustin a google I/O sur ganeti : a 28:00 http://youtu.be/TELArK6SmyY
8 32 Laurent GUERBY
extlinux pour ganeti http://anonscm.debian.org/gitweb/?p=mirror/dsa-puppet.git;a=blob;f=modules/ganeti2/templates/instance-debootstrap/hooks/20-dsa-install-bootloader.erb;h=2bbba5e762b512c1c7b081049cf8ffd6cc472f96;hb=master
9 25 Laurent GUERBY
10 18 Laurent GUERBY
h2. Installation from scratch
11 18 Laurent GUERBY
12 23 Laurent GUERBY
h3. Ganeti
13 23 Laurent GUERBY
14 18 Laurent GUERBY
apt-get install ganeti2
15 1 Mehdi Abaakouk
16 30 Mehdi Abaakouk
h3. configuration LVM
17 18 Laurent GUERBY
18 30 Mehdi Abaakouk
Dans le fichier */etc/lvm/lvm.conf* changer le filter lvm pour:
19 23 Laurent GUERBY
20 18 Laurent GUERBY
<pre>
21 18 Laurent GUERBY
# filter = [ "a/.*/" ]
22 18 Laurent GUERBY
filter = ["r|/dev/cdrom|", "r|/dev/drbd[0-9]+|" ]
23 1 Mehdi Abaakouk
</pre>
24 1 Mehdi Abaakouk
25 29 Mehdi Abaakouk
Evite les soucis avec DRBD (ie: pour que la machine hôte ne detecte pas les LVM qui sont dans le VM lors du vgscan and co)
26 1 Mehdi Abaakouk
27 30 Mehdi Abaakouk
h3. configuration DRBD
28 23 Laurent GUERBY
29 19 Laurent GUERBY
* activer drbd
30 19 Laurent GUERBY
31 19 Laurent GUERBY
<pre>
32 24 Christophe Moille
# echo "options drbd minor_count=128 usermode_helper=/bin/true" >> /etc/modprobe.d/drbd-ganeti.conf
33 19 Laurent GUERBY
# rmmod drbd
34 1 Mehdi Abaakouk
# modprobe drbd
35 19 Laurent GUERBY
# cat /sys/module/drbd/parameters/usermode_helper 
36 1 Mehdi Abaakouk
/bin/true
37 1 Mehdi Abaakouk
</pre>
38 1 Mehdi Abaakouk
39 30 Mehdi Abaakouk
h3. Partitionnement
40 1 Mehdi Abaakouk
41 1 Mehdi Abaakouk
<pre>
42 30 Mehdi Abaakouk
# fdisk /dev/sda
43 23 Laurent GUERBY
new primary part
44 1 Mehdi Abaakouk
hex code 8e
45 30 Mehdi Abaakouk
46 30 Mehdi Abaakouk
# partprobe
47 1 Mehdi Abaakouk
</pre>
48 19 Laurent GUERBY
49 57 Laurent GUERBY
Ou avec parted:
50 57 Laurent GUERBY
51 57 Laurent GUERBY
<pre>
52 57 Laurent GUERBY
(parted) mkpart primary XXgb 100%   
53 57 Laurent GUERBY
(parted) set NN lvm on          
54 57 Laurent GUERBY
</pre>
55 57 Laurent GUERBY
56 30 Mehdi Abaakouk
h3. Création du VG pour ganeti
57 30 Mehdi Abaakouk
58 30 Mehdi Abaakouk
<pre>
59 57 Laurent GUERBY
apt-get install lvm2
60 19 Laurent GUERBY
pvcreate /dev/sda2 
61 1 Mehdi Abaakouk
vgcreate vg_ganeti /dev/sda2
62 30 Mehdi Abaakouk
</pre>
63 18 Laurent GUERBY
64 30 Mehdi Abaakouk
S'il existe déjà vider le volume group et le recreer
65 18 Laurent GUERBY
66 18 Laurent GUERBY
<pre>
67 18 Laurent GUERBY
pvs
68 1 Mehdi Abaakouk
vgs
69 1 Mehdi Abaakouk
lvs
70 18 Laurent GUERBY
lvremove
71 18 Laurent GUERBY
vgcreate kvmvg /dev/sdb... #TODO check
72 18 Laurent GUERBY
</pre>
73 18 Laurent GUERBY
74 23 Laurent GUERBY
h3. Network
75 23 Laurent GUERBY
76 20 Laurent GUERBY
<pre>
77 20 Laurent GUERBY
# dans /etc/network/interfaces
78 20 Laurent GUERBY
# The primary network interface
79 20 Laurent GUERBY
auto eth0
80 20 Laurent GUERBY
iface eth0 inet manual
81 20 Laurent GUERBY
82 20 Laurent GUERBY
# dans /etc/rc.local     
83 20 Laurent GUERBY
ip l set eth0 up    
84 20 Laurent GUERBY
                    
85 20 Laurent GUERBY
brctl addbr ganeti-br0
86 20 Laurent GUERBY
ip li set ganeti-br0 up
87 1 Mehdi Abaakouk
brctl addif ganeti-br0 eth0
88 20 Laurent GUERBY
                    
89 20 Laurent GUERBY
ip a a 10.42.0.13/24 dev ganeti-br0
90 20 Laurent GUERBY
ip r a default via 10.42.0.1 
91 20 Laurent GUERBY
              
92 20 Laurent GUERBY
</pre>
93 18 Laurent GUERBY
94 23 Laurent GUERBY
h3. DNS
95 21 Laurent GUERBY
96 1 Mehdi Abaakouk
<pre>
97 1 Mehdi Abaakouk
# Dans /etc/hosts              
98 21 Laurent GUERBY
10.42.0.10 tmaster.thsf tmaster
99 21 Laurent GUERBY
10.42.0.11 t1.thsf t1     
100 21 Laurent GUERBY
10.42.0.12 t2.thsf t2
101 21 Laurent GUERBY
10.42.0.13 t3.thsf t3
102 21 Laurent GUERBY
</pre>
103 23 Laurent GUERBY
104 23 Laurent GUERBY
h3. Ganeti Service
105 21 Laurent GUERBY
106 31 Mehdi Abaakouk
On master:
107 1 Mehdi Abaakouk
108 31 Mehdi Abaakouk
Initialiser le cluster:
109 21 Laurent GUERBY
<pre>
110 21 Laurent GUERBY
gnt-cluster init --nic-parameters mode=bridged,link=ganeti-br0 --master-netdev=ganeti-br0 \                       
111 1 Mehdi Abaakouk
 --vg-name vg_ganeti --enabled-hypervisors=kvm tmaster.thsf
112 31 Mehdi Abaakouk
</pre>
113 1 Mehdi Abaakouk
114 31 Mehdi Abaakouk
Ajouter un noeud au cluster (t2):
115 31 Mehdi Abaakouk
<pre>
116 21 Laurent GUERBY
gnt-node add t2
117 31 Mehdi Abaakouk
</pre>
118 21 Laurent GUERBY
119 31 Mehdi Abaakouk
Installation d'outils d'administration de ganeti:
120 21 Laurent GUERBY
121 31 Mehdi Abaakouk
<pre>apt-get install ganeti-htools ganeti-instance-debootstrap</pre>
122 21 Laurent GUERBY
123 31 Mehdi Abaakouk
Ajout d'une VM
124 22 Laurent GUERBY
125 31 Mehdi Abaakouk
<pre># vi /etc/hosts
126 22 Laurent GUERBY
10.42.0.101 vm1.thsf vm1
127 22 Laurent GUERBY
128 22 Laurent GUERBY
gnt-cluster copyfile /etc/hosts
129 22 Laurent GUERBY
130 21 Laurent GUERBY
gnt-instance add -H kernel_path=/boot/vmlinuz-3.2.0-2-amd64,initrd_path=/boot/initrd.img-3.2.0-2-amd64 \
131 21 Laurent GUERBY
-t drbd -B memory=512M,vcpus=1 --disk 0:size=5G -I hail -o debootstrap+default vm1.thsf
132 21 Laurent GUERBY
</pre>
133 10 Mehdi Abaakouk
134 1 Mehdi Abaakouk
h2. Administration des VMs
135 27 Laurent GUERBY
136 60 Mehdi Abaakouk
137 48 Fabien Dupont
h3. Création d'une VM sous FreeBSD (ou autre)
138 48 Fabien Dupont
139 48 Fabien Dupont
Exemple avec la VM anapivirtua :
140 48 Fabien Dupont
141 48 Fabien Dupont
Détermination du nœud primaire de la VM (ici, h6) :
142 48 Fabien Dupont
143 48 Fabien Dupont
<pre>
144 48 Fabien Dupont
# gnt-instance list anapivirtua.tetaneutral.net 
145 48 Fabien Dupont
Instance                    Hypervisor OS                    Primary_node       Status  Memory
146 48 Fabien Dupont
anapivirtua.tetaneutral.net kvm        debootstrap+squeeze64 h6.tetaneutral.net running   512M
147 48 Fabien Dupont
</pre>
148 48 Fabien Dupont
149 48 Fabien Dupont
Téléchargement de l'ISO de FreeBSD sur le nœud primaire :
150 48 Fabien Dupont
151 48 Fabien Dupont
<pre>
152 48 Fabien Dupont
# cd ~/fab
153 48 Fabien Dupont
# wget http://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/9.1/FreeBSD-9.1-RELEASE-amd64-bootonly.iso
154 48 Fabien Dupont
</pre>
155 48 Fabien Dupont
156 48 Fabien Dupont
Sur le master ganeti (h4 actuellement) :
157 48 Fabien Dupont
158 50 Fabien Dupont
FreeBSD ne fonctionne bien qu'avec les cartes ETH émulée de type e1000 et les disques émulés en ide, de plus il ne faut pas que KVM boote un kernel et active la console :
159 50 Fabien Dupont
160 48 Fabien Dupont
<pre>
161 48 Fabien Dupont
# gnt-instance modify -H serial_console=false anapivirtua.tetaneutral.net
162 1 Mehdi Abaakouk
# gnt-instance modify -H kernel_path="" anapivirtua.tetaneutral.net
163 50 Fabien Dupont
# gnt-instance modify -H nic_type="e1000" anapivirtua.tetaneutral.net
164 50 Fabien Dupont
# gnt-instance modify -H disk_type="ide" anapivirtua.tetaneutral.net
165 1 Mehdi Abaakouk
</pre>
166 1 Mehdi Abaakouk
167 50 Fabien Dupont
Et on n'a plus qu'à démarrer sur le CD d'install :
168 1 Mehdi Abaakouk
169 1 Mehdi Abaakouk
<pre>
170 50 Fabien Dupont
# gnt-instance start -H boot_order=cdrom,cdrom_image_path=/root/fab/FreeBSD-9.1-RELEASE-amd64-bootonly.iso anapivirtua.tetaneutral.net
171 48 Fabien Dupont
</pre>
172 48 Fabien Dupont
173 50 Fabien Dupont
Retour sur le nœud primaire, ouverture de VNC pour que l'adhérent puisse effectuer l'installation :
174 48 Fabien Dupont
175 48 Fabien Dupont
<pre>
176 48 Fabien Dupont
# iptables -L -v -n | grep anapivirtua.tetaneutral.net
177 48 Fabien Dupont
    0     0 REJECT     tcp  --  *      *      !91.224.149.193       0.0.0.0/0           tcp dpt:12647 /* VNC for anapivirtua.tetaneutral.net */ reject-with icmp-port-unreachable 
178 48 Fabien Dupont
# iptables -D INPUT -p tcp ! -s 91.224.149.193 --dport 12647 -j REJECT
179 48 Fabien Dupont
</pre>
180 48 Fabien Dupont
181 48 Fabien Dupont
Communiquer à l'adhérent l'IP et le port pour VNC (ici h6.tetaneutral.net:12647)
182 48 Fabien Dupont
183 48 Fabien Dupont
Une fois qu'il a fini l'installation, il faut refermer VNC et voilà !
184 48 Fabien Dupont
185 48 Fabien Dupont
<pre>
186 51 Fabien Dupont
# iptables -A INPUT -p tcp ! -s 91.224.149.193 --dport 12647 -j REJECT -m comment --comment "VNC for anapivirtua.tetaneutral.net"
187 48 Fabien Dupont
</pre>
188 60 Mehdi Abaakouk
189 60 Mehdi Abaakouk
h3. Réparation de grub dans une VM debian (ou debian like)
190 60 Mehdi Abaakouk
191 60 Mehdi Abaakouk
On va faire booter la VM sur system rescue CD:
192 60 Mehdi Abaakouk
193 60 Mehdi Abaakouk
Sur ganeti master node:
194 60 Mehdi Abaakouk
195 60 Mehdi Abaakouk
<pre>
196 60 Mehdi Abaakouk
gnt-instance modify -H boot_order=cdrom,cdrom_image_path=/root/systemrescuecd-x86-3.7.0.iso coop-integrale.tetaneutral.net
197 60 Mehdi Abaakouk
gnt-instance reboot --type=full --shutdown-timeout=0 coop-integrale.tetaneutral.net
198 60 Mehdi Abaakouk
</pre>
199 60 Mehdi Abaakouk
200 60 Mehdi Abaakouk
De chez soit on se connecte au vnc de la VM
201 60 Mehdi Abaakouk
202 60 Mehdi Abaakouk
On voit l'invite syslinux de system rescue CD, une fois l'OS démarrer, on répare Grub comme ceci:
203 60 Mehdi Abaakouk
                                                                                    
204 60 Mehdi Abaakouk
<pre>
205 60 Mehdi Abaakouk
mount /dev/vda1 /mnt/custom
206 60 Mehdi Abaakouk
mount -o bind /proc /mnt/custom/proc
207 60 Mehdi Abaakouk
mount -o bind /sys /mnt/custom/sys
208 60 Mehdi Abaakouk
mount -o bind /sys /mnt/custom/sys
209 60 Mehdi Abaakouk
chroot /mnt/custom /bin/bash
210 60 Mehdi Abaakouk
211 60 Mehdi Abaakouk
dpkg-reconfigure grub-pc
212 60 Mehdi Abaakouk
213 60 Mehdi Abaakouk
# quand debconf demande de choisir le device pour grub prendre au moins: /dev/vda
214 60 Mehdi Abaakouk
215 60 Mehdi Abaakouk
exit
216 60 Mehdi Abaakouk
umount /mnt/custom/*
217 60 Mehdi Abaakouk
umount /mnt/custom
218 60 Mehdi Abaakouk
219 60 Mehdi Abaakouk
reboot
220 60 Mehdi Abaakouk
</pre>
221 60 Mehdi Abaakouk
222 60 Mehdi Abaakouk
Choisir au reboot "boot from first disk" pour tester le grub.
223 60 Mehdi Abaakouk
224 60 Mehdi Abaakouk
225 60 Mehdi Abaakouk
Puis on reconfigure le boot the le disque à partir du ganeti master node:
226 60 Mehdi Abaakouk
227 60 Mehdi Abaakouk
<pre>
228 60 Mehdi Abaakouk
gnt-instance modify -H boot_order=disk,cdrom_image_path= coop-integrale.tetaneutral.net
229 60 Mehdi Abaakouk
gnt-instance reboot --type=full coop-integrale.tetaneutral.net
230 60 Mehdi Abaakouk
</pre>
231 60 Mehdi Abaakouk
232 48 Fabien Dupont
233 46 Laurent GUERBY
h3. Backup et effacement d'une VM
234 46 Laurent GUERBY
235 46 Laurent GUERBY
Vers h2 :
236 46 Laurent GUERBY
<pre>
237 47 Laurent GUERBY
gnt-instance shutdown xxx
238 46 Laurent GUERBY
gnt-instance activate-disks xxx
239 46 Laurent GUERBY
VM=xxx.gz; cd /backup/ganeti-vm-raw/20130429 ; if [ ! -f ${VM} ]; then socat -u tcp4-listen:50555 - > $VM ; zcat $VM | md5sum -; du -hs *; else echo $VM already present;fi
240 46 Laurent GUERBY
DB=nnn; cat /dev/drbd$DB | gzip --fast|socat -u - tcp4:h2:50555;md5sum /dev/drbd$DB
241 46 Laurent GUERBY
gnt-instance deactivate-disks xxx
242 46 Laurent GUERBY
gnt-instance remove xxx
243 46 Laurent GUERBY
</pre>
244 46 Laurent GUERBY
245 34 Mehdi Abaakouk
h3. Gestion d'un gnt-instance migrate qui reste bloquer
246 34 Mehdi Abaakouk
247 34 Mehdi Abaakouk
Symptôme: la progression du "gnt-instance migrate <vmname>" ne progresse plus"
248 34 Mehdi Abaakouk
249 34 Mehdi Abaakouk
<pre>
250 34 Mehdi Abaakouk
# gnt-instance info -s nagios  | grep 'node.:' -A1
251 34 Mehdi Abaakouk
      nodeA:       h4.tetaneutral.net, minor=18
252 34 Mehdi Abaakouk
      nodeB:       h6.tetaneutral.net, minor=27
253 34 Mehdi Abaakouk
      port:        12589
254 34 Mehdi Abaakouk
</pre>
255 34 Mehdi Abaakouk
256 34 Mehdi Abaakouk
Donc si on regarde sur la machine primaire et secondaire l'état:
257 34 Mehdi Abaakouk
258 34 Mehdi Abaakouk
<pre>
259 34 Mehdi Abaakouk
# grep '18:' -A5 /proc/drbd # (et sur la secondaire: grep '27:' -A5 /proc/drbd)
260 34 Mehdi Abaakouk
0: cs:SyncSource st:Primary/Primary ds:UpToDate/UpToDate C r---
261 34 Mehdi Abaakouk
ns:601729944 nr:0 dw:0 dr:601737980 al:0 bm:429909 lo:0 pe:0 ua:0 ap:0 oos:0
262 34 Mehdi Abaakouk
[===================>] sync'ed:100.0% (965/6869678)M 
263 34 Mehdi Abaakouk
stalled 
264 34 Mehdi Abaakouk
</pre>
265 34 Mehdi Abaakouk
266 34 Mehdi Abaakouk
Si on tente un commande drbd on a:
267 34 Mehdi Abaakouk
268 34 Mehdi Abaakouk
<pre>
269 34 Mehdi Abaakouk
# drbdsetup /dev/drbd18 sh-status
270 34 Mehdi Abaakouk
(longue attente)
271 34 Mehdi Abaakouk
No response from the DRBD driver! Is the module loaded?
272 34 Mehdi Abaakouk
</pre>
273 34 Mehdi Abaakouk
274 36 Mehdi Abaakouk
Bref Drbd est dans les choux, ca semble être un bug connu des versions <= 8.3.12
275 34 Mehdi Abaakouk
276 37 Laurent GUERBY
Sources : 
277 37 Laurent GUERBY
# http://www.mentby.com/Group/drbd-user/recovering-from-erroneous-sync-state.html
278 37 Laurent GUERBY
# http://lists.linbit.com/pipermail/drbd-dev/2007-May/000751.html
279 37 Laurent GUERBY
# https://encrypted.google.com/search?q=drbd+stall+100%25&hl=en
280 35 Laurent GUERBY
281 34 Mehdi Abaakouk
Pour réparer sur la machine h4, le node primaire, faire:
282 34 Mehdi Abaakouk
<pre>
283 34 Mehdi Abaakouk
# /etc/ganeti/iptables-to-reset-drbd-connection.sh 12589 # <-- 12589 le port de drbd récupéré plus haut
284 34 Mehdi Abaakouk
285 34 Mehdi Abaakouk
** Attention à être sur la bonne machine **
286 34 Mehdi Abaakouk
Pour couper la connection
287 34 Mehdi Abaakouk
iptables -I INPUT -p tcp --dport 12589 -j REJECT --reject-with tcp-reset
288 34 Mehdi Abaakouk
iptables -I INPUT -p tcp --sport 12589 -j REJECT --reject-with tcp-reset
289 34 Mehdi Abaakouk
iptables -I OUTPUT -p tcp --dport 12589 -j REJECT --reject-with tcp-reset
290 34 Mehdi Abaakouk
iptables -I OUTPUT -p tcp --sport 12589 -j REJECT --reject-with tcp-reset
291 34 Mehdi Abaakouk
292 34 Mehdi Abaakouk
Pour remettre la connection
293 34 Mehdi Abaakouk
iptables -D INPUT -p tcp --dport 12589 -j REJECT --reject-with tcp-reset
294 34 Mehdi Abaakouk
iptables -D INPUT -p tcp --sport 12589 -j REJECT --reject-with tcp-reset
295 34 Mehdi Abaakouk
iptables -D OUTPUT -p tcp --dport 12589 -j REJECT --reject-with tcp-reset
296 34 Mehdi Abaakouk
iptables -D OUTPUT -p tcp --sport 12589 -j REJECT --reject-with tcp-reset
297 34 Mehdi Abaakouk
</pre>
298 34 Mehdi Abaakouk
299 34 Mehdi Abaakouk
Exécuter la première partie puis vérifier dans /proc/drbd qui celui-ci est en WFConnection.
300 34 Mehdi Abaakouk
301 34 Mehdi Abaakouk
Puis rétablir la connexion avec la seconde partie et vérifier /proc/drbd que c'est bien reconnecté.
302 34 Mehdi Abaakouk
303 34 Mehdi Abaakouk
Ensuite si ganeti n'a pas vu la réparation, faire sur le master node et le node primaire de la machine:
304 34 Mehdi Abaakouk
305 34 Mehdi Abaakouk
<pre>
306 34 Mehdi Abaakouk
# /etc/init.d/ganeti restart
307 34 Mehdi Abaakouk
</pre>
308 34 Mehdi Abaakouk
Ceci passe en error le job de migration
309 34 Mehdi Abaakouk
310 34 Mehdi Abaakouk
Puis sur le master node, on nettoye les résidu de la migration échouée:
311 34 Mehdi Abaakouk
<pre>
312 34 Mehdi Abaakouk
# gnt-instance migrate --cleanup nagios
313 34 Mehdi Abaakouk
</pre>
314 34 Mehdi Abaakouk
315 34 Mehdi Abaakouk
316 18 Laurent GUERBY
h3. Gestion d'un disque en I/O error
317 27 Laurent GUERBY
318 1 Mehdi Abaakouk
First put the disk in failure offline:
319 28 Mehdi Abaakouk
320 28 Mehdi Abaakouk
<pre>echo offline > /sys/block/sdb/device/state</pre>
321 27 Laurent GUERBY
322 1 Mehdi Abaakouk
Then we need to remove the volume group, here /dev/kvmvg
323 27 Laurent GUERBY
We need to do it manually because vgremove will not work in this case
324 28 Mehdi Abaakouk
325 27 Laurent GUERBY
<pre>/dev/kvmvg# for i in *; do echo === $(date) == $i ; dmsetup remove /dev/kvmvg/"$i"; echo $?; done</pre>
326 1 Mehdi Abaakouk
327 27 Laurent GUERBY
This will leave a few lv when ganeti hasnt detected for some reason the disk failure. 
328 27 Laurent GUERBY
For those left we need to force drbd to go Diskless, use either gnt-instance info or ls -l /var/run/ganeti/instance-disks/ or /var/lib/ganeti/config.data to find the VM and /dev/drbdNNN then
329 28 Mehdi Abaakouk
330 27 Laurent GUERBY
<pre>drbdsetup /dev/drbd47 detach</pre>
331 27 Laurent GUERBY
332 27 Laurent GUERBY
Then gnt-instance info VM to force ganeti to recognize the disk failure (it will take a few minutes)
333 27 Laurent GUERBY
334 27 Laurent GUERBY
Then dmsetup remove will work.
335 27 Laurent GUERBY
336 27 Laurent GUERBY
After the last dmsetup remove /dev/kvmvg will disappear.
337 27 Laurent GUERBY
338 27 Laurent GUERBY
Now you can physically remove the disk and plug a new disk on a new SATA port (on the same SATA port the kernel didn't recognize the new drive)
339 27 Laurent GUERBY
Then create a LVM partition then vgcreate kvmvg /dev/sdX
340 1 Mehdi Abaakouk
341 27 Laurent GUERBY
Now we need to recreate redundancy 
342 27 Laurent GUERBY
343 1 Mehdi Abaakouk
On the still running VM you can use 
344 28 Mehdi Abaakouk
345 27 Laurent GUERBY
<pre>gnt-instance replace-disks --submit -a VMname</pre>
346 1 Mehdi Abaakouk
347 27 Laurent GUERBY
On the stopped VM you need to do manually
348 28 Mehdi Abaakouk
349 28 Mehdi Abaakouk
<pre>gnt-instance replace-disks --submit -p VMname # if primary to reconstruct
350 1 Mehdi Abaakouk
gnt-instance replace-disks --submit -s VMname # if secondary to reconstruct</pre>
351 1 Mehdi Abaakouk
352 1 Mehdi Abaakouk
At 15 MByte/s 1 TB to reconstruct will take about 18h30.
353 28 Mehdi Abaakouk
354 27 Laurent GUERBY
Before remove the disk from the server, we must prepare the disk for unplug:
355 29 Mehdi Abaakouk
356 28 Mehdi Abaakouk
<pre>echo 1 > /sys/block/sdX/device/delete</pre>
357 28 Mehdi Abaakouk
358 28 Mehdi Abaakouk
359 28 Mehdi Abaakouk
Links:
360 27 Laurent GUERBY
361 27 Laurent GUERBY
http://docs.ganeti.org/ganeti/2.5/html/admin.html#preparing-for-disk-operations
362 27 Laurent GUERBY
http://docs.ganeti.org/ganeti/2.5/html/admin.html#generalized-storage-handling
363 28 Mehdi Abaakouk
http://www.lancealbertson.com/2011/02/handling-hdd-failures-with-ganeti/
364 27 Laurent GUERBY
http://www.sakana.fr/blog/2009/05/04/linux-sata-hot-plug-unplug/
365 10 Mehdi Abaakouk
366 1 Mehdi Abaakouk
h3. Demarrer et arrêter une instance ?
367 10 Mehdi Abaakouk
368 10 Mehdi Abaakouk
<pre>
369 10 Mehdi Abaakouk
gnt-instance start vm1
370 10 Mehdi Abaakouk
gnt-instance stop vm1
371 1 Mehdi Abaakouk
</pre>
372 26 Mehdi Abaakouk
373 26 Mehdi Abaakouk
Si pendant l'extinction de la VM le message suivant apparait:
374 26 Mehdi Abaakouk
<pre>WARNING: Could not shutdown block device disk/0 on node h6.tetaneutral.net: drbd45: can't shutdown drbd device: /dev/drbd45: State change failed: (-12) Device is held open by someone</pre>
375 26 Mehdi Abaakouk
376 26 Mehdi Abaakouk
Sur h6 on peut remarquer que l'on a un status non nominal sur drbd:
377 26 Mehdi Abaakouk
<pre>$ grep -A4 45: /proc/drbd
378 26 Mehdi Abaakouk
45: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r----
379 26 Mehdi Abaakouk
    ns:68584404 nr:0 dw:67728388 dr:2484540 al:535 bm:237 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
380 26 Mehdi Abaakouk
</pre>
381 26 Mehdi Abaakouk
382 26 Mehdi Abaakouk
Pour résoudre le probléme taper:
383 26 Mehdi Abaakouk
<pre>drbdsetup /dev/drbd45 down</pre>
384 26 Mehdi Abaakouk
385 26 Mehdi Abaakouk
Si le message persiste, il faut vérifier que plus aucun processus n'utilise le drbd45 sur h6, par exemple vérifier devmapper:
386 26 Mehdi Abaakouk
<pre>dmsetup ls | grep drbd45</pre>
387 26 Mehdi Abaakouk
388 26 Mehdi Abaakouk
Référence dans la doc ganeti: http://docs.ganeti.org/ganeti/2.5/html/walkthrough.html#in-use-disks-at-instance-shutdown
389 10 Mehdi Abaakouk
390 1 Mehdi Abaakouk
h3. Comment tout savoir sur une vm ?
391 1 Mehdi Abaakouk
392 1 Mehdi Abaakouk
<pre>
393 1 Mehdi Abaakouk
gnt-instance info vm1
394 1 Mehdi Abaakouk
</pre>
395 10 Mehdi Abaakouk
396 1 Mehdi Abaakouk
h3. Déplacement le(s) disque(s) dur d'une VM
397 1 Mehdi Abaakouk
398 1 Mehdi Abaakouk
Si la machine a ces disques au format plain (sans drbd), taper:
399 1 Mehdi Abaakouk
400 1 Mehdi Abaakouk
<pre>
401 1 Mehdi Abaakouk
gnt-instance stop vm1
402 1 Mehdi Abaakouk
gnt-instance move -n h6 vm1
403 1 Mehdi Abaakouk
gnt-instance start vm1
404 1 Mehdi Abaakouk
</pre>
405 1 Mehdi Abaakouk
406 1 Mehdi Abaakouk
Si la machine utilise drbd (uniquement le disque de la node secondaire bascule):
407 1 Mehdi Abaakouk
408 1 Mehdi Abaakouk
<pre>
409 1 Mehdi Abaakouk
gnt-instance replace-disks -n h6 vm1
410 10 Mehdi Abaakouk
</pre>
411 1 Mehdi Abaakouk
412 1 Mehdi Abaakouk
Si vous voulais déplacer l'autre disque du drbd, il faut basculer la machine, puis refaire la même chose
413 10 Mehdi Abaakouk
414 1 Mehdi Abaakouk
h3. Basculer/migrer une machine qui utilise drbd
415 1 Mehdi Abaakouk
416 1 Mehdi Abaakouk
Bascule avec arret de la machine:
417 1 Mehdi Abaakouk
418 1 Mehdi Abaakouk
<pre>
419 1 Mehdi Abaakouk
gnt-instance failover vm1
420 1 Mehdi Abaakouk
</pre>
421 10 Mehdi Abaakouk
422 10 Mehdi Abaakouk
Sans arrêt, migration à chaud:
423 1 Mehdi Abaakouk
424 1 Mehdi Abaakouk
<pre>
425 1 Mehdi Abaakouk
gnt-instance migrate vm1
426 10 Mehdi Abaakouk
</pre>
427 1 Mehdi Abaakouk
428 1 Mehdi Abaakouk
En cas de soucis primaire/secondaire:
429 1 Mehdi Abaakouk
430 1 Mehdi Abaakouk
<pre>
431 1 Mehdi Abaakouk
gnt-instance migrate --cleanup vm1
432 1 Mehdi Abaakouk
</pre>
433 10 Mehdi Abaakouk
434 42 Laurent GUERBY
cleanup marche en cas de split brain, example de /proc/drbd :
435 42 Laurent GUERBY
<pre>
436 42 Laurent GUERBY
h5: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r----
437 42 Laurent GUERBY
h1: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown   r----
438 42 Laurent GUERBY
</pre>
439 42 Laurent GUERBY
440 1 Mehdi Abaakouk
h3. Création d'une machine
441 10 Mehdi Abaakouk
442 10 Mehdi Abaakouk
Un script est présent sur h1 voici ca doc:
443 10 Mehdi Abaakouk
<pre>
444 10 Mehdi Abaakouk
# /root/gnt-addvm
445 10 Mehdi Abaakouk
usage: gnt-addvm [options] VIRTUAL_MACHINE_HOSTNAME
446 10 Mehdi Abaakouk
       -o OS | --os OS          OS can be default natty32 natty64 sid64 squeeze32 squeeze64 wheezy64
447 10 Mehdi Abaakouk
       -s SIZE | --size SIZE    default SIZE is 10G
448 10 Mehdi Abaakouk
       -m MEM | --mem MEM       default MEM is 256M
449 10 Mehdi Abaakouk
       -c CPU | --cpu CPU               default CPU is 1
450 10 Mehdi Abaakouk
       -n NODES | --nodes NODES         default NODES is
451 10 Mehdi Abaakouk
       -d MODE | --disk MODE      default MODE is drbd
452 10 Mehdi Abaakouk
       -q | --quick             don't wait drbd sync
453 10 Mehdi Abaakouk
       --dry-run                        show executed command
454 10 Mehdi Abaakouk
       --cdrom PATH             installation from iso file
455 1 Mehdi Abaakouk
</pre>
456 10 Mehdi Abaakouk
457 10 Mehdi Abaakouk
458 10 Mehdi Abaakouk
h3. Supprimer une machine
459 1 Mehdi Abaakouk
460 10 Mehdi Abaakouk
<pre>
461 1 Mehdi Abaakouk
gnt-instance remove vm1
462 1 Mehdi Abaakouk
</pre>
463 10 Mehdi Abaakouk
464 1 Mehdi Abaakouk
si la vm est en drbd et que une des nodes du drbd ne fonctionne plus
465 10 Mehdi Abaakouk
466 1 Mehdi Abaakouk
<pre>
467 1 Mehdi Abaakouk
gnt-instance remove --ignore-failures vm1
468 10 Mehdi Abaakouk
</pre>
469 14 Mehdi Abaakouk
470 10 Mehdi Abaakouk
471 10 Mehdi Abaakouk
h3. Changer les cractéristique d'une VM, upgrade disk, net, cpu, mem
472 1 Mehdi Abaakouk
473 10 Mehdi Abaakouk
Et hop une nouvelle carte réseau sur le vlan tsf
474 1 Mehdi Abaakouk
<pre>
475 1 Mehdi Abaakouk
gnt-instance  modify --net add:link=br1 vm1
476 10 Mehdi Abaakouk
</pre>
477 10 Mehdi Abaakouk
478 10 Mehdi Abaakouk
Un petit disk en plus
479 10 Mehdi Abaakouk
<pre>
480 1 Mehdi Abaakouk
gnt-instance  modify --disk add:size=50G vm1
481 10 Mehdi Abaakouk
</pre>
482 10 Mehdi Abaakouk
483 10 Mehdi Abaakouk
Un petite upgrade cpu et mémoire
484 10 Mehdi Abaakouk
<pre>
485 1 Mehdi Abaakouk
gnt-instance modify -B vcpus=2,memory=512M vm1
486 10 Mehdi Abaakouk
</pre>
487 1 Mehdi Abaakouk
488 10 Mehdi Abaakouk
Reboot pour prendre en compte le tout
489 1 Mehdi Abaakouk
<pre>
490 1 Mehdi Abaakouk
gnt-instance reboot -t full vm1
491 10 Mehdi Abaakouk
</pre>
492 10 Mehdi Abaakouk
493 1 Mehdi Abaakouk
== Je voudrais bien booter mon kernel ! ou un cdrom==
494 10 Mehdi Abaakouk
Je peux désactivé le kernel commun pour une vm
495 10 Mehdi Abaakouk
496 10 Mehdi Abaakouk
<pre>
497 10 Mehdi Abaakouk
gnt-instance modify -H kernel_path="" vm1
498 1 Mehdi Abaakouk
</pre>
499 1 Mehdi Abaakouk
Ou booter sur le cdrom pour le prochain démarrage commme ceci:
500 10 Mehdi Abaakouk
501 1 Mehdi Abaakouk
<pre>
502 1 Mehdi Abaakouk
gnt-instance start -H boot_order=cdrom,cdrom_image_path=/path/to/debian-504-amd64-netinst.iso vm1
503 10 Mehdi Abaakouk
</pre>
504 1 Mehdi Abaakouk
505 27 Laurent GUERBY
506 61 Fabien Dupont
h3. Redimensionner un disque dur
507 61 Fabien Dupont
508 61 Fabien Dupont
Il faut d'abord arrêter la VM (ici: malbec.kafe-in.net) :
509 61 Fabien Dupont
510 61 Fabien Dupont
<pre>
511 61 Fabien Dupont
gnt-instance shutdown malbec.kafe-in.net
512 61 Fabien Dupont
</pre>
513 61 Fabien Dupont
514 61 Fabien Dupont
Puis il faut redimensionner le disque dur (ici, on ajoute 2Go au disque 0) :
515 61 Fabien Dupont
516 61 Fabien Dupont
<pre>
517 61 Fabien Dupont
gnt-instance grow-disk malbec.kafe-in.net 0 2G
518 61 Fabien Dupont
</pre>
519 61 Fabien Dupont
520 61 Fabien Dupont
Pour redimensionner la partition dans le disque, il faut l'activer :
521 61 Fabien Dupont
522 61 Fabien Dupont
<pre>
523 61 Fabien Dupont
gnt-instance activate-disks malbec.kafe-in.net
524 61 Fabien Dupont
h1.tetaneutral.net:disk/0:/dev/drbd4
525 61 Fabien Dupont
</pre>
526 61 Fabien Dupont
527 61 Fabien Dupont
On voit ici que le disque primaire a été activé sur h1.tetaneutral.net et c'est le device /dev/drbd4.  
528 61 Fabien Dupont
529 61 Fabien Dupont
Donc, direction h1.tetaneutral.net pour redimensionner la partition à l'aide de sfdisk :
530 61 Fabien Dupont
531 61 Fabien Dupont
<pre>
532 61 Fabien Dupont
sfdisk -H 64 -S 32 -u S --quiet --Linux /dev/drbd4 << EOF
533 61 Fabien Dupont
2048,,L,*
534 61 Fabien Dupont
EOF
535 61 Fabien Dupont
</pre>
536 61 Fabien Dupont
537 61 Fabien Dupont
Ici, on a modifié la table des partitions de /dev/drbd4 pour y définir une partition démarrant au secteur 2048, de type Linux et occupant la totalité (*) du disque.
538 61 Fabien Dupont
539 61 Fabien Dupont
Une fois la partition redimensionnée, il faut retailler le système de fichier (toujours sur h1.tetaneutral.net) :
540 61 Fabien Dupont
541 61 Fabien Dupont
<pre>
542 61 Fabien Dupont
kpartx -a /dev/drbd4
543 61 Fabien Dupont
fsck /dev/mapper/drbd4p1
544 61 Fabien Dupont
resize2fs /dev/mapper/drbd4p1
545 61 Fabien Dupont
kpartx -d /dev/drbd4
546 61 Fabien Dupont
</pre>
547 61 Fabien Dupont
548 61 Fabien Dupont
Et voilà, retourne sur le master du cluster, il ne reste qu'à désactiver les disques et redémarrer la VM :
549 61 Fabien Dupont
550 61 Fabien Dupont
<pre>
551 61 Fabien Dupont
gnt-instance deactivate-disks malbec.kafe-in.net
552 61 Fabien Dupont
gnt-instance startup malbec.kafe-in.net
553 61 Fabien Dupont
</pre>
554 61 Fabien Dupont
555 10 Mehdi Abaakouk
h3. Relocaliser les disques secondaires si un serveur est HS.
556 10 Mehdi Abaakouk
557 10 Mehdi Abaakouk
Ceci déplace le disque redondant (qui n'est plus présent si le serveur est HS) est le reconstruit sur un autre serveur
558 1 Mehdi Abaakouk
559 10 Mehdi Abaakouk
<pre>
560 1 Mehdi Abaakouk
gnt-instance replace-disks -I hail vm1
561 1 Mehdi Abaakouk
</pre>
562 1 Mehdi Abaakouk
563 11 Mehdi Abaakouk
564 11 Mehdi Abaakouk
h3. Importer une image disque venant de l’extérieur
565 11 Mehdi Abaakouk
566 11 Mehdi Abaakouk
Convertion de l'image au format raw (si c'est pas déjà le cas)
567 11 Mehdi Abaakouk
<pre>
568 11 Mehdi Abaakouk
kvm-img convert DISQUEVM.qcow -O raw DISQUEVM.raw
569 11 Mehdi Abaakouk
</pre>
570 11 Mehdi Abaakouk
571 11 Mehdi Abaakouk
Copie du disque au format raw sur un lvm
572 11 Mehdi Abaakouk
<pre>
573 11 Mehdi Abaakouk
size=$(kvm-img info DISQUEVM.raw | sed -n -e 's/^virtual size:[^(]*(\([[:digit:]]*\).*)/\1/gp')
574 11 Mehdi Abaakouk
lvcreate -L ${size}b -n lv_migration_DISQUEVM kvmvg
575 11 Mehdi Abaakouk
dd if=DISQUEVM.raw of=/dev/kvmvg/lv_migration_DISQUEVM
576 11 Mehdi Abaakouk
</pre>
577 11 Mehdi Abaakouk
578 11 Mehdi Abaakouk
Création de la VM
579 11 Mehdi Abaakouk
<pre>
580 11 Mehdi Abaakouk
gnt-instance add -B memory=512M --no-start -t plain -n $(hostname) --disk 0:adopt=lv_migration_DISQUEVM --net 0 -o debootstrap+default VMNAME.tetaneutral.net
581 11 Mehdi Abaakouk
</pre>
582 11 Mehdi Abaakouk
583 11 Mehdi Abaakouk
Et pour finir, on transforme le format de disque de la VM en drbd:
584 11 Mehdi Abaakouk
<pre>
585 11 Mehdi Abaakouk
gnt-instance modify -t drbd -n h6 VMNAME.tetaneutral.net
586 11 Mehdi Abaakouk
</pre>
587 17 Mehdi Abaakouk
588 11 Mehdi Abaakouk
h3. Copier une VM sur une autre machine
589 11 Mehdi Abaakouk
590 11 Mehdi Abaakouk
Seul la machine *h1* a l'espace configurer pour faire des dumps de machine virtuelle.
591 11 Mehdi Abaakouk
592 11 Mehdi Abaakouk
On lance un backup de celle-ci (attention cette commande *éteint* la machine):
593 11 Mehdi Abaakouk
<pre>
594 11 Mehdi Abaakouk
gnt-backup export -n h1 sileht2
595 11 Mehdi Abaakouk
</pre>
596 11 Mehdi Abaakouk
597 11 Mehdi Abaakouk
Les fichiers sont ensuite sur h1 dans /exports/sileht2.tetaneutral.net/
598 11 Mehdi Abaakouk
599 11 Mehdi Abaakouk
Le fichier qui nous intéresse est celui qui fini par *.snap* qui est le disque dur au format raw de la VM, dans mon cas:
600 11 Mehdi Abaakouk
<pre>
601 11 Mehdi Abaakouk
09d836a0-22e0-4ea4-9104-c301351bb2e2.disk0_data.snap
602 11 Mehdi Abaakouk
</pre>
603 11 Mehdi Abaakouk
604 11 Mehdi Abaakouk
Pour la démonstration je copie ce fichier sur h2:
605 11 Mehdi Abaakouk
<pre>
606 11 Mehdi Abaakouk
scp /exportfs/sileht2.tetaneutral.net/09d836a0-22e0-4ea4-9104-c301351bb2e2.disk0_data.snap h2:/root/sileht.raw
607 11 Mehdi Abaakouk
</pre>
608 11 Mehdi Abaakouk
609 11 Mehdi Abaakouk
Et je le test avec kvm:
610 11 Mehdi Abaakouk
<pre>
611 11 Mehdi Abaakouk
kvm -m 256 -drive file=sileht.raw,format=raw,if=virtio,boot=on,cache=writeback -usbdevice tablet -netdev type=tap,id=netdev0,fd=10 -device virtio-net-pci,mac=aa:00:00:62:e3:a0,netdev=netdev0
612 1 Mehdi Abaakouk
</pre>
613 15 Mehdi Abaakouk
614 15 Mehdi Abaakouk
A savoir l'image utilise les pilotes kvm "virtio", si on souhaite utiliser la VM avec un autre logiciel de virtualisation,
615 11 Mehdi Abaakouk
il faudra modifié le fstab pour mettre /dev/sda1 au lieu de /dev/vda1 et supprimer le fichier /etc/udev/rules.d/70-persistent-net.rules
616 14 Mehdi Abaakouk
617 44 Laurent GUERBY
h3. Backup disque seul
618 44 Laurent GUERBY
619 44 Laurent GUERBY
gnt-instance activate-disks VMNAME.tetaneutral.net
620 44 Laurent GUERBY
=> affiche le drbd
621 44 Laurent GUERBY
=> copie avec dd
622 44 Laurent GUERBY
puis gnt-instance deactivate-disks VMNAME.tetaneutral.net
623 44 Laurent GUERBY
624 11 Mehdi Abaakouk
h3. Monter une partition de machine virtuelle sur la machine hôte (!Attention DANGER!)
625 11 Mehdi Abaakouk
626 43 Mehdi Abaakouk
Sur le +master node+, arret de la machine et activation des disques
627 11 Mehdi Abaakouk
<pre>
628 11 Mehdi Abaakouk
 $ gnt-instance stop VMNAME.tetaneutral.net
629 11 Mehdi Abaakouk
 $ gnt-instance activate-disks VMNAME.tetaneutral.net
630 43 Mehdi Abaakouk
 h5.tetaneutral.net:disk/0:/dev/drbd34
631 1 Mehdi Abaakouk
</pre>
632 1 Mehdi Abaakouk
633 43 Mehdi Abaakouk
Ensuite se connecter à la machine ou ganeti à préparer le disque, ici +h5+
634 43 Mehdi Abaakouk
635 43 Mehdi Abaakouk
Donc sur +h5+, pour voir les partitions du disque, ici le +/dev/drbd34+:
636 1 Mehdi Abaakouk
<pre>
637 11 Mehdi Abaakouk
kpartx -l /dev/drbd34
638 11 Mehdi Abaakouk
</pre>
639 11 Mehdi Abaakouk
640 43 Mehdi Abaakouk
Sur +h5+, on créé ensuite les partitions dans /dev avec devmapper
641 1 Mehdi Abaakouk
<pre>
642 11 Mehdi Abaakouk
kpartx -a /dev/drbd34
643 11 Mehdi Abaakouk
ls -la /dev/mapper/drbd34*
644 11 Mehdi Abaakouk
</pre>
645 11 Mehdi Abaakouk
646 43 Mehdi Abaakouk
Sur +h5+, a partir de maintenant on peut faire mumuse avec la partition, exemple:
647 11 Mehdi Abaakouk
<pre>
648 11 Mehdi Abaakouk
mount /dev/mapper/drbd34p1 /mnt/
649 1 Mehdi Abaakouk
....
650 1 Mehdi Abaakouk
umount /mnt
651 1 Mehdi Abaakouk
</pre>
652 1 Mehdi Abaakouk
653 43 Mehdi Abaakouk
Puis *très important*, il faut nettoyer devmapper, sur +h5+
654 11 Mehdi Abaakouk
<pre>
655 11 Mehdi Abaakouk
kpartx -d /dev/drbd34
656 43 Mehdi Abaakouk
</pre>
657 43 Mehdi Abaakouk
658 43 Mehdi Abaakouk
Et pour finir sur +master node+, on désactive les disques pour ganeti et on boot la vm:
659 43 Mehdi Abaakouk
<pre>
660 11 Mehdi Abaakouk
gnt-instance deactivate-disks VMNAME.tetaneutral.net
661 11 Mehdi Abaakouk
gnt-instance start VMNAME.tetaneutral.net
662 11 Mehdi Abaakouk
</pre>
663 1 Mehdi Abaakouk
664 10 Mehdi Abaakouk
h2. Administration des serveurs/nodes
665 10 Mehdi Abaakouk
666 58 Laurent GUERBY
h3. Fichiers
667 58 Laurent GUERBY
668 58 Laurent GUERBY
* /var/cache/ganeti-instance-debootstrap/cache-squeeze-amd64.tar  => cache de debootstrap
669 58 Laurent GUERBY
* /etc/default/ganeti-instance-debootstrap => variables de configuration dont CLEAN_CACHE pour la duree de vie du cache
670 58 Laurent GUERBY
* /var/log/ganeti/os/add-debootstrap+wheezy64-elmer.tetaneutral.net-2013-06-24_14_35_12.log => log de création de VM
671 58 Laurent GUERBY
* /etc/ganeti/instance-debootstrap/hooks => hooks de creation de VM
672 59 Laurent GUERBY
* /etc/ganeti/instance-debootstrap/variants.list => liste des version OS
673 59 Laurent GUERBY
* /etc/ganeti/instance-debootstrap/variants/wheezy64.conf => script de definition des variables de configuration specifique a chaque version OS
674 58 Laurent GUERBY
675 58 Laurent GUERBY
676 10 Mehdi Abaakouk
h3. Éteindre/rebooter provisoirement un des serveurs sans coupure de service
677 10 Mehdi Abaakouk
678 10 Mehdi Abaakouk
La procédure est la suivante:
679 10 Mehdi Abaakouk
 - migration des machines virtuelles sur leurs secondaires
680 10 Mehdi Abaakouk
 - Arret/Ralummage ou reboot du serveur
681 1 Mehdi Abaakouk
 - remigration des machines virtuelles sur le serveur hX
682 10 Mehdi Abaakouk
683 10 Mehdi Abaakouk
<pre>
684 10 Mehdi Abaakouk
gnt-node migrate hX
685 1 Mehdi Abaakouk
shutdown -h now # ou reboot
686 1 Mehdi Abaakouk
hbal -L --no-disk-moves -X
687 10 Mehdi Abaakouk
</pre>
688 10 Mehdi Abaakouk
689 10 Mehdi Abaakouk
La resynchro drbd est automatique.
690 10 Mehdi Abaakouk
691 1 Mehdi Abaakouk
h3. L'extinction d'une node proprement dans le but de la désactivé du cluster
692 10 Mehdi Abaakouk
693 10 Mehdi Abaakouk
<pre>
694 10 Mehdi Abaakouk
gnt-node migrate hX # gnt-node failover hX
695 1 Mehdi Abaakouk
gnt-node evacuate -I hail hX
696 1 Mehdi Abaakouk
gnt-node modify -O yes hX
697 10 Mehdi Abaakouk
</pre>
698 1 Mehdi Abaakouk
699 10 Mehdi Abaakouk
Ici toutes les VMs seront migrés et les données auront été déplacé vers les autres nodes.
700 1 Mehdi Abaakouk
701 10 Mehdi Abaakouk
h3. Vérifier l'état du cluster
702 10 Mehdi Abaakouk
703 1 Mehdi Abaakouk
Sur le masternode normalement h1 faire:
704 10 Mehdi Abaakouk
705 1 Mehdi Abaakouk
<pre>
706 1 Mehdi Abaakouk
gnt-cluster verify
707 10 Mehdi Abaakouk
</pre>
708 1 Mehdi Abaakouk
709 10 Mehdi Abaakouk
h3. Change le node principal (masternode) de "ganeti", celui qui permet de lancer des commandes ganeti.
710 1 Mehdi Abaakouk
711 1 Mehdi Abaakouk
Allez sur un node, taper ceci et il deviendra "maternode":
712 1 Mehdi Abaakouk
713 1 Mehdi Abaakouk
<pre>
714 41 Laurent GUERBY
gnt-cluster master-failover
715 10 Mehdi Abaakouk
</pre>
716 1 Mehdi Abaakouk
717 10 Mehdi Abaakouk
h3. Gestion des fichiers de configuration (ie: /etc/ganeti, /etc/hosts, /etc/rc.local, ...)
718 1 Mehdi Abaakouk
719 1 Mehdi Abaakouk
Tous les fichiers de configuration à synchroniser entre toutes les nodes du cluster sont contenues dans ce script:
720 1 Mehdi Abaakouk
721 1 Mehdi Abaakouk
<pre>
722 1 Mehdi Abaakouk
/etc/ganeti/pushconf.sh
723 10 Mehdi Abaakouk
</pre>
724 1 Mehdi Abaakouk
725 10 Mehdi Abaakouk
Le lancer recopie ces fichiers du masternode vers les autres nodes.
726 10 Mehdi Abaakouk
727 10 Mehdi Abaakouk
h3. Désactiver un serveur qui serait HS du cluster provisoirement.
728 10 Mehdi Abaakouk
729 10 Mehdi Abaakouk
On bascule les machines qui n'ont pas le failover en automatique
730 10 Mehdi Abaakouk
731 10 Mehdi Abaakouk
<pre>
732 10 Mehdi Abaakouk
gnt-node failover [ --ignore-consistency ] h2
733 10 Mehdi Abaakouk
</pre>
734 10 Mehdi Abaakouk
735 10 Mehdi Abaakouk
le --ignore-consistency permet de forcer ganeti à ne pas contrôler le disk avant le basculement
736 10 Mehdi Abaakouk
737 10 Mehdi Abaakouk
On peux (optionnellement) déplacer les disques durs secondaires des VMs
738 10 Mehdi Abaakouk
739 39 Mehdi Abaakouk
<pre>
740 1 Mehdi Abaakouk
gnt-node evacuate [--early-release]  -I hail hX
741 39 Mehdi Abaakouk
</pre>
742 10 Mehdi Abaakouk
le --early-release permet de forcer ganeti à ne pas contrôler le disk avant le basculement (utile si le disk de h2 est HS)
743 10 Mehdi Abaakouk
744 10 Mehdi Abaakouk
Puis on désactive la node:
745 10 Mehdi Abaakouk
746 10 Mehdi Abaakouk
<pre>
747 10 Mehdi Abaakouk
gnt-node modify -O yes h2
748 10 Mehdi Abaakouk
</pre>
749 1 Mehdi Abaakouk
750 11 Mehdi Abaakouk
751 10 Mehdi Abaakouk
h3. Réinsertion dans le cluster d'un node désactivé
752 10 Mehdi Abaakouk
753 10 Mehdi Abaakouk
- On réactive la node
754 10 Mehdi Abaakouk
- On remet dessus des machines et des disques en répartissant la charge du cluster
755 10 Mehdi Abaakouk
756 10 Mehdi Abaakouk
<pre>
757 10 Mehdi Abaakouk
gnt-node modify -O no h2
758 10 Mehdi Abaakouk
hbal -L -X
759 10 Mehdi Abaakouk
</pre>
760 10 Mehdi Abaakouk
761 10 Mehdi Abaakouk
762 10 Mehdi Abaakouk
h2. Setup d'un nouveau NODE
763 10 Mehdi Abaakouk
764 10 Mehdi Abaakouk
h3. Installation
765 1 Mehdi Abaakouk
766 1 Mehdi Abaakouk
* Installer squeeze basique avec juste ssh
767 1 Mehdi Abaakouk
* Ajouter wheezy dans /etc/apt/sources.list
768 1 Mehdi Abaakouk
769 1 Mehdi Abaakouk
<pre>
770 1 Mehdi Abaakouk
# deb http://ftp.fr.debian.org/debian/ squeeze main
771 1 Mehdi Abaakouk
deb http://ftp.fr.debian.org/debian/ squeeze main contrib non-free
772 1 Mehdi Abaakouk
deb-src http://ftp.fr.debian.org/debian/ squeeze main contrib non-free
773 1 Mehdi Abaakouk
deb http://ftp.fr.debian.org/debian/ sid main contrib non-free
774 1 Mehdi Abaakouk
deb-src http://ftp.fr.debian.org/debian/ sid main contrib non-free
775 1 Mehdi Abaakouk
deb http://ftp.de.debian.org/debian-backports/ squeeze-backports main contrib non-free
776 3 Mehdi Abaakouk
deb-src http://ftp.de.debian.org/debian-backports/ squeeze-backports main contrib non-free
777 3 Mehdi Abaakouk
deb http://security.debian.org/ squeeze/updates main
778 4 Mehdi Abaakouk
deb-src http://security.debian.org/ squeeze/updates main
779 3 Mehdi Abaakouk
# squeeze-updates, previously known as 'volatile'
780 1 Mehdi Abaakouk
deb http://ftp.fr.debian.org/debian/ squeeze-updates main
781 8 Mehdi Abaakouk
deb-src http://ftp.fr.debian.org/debian/ squeeze-updates main
782 8 Mehdi Abaakouk
</pre>
783 8 Mehdi Abaakouk
784 8 Mehdi Abaakouk
* Allouer un port avec 3131, 3175, 3195 tagged sur le procurve
785 7 Mehdi Abaakouk
* Monter le reseau manuellement IP X
786 8 Mehdi Abaakouk
787 7 Mehdi Abaakouk
<pre>
788 8 Mehdi Abaakouk
ip link add link eth0 name eth0.3131 type vlan id 3131
789 7 Mehdi Abaakouk
ip link set eth0.3131 up
790 8 Mehdi Abaakouk
ip addr add 91.224.149.15X/25 dev eth0.3131
791 8 Mehdi Abaakouk
</pre>
792 8 Mehdi Abaakouk
793 7 Mehdi Abaakouk
* Creer /etc/rc.local.conf avec X et Y
794 5 Mehdi Abaakouk
795 5 Mehdi Abaakouk
<pre>
796 6 Mehdi Abaakouk
IP_3131="91.224.149.15X/25"
797 5 Mehdi Abaakouk
GW_3131="91.224.149.254"
798 1 Mehdi Abaakouk
IP_3175="192.168.3.Y/24"
799 5 Mehdi Abaakouk
KVM_DISKS="sdb"
800 1 Mehdi Abaakouk
</pre>
801 1 Mehdi Abaakouk
802 1 Mehdi Abaakouk
* Installer les packages
803 1 Mehdi Abaakouk
804 1 Mehdi Abaakouk
<pre>
805 1 Mehdi Abaakouk
#TODO liste en fichier commit qqpart
806 1 Mehdi Abaakouk
#TODO: passer a une version compilée en local de ganeti pour eviter les update de version wheezy
807 1 Mehdi Abaakouk
dpkg --get-selections | ssh root@h48 dpkg --set-selections
808 5 Mehdi Abaakouk
ssh root@h48 apt-get dselect-upgrade
809 5 Mehdi Abaakouk
</pre>
810 6 Mehdi Abaakouk
811 6 Mehdi Abaakouk
812 5 Mehdi Abaakouk
813 5 Mehdi Abaakouk
* munin:
814 5 Mehdi Abaakouk
dans /etc/munin/munin-node.conf ajouter: allow ^91\.224\.149\.194$
815 1 Mehdi Abaakouk
* TODO patch munin Loic
816 5 Mehdi Abaakouk
http://trac.fsffrance.org/wiki/PatchInventory#Munin
817 1 Mehdi Abaakouk
* reboot
818 5 Mehdi Abaakouk
* Installer le node dans le cluster ganeti apres s'etre assure que la version de ganeti est bien la meme
819 1 Mehdi Abaakouk
820 1 Mehdi Abaakouk
<pre>
821 5 Mehdi Abaakouk
dpkg -l|grep -i ganeti
822 5 Mehdi Abaakouk
gnt-node add h48
823 5 Mehdi Abaakouk
/etc/ganeti/pushconf.sh
824 5 Mehdi Abaakouk
</pre>
825 5 Mehdi Abaakouk
826 5 Mehdi Abaakouk
Appliquer ce patch à ganeti-instance-debootstrap:
827 5 Mehdi Abaakouk
828 5 Mehdi Abaakouk
<pre>
829 5 Mehdi Abaakouk
--- /usr/share/ganeti/os/debootstrap/common.sh.ori  2010-09-15 22:34:12.000000000 +0200
830 5 Mehdi Abaakouk
+++ /usr/share/ganeti/os/debootstrap/common.sh  2011-07-27 12:33:55.695617766 +0200
831 5 Mehdi Abaakouk
@@ -91,7 +91,7 @@
832 1 Mehdi Abaakouk
# some versions of sfdisk need manual specification of
833 5 Mehdi Abaakouk
# head/sectors for devices such as drbd which don't
834 5 Mehdi Abaakouk
# report geometry
835 5 Mehdi Abaakouk
-  sfdisk -H 255 -S 63 --quiet --Linux "$1" <<EOF
836 6 Mehdi Abaakouk
+  sfdisk -H 255 -S 63 -D --quiet --Linux "$1" <<EOF
837 5 Mehdi Abaakouk
0,,L,*
838 3 Mehdi Abaakouk
EOF
839 1 Mehdi Abaakouk
}
840 1 Mehdi Abaakouk
</pre>
841 11 Mehdi Abaakouk
842 3 Mehdi Abaakouk
Ci dessous ajouter dkms et r8168 si nécessaire.
843 15 Mehdi Abaakouk
844 1 Mehdi Abaakouk
h3. Pilotes additionnel
845 1 Mehdi Abaakouk
846 1 Mehdi Abaakouk
Sur h1,h2,h4,h5 et h6, le pilote (r8169.ko) de la carte réseau (r8168/8111) provoque des kernels panic, il a été remplacé la version du constructeur (r8168.ko).
847 1 Mehdi Abaakouk
Pilote dispo ici: (http://www.realtek.com/downloads/downloadsView.aspx?Langid=1&PNid=13&PFid=5&Level=5&Conn=4&DownTypeID=3&GetDown=false)
848 1 Mehdi Abaakouk
849 1 Mehdi Abaakouk
<pre>
850 1 Mehdi Abaakouk
apt-get install gcc dkms
851 1 Mehdi Abaakouk
cd /usr/src
852 1 Mehdi Abaakouk
wget http://url_to_pilot/r8168-8.024.00.tar.bz2
853 1 Mehdi Abaakouk
tar -xjf r8168-8.024.00.tar.bz2
854 1 Mehdi Abaakouk
cd r8168-8.024.00
855 1 Mehdi Abaakouk
cat > dkms.conf << EOF
856 1 Mehdi Abaakouk
PACKAGE_NAME=r8168
857 1 Mehdi Abaakouk
PACKAGE_VERSION=8.024.00
858 1 Mehdi Abaakouk
MAKE[0]="make"
859 1 Mehdi Abaakouk
BUILT_MODULE_NAME[0]=r8168
860 1 Mehdi Abaakouk
BUILT_MODULE_LOCATION[0]="src/"
861 1 Mehdi Abaakouk
DEST_MODULE_LOCATION[0]="/kernel/updates/dkms"
862 1 Mehdi Abaakouk
AUTOINSTALL="YES"
863 1 Mehdi Abaakouk
EOF
864 1 Mehdi Abaakouk
dkms add -m r8168 -v 8.024.00
865 1 Mehdi Abaakouk
dkms build -m r8168 -v 8.024.00
866 1 Mehdi Abaakouk
dkms install -m r8168 -v 8.024.00
867 1 Mehdi Abaakouk
echo "r8168" >> /etc/modules
868 1 Mehdi Abaakouk
echo "blacklist r8169" >> /etc/modprobe.d/blacklist-network.conf
869 1 Mehdi Abaakouk
update-initramfs -u
870 1 Mehdi Abaakouk
reboot
871 1 Mehdi Abaakouk
</pre>
872 1 Mehdi Abaakouk
873 1 Mehdi Abaakouk
Pour les machines a base de e1000e:
874 1 Mehdi Abaakouk
875 1 Mehdi Abaakouk
<pre>
876 1 Mehdi Abaakouk
apt-get install gcc dkms
877 1 Mehdi Abaakouk
cd /usr/src
878 1 Mehdi Abaakouk
wget http://downloadmirror.intel.com/15817/eng/e1000e-1.3.17.tar.gz
879 1 Mehdi Abaakouk
tar -xzf e1000e-1.3.17.tar.gz
880 1 Mehdi Abaakouk
cd e1000e-1.3.17
881 1 Mehdi Abaakouk
cat > dkms.conf << EOF
882 1 Mehdi Abaakouk
PACKAGE_NAME=e1000e
883 1 Mehdi Abaakouk
PACKAGE_VERSION=1.3.17
884 1 Mehdi Abaakouk
CLEAN="make -C src/ clean"
885 1 Mehdi Abaakouk
MAKE[0]="make -C src/"
886 1 Mehdi Abaakouk
BUILT_MODULE_NAME[0]=e1000e
887 1 Mehdi Abaakouk
BUILT_MODULE_LOCATION[0]="src/"
888 1 Mehdi Abaakouk
DEST_MODULE_LOCATION[0]="/kernel/updates/dkms"
889 1 Mehdi Abaakouk
AUTOINSTALL="YES"
890 1 Mehdi Abaakouk
EOF
891 1 Mehdi Abaakouk
dkms add -m e1000e -v 1.3.17
892 1 Mehdi Abaakouk
dkms build -m e1000e -v 1.3.17
893 1 Mehdi Abaakouk
dkms install -m e1000e -v 1.3.17
894 1 Mehdi Abaakouk
reboot
895 1 Mehdi Abaakouk
</pre>
896 1 Mehdi Abaakouk
897 1 Mehdi Abaakouk
898 13 Mehdi Abaakouk
h2. Annexe 
899 13 Mehdi Abaakouk
900 13 Mehdi Abaakouk
h3. Configuration réseau
901 13 Mehdi Abaakouk
902 13 Mehdi Abaakouk
le script /etc/rc.local, qui s'occupe de préparer la configuration réseaux pour ganeti (avec les vlan, bridge and co)
903 1 Mehdi Abaakouk
le script /etc/rc.local.conf, contient les adresses IP de la machine et les gw
904 11 Mehdi Abaakouk
905 11 Mehdi Abaakouk
h3. Protection VNC
906 11 Mehdi Abaakouk
907 11 Mehdi Abaakouk
Le VNC de kvm est utiliser sur chaque MV.
908 11 Mehdi Abaakouk
Des règles de firewall sont automatiquement mise en place par le script /etc/ganeti/vnc-firewall pour que seul la machine gntwebmgr.tetaneutral.net soit autoriser a s'y connecter
909 11 Mehdi Abaakouk
Ce script est appelé par les hooks ganeti.
910 11 Mehdi Abaakouk
911 11 Mehdi Abaakouk
h3. Mac spoofing configuration (Actuellement désactivé)
912 1 Mehdi Abaakouk
913 1 Mehdi Abaakouk
Le script ifup de ganeti pour kvm a été modifier (ie: /etc/ganeti/kvm-vif-bridge) pour écrire la relation entre la vm, le numero de ces interfaces réseaux et ces tap.
914 1 Mehdi Abaakouk
Le fichier prends la forme suivante:
915 1 Mehdi Abaakouk
munin.tetaneutral.net:0:tap3
916 1 Mehdi Abaakouk
trac.tetaneutral.net:0:tap5
917 1 Mehdi Abaakouk
munin.tetaneutral.net:1:tap5
918 1 Mehdi Abaakouk
Les règles ebtables sont écrites par le script /etc/ganeti/spoofing/spoofing-protection avec les informations de ce fichier.
919 1 Mehdi Abaakouk
Les scripts de hook de ganeti (ie:/etc/ganeti/hook/) utilise ce script, pour lancer ou arreter le spoofing.
920 11 Mehdi Abaakouk
921 33 Mehdi Abaakouk
h3. Debootstrap du nouvelle ubuntu >= oneiric:
922 33 Mehdi Abaakouk
923 33 Mehdi Abaakouk
pour les ubuntu oneiric, precise et supérieur il faut créer des liens symbolique pour debootstrap:
924 33 Mehdi Abaakouk
925 33 Mehdi Abaakouk
<pre>
926 33 Mehdi Abaakouk
cd /usr/share/debootstrap/scripts
927 33 Mehdi Abaakouk
ln -s gutsy oneiric
928 33 Mehdi Abaakouk
ln -s gutsy precise
929 33 Mehdi Abaakouk
</pre>
930 33 Mehdi Abaakouk
931 33 Mehdi Abaakouk
ensuite la variante peux être ajouter à ganeti-instace-debootstrap dans /etc/ganeti/instace-debootstrap/variants/...
932 33 Mehdi Abaakouk
933 1 Mehdi Abaakouk
h3. Patch maison pour ganeti
934 11 Mehdi Abaakouk
935 11 Mehdi Abaakouk
Ajout de l'option -D à sfdisk au script /usr/share/ganeti/os/debootstrap/common.sh ligne 84 pour créer des partitions avec assez d'espace pour grub
936 1 Mehdi Abaakouk
Celui-ci est décrit dans l'installation d'une node aussi.
937 11 Mehdi Abaakouk
938 1 Mehdi Abaakouk
h3. J'ai n'est pas trouvé mon bonheur, comment je vais faire ?!
939 11 Mehdi Abaakouk
940 11 Mehdi Abaakouk
Voici quelques ressources:
941 11 Mehdi Abaakouk
* http://docs.ganeti.org/ganeti/current/html/
942 11 Mehdi Abaakouk
* http://docs.ganeti.org/ganeti/2.1/man/
943 11 Mehdi Abaakouk
* http://wiki.osuosl.org/public/ganeti/
944 1 Mehdi Abaakouk
Ou bien je demande à sileht d'écrire le use case qui me manque s'il à le temps
945 45 Laurent GUERBY
946 45 Laurent GUERBY
h3. Tuning IO
947 45 Laurent GUERBY
948 45 Laurent GUERBY
<pre>
949 45 Laurent GUERBY
KVM_DISKS="WDC_WD20EARS-00_WD-WMAZA0732072"
950 45 Laurent GUERBY
951 45 Laurent GUERBY
for diskname in $KVM_DISKS ; do
952 45 Laurent GUERBY
	disk=$(basename $(readlink -e /dev/disk/by-id/scsi-SATA_$diskname) 2>/dev/null)
953 45 Laurent GUERBY
	[ -z "$disk" -o ! -d "/sys/block/$disk" ] && continue
954 45 Laurent GUERBY
	echo deadline > /sys/block/${disk}/queue/scheduler
955 45 Laurent GUERBY
	echo 1 > /sys/block/${disk}/queue/iosched/fifo_batch
956 45 Laurent GUERBY
	echo 0 > /sys/block/${disk}/queue/iosched/front_merges
957 45 Laurent GUERBY
	echo 2 > /sys/block/${disk}/queue/iosched/read_expire
958 45 Laurent GUERBY
	echo 2 > /sys/block/${disk}/queue/iosched/write_expire
959 45 Laurent GUERBY
	echo 1 > /sys/block/${disk}/queue/iosched/writes_starved
960 45 Laurent GUERBY
done
961 45 Laurent GUERBY
</pre>
962 52 Fabien Dupont
963 52 Fabien Dupont
h3. Hooks
964 52 Fabien Dupont
965 54 Fabien Dupont
h4. Généralités
966 54 Fabien Dupont
967 53 Fabien Dupont
Les hooks sont des scripts dans le répertoire /etc/ganeti/instance-debootstrap/hooks (pour les VM de type instance-debootstrap) exécutés grâce à run-parts.
968 56 Fabien Dupont
Seul les fichier exécutables (chmod +x) seront exécutés.
969 53 Fabien Dupont
970 53 Fabien Dupont
Un hook a la forme suivante :
971 53 Fabien Dupont
972 53 Fabien Dupont
<pre>
973 53 Fabien Dupont
#!/bin/bash
974 53 Fabien Dupont
975 53 Fabien Dupont
set -e
976 53 Fabien Dupont
977 53 Fabien Dupont
. common.sh
978 53 Fabien Dupont
979 53 Fabien Dupont
CLEANUP=( )
980 53 Fabien Dupont
set -x
981 53 Fabien Dupont
trap cleanup EXIT
982 53 Fabien Dupont
983 53 Fabien Dupont
if [ -z "$TARGET" -o ! -d "$TARGET" ]; then
984 53 Fabien Dupont
  echo "Missing target directory"
985 53 Fabien Dupont
  exit 1
986 53 Fabien Dupont
fi
987 53 Fabien Dupont
988 53 Fabien Dupont
# Vos modifs ici
989 53 Fabien Dupont
# $TARGET contient le chemin, sur l'hôte, où est monté le disque dur de la VM
990 53 Fabien Dupont
991 53 Fabien Dupont
cleanup
992 53 Fabien Dupont
trap - EXIT
993 53 Fabien Dupont
994 53 Fabien Dupont
exit 0
995 53 Fabien Dupont
</pre>
996 1 Mehdi Abaakouk
997 56 Fabien Dupont
Les hooks sont séparés en fichiers, un par « fonction », afin d'encourager la réutilisation.
998 56 Fabien Dupont
999 56 Fabien Dupont
<pre>
1000 56 Fabien Dupont
# ls /etc/ganeti/instance-debootstrap/hooks
1001 56 Fabien Dupont
/etc/ganeti/instance-debootstrap/hooks/10extlinux
1002 56 Fabien Dupont
/etc/ganeti/instance-debootstrap/hooks/20clear-root-password
1003 56 Fabien Dupont
/etc/ganeti/instance-debootstrap/hooks/30network-config
1004 56 Fabien Dupont
/etc/ganeti/instance-debootstrap/hooks/40locales
1005 56 Fabien Dupont
/etc/ganeti/instance-debootstrap/hooks/50apt
1006 56 Fabien Dupont
/etc/ganeti/instance-debootstrap/hooks/60openssh
1007 56 Fabien Dupont
/etc/ganeti/instance-debootstrap/hooks/90puppet
1008 56 Fabien Dupont
</pre>
1009 1 Mehdi Abaakouk
1010 55 Fabien Dupont
*Important :* Le répertoire /etc/ganeti/instance-debootstrap/hooks doit être identique sur tous les nœuds du cluster. Le script /etc/ganeti/pushconf.sh permet de les synchroniser.
1011 55 Fabien Dupont
1012 54 Fabien Dupont
h4. Exemple de hook : Installation d'extlinux en tant que bootloader
1013 52 Fabien Dupont
1014 52 Fabien Dupont
<pre>
1015 52 Fabien Dupont
#!/bin/bash
1016 52 Fabien Dupont
1017 52 Fabien Dupont
set -e
1018 52 Fabien Dupont
1019 52 Fabien Dupont
. common.sh
1020 52 Fabien Dupont
1021 52 Fabien Dupont
CLEANUP=( )
1022 52 Fabien Dupont
set -x
1023 52 Fabien Dupont
trap cleanup EXIT
1024 52 Fabien Dupont
1025 52 Fabien Dupont
if [ -z "$TARGET" -o ! -d "$TARGET" ]; then
1026 52 Fabien Dupont
  echo "Missing target directory"
1027 52 Fabien Dupont
  exit 1
1028 52 Fabien Dupont
fi
1029 52 Fabien Dupont
1030 52 Fabien Dupont
# allow extlinux to find device
1031 52 Fabien Dupont
mount --bind /dev $TARGET/dev
1032 52 Fabien Dupont
CLEANUP+=("umount $TARGET/dev")
1033 52 Fabien Dupont
mount --bind /proc $TARGET/proc
1034 52 Fabien Dupont
CLEANUP+=("umount $TARGET/proc")
1035 52 Fabien Dupont
1036 52 Fabien Dupont
# generate configuration
1037 52 Fabien Dupont
echo 'EXTLINUX_PARAMETERS="ro console=ttyS0,38400n8"' > $TARGET/etc/default/extlinux
1038 52 Fabien Dupont
chroot "$TARGET" extlinux-update
1039 52 Fabien Dupont
1040 52 Fabien Dupont
# install extlinux
1041 52 Fabien Dupont
chroot "$TARGET" extlinux -i /boot/extlinux
1042 52 Fabien Dupont
1043 52 Fabien Dupont
# install boot record
1044 52 Fabien Dupont
dd if="$TARGET/usr/lib/extlinux/mbr.bin" of=$BLOCKDEV
1045 52 Fabien Dupont
1046 52 Fabien Dupont
cleanup
1047 52 Fabien Dupont
trap - EXIT
1048 52 Fabien Dupont
1049 52 Fabien Dupont
exit 0
1050 52 Fabien Dupont
</pre>