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. |