Proyectos Propios

Cluster Avalon
Editor de Texturas para POV
Catalog para POV
Mpeg Maker
Cdda2MP3


Cluster Avalon

introducción

De momento este es el proyecto mas grande en el que me he metido en esto de Linux, consiste en un monton de
maquinas funcionando como si fueran una sola aumentando asi su potencia de calculo, se suele utilizar para aplicaciones cientificas cuya ejecucion en una sola maquina, por muy grande que sea, seria eternay para aplicaciones de render (povray por ejemplo) que es paro lo que me interesa a mi. Tambien es una forma de abaratar costes ya que una maquina grande suele ser cara y un conjunto equivalente de equipos funciomnando como cluster puede salir muchisimo mas barato como iremos viendo.
 

Materiales necesarios


Lo mas importante es un buen numero de equipos, pueden ser cualquier cosa que funcione y no sea inferior a un 386 con 4 Mb de ram, ni siquiera tienen que tener tarjeta grafica (si la placa base lo permite), ni teclado, ni pantalla e incluso ni dusco duro (arranque remoto).
Despues de los equipos  necesitaremos unas tarjetas de red (no son necesarias pero si recomendables), aunque podemos comunicar los equipos por puerto paralelo/serie, este sistema sera mas lento que con unas tarjetas de red, asi que en principio conseguiremos unas tarjetas de red ethernet normalitas de 10 Mb/s con esto se ria suficiente para empezar (el que tenga muchas pelas que se compre unas tarjetas Hippy de 1,5Gb/s pa cagase :))  ). Tambien necesitaremos cable coaxial ethernet fino, conectores BNC y varios conectores en T (suelen venir con las tarjetas de red).
En cuanto al software yo he utilizado Debian Linux 2.0 y Red Hat 5.2 como operativos y pvm 3.4Beta6 como software deprocesamiento en paralelo .
En concreto Avalon es un cluster de 5 equipos:
1.-AMD K6-2 350Mhz, 64Mb Ram, 4,3Gb HD
2-.Intel 486DX4 100Mhz (overclocking),  20Mb Ram, 540Mb HD
3-.Intel 486DX4 120Mhz (overclocking) 20Mb Ram,
4-.Intel 486SX 25Mhz, 8Mb Ram
5-.Cyrix 486DLC 40Mhz, 8Mb Ram(un 486 con patillaje de 386), 40Mb HD
6-.AMD 386DX 25Mhz, 4M Ram

Primeros pasos

Lo primero de todo es instalar Linux en los euipos que tengan  disco duro, con la instalacion base es mas que suficiente, no voy a entrar en detalles. Despues instalamos el pvm bien desde un paquete debia, red hat o slackware segun que estemos utilizando, una vez instalado pvm estara en /usr/lib/pvm3 y en /usr/pvm3.  Antes de poder ejecutarlo hay que añadir algunas bariables de entorno a nuestro sistema esta son:

 #directorio donde esta instalado pvm
export PVM_ROOT=/usr/lib/pvm3

#directorio donde esta el demonio  pvmd
export PVM_DPATH=$PVM_ROOT/lib/pvmd

#arquitectura del equipo
export PVM_ARCH=LINUX

estas bariables es recomendable añadirlas a nuestro .bash_profile (suponiendo que nuestro shell es el bash)o al  /etc/profile .
Ahora hay que configurar la red , lo primero de todo sera recompilar el kernel con soporte para nuestra tarjeta de red o compilar el modulo especifico para nuestra tarjeta de red y cargarlo. El mejor de los dos casos es recompilar el kernel con soporte para nuestra tarjeta de red una vez hecho el kernel al arrancar detectara la tarjeta y su confuguracion de IO Base y IRQ (al menos en las que yo tengo que son unas ISA compatibles NE2000 y Una PCI conpatible NE2000) si optamos por los modulos tendremos que cargar el modulo en el archivo /etc/conf.modules  especificando la confuguracion de la tarjeta. Tras configurar la tarjeta hay que configuarar la red para ello nos vamos a /etc/init.d/network en debian y añadimos una lineas:

