martes, agosto 07, 2007

Progresos con la fonera

Grandes y buenas noticias sobre la fonera, ya he conseguido que el tftp "funcione" y el dhcp también va bien. Ya solo me queda preparar los ficheros del pxe y estará todo listo. Voy a contaros todo con detalle, empezaré con el tftp:

El tftp es lo primero que he conseguido hacer funcionar, aunque me ha dado algún que otro problema, finalmente ha funcionado lo necesario. En mi fichero de configuración dnsmasq.conf, las líneas relativas al tftp son estas:

enable-tftp
tftp-root=/mnt/tftp

Lo que viene a decir simplemente que el servidor tftp esta activado y su directorio raíz es /mnt/tftp. Ah, bueno antes de continuar decir que aquel error que me daba dnsmasq al ejecutarlo:

dnsmasq: failed to create listening socket: Address already in use

Era debido a que dnsmasq se ejecuta al inicio del sistema, y al ya estar ejecutándose me daba error. Me di cuenta porque ejecute top para ver que hacía mi fonera y vi el proceso, así que ahora simplemente cuando quiero probar los efectos de alguna configuración simplemente mato el proceso y vuelvo a iniciarlo.

Tras ese breve paréntesis sigo con el tftp, realmente yo desde el principio tuve esa configuración en mi tftp, y podía conectarme, pero cada vez que quería enviar/recibir un archivo me daba error, os describo la situación, me conecto por tftp a la fonera e intento copiarme el fichero test (situado lógicamente en /mnt/tftp), que no es mas que un archivo de texto plano, también recibo el error si intento enviar un archivo (test2, también texto plano). Os pego la sesión:

$ tftp fonera
tftp> get test
Error code 4: unsupported request from 192.168.0.11
tftp> put test2
Error code 4: unsupported request from 192.168.0.11
tftp>

Investigando un poco en google y tras rastrear en la lista de correo de dnsmasq, bueno realmente me baje todos los logs (archivos de texto comprimidos), y busqué con grep, no encontré nada. Siguiente paso, rastrear en google, y tras buscar y buscar encontre una lista de errores de tftp (no tengo el link) y decía que para solucionar mi problema tenía que ponerlo en binary mode (hay dos, binary, y ascii), así que nada me voy al terminal ejecuto man tftp y veo que para ponerlo en binary mode simplemente tengo que poner "binary". Lo hice y funcionó, bueno parcialmente:

$ tftp fonera
tftp> binary
tftp> get test
Received 34 bytes in 0.0 seconds
tftp> put wep.txt
Error code 4: unsupported request from 192.168.0.11
tftp>

Recibo pero no envío. La verdad es que no es un problema que me moleste especialmente porque la verdad no necesito enviar archivos por tftp, para el arranque vía red solo necesito enviar archivos así que a no ser que mas adelante me ocasione algún problema serio (vamos que no me funcione nada) no me molestaré en arreglarlo. Pues lo dicho, lo que necesito del tftp ya lo tengo, así que ya me puse con el dhcp.

El dhcp, antes las líneas que tenía sobre el dhcp eran estas:

dhcp-authoritative
dhcp-leasefile=/tmp/dhcp.leases
dhcp-range=vlan0,192.168.0.20,192.168.0.50,255.255.255.0

La primera línea según el debe usarse cuando dnsmasq es el único servidor dhcp de la red y en mi caso, cuando vaya usarlo será así, ya que en la red a la que esto está destinado es mi fonera y un portátil, conectados por ethernet. La segunda simplemente es para que guarde un log de las ips asignadas. La última línea indica el rango de ips a usar. Para hacer la prueba lo que hice fue conectar la fonera a la segunda tarjeta de red de mi servidor (eth1) e intenté que se le asignara una ip con dhcp, utilizando dhclient: dhclient eth1, sin resultados útiles, no se le asigno ip. El servidor dhcp no funcionaba, probé con otros rangos de ips, con el mismo de la fonera... pero nada. Sin embargo, hoy al releer estas líneas que vienen por defecto en el archivo de configuración de dnsmasq decidí que si probara a usarlas a lo mejor funcionaba:

# other useful options:
# default route(s): dhcp-option=3,192.168.1.1,192.168.1.2
# dns server(s): dhcp-option=6,192.168.1.1,192.168.1.2

Otras opciones útiles, y una es para configurar la dirección del router y otra para configurar la dirección del dns. Activé las opciones y en ambas puse la dirección de la propia fonerame quedó así:

dhcp-option=3,192.168.0.5
dhcp-option=6,192.168.0.5

Y nada después de añadir esas opciones volví a probarlo y... funcionó!! si, funcionó! la conecté al server, dhclient eth1... y 192.168.0.28!! configuró perfectamente mi tarjeta de red. Otro objetivo conseguido.

