Gentoo Archives: gentoo-user-fr

From: Sylvain TENOU <tenou.sylvain@×××××.com>
To: gentoo-user-fr@l.g.o
Subject: Re: [gentoo-user-fr] Gentoo et boot PXE
Date: Fri, 22 Jun 2007 19:05:58
Message-Id: f540f4dc0706221204r57479e8y45b9551eaf7daa07@mail.gmail.com
In Reply to: Re: [gentoo-user-fr] Gentoo et boot PXE by polytan
1 Le 22/06/07, polytan <polytan@×××××.com> a écrit :
2 >
3 >
4 >
5 >
6 > > Bonsoir,
7 >
8 >
9 > Bonjour à toi :-)
10 >
11 > J'ai passé ma soirée à mettre en place le tuto que tu m'as donné au
12 > > départ.
13 >
14 >
15 > Je crois avoir aussi passé plusieurs soirées à le faire marcher...
16 >
17 > Après quelque péripéties (entre autre, compilation d'un noyau > 2.6.19
18 >
19 >
20 > Pourquoi pas le dernier stable ? (2.6.20 je crois)
21 >
22 > parce qu'il posait problème, et pas qu'à moi d'après ce que j'ai lu),
23 > > j'ai enfin réussi à faire démarrer mon PC par PXE! :]
24 > > Ça soulage d'y arriver enfin! :)
25 >
26 >
27 > Je te comprends, ca me fait pareil à chaque fois et je crois que je vais
28 > recommencer dès la semaine prochaine.
29 >
30 > Mais maintenant, j'ai toujours le problème du montage de /usr au début de
31 > > la séquence de boot :/.
32 >
33 >
34 > Oui, ca permet d'avoir un /usr de la taille que tu veux, commun à toutes
35 > les machines et après de copier quelques 30-32 Mo pour les clients et de les
36 > personnaliser.
37 >
38 > À vrai dire, pour cela j'ai pas encore très bien saisi le système :-S...
39 >
40 >
41 > Il faut jouer avec les scripts au démarrage et avoir bien fait le fstab.
42 >
43 > Pourrais-tu m'expliquer ce que tu as
44 > > modifié, et les conséquences de ces modifications (s'il y en a d'autre que
45 > > le démarrage du réseau en premier), pour avoir le démarrage du réseau
46 > > avant le reste de la séquence de boot?
47 > >
48 > > Merci d'avance.
49 >
50 >
51 > Bon, mettons les choses au clair : j'ai quelques scripts, mais...ce fut au
52 > debut de ma connaissance de python et des fois, ben...c'est pas tres fun :)
53 >
54 > J'ai fait dans un dossier une gentoo complète pour les machines clientes.
55 > cela se trouvait dans /mnt/systeme_racine/ (une partition à part, mais ca
56 > ne change pas grand chose à part booter dessus pour voir que ca marche sans
57 > bidouiller :) )
58 > les machines clientes sont dans /mnt/nodes/.
59 > Pour chaque clients sont créés un dossier portant leur numéro ip (pour m'y
60 > retrouver) et sont copié les fichiers necessaires.
61 > je copie : /bin /sbin /usr/share/consolefont,consoletrans... (necesaire au
62 > boot, on remontera /usr par dessus), /lib, /etc et /root
63 > voila les scripts :
64 >
65 > On prépare le terrain, j'ai plein de petits scripts pour tout préparer
66 > pour les nodes (comment ca je suis une feignasse qui déteste les oéprations
67 > répétitives ? :) )
68 >
69 > faire_des_nodes.py
70 >
71 > # -*- coding:UTF-8 -*-
72 > from creer_repertoires import rep
73 > from etcnodes import etc,hosts,dev,fastboot,perm
74 > from copier_fichiers import copier_fichiers
75 > from os import system,chdir
76 > from fstab import fstab
77 >
78 > nb = 12
79 >
80 >
81 > # on crée les répertoires de base
82 > rep(nb)
83 >
84 > # On copie les fichiers pour que ca puisse démarrer
85 > copier_fichiers(nb)
86 >
87 > # On spécifie le etc pour chaque nodes :
88 > # /etc/conf.d/net
89 > # /etc/conf.d/hostname
90 > # /etc/hosts
91 > # /etc/fstab
92 > etc(nb)
93 > hosts(nb)
94 > fstab(nb)
95 > dev(nb)
96 > fastboot(nb)
97 > perm(nb)
98 >
99 > Création des répertoires pour ensuite copier les fichiers dedans (oui,
100 > j'aurais pu tout mettre dans un même scripts, mais pour les modif au
101 > compte-goutte, c'est plus simple)
102 >
103 > copier_repertoires.py
104 >
105 > # -*- coding:UTF-8 -*-
106 > # On crée les nodes pour booter le réseau
107 >
108 > from os import chdir,mkdir
109 >
110 > def rep(nb):
111 > for i in range(1,nb+1,1):
112 > chdir('/mnt/nodes')
113 > rep = '192.168.32.' + str(i)
114 > mkdir(rep)
115 > liste =
116 > ['etc','home','home/emcc','dev','proc','sys','tmp','mnt','root','var','usr','opt','mfs']
117 >
118 > listvar = ['empty','lock','log','run','spool','tmp']
119 > listusr =
120 > ['bin','sbin','share','share/consolefonts','share/consoletrans','share/keymaps','share/zoneinfo','share/locale','share/locale/fr']
121 >
122 > for j in liste:
123 > mkdir('%s/%s' % (rep,j))
124 > mkdir('%s/etc/conf.d' % (rep))
125 > for j in listvar:
126 > mkdir('%s/var/%s' % (rep,j))
127 > for j in listusr:
128 > mkdir('%s/usr/%s' % (rep,j))
129 >
130 > préparation de /etc :
131 >
132 > etcnodes.py
133 >
134 > # -*- coding:UTF-8 -*-
135 > # On configure le dossier etc des nodes
136 > from os import system,mkdir,chdir
137 >
138 > def etc(nb):
139 > for i in range(1,nb+1,1):
140 > ip = '192.168.32.' + str(i)
141 > # system('touch /mnt/nodes/%s/etc/conf.d/net' % (ip))
142 > # system('touch /mnt/nodes/%s/etc/conf.d/hostname' % (ip))
143 > chdir('/mnt/nodes/%s/etc/conf.d' % (ip))
144 > # f = open('net','w')
145 > # t = 'iface_eth0="%s broadcast 192.168.255.255 netmask
146 > 255.255.255.0"\n' % (ip)
147 > # f.write(t)
148 > # f.close()
149 > f = open('hostname','w')
150 > node = 'node' + str(i)
151 > t = 'HOSTNAME="%s"\n' % (node)
152 > f.write(t)
153 > f.close()
154 >
155 > def hosts(nb):
156 > for i in range(1,nb+1,1):
157 > ipi = '192.168.32.' + str(i)
158 > # system('touch /mnt/nodes/%s/etc/hosts' % ipi)
159 > chdir('/mnt/nodes/%s/etc' % ipi)
160 > f = open('hosts','w')
161 > node = 'node' + str(i)
162 > t1 = '127.0.0.1 localhost %s \n' % node
163 > f.write(t1)
164 > for j in range(1,nb+1,1):
165 > ip = '192.168.32.' + str(j)
166 > nodej = 'node' + str(j)
167 > t = '%s %s\n' % (ip,nodej)
168 > f.write(t)
169 > f.close()
170 >
171 > def dev(nb):
172 > for i in range(1,nb+1,1):
173 > ip = '192.168.32.' + str(i)
174 > system('mknod /mnt/nodes/%s/dev/console c 5 1' % ip)
175 >
176 > def fastboot(nb):
177 > for i in range(1,nb+1,1):
178 > ip = ' 192.168.32.' + str(i)
179 > system('touch /mnt/nodes/%s/fastboot' % ip)
180 > system('echo "touch /fastboot" >>
181 > /mnt/nodes/%s/etc/conf.d/local.start' % ip)
182 >
183 > def perm(nb):
184 > for i in range(1,nb+1,1):
185 > ip = '192.168.32.' + str(i)
186 > system('chmod a+rw -R /mnt/nodes/%s' % ip)
187 > system('chmod a-rw -R /mnt/nodes/%s/etc' % ip)
188 > system('chmod +rw -R /mnt/nodes/%s/etc' % ip)
189 > system('chmod 600 -R /mnt/nodes/%s/etc/ssh' % ip)
190 > system('chmod a+rw -R /mnt/nodes/%s/var' % ip)
191 > system('chmod 700 -R /mnt/nodes/%s/var' % ip)
192 >
193 > dans ce script, il y a surement des choses qui ne te serviront à rien. Il
194 > faut que tu saches que je faisais des grappes de calcul openmosix à cette
195 > époque...
196 >
197 > copier_fichiers.py
198 >
199 > # -*- coding:UTF-8 -*-
200 > # Copie des fichiers nécessaire au boot
201 > from os import system,chdir
202 >
203 > def copier_fichiers(nb):
204 > for i in range(1,nb+1,1):
205 > ip = '192.168.32.' + str(i)
206 > system('rsync -avz /mnt/systeme_racine/bin /mnt/nodes/%s'%ip)
207 > system('rsync -avz /mnt/systeme_racine/sbin /mnt/nodes/%s'%ip)
208 > system('rsync -avz /mnt/systeme_racine/lib /mnt/nodes/%s'%ip)
209 > system('rsync -avz /mnt/systeme_racine/etc /mnt/nodes/%s'%ip)
210 > system('rsync -avz /mnt/systeme_racine/root /mnt/nodes/%s'%ip)
211 > # system('rsync -avz /mnt/systeme_racine/usr/bin
212 > /mnt/nodes/%s/usr/'%ip)
213 > # system('rsync -avz /mnt/systeme_racine/usr/sbin
214 > /mnt/nodes/%s/usr/'%ip)
215 > system('rsync -avz /mnt/systeme_racine/usr/share/consolefonts
216 > /mnt/nodes/%s/usr/share/'%ip)
217 > system('rsync -avz /mnt/systeme_racine/usr/share/consoletrans
218 > /mnt/nodes/%s/usr/share/'%ip)
219 > system('rsync -avz /mnt/systeme_racine/usr/share/keymaps
220 > /mnt/nodes/%s/usr/share/'%ip)
221 > system('rsync -avz /mnt/systeme_racine/usr/share/zoneinfo
222 > /mnt/nodes/%s/usr/share/'%ip)
223 > system('rsync -avz /mnt/systeme_racine/usr/share/locale/fr
224 > /mnt/nodes/%s/usr/share/locale'%ip)
225 > system('rsync -avz /mnt/systeme_racine/sys /mnt/nodes/%s'%ip)
226 >
227 > Et enfin, le fstab
228 >
229 > Oui, oui, c'est fini après :)
230 >
231 > fstab.py
232 >
233 > # -*- coding:UTF-8 -*-
234 > # Création du fstab des nodes
235 >
236 > def fstab(nb):
237 > for i in range(1,nb+1,1):
238 > ip = '192.168.32.' + str(i)
239 > f = open('/mnt/nodes/%s/etc/fstab' % ip,'w')
240 > t = '192.168.32.64:/mnt/nodes/%s / nfs
241 > sync,hard,intr,rw,nolock,rsize=8192,wsize=8192 0 0\n' % ip
242 > f.write(t)
243 > t = '192.168.32.64:/mnt/systeme_racine/opt /opt nfs
244 > auto,sync,hard,intr,ro,nolock,rsize=8192,wsize=8192 0 0\n'
245 > f.write(t)
246 > t = '192.168.32.64:/mnt/systeme_racine/usr /usr nfs
247 > auto,sync,hard,intr,ro,nolock,rsize=8192,wsize=8192 0 0\n'
248 > f.write(t)
249 > t = '192.168.32.64:/home/emcc /home/emcc nfs
250 > auto,sync,hard,intr,rw,nolock,rsize=8192,wsize=8192 0 0\n'
251 > f.write(t)
252 > f.close()
253 >
254 > et voila, les bases sont faites.
255 >
256 > Pour ne faire qu'un client, met nb à 1 :)
257 >
258 > Bon, un petit dernier pour la route :)
259 >
260 > tftpboot_default.py
261 >
262 > # -*- coding:UTF-8 -*-
263 > # Création du fichier pxedefault.cfg/default en fonction du nombre de
264 > nodes
265 >
266 > f = open('/mnt/nodes/pxelinux.cfg/default','w')
267 > for i in range(1,13,1):
268 > label = 'LABEL '+str(i)+'\n'
269 > ker = 'KERNEL kernel-2.4.30-om-r3 \n'
270 > ip = '192.168.32.' + str(i)
271 > app = 'APPEND ip=dhcp root=/dev/nfs nfsroot=
272 > 192.168.32.64:/mnt/nodes/%s \n \n' % (ip)
273 > f.write(label)
274 > f.write(ker)
275 > f.write(app)
276 > f.close()
277 >
278 > mon /etc/export :
279 >
280 > /mnt/nodes 192.168.32.0/255.255.255.0(rw,no_root_squash,no_all_squash,sync)
281 > /mnt/systeme_racine/opt 192.168.32.0/255.255.255.0(rw,no_root_squash,no_all_squash,sync)
282 > /mnt/systeme_racine/usr 192.168.32.0/255.255.255.0(rw,no_root_squash,no_all_squash,sync)
283 > /mnt/systeme_racine/home 192.168.32.0/255.255.255.0(ro,no_root_squash,no_all_squash,sync)
284 >
285 >
286 >
287 > PS : Et bien au moins j'aurai bien avancé aujourd'hui! :) Merci grandement
288 > > à toi! :)
289 >
290 >
291 > Mais de rien, tout est sous GPL, fais-en ce que tu veux tant que ca reste
292 > GPL ;)
293 >
294 > S'il y a du emcc quelque part, c'est rien, c'était le programme que je
295 > faisais tourner.
296 > om c'est pour open mosix
297 >
298 > Pour le démarrage, tu verra dans un des scripts, je modifie le local.start
299 > .
300 >
301 > Il y a peut-etre (surement même) une facon plus simple de procéder. A
302 > l'heure actuelle je ne sais pas.
303 >
304 > Pour ce qui est de PXE, grub serait peut-être plus souple que pxelinux.
305 > A voir.
306 >
307 > Je suis parfois le soir sur jabber : polytan@×××××××.com
308 >
309 > Si tu veux qu'on se recontre sur jabber, préviens moi, je verrais si je
310 > peux venir (pas ce weekend par contre)
311 > Peut-être veux-tu rester en communication grâce à la liste de diffusion,
312 > pour qu'il y ait une trace, au choixe :)
313 >
314 >
315 > --
316 > > Cordialement,
317 >
318 >
319 > Amicalement,
320 >
321 > Sylvain TENOU.
322 >
323 >
324 > polytan
325 >
326
327 Bonsoir,
328
329 Eh bien le moins que l'on puisse dire c'est que pour avoir de l'aide j'en
330 ai! :)
331 Étant très fatigué ce soir, je ne penses pas y toucher avant demain, mais
332 promis, demain je m'y remets!
333 Je penses d'abord m'atteler à utiliser ce que tu m'as donné pour parvenir à
334 ce que je souhaite (un /usr au démarrage :]),
335 ensuite si j'y parviens d'une manière claire (je ne penses pas que ce sera
336 le cas au premier essai, donc il va y avoir de
337 la réinstallation propre dans l'air ;]), je penses me lancer moi-même dans
338 la réalisation de script d'automatisation en python
339 pour apprendre à manier python avec un exemple concret (je m'y suis mis
340 depuis 2 semaines), car python à un bonne
341 ressemblance avec PHP que je maîtrise depuis 4 ans, donc autant en profiter
342 pour avancer avec un truc utile :).
343
344 Pour la poursuite de la discussion je penses rester pour le moment avec la
345 liste pour en garder une trace réutilisable par
346 la suite, et si jamais les problèmes se font trop poussés je te préviendrais
347 pour voir sur Jabber ;).
348
349 En tout cas, encore une fois, Merci! :]
350
351
352
353 PS : pour le blabla, c'est souvent une marque de convivialité, et je suis
354 très causant, donc cela ne me dérange pas ;).
355
356 --
357 Cordialement,
358 Sylvain TENOU.