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