Warning: this is somewhat outdated, after the upgrading od RH 5.2 to RH 7.1
NAME
admin - Geronimo Cluster Upgrading HOW-TO
AUTHOR
Mario A. Storti
SYNOPSIS
We describe here some basic aspects of the Geronimo Beowulf
administration.
DESCRIPTION
Para agregar un nuevo nodo
1 Hacer un diskette de booteo para cada nodo
dd if=zImage.client of=/dev/fd0
2 Bootear el nodo y tomar nota del MAC ed la tarjeta del nodo. Para
esto hay que escuchar en el port correspondiente con
/usr/sbin/tcpdump rarp -i eth1
3 Agregar la linea corespondiente en el script '/root/crea_nodos' y
correrlo.
4 Agregar el nodo en /etc/hosts, /etc/hosts.equiv, /etc/hosts.allow y
en /usr/local/mpi/util/machines/machines.LINUX y en
~mstorti/PETSC/proctable
5 Bootear todo el cluster de nuevo.
6 Si hay problemas:
* Hacer ping al nuevo nodo
* Verificar que se pueda hacer rsh hacia y desde el nuevo nodo a
los otros.
* Verificar que el nuevo nodo este en los /etc/hosts, hosts.equiv
de los otros nodos y del server.
Para recuperar el kernel del server
$ cp zImage.server /boot/zImage
$ lilo
Para compilar el (los) kernel nuevamente
Para el kernel 2.0.36 (RH 5.2) hay que hacer basicamente dos cosas.
1 Para el driver 3c59x.c hay que agregar dos lineas diferentes
dependiendo de si es el server o el cliente. Esto puede cambiar en
un futuro si lo podemos hacer en forma modular.
#ifdef BEOWULF_SERVER_KERNEL /* for the server */
#warning Compiling kernel for the SERVER
static int options[8] = { -1, 4, -1, -1, -1, -1, -1, -1,};
static int full_duplex[8] = {-1, 1, -1, -1, -1, -1, -1, -1};
#elif BEOWULF_NODE_KERNEL /* for the nodes */
#warning Compiling kernel for the NODES
static int options[8] = { 4, -1, -1, -1, -1, -1, -1, -1,};
static int full_duplex[8] = { 1, -1, -1, -1, -1, -1, -1, -1};
#else
#error No compilation options BEOWULF_NODE_KERNEL or BEOWULF_SERVER_KERNEL were set.
#endif
Estas lineas definen que para el server-kernel hay que inicializar
la tarjeta eth0 (la primera tarjeta, sobre la red del Ceride en la
configuracion actual) a 10BaseT (Ethernet (no Fast-Ethernet)) y la
segunda tarjeta a Fast-Ethernet (100BaseT) y full duplex. Para el
node-kernel (clientes) se inicializa a 100Baset/full-duplex la
primera tarjeta.
2 En las operaciones de configuracion del kernel (archivo .config en
el directorio /usr/src/linux).
* Hay que configurar en las `Networking Options' el RARP para que
responda cuando se le pregunta por el IP de un nodo, mientras
que en los nodos se debe dejar desactivado ya que si no un nodo
Y responde a un RARP request del nodo X entonces X tratara de
cargar el kernel en Y, lo cual no es posible. Es decir, solo el
server debe responder a los RARP request's.
* En los nodos hay que configurar RARP en el rubro `Filesystems',
mientras que en principio hay que dejar desactivado esto en el
server.
Estas opciones se pueden cargar en el archivo
`/usr/src/linux/.config' de la siguiente forma
server-kernel:
CONFIG_INET_RARP=y
# CONFIG_ROOT_NFS is not set
# CONFIG_RNFS_RARP is not set
node-kernel:
# CONFIG_INET_RARP is not set
CONFIG_ROOT_NFS=y
CONFIG_RNFS_RARP=y
y entonces se hace `$make oldconfig' y se responde con el default
() a todas las preguntas.
El script `make_kernels'
Para evitar tener que hacer todo esto manualmente se ha escrito un
script make_kernels.
* La eleccion de los diferentes seteos para el driver 3c95x se hace
mediante macros del preprocesador `C' llamados
`BEOWULF_SERVER_KERNEL' y `BEOWULF_NODE_KERNEL'. Estos se pasan via
desde make_kernels invocando a make con algo del tipo
BEOWULF_KERNEL_TYPE=-DBEOWULF_SERVER_KERNEL make zImage
El Makefile del kernel fue modificado agregando una linea
CFLAGS += $(BEOWULF_KERNEL_TYPE)
* La eleccion de las diferentes opciones de configuracion del kernel
se hace mediante preprocesamiento del archivo /usr/src/linux/.config
con ePerl. El archivo config.eperl contiene las dos versiones de
configuraciones mediante directivas `#if...#endif' de ePerl y la
version apropiada de .config es creada antes de compilar cada kernel
y ejecutando
$ yes "" | make oldconfig
Como hacer para identificar que kernel contiene un diskette.
Para identificar que archivo hay en un diskette hacemos un 'md5sum' del
archivo y lo escribimos en la etiqueta del diskette, la cual puede
contener un texto como el que sigue
LINUX REDHAT 5.2 CLUSTER BOOT KERNEL
creation date: January 5, 2001
dd if=/dev/fd0 | md5sum:
cf20 f973 30a4 5d37 0097 682e 8be3 cdd6
Pero hay que tener cuidado porque al hacer un 'dd' del kernel al floppy,
como el kernel no ocupa todo el floopy puede quedar basura en el resto
del mismo. De manera que primero hacemos para el primer floppy
$ dd if=/dev/zero of=/dev/fd0 # llena el floppy con 0's
$ dd if=zImage.client of=/dev/fd0 # copia el kernel en el floppy
$ dd if=/dev/fd0 of=zImage.client.dsk # guarda una copia en zImage.client.dsk
# para los otros floppies
y para los siguientes:
$ dd if=zImage.client.dsk of=/dev/fd0
$ dd if=/dev/fd0 | md5sum
De esta forma el archivo `zImage.client.dsk' debe tener exactamente el
tama#o del floppy. Los comandos 'md5sum' deben dar todos iguales y esa
'signatura' debe incluirse en el etiqueta.
Mas adelante, cuando uno quiere verificar que un dado floppy contiene
exactamente el kernel que dice que contiene, entonces se puede verificar
con
$ dd if=/dev/fd0 | md5sum
y el numero que resulta debe coincidir con el de la etiqueta.
--
MarioStorti - 01 Sep 2001