martes, 19 de agosto de 2008

Aprovechando el conocimiento: pxelinux

Si, ya se que este blog podría pasar a ser una sucursal de BootLand, o llamarse "los mil y un modos de arrancar una PC", pero bueno; supongo que los que son técnicos acordarán conmigo con que no hay peor máquina que la que no quiere arrancar, así que siempre está bueno tener una posibilidad más. Y aprovechando lo que jugamos con syslinux, ahora toca un pequeño tutorial acerca de cómo arrancar una máquina a través de la red.

Un pequeño backround: hasta donde pude ver, las placas de red que son capaces de bootear via pxe tienen un cliente DHCP para configurarse automágicamente una dirección IP, y un cliente TFTP (trivial file tranfer protocol, creo) para sacar del servidor los archivos necesarios para arrancar. Es decir que precisamos un servidor DHCP y uno TFTP como mínimo en nuestra máquina server. Por suerte, el amigo Philip Jounin puso ambas cosas en un programita mágico: Tftpd32.

Y ahora el tuto:

Primero que nada necesitamos dos máquinas en red: una debe ser capaz de arrancar via PXE, y la otra sólo necesita tener configurada una IP en la interfaz que vayamos a usar.
Después tenemos que bajarnos dos cosas: el paquete de syslinux y el Tftpd32, y tener a mano una imágen de diskette para terminar de probar. Si además ésta imágen es el bart´s network boot disk, mejor.
Tercero: extraemos el tftpd32.exe y el archivo pxelinux.0 del paquete de syslinux en la carpeta /boot del pendrive (y además nos queda portátil) , creamos ahi mismo una carpeta /pxelinux.cfg y ponemos adentro de esa carpeta una copia del syslinux.cfg, renombrada como el primer numero de la dirección IP de la red, pasado a hexadecimal. Aclaro cómo:
-Si nuestra máquina servidor tiene la IP 10.0.0.1, y asignamos por DHCP el 10.0.0.2 son válidos los nombres 0, 0A, 0A0 y asi hasta 0A000002.
-Si tenemos 192.168.1.1 y asignamos 192.168.1.2 son validos C, C0, C0A, C0A8 y hasta C0A80102. En la página de pxelinux lo explican bien, asi que no me voy a extender; solo voy a decir que prefiero usar C o C0 para no pifiarle. Si tienen una dirección más rara, pueden usar la calculadora de windows, que en modo cientifica puede hacer la conversión.
Cuarto: arrancamos el Tftpd32 y lo configuramos como sigue:

  • En Settings, apuntamos como root el directorio donde tenemos el pxelinux.0, activamos la compatibilidad PXE y activamos el server DHCP y el TFTP.



  • En la pestaña DHCP Server colocamos la dirección de inicio de la asignación (dentro del rango de la del servidor, sirve poner la siguiente o una al azar por arriba de la del server) , y seteamos la mascara en 255.255.255.0. Podemos poner el la cantidad de IP asignadas en 1 o más, y si queremos colocamos la ip del servidor como DNS y default router. Además le indicamos el nombre del archivo de inicio, en este caso pxelinux.0



Y listo. Ahora sólo tenemos que bootear nuestro cliente, elegir el arranque por red y ver cómo negocia la dirección, baja el pxelinux.0 y carga el menú. En la captura se ve ese trabajo.



(Nota: si copiamos el syslinux.cfg del slax, hay que tener en cuenta que éste carga el archivo vesamenu.c32. Para que funcione debemos poner este archivo en el mismo directorio que el pxelinux.0)

Y ahora un lujo: si ponemos en la carpeta raíz del TFTP el disco de arranque de bart con soporte para red, y compartimos una carpeta en la máquina servidor, podemos cargar el disco con memdisk (kernel memdisk, initrd=net.ima), conectarnos a la carpeta compartida y desde ahi correr lo que queramos. Horas de diversión asegurada!

21 comentarios:

CoskiBukowski dijo...

Que quilombo hermano

Yo te digo la verdad, si una maquina no me bootea con floppy, cd o pendrive, directamente le digo al dueño que no anda xD
o le paso la dire de este blog así te contacta a vos :P

Saludos!

[486] dijo...

Gracias coski!
Igual pregunto: es un kilombo o me complico yo para hacer el howto?
Porque parece más fácil que hacer un xp booteable por usb... y para mi más divertido, pero viene bien algo de feedback.

ReiRok dijo...

Muy bueno Mauro.
Sera que a mi estas cosas me gustan mucho.
Para agregar, los que quieran probar con una sola maquina, esto lo pueden hacer con una maquina virtual, o sea como server la maquina host,y hacer una maquina virtual y bootear con esta por red.
Todo esto, es muy util cuando tenemos una red con varias maquinas.
Si les intereza, te mando un par de cosas como agregar el Hiren y cargarlo por red, o algunas otras cosas como agregar un par de modificaciones y montar un servidor RIS para instalaciones de Win.
Saludos ReiRok.