Bien ya tengo todo lo necesario para el netboot, bueno todo no, me falta preparar los ficheros clave, los que se ejecutaran en el portátil del centro tic y lo dejaran si contraseña. A ver este tema no lo domino mucho, vamos de hecho pienso aprenderlo especialmente para la ocasión, cuando se me ocurrió la idea realmente no tenía ni idea de como llevarla a cabo, sin embargo me puse a investigar el tema y vi lo del servidor dhcp, el tftp y mas o menos los archivos necesarios, pero esa parte no la he visto todavía del todo clara. Me he descargado el paquete netboot.tar.gz de ubuntu (dapper), que contiene los archivos necesarios para hacerlo con ubuntu , yo los adaptaré para que arranquen con mi kernel y mi initrd... en fin para que me sirvan, porque no pienso instalar ubuntu un laptop (a parte no cabe en la fonera). Ah, bueno, también me falta otra cosa a parte de preparar los archivos, se trata de configurar dnsmasq en la parte que le toca este tema, se hace con la línea:

#dhcp-boot=vlan0

Pero como podéis ver no esta terminada la línea (por eso está comentada), pero no la voy a configurar hasta no tener todos los archivos puestos en su sitio.

Bueno os cuento, el archivo netboot.tar.gz que me baje de ubuntu, contiene un par de enlaces simbólicos (a archivos de la carpeta) y una carpeta. La carpeta, ubuntu-installer, tiene i386/ y luego por fin vemos:

boot-screens/
initrd.gz
linux
pxelinux.0
pxelinux.cfg/
pxelinux.cfg.serial-9600/

La primera carpeta contiene los respectivos archivos de texto que te muestran las opciones, cuando vas pulsando f1, f2, f3... explica diferentes opciones que se pueden usar... vamos aparentemente nada útil. Son instrucciones de uso para el que vaya a bootear de esta forma, no para quien quiera hacer su propia versión del tema. Luego tenemos el initrd (initrd.gz) y el kernel (linux), después el archivo clave del netboot, me parece que es el que se tiene que enviar y por tanto configurar el dhcp para ello. Y por último dentro de los dos directorios hay un par de archivos, ambos default, y contienen la configuración de arranque (del kernel) y demás. Hombre no voy a pegar aquí el archivo entero, pero leerlo es un buen ejercicio para comprender como funciona el tema. Yo creo que con eso acompañado con los scripts del cga (y lo que hay en guadalinex) tengo bastante para estudiar bien el tema. Yo he mirado poco, pero el que mas me ha gustado ha sido el de guadalinex 2004, entre el kernel y el initrd son unos 2.5 mb (la mitad de los 5 que tengo). El de ubuntu son mas de 6 o 7 y guadalinex v3 también. Así que lo intentaré con la 2004.

Pero claro ahora queda un aspecto muy importante, donde meto mi script. Tiene que ser un script que se arranque con el kernel, una cosa muy básica que se haga lo mas pronto posible durante el arranque. Simplemente se trata de detectar la partición /, montarla, backup de /etc/shadow, y luego editar la línea de root y quitarle el password, desmontar y se para el arranque, rebooteo, o simplemente halt. El script aún no lo he preparado, mañana lo haré. La parte que queda es donde meter el script. Al principio no tenía idea de donde hacerlo, recordé que yo había arrancado ese kernel con ese initrd en vmware y se me paro en una parte determinada, cuando intentaba conectarse mediante rsync a cierta inexistente en mi red virtual de vmware, por lo que se paraba. Así que monté el initrd (tras descomprimirlo) en /mnt (hablo de mi server, no de la fonera):

gzip -dc initrd.204 > initrd204.img
mount initrd204.img -o loop /mnt

Así que mediante grep busque la cadena rsync en todos los ficheros en /mnt (ergo en initrd.204), y os pondría el resultado pero con la poca anchura de la plantilla de mi blog, el resultado sería bastante malo, así que os lo cuento yo, había varias coincidencias, el propio rsync, en /etc/services, en /etc/init.d/rcS se le menciona en una línea, y en /etc/functions están los comandos completos que se ejecutan. Por lo que deduzco que principalmente es en este ultimo archivo, de hecho he comprobado que ahí están la mayoría de todos los scripts de inicio (por no decir todos), y el archivo /etc/init.d/rcS tengo que examinarlo y averiguar que tiene. Realmente mañana voy a averiguar para que sirven exactamente esos dos archivos, también voy a preparar el script, y lo situaré en la parte óptima de fichero (me interesa lo antes posible para que sea una cosa muy rápida).

Y nada mas, eso son mis progresos, ya os seguiré contando mis avances según vayan teniendo lugar. Y perdón por estos post tan largos, pero prefiero hacer algunas cosas y luego contarlas a hacer una cosa y escribir un post de 4 líneas e incompleto para actualizarlo constantemente cada 5 minutos rompiendo mi ritmo de trabajo constantemente, para eso twitter (que yo no lo uso :D).