Mostrando entradas con la etiqueta server. Mostrar todas las entradas
Mostrando entradas con la etiqueta server. Mostrar todas las entradas

miércoles, agosto 22, 2007

El libro y mas fonera

El libro me acaba de llegar ahora mismo, luego empezaré a leerlo, pero conociendo la primera parte y habiendo hojeado éste, creo que ha sido una buena compra. Una foto:


Al margen de ese tema que ya no hay mucho mas que comentar, voy a hablaros sobre como va la fonera. Ya sabéis en que consiste el proyecto actual, ponerla en modo cliente, etc. todavía no he pensado exactamente que va a hacer la fonera, solo tengo en mente dos o tres herramientas, pero vamos que eso se piensa en un momento, luego quedaría hacer el script y probarlo, no puedo llegar al instituto a ciegas, sin haber probado el script. Por ello necesito crear un entorno que se asemeje un mínimo a lo que hay en el centro tic, para el tema de la red inalámbrica usaré mi segundo router, porque el que esta uso prefiero no tocarle la configuración, me ahorro trabajo cogiendo el otro, así ademas el portátil podrá seguir conectándose a mi red tan tranquilo mientras duren las pruebas. Y por otro lado mi servidor hará de... servidor xD La idea que tuve el otro día de que la fonera se conecte a mi cuenta en el servidor y utilice mi espacio nfs me ha gustado, y pienso montarlo, para conseguirlo estoy intentando que en mi server funcione el nfs (conseguido) y ahora estoy leyendo la documentación de LDAP, para tener ese sistema de usuarios remoto, por llamarlo de alguna manera, para crear un usuario desde el cual accederá la fonera y utilizará el espacio nfs asignado.

El LDAP como es lógico no puedo todavía contaros como se instala, configura, etc. porque no lo he hecho, sin embargo si que lo he hecho con el nfs, así que como de costumbre voy a contaros como lo he hecho.

En el servidor necesitamos instalar el servicio, yo solo instalé mediante apt el paquete nfs-kernel-server:

# apt-get install nfs-kernel-server

Ahora solo queda configurarlo, lo imprescindible es el archivo /etc/exports, donde configuraremos el directorio que se podrá montar remotamente, quien podrá hacerlo, que privilegios tiene... Ademas también, para ganar en seguridad, se pueden editar los ficheros /etc/hosts.allow y /etc/hosts.deny. Yo solo me he limitado al /etc/exports, esto es lo que he puesto en él:

/media/home 192.168.0.0/255.255.255.0(rw)

Lo primero es el directorio que quiero que se pueda montar desde otros pc, después he puesto que cualquier ip del rango 192.168.0.1-255 pueda hacerlo, y por último que se pueda leer y escribir. También le cambie los permisos a dicho directorio, porque al principio no podía escribir en el, desde mi laptop. Al final le di 777 al directorio y ya funcionaba bien. (una configuración mas restrictiva también lo hubiera hecho seguramente, pero yo le puse esa):

# chmod 777 /media/home

Con eso el servidor ya está listo, ahora solo nos queda configurar el cliente. Yo por ahora solo he configurado mi laptop con ubuntu, la fonera no la preparado todavía. En ubuntu por defecto no he podido montarlo, he instalado el paquete nfs-common y ya funcionó todo:

# apt-get install nfs-common

Y después ya lo pude montar:

# mount debian:/media/home /mnt
Donde debian es el nombre del servidor o su ip, lo siguiente es el directorio remoto y el local donde lo montaremos. Hasta ahora es lo que he hecho, si queréis mas detalles sobre como configurar el nfs os dejo estos dos links:

http://nfs.sourceforge.net/nfs-howto/
http://bulma.net/body.phtml?nIdNoticia=1255

Mis siguientes pasos serán conseguir que la fonera pueda montar utilizar nfs, preferiblemente sin tener que compilar un kernel. Y también configurar el ldap en mi server. Os seguiré contando...

sábado, junio 30, 2007

Fonera en mi servidor

Finalmente he hecho en el script las modificaciones necesarias y a ojos de fon soy usuario activo aunque desconecte mi fonera. Los cambios precisos solo eran ponerle los datos de tu fonera al principio del script:

WLMAC="$(nvram get ath0_hwaddr )" #the WLAN mac-adress
MAC="$(nvram get et0macaddr)" #the WAN mac-adress
FONREV=2
FIRMWARE=0.7.1
FONKEY=/tmp/simthefon/key #the path to the fon-public-key