CoskiBukowski dijo...

Bah, en realidad ni una ni la otra :P
O sea, es algo que requiere cierta practica, yo nunca butié por red y por eso los pasos son, digamos, compliquetti..
pero si uno ya hizo algo parecido, o con el tuto se pone y le agarra la mano, seguro lo haces en 2 pedos.
Para tu tranquilidad, el jautú esta fenómeno.
Ni hablar que si alguna vez tengo que hacer un buteo asi, vengo corriendo para aca!

Saludos

Marcos dijo...

La verdad, yo mientras leia el post, pense que si no arranca con diskete, cd o pendrive. listo, no anda. conecto con el cable IDE/SATA to USB a mi maquina saco datos y sistema nuevo, no se si estoy errando, pero si esta imposible de arrancar es porque algo importante tiene . por favor corrijanme si estoy muy equivocado pero cuando veo que la mano viene muy complicada, prefiero el sistema nuevo, porque para reparar lo dañado, lleva tiempo y siempre podria fallar y creo que al final nunca cobras verdaderamente el tiempo que invertiste en la maquina. en cambio sacas datos, pones sistema nuevo, cobras bien y tenes la certeza que todo quedó ok y encima el cliente contento porque la maquina quedo hecha un avioncito. (escucho criticas y/o sujerencias)

[486] dijo...

ReiRok: fue por un comentario anterior tuyo que me puse a ver lo de PXE, y si, es bienvenido cualquier aporte. Me interesa lo del hirens (y supongo que a todos por acá), y lo del servidor RIS... la verdad es que no se ni de que se trata, pero si quiere iluminarnos...
Marcos: siempre se puede sacar el disco y formatearlo en nuestra máquina, pero dónde queda la diversión. El tiempo invertido es relativo: cuando la máquina es urgente, más vale ir a lo seguro; pero si puedo aprender algo yo lo tomo como ganancia. Y al final, una sugerencia: sugerencia va con G.

Marcos dijo...

486: Jrasias por la sugerencia. jajajaja

adrian15 dijo...

Todos esas piruetas que empleais para arrancar discos floppies con memdisk implican que sólo funcionará en unos tipos de BIOS que entiendan unas determinadas interrupciones.

Por otra parte aúnque una distro de linux arranque con Isolinux se le puede crear un menu.lst adaptado a partir del isolinux.cfg. Vaya, no tengo ningún ejemplo a mano.


¿Si no usa mucho el memdisk porque no escribes algún howto en el wiki de Super Grub Disk?


adrian15

[486] dijo...

Adrian15: no estoy seguro de haberte entendido.
Sobre lo de memdisk: por suerte no me encontré con ninguna mother que no me permita arrancar asi (de las que tienen arranque por usb, claro). De todos modos aqui lo que mas usamos es el arranque por dos (para el hirens) y el directo para linux (via kernel-initrd).
Sobre lo del menu.lst: estuve jugando con grub (y SGD), y también me parece bárbaro. No es dificil pasar de syslinux.cfg a menu.lst, de hecho hicimos el trabajo inverso, sólo vamos aprendiendo sobre la marcha.
Y lo del wiki... te lo debo. La verdad no creo estar a la altura, al menos todavía.
Gracias por venir!

adrian15 dijo...

>Adrian15: no estoy seguro de haberte >entendido.

Ajá.

>Sobre lo de memdisk: por suerte no me >encontré con ninguna mother que no me >permita arrancar asi (de las que tienen >arranque por usb, claro).

Vaya.

> De todos modos aqui lo que mas usamos > es el arranque por dos (para el
> hirens) y el directo para linux (via
> kernel-initrd).

El hirens :)

> Sobre lo del menu.lst: estuve jugando > con grub (y SGD), y también me parece > bárbaro.
Gracias.
> No es dificil pasar de
> syslinux.cfg a menu.lst, de hecho
> hicimos el trabajo inverso, sólo vamos > aprendiendo sobre la marcha.
Bien. Por algo se empieza.
> Y lo del wiki... te lo debo. La verdad > no creo estar a la altura, al menos
> todavía.

No te preocupes tú lo empiezas y si veo que hay algo mal yo lo voy corrigiendo. La idea es que no tenga que cargarme yo con todo el trabajo.

> Gracias por venir!

Gracias por la pronta respuesta.

adrian15

Yugo dijo...

Jajajaja saludos una vez mas =) Ojala te acuerdes de mi ajaja cuando nos quebrabamos la cabeza tratando de instalar XP desde un USB, ahora busco la opcion de red para otras instalaciones que no tienen WINNT, bueno me dio por dejar el comentario, ahora si termino de leer este post que se ve interesante!