ifconfig eth0 192.168.0.1 netmask 255.255.255.0
route add -net 182.128.0.0 netmask 255.255.255.0 dev eth0

donde eth0 es el dispositivo de red (sera eth0 siempre por defecto) 192.168.0.1 es la direccion ip que le daremos ala maquina (para cada maquina los 3 primeros digitos seran iguales y el ultimo diferente es decir 192.168.0.X) y 255.255.255.0 es la mascara de red.
Para red hat es mas sencillo basta con entrar en el entorno X-window y ejecutar el netcfg, una vez en el basta con añadir un interfaz nuevo con los datos de antes direccion Ip y mascara de red.
Ahora una vez tenemos la red configurada hacemos los cables de red para ello o bien los compramos hechos o con un engastador y un poco de maña nos los hacemos. Son sencillos de hacer, los conectores tienen tres elemento un nucleo de cobre (o almenos dorado) un pequeño tubo y el conector el si, el cable consta de cuatro capas  la cubierta externa de plastico, la maya aislante (sueleser de alumunio o cobre y es muy similar a la de los cables de television) una cubierta de plastico interna y un nucleo de cobre cubierto por esta capa de plastico (este nucleo aveces es una especie de cable de varios hilos en vez de un unico hilo), para hacer el cable basta con cortar la cubierta de plastico del cable coaxial aproximadamente 1,5 cm desde el borde insertamos en el cable  la arandela de metal del conector retirar la cubierta de plastico  y echar hacia atras la maya cortar la cubierta de plastico interna hacia 0,5 cm del borde (enrollar el nucleo si son varios hilis para que sea compacto) insertar el nucleo del  cable en el nucleo del conector, engastarlo conun engastador o la modalidad cutre es hechar una gota de estaño en el nucleo del conector calentar este e insertar el nucleo del cable, al secar el estaño impide que se suelten (esto es como se hacia hace años pero ahora hay herramientas que evitan el tener que soldar) se inserta el  cabel en el conector, se enrolla la maya en el conector y se cubre con el buto de metal, una vez engastado el conector estara hecho, se repite la misma operacion en el otro extremo del cable y cabel hecho. Para comprobar que el cable este bien hecho es recomandable utilizar un polimetro, poniendo este en medicion de resistencia, con las cdos barillas se toca el nucleo y el exterior de un conector la medicion en el polimetro ha de ser 1, luego lo mismo pero con el exterior de ambos conectores la medicion ha de ser 0 y por fin con el nucleo de anbos conectores  la medicion ha de ser 0, si todo esta asi el cable funcionara.
La red que bamos a montar tendra una disposicion fisica/logica en bus es decir que el medio de red sera continuo y unico para todos los equipos, esto se tarduce en que el primer equipo del bus tendra conectado un terminador en T a su tarjeta de red, a uno de sus extremos ira un terminador de 50 ohmnios y al otro el primer conector BNC de un cable de red, el otro conector BNC de ese cable de red ira a otro conector en T que estara conectada a la tarjeta de red de otro equipo, este conector en T tendra a su otro la do otro BNC de otro cable o un terminador de 50 ohmnios si es el equipo que termina el bus, osea:

----- cable de red
B conector BNC
T conector en T
* Terminador de 50 ohmnios
# Ordenador

            *TB----BTB----BTB----BTB----BT*
               #                  #                   #                  #                   #

Una vez tengamos hecho el cableado probaremos la red enviando paquetes entre dos maquinas por ejemplo entre la que estoy y 192.168.0.3 (suponiendo que la direccion ip de la maquina en la que estoy no sea esa) para ello utilizamos ping:
ping 192.168.0.3
Si todo esta bien configurado y el cable esta bien hecho nos dira que los paquetes esta llegando bien para parar el ping pulsamos CTRL+C.
Una vez hecho esto tendremos que añadir a nuestro fichero hosts todas las maquinas que tenemos para poder  acceder a ellas por su nombre y no pr su direccion ip (no es necesario pero si aconsejable) para ello modificamos el fichero /etc/hosts :