Solo he cambiado esas tres líneas, poniendo las MACs adecuadas, la versión del firmware de mi fonera, y la ruta a la clave. Después lo he ejecutado y listo, ya esta funcionando, se ha descargado una actualización y ahora está esperando 7175 segundos para seguir el bucle y volver a ejecutar exec_standard_mode.

Realmente iba a modificar otra cosa, iba a eliminar el cron mode, porque yo solo voy a ejecutarlo mediante el bucle y sleep, pero bueno al final no lo he borrado.

Ya solo queda esperar unos días a ver si mi fonera aparece como activa en los mapas de fon.

Por último decir que tengo pensado flashear la fonera y ponerle un linux algo mas versátil, no me he decidido aun entre openwrt o ddwrt, veré las ventajas de cada uno y ya decidiré.

PD: Que conste que yo tenía intención de investigarlo todo por mi cuenta y hacer mi propio programa, pero si ya existe este script hecho para dd-wrt simplemente tenía que adaptarlo a mi server, así que...

Analizando el funcionamiento de la fonera

He estado mirando el script que comente en el post anterior y la cosa se va aclarando poco a poco. Según pone en las instrucciones de ese script, es válido para aparecer como activo en maps.fon.com, y obviamente para hacer creer a fon que la fonera es activa, porque en el mapa solo a aparecen las que están activas (por cierto, según acabo de comprobar mi fonspot no aparece en el mapa, a pesar de que funciona perfectamente...).

Bueno el caso es que yo quiero hacer las modificaciones necesarias a ese script para poder ejecutarlo en mi server y que funcione, pudiendo yo hacer lo que quiera con mi fonera y seguir siendo fonero. Y prefiero tener el script en el server para tener la fonera para lo que sea y que el script siga funcionando aunque yo haga experimentos raros con la fonera.

El script básicamente se conecta fon en busca de actualizaciones, según parece aquel que haga esto (enviando unos datos válidos) aparecerá como fonero activo. Esa es la esencia del script, luego hace algunas cosillas mas en función de lo que reciba de fon, y además se autoejecuta cada cierto tiempo, mediante cron o bien mediante un bucle y el comando sleep con un tiempo de espera aleatorio. Supongo que en la fonera lo que pasa realmente es que al arrancar se envía unos datos (modo start, ahora veremos esto) y luego ya mediante cron se envían otros datos (modo cron) para seguir dando señales de vida y comprobar actualizaciones.

Esto es lo primero que se ejecuta, sería el equivalente a lo que envía la fonera en el arranque:

echo "mode='start' wlmac='$WLMAC' mac='$MAC' fonrev='$FONREV' firmware='$FIRMWARE' chillver='$CHILLVER' thclver='$THCLVER' device='$DEVICE'" | dbclient -T -p 1937 -i $FONKEY openwrt@download.fon.com > startscript

El script se encarga de averiguar algunas de esas variables antes de ejecutar este comando y otras vienen ya preconfiguradas con unos valores predeterminados, yo como lo voy a usar en mi servidor no se van a obtener algunos datos, la mac por ejemplo, así que yo voy a asignarle unos valores a cada una de ellas acordes con mi fonera. Por ejemplo, donde averigua la MAC, yo directamente voy a sustituirlo por la mac de mi fonera.

Seguimos, la línea que he puesto antes envía todos esos datos por ssh a fon (hace un echo y se lo pasa al cliente ssh usando pipes (el símbolo "|" ). Ahí se ve claramente que es el puerto 1937 del servidor download.fon.com con usuario openwrt y usa el archivo key como clave (se puede descargar de la misma web que el script, o si tenéis fonera podéis tomarlo directamente de ella). La respuesta recibida por parte de fon se redirecciona al archivo startscript.

Según los datos que envíes fon te responderá una cosa u otra, esta es una posible respuesta:

cd /tmp
wget http://download.fon.com/firmware/update/0.7.1/2/upgrade.fon
/bin/fonverify /etc/public_fon_rsa_key.der /tmp/upgrade.fon

rm -f /tmp/.thinclient.sh

exit

La respuesta de fon (y lo que hacemos con ella) la analizaremos después. Ahora sigamos con el script, después ejecuta la función exec_every_mode. Lo primero que hace es volver a conectarse a fon, pero en esta ocasión envía menos datos, supongo que será debido a que ya se ha "identificado" antes y fon recuerda aquellos datos. Exactamente esto es lo que hace ahora:

echo "mode='cron' wlmac='$WLMAC' mac='$MAC' fonrev='$FONREV' firmware='$FIRMWARE'" | dbclient -T -p 1937 -i $FONKEY openwrt@download.fon.com > newscript

Envía de la misma forma que antes los datos y la respuesta de fon va al fichero newscript, que al menos por ahora es idéntico a startscript, ya que aun no se ha ejecutado nada que tenga modifique ninguna de las variables.

A continuación descarga el archivo de actualización que fon dijo en su respuesta. Hecho esto viene una parte en la que se descomprime el archivo .fon, tras ir haciendo varias operaciones bit a bit mediante dd. Esta parte no da mas de si, si os interesan los por menores del algoritmo miraros esa parte del script.

Después para hacer creer a fon que nos hemos actualizado realmente se cambian las variables FONREV y FIRMWARE, según ponga en el firmware de fon que acaba de ser descomprimido:

FONREV=$(cat fon-firmware/etc/fon_revision)
FIRMWARE=$(cat fon-firmware/etc/fon_version)

Lo siguiente que nos encontramos son dos funciones, exec_cron_mode y exec_standard_mode, que se ejecuta una u otra según se use cron o sleep para continuar la ejecución periódica del script. La primera de ellas simplemente llama a la función exec_standard_mode, que es la base del script, la otra función, tiene un bucle, llama la función exec_standard_mode, después calcula un número aleatorio (n) y luego mediante sleep hace que la ejecución del resto de la función sea n segundos después de ejecutada la función. Después empieza el bucle de nuevo, llama la función, espera y vuelve a iniciar el bucle.

Finalmente hace uso de case para elegir entre la función exec_cron_mode o la función exec_standard_mode. En mi caso será mediante sleep, voy a hacerle unos arreglos al script y funcionara perfectamente en mi server.

Por último decir que esto tiene toda la lógica del mundo, porque mi fonera esta modificada para no ejecutar las cosas que la mande fon, y efectivamente no aparece en los mapas, este script si que "ejecuta" lo que fon manda y en sucesivos envíos, fon comprobará que "la fonera" esta siendo actualizada y que funciona perfectamente. Voy a modificar el script y cuando lo tenga listo lo publico y os comento los cambios que le haya hecho.

domingo, junio 24, 2007

Ya funciona el servidor

Esta mañana, después de haber estado leyendo feeds con google reader, he pensado que ya iba siendo hora de arreglar el servidor, así que me puse manos a la obra. Como no tenía sistema operativo arranqué con el cd de instalación de Debian Etch, no funcionaba, también probé con otro cd de Debian Sarge, y otro de Debian Etch de cuando todavía era intestable, también Ubuntu Feisty y Ubuntu Dapper. No pude instalar ninguno. Me salían siempre los mismos errores, alternándose de cuando en cuando y a cuento de algo que no he podido averiguar, este es uno de ellos:

invalid compressed format (err=1)

-System halted

Este otro:

crc error

-System halted

Y este otro:

out of memory

-System halted

Y alguna vez salía un kernel panic:

<0>Kernel panic - not syncing: Attemted to kill the idle task!

Probé también diversas opciones de arranque apm=off acpi=off ide=nodma noapic nolapic. No sirvió para nada, luego googleé crc error y out of memory, en varios sitios leí que era un fallo del hardware, pero no especificaba nada mas, en principio de interpretaría como fallo de la memoria ram, pero tal vez se refiriera a los discos duros, además en su día hice un memtest y no me dio ningún error o al menos yo no lo vi o no supe identificarlo.

Yo ya no sabía que hacer, probé cambiando configuraciones, desconectando el nuevo disco duro, desconectando la tarjeta controladora, poniendo la misma configuración que la última vez que funcionó (discos de 5gb y 6gb sin el nuevo y sin controladora pci)... todo lo que se os ocurra ninguna fue efectiva. La última que le puse fue el disco duro de 4gb (el que tenía debian instalada) y con controladora pci y nuevo hd conectado a ella.

Además intenté ver si reseteando la BIOS (quitándole la pila) funcionaría, pero no, tampoco.

En vista de que no funcionaba pensé que a lo mejor fallaban los discos duros, tanto el de 4gb, como el de 6gb y el de 320 gb (era casi imposible que fallaran los tres discos duros, pero por comprobarlo no perdía nada.

Para comprobar el correcto funcionamiento de los discos duros cogí uno externo usb que tengo de 250 gb, con intención de abrirlo y cambiar el disco de 250gb por los de 4gb, 6gb y 320gb, para ver uno por uno que funcionaban bien. Este era el material para la operación:



Cogí el disco usb y lo abrí, quitando tornillo:



Unas tapas que tiene a cada lado:



Retiro la tapa metálica que lo cubre entero:



Luego esa chapa metálica que se ve en la foto cubriendo el circuito que lo hace funcionar:



Desconectó el hd que tiene enchufado:



Tuve que hacer una fuerza impresionante para desenchufar el cable de la corriente eléctrica, no sabéis lo duro que estaba, incluso llegué a pensar que estaba con pegamento, pero al fin y tras dejarme los dedos dando tirones lo conseguí:



Conecto el hd de 4gb, el que tiene debian instalada, lo enchufo al portátil y encendemos el aparato:



Este primer disco duro funcionaba perfectamente, pero pensé y le hice algunos cambios, en el archivo menu.lst borre una entrada correspondiente al nuevo kernel, puesto que a lo mejor funcionaba bien con el antiguo. También cuando ejecute un ls -la / vi cuatro archivos muy curiosos: vmlinuz, vmlinuz.old, initrd.img e initrd.img.old. Hice backups de los cuatro y luego sustituí los .old por los normales, quizás con los antiguos funcionara bien. Ademas de eso reinstale grub, porque simplemente grub no arrancaba cuando el ordenador arrancaba desde este disco duro.

Probé el de 6gb, iba bien, y también probé el de 320gb, también funciona perfectamente. Monto el ordenador con el de 4gb y arranco a ver si funcionaba... nop, daba el mismo kernel panic que puse mas arriba, por lo menos el algo, antes el kernel del hd no arrancaba, supongo que en alguna instalación fallida se borraría el grub y ahora al haberlo reinstalado si iba bien. Bueno, yo ya no sabía que hacer, lo que se me ocurrió fue probar quitando mas componentes a ver si había alguno defectuoso, porque las búsquedas en google eran infructuosas. Lo primero que hice fue quitar un módulo de memoria RAM, enciendo... y funciona!!! arrancó el sistema y me ofreció la pantalla de login!! bueno tras el subidón, apagué, y volví a conectar ese módulo, pero en otro zócalo, lo hago, enciendo nuevamente y funcionaba! probé cambiando el otro módulo al zócalo libre que había dejado el otro módulo para comprobar si ese zócalo funcionaba o no. Lo hice y arrancó de nuevo, volví a ver la tan esperada pantalla de login.

Ya había conseguido que el servidor hiciera algo, pero me quedaba poner la controladora pci y el nuevo hd, así que lo conecto todo y booteo... funcionaba!! ya iba todo bien y el disco duro lo reconoce perfectamente y va a las mil maravillas. Al final va a ser que ese módulo estaba mal pinchado en la placa.

Pues me alegro de que por fin haya funcionado y ademas con el mismo sistema operativo de siempre, no he tenido que reinstalar. Bueno ya esta listo para nuevos experimentos :D

domingo, junio 17, 2007

Memtest

Llevo desde las dos haciendo un memtest al server y no ha dado ningún error, lo he dejado tanto tiempo porque yo pensaba que en algún momento se pararía, pero no, por lo visto acaba y vuelve a empezar, y eso acaba de hacerlo delante de mí, por lo que creo que ya tiene que llevar algunas vueltas. Bueno el caso es que no me ha dado ningún error, la memoria está perfectamente. Así que esto me coge por banda, no se que puede fallar, tendré que seguir googleando, aunque también estoy valorando la opción de "externalizar" los discos duros y particionarlos e instalarles el sistema operativo desde otro ordenador y luego volver a conectarlos a server.

No sé lo que le puede pasar al server, por lo pronto tengo otra duda, no se si el memtest hay alguna forma de pararlo o simplemente hay que reiniciar a lo bestia dejando pulsado el botón del ordenador? creo que optaré por esta última opción.

Ya os contaré lo se me ocurra para intentar arreglar el server.