Yugo dijo...

Ya, aqui va mi primera pregunta (Aaaah se me olvidaba, era "Ignacio" hasta que configure mi cuenta de google :P):

- ¿Como puedo hacer esto de bootear en red una imagen de windows XP?

[486] dijo...

Parece que la cosa es similar al boot por usb, con la diferencia de que necesitamos un archivo más del sp1 del windows2003 (startrom.n12). Una búsqueda por este archivito te puede dar una idea. Yo tengo pensado probarlo ni bien pueda, pero eso no es ahora. Saludos!

ReiRok dijo...

Se puede, pero bootear un xplive, o una instalacion de XP.
Si queres correr un windows con un disco virtual por red es otra cosa, busca AOE (ata over ethernet) o ISCSI.
Si queres me fijo como era lo del xplive via red.

Yugo dijo...

Si reirok, eso es lo que quiero bootear una instalacion de XP, no hacerlo entrando a DOS y winnt.exe .

Voy a seguir buscando por ahi 486! ;D

ReiRok dijo...

Yugo, yo use esta guia, y no tuve dramas.
Usando tftpd32.
Yo lo probe usando como server un XP, pero puede ser en linux tambien.
Cualquier cosa pregunta.
http://oss.netfarm.it/guides/ris-linux.pdf
Saludos Reirok.

Anónimo dijo...

He seguido el tuto pero tengo dudas al respecto:
las pc en red, deben estar encendidas con sus respectivos SO para iniciar los pasos?
las IP, deben ser las de las pc's o cualquiera dentro del rango de las del router?
hay que instalar el slax en el pendrive previamente?
en mi caso, en el tftpd (opcion DHCP server) no me figura ninguna linea como la figura del tuto (allocate at , ip, etc.) pero si todo lo demás.
despúes de realizar todos los pasos, el pendrive se coloca en la pc cliente y se bootea desde ahí?
perdón por lo que sigue ..... no entiendo un comino.

486 dijo...

Anónimo 11/7: El post explica cómo hacer para arrancar una maquina por pxe a traves de la red. Para eso usamos una maquina con win, en donde ponemos el servidor. La gracia esta en que la otra maquina (el cliente) no necesita nada mas que su placa de red para arrancar el sistema.
El agregado del pendrive solo esta para complicar las cosas, explicitando que los programas y configuraciones usadas son portatiles.

Anónimo dijo...

Ya puedo ver la negociación del cliente con el servidor a traves del tftpd32 pero en la pc cliente me sale el siguiente error:

trying to load: pxelinux.cfg/84
Could not find kernel image: /boot_red/boot/vesamenu.c32
boot:

y en realidad tengo todo lo que indicas en el tuto de acuerdo a la sig. estructura:
---> /boot_red/slax
---> /boot_red/boot
------------------>/pxelinux.cfg
-------------------------------> 84
------------------> tfptd32.exe (copia del archivo de programas)
------------------> pxelinux.0
------------------> todos los archivos del boot del slax y sus carpetas excepto el pxelinux.cfg por supuesto.
¿donde está la falla?

P.D.1: Soy el mismo anónimo del día 11.
P.D.2: Excelente tu blog.

486 dijo...

Me parece que vas bien. Si te pide el vesamenu es que al menos lee el archivo de configuracion, con lo que la conexion debe estar bien hecha.
Yo confieso que hice el procedimiento para hacer el post y después no lo repetí, asi que estoy lejos de ser un experto. Igual se me ocurren dos cosas:
1) Simplificar la estructura, colocando todo el boot en la raiz del directorio que servimos (en este caso boot_red).
2)Simplificar el syslinux.cfg, quitándole el vesamenu, para dejar el menu común (sacando desde el primer DEFAULT hasta antes del primer LABEL)
Fijate, y conta como te fue.

Anónimo dijo...

Durante estos días he tratado inutilmente el arrancar una pc por red.
Hice lo que dijiste, pero no anduvo y lo maximo que he logrado es lo siguiente:
- una vez armada la estructura
-----> /boot_red/boot
-------------------->/pxelinux.cfg
he copiado toda la estructura del slax en la carpeta boot incluso la carpeta pxelinux.cfg
que le cai encima a la anterior y el mensaje que larga el pc cliente es el siguiente:
llega hasta donde dice "wait a while" y despúes dá Fatal error ocurred - slax data not found y etc. etc.
Parece que no encuentra el /slax para proseguir.
He tratado de ponerlo en todos los directorios pero nada, ahi se queda siempre.

Salu2 en el DIA DEL AMIGO. (AMISTAD INTERNAÚTICA... ja! ja! ja!)