192.168.0.1    nexus11
192.168.0.2    avalon0
192.168.0.3    avalon1
192.168.0.4    avalon2
192.168.0.5    avalon3

El nombre de cada maquina esta especificado en el fichero /etc/hotsname .
Ahora necesitamos poder ejecutar un rsh (shell restringido) en la maquina remota asi que tenemos que modificar nuestro archovo $HOME/.rhosts o bien el /etc/hosts.equiv el primero solo modificaria la configuracion para el usuario el cuestion y la segunda lo haria para cualquiera (esto crea agujeros de seguridad no es recomandable hacerlo amenos que las maquinas no esten conectadas a ningun sitio):

nexus11
avalon0
avalon1
avalon2
avalon3

NOTA: en debian hay que modificar tambien el archivo hosts.allow y quitar la linea ALL: PARANOID que impide todo tipo de accesos de este tipo a la maquina.
Asi seria el fichero si hemos modificado el archivo hosts, sino en vez de los nombres irian las direcciones ip. Para comprobar que todo va bien es bueno probar si podemos habrir un shell remoto para ello:
rsh avalon0 dir
donde rsh es el shell remoto avalon0 la maquina y dir el comando para probar si todo esta bien veremos una lista de ficheros y directorios. Estos pasos hay que repetirlos en todos los equipos que tengan disco duro (el arranque remoto se trata mas adelante).

Una vez tenemos todo esto hecho podemos empezar a jugar con el procesamiento en paralelo para ello basta con ejecutar pvm y se arrancara la consola de pvm. Si ponemos help (? si esta puesto el alias) vemos los comandos que podemos utilizar, el primero de utilizaremos el add, este comando nos permite añadir maquinas que esten en la red:

add avalon0

añadiria la maquina avalon0 a nuestro cluster (si esta encendida y configurada). Otro comando util es stat que nos da las maquinas que estan funcionando en paralelo.
spawn: nos permite lanzar tareas para que se ejecuten en el cluster.
quit: termina la ejecucion de la consola de pvm, pero no la de pvmd que sigue con los trabajos que estubiera haciendo el cluster.
halt: termina la ejecucion de la consola y de pvmd termina todos los trabajos del cluster.
Los ejecutables de los programas que queramos arrancar en pvm an de estar en el directorio $PVM_ROOT/bin/$PVM_ARCH si estan en otro directorio no sera capaz de encontrarlos. Es de destacar que estos programas para que aprovechen el cluster han de estar echos con la API de pvm y compilados con aimk (prograa que trae el paquete pvm-dev).
esta es una imagen hecha con blender de como sera Avalon
avalon-foto
Aqui eta el fuente para blender
Plano de construccion en forato eps se puede ver e imprimir con el ghostview, GV, Gimp y cualquier otra utilidad que lea postscript encapsulados, aun no estan del todo terminados falta el plano de montaje con el ensamblaje de las piezas y la colocacion de ventiladores fuentes y demas historias.
 
 

Editor de texturas para POV

Aun esta en version Alpha pero ya es posible hacer pigmentos,normales,finish y texturas con el , de momento los almacena en un fichero llamado como el pigment,normal o textura colgando del directorio lib. Es muy sencillo de manejar y se puede ir viendo como nos queda nuestro trabajo. Ocupa unos 350Kb compilado (mas los 500 aprox de los fuentes imagenes y demas) como ademas de guardar las texturas, pigmentos  en formato POV guarda una muestra en XPM (esque aun no se manejar el GtkImage ,no he encontrado documentacion y con los fuentes casi me vuelvo tarumba) necesita 25Kb por textura.
Ya ta ya tiene soporte para media y interior pudiendo crearse efectos tipo fuego, halos, rayos,... para ello es necesaria la version 3.1 de POV. Tambien le he cambiado un poco la cara al programa.
Los pigmentos se guardan con extension pig, los normal con extension nor, las texturas con extension tex, los finish con extension fin  y los halos con extension hal (aun tampoco :)))

De momento aqui estan los fuentes 500Kb comprimidos con bz2 version 1.5b

Bugs muchos al gunos que se que hay son:
    - Algunos paterns no admiten ciertos maps

Los que escuentres me los mandas  que se agradece.
 
 

Catalog para POV

Se trata de un simple programa para crear ficheros pov con los que poder ver el resultado de una textura, apartir de el fichero biblioteca que contiene las texturas, osea que tengo un fichero con 30 texturas y no se como son llamo a catalog:
catalog libreris.inc Render.sh
y lo que me hace es buscar las texturas declaradas en libreria.inc y crear por cada textura un fichero con su nonbre en el que se e renderizara algo como esto
 
 

rayos

para renderizarlas basta con ejecutar el guion que especificamos Render.sh para que renderize todos los archovos de textura, luego con miff podemos catalogar todas esta imagenes en un solo por inicial:
miff  png texturas
esto generaria los ficheros texturas_A.miff, texturas_B.miff... donde las texturas esta ordenadas alfabeticamente en pagunas en las que podemos ver varias texturas a la vez y cada una en detalle (necesitamos image magick)
Este programilla nace de la necesidad de Catalogar las texturas creadas con Editor de Texturas y esta basada en el texture view y similares, pronto terminara siendo algo similar, ahora conjuntamente con imagemagik es bastante mejor que el texture view para windows (lo digo por propia experiencia despues de pegarme un par de horas con el para poder ver la mitad de las texturaas que tenia por casa, mas de 2500 (texture lib en http:// www.povray.org ) ya que no dispone de una herramienta para renderizar todos los previews de golpe y verlos, hay que ir cliqueando de uno en uno o intentar utilizar un catalogador que falla bastante y no se sabe donde nos manda las imagenes.
 catalog_1.0b.tar.bz2
 
 

Mpeg Maker

Nace dela necesidad de hacer un monton de pruebas antes de que una animacion quede terminada, y por tanto de un monton de repeticiones de los mismos comandos una y otra vez, asi que cansado de escribir, me hize vago, o vago a medias, y me hice unos guiones shell muy potitos y utiles para el encoder de mpeg de la universidad de berkeley (muy util por cierto podeis bajarlo de linuxberg)el caso es que funciona asi, lo primero de todo hago las imagenes,  luego simplemente llamamos a :
dvd_enc -w ANCHO -H ALTO -FR CUADROS_POR_SEG -p PATRON_IMAGENES -n NOMBRE_SALIDA
ejemplo:
    dvd_enc -w 360 -h 288 -fr 2 -f 100 -p cuadro0 -n animacion
lo que hara sera convertir  los 100  (-f 100) primeros cuadro0* del directorio a YUV,  y llamara a mpeg2encoder que creara un fichero llamado animacion.m2v (-n animacion) que es  el resultado final en MPEG-2, si añadirramos la opcion -mpeg1 crearia un animacion.mpg en MPEG-1. Estor tendrian una velocidad de 24 cuadros por segundo (-fr 2). Las opciones -w -h dan el ancho y alto de las imagenes.
mpeg_kit1.1.1-bin.tar.bz2 Kit con todo conpilado para glibc2(no incluye xmovie)
mpeg_kit1.1.1.tar.bz2 solo el script y la documentacion
conpresor de la Universidad de berkley
Xmovie un reproductor de ficheros Quicktimes y MPEG-2
 

Cdda2MP3

Estaba yo pasando CDs a mp3 y me resultaba engorroso el tener que hacer un monton de comandos para pasar el cd a mp3, y encima tener que estar pendiente de el ordenata un par de  horas para pasar los wav a mp3, ademas tener en el disco 600 Mb para pasarlo entero y otros 60Mb para los mp3; total un desastre asi que me hice un bonito script cdda2mp3 que usa cdda2wav para leer las pistas y pasarlas a wav y bladeenc para conprimir los wav a mp3. Cdda2wav viene con casi todas las distrivuciones y bladeenc lo podeis bajar de aqui.
Mp3_kit0.1.1b.tar.bz2 script+cdda2wav+bladeenc
bladeenc conpresor de mp3
 
 

[email protected]