miércoles, 14 de mayo de 2008

Servidor PXE con g4l en Ubuntu

TFTP + PXE + syslinux + G4L

Cuando se realizan clonaciones de múltiples equipos, habitualmente debemos generar un CD con el que arrancar el PC que queremos clonar, para que el sistema operativo que cargamos en el CD nos permita acceder a las imágenes que queremos instalar en nuestros equipos. Uno de los programas que nos permite generar imágenes como ya he comentado en anteriores artículos es el g4l y funciona de este modo.

Lo que trato en este artículo es de cómo instalar un servidor PXE que nos permita arrancar nuestros equipos mediante Red – siempre que la BIOS del equipo lo permita, que en la actualidad son el 99.9999% - y cargar directamente nuestro g4l sin necesidad de insertar ningún CD.

Este documento es una adaptación del escrito Paul Matthews incorporando algunas ideas de David Sudjiman y de revartm.wordpress.com y de Jesús Antonio Alvarez Cedillo (Tognu) entre otros, adaptado a las últimas versiones de los paquetes usados y empleando una distribución Debian, Ubuntu o basada en Debian para generar un servidor PXE que nos permita cargar g4l a través de la red.

Agradezco, asímismo, las aportaciones realizadas como comentario de hbto que ya he incorporado al documento original y que completaban un poco más este manual y solventaban ciertamente algunas carencias del mismo.

Name: syslinux

Homepage: http://syslinux.zytor.com/

Function: The SYSLINUX Project covers lightweight bootloaders for floppy media, network booting and bootable "El Torito" CD-ROMs.


Name: Ghost 4 Linux

Homepage: http://freshmeat.net/projects/g4l/

Function: Ghost for Linux is a hard disk and partition imaging and cloning tool similar to "Norton Ghost"(c) and (tm) by Symantec

Para este ejemplo el servidor de dhcp sirve direcciones entre 172.16.0.10 y el 172.16.0.200. La dirección de red es la 172.16.0.0/16 y la del enrutador 172.16.10.100. Muy importante con respecto a este punto es que el rango de direcciones en la que pongamos a servir ip´s a nuestro servidor esté en la misma red que una de las ip de nuestro servidor

  1. En primer lugar necesitamos tener el servidor dhcp trabajando. En caso contrario:

apt-get install dhcp3-server
nano /etc/dhcp3/dhcpd.conf

o bien emplear webmin.

dhcpd.conf:

ddns-update-style interim;
ignore client-updates;
allow bootp;
allow booting;

subnet 172.16.0.0 netmask 255.255.0.0 {

range 172.16.0.10 172.16.0.200;
option routers 172.16.10.100;
option subnet-mask 255.255.0.0;
option domain-name "home.net";
option domain-name-servers 172.16.10.100;
default-lease-time 21600;
max-lease-time 43200;
option root-path "/tftpboot/";
filename "pxelinux.0";

}



2. Después necesitamos configurar el boot PXE, para lo que bajamos syslinux
apt-get install syslinux
si no lo encuentra o queremos instalar la última versión:

wget http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-3.63.tar.gz

tar -xvzf syslinux-3.63.tar.gz -C /usr/local/src

3. Creamos el directorio para el servicio tftpd en el directorio raíz '/'.

mkdir /tftpboot

4. Ahora, necesitamos copiar los dos ficheros desde syslinux a nuestro recién creado directorio tftpboot:

a.- Si hemos usado apt-get para el paquete syslinux:
cp /usr/lib/syslinux/pxelinux.0
/tftpboot
cp /usr/lib/syslinux/memdisk
/tftpboot

b.-si hemos usado wget estarán en el siguiente directorio:

cp /usr/local/src/syslinux-3.63/pxelinux.0 /tftpboot
cp /usr/local/src/syslinux-3.63/memdisk/memdisk /tftpboot


5. Nos aseguramos de tener el servidor tftpd-hpa instalado (el servidor tftp “básico” no nos sirve, ha de ser el tftpd-hpa, porque hay algunas opciones necesarias para arrancar mediante PXE que el otro no incluye, en concreto tsize).

apt-get install tftpd-hpa tftp-hpa


6. Configuramos el servidor de tftpd.

nano /etc/default/tftpd-hpa

Una vez abierto pondremos las dos opciones con los valores que indico a continuación.

RUN_DAEMON=”yes”

OPTIONS=”-l -s /tftpboot”

Las opciones indican lo siguiente:

-l : es para que el servidor se ejecute como daemon.

-c : está opción nos permitirá poder escribir/enviar datos al servidor tftp. Como no voy a subir ficheros no habilito esta opción

-s : está opción indica el directorio que utilizaremos para bajarnos y subir cosas. En mi caso he utilizado el directorio /tftpboot, que previamente he creado, pero se puede optar por cualquier otro.

Una vez modificado dicho fichero, procedemos a lanzar el servidor, para ello ejecutamos:

# /etc/init.d/tftpd-hpa start


Para que al reiniciar siga funcionando el servidor de TFTP deberemos cambiar la sección del archivo /etc/inetd.conf que habla del TFTP por:

tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /tftpboot

en lugar de la sugerida. Si ya se ha reiniciado y no has actualizado la línea, hacerlo y ejecutar:

sudo update-inetd --enable BOOT

Y ya tendriamos listo el servidor.

Cliente

Para conectarnos al servidor debemos instalar un cliente -si todavía no lo hemos hecho-, como siempre utilizaremos la herramienta apt, esta vez será:

# apt-get install tftp-hpa

Y comprueba que realmente funciona (creamos un fichero en el servidor de tftp y lo bajamos mediante el cliente de tftp), yo suelo usar las opciones verbose y trace para que me vaya mostrando datos de lo que está haciendo:

# ls –l > /tftpboot/listado.txt

# tftp 172.16.16.131

#get listado.txt

# quit

# ls -l

7. Una vez hecho esto reiniciamos los siguientes servicios

/etc/init.d/dhcp3-server restart

8. Vamos a la carpeta tftpboot y creamos el directorio de configuración PXE.

cd /tftpboot/
mkdir pxelinux.cfg/

9. Accedemos al directorio pxelinux.cfg

cd pxelinux.cfg

10. Creamos el fichero de configuración por defecto

nano /tftpboot/pxelinux.cfg/default

default:


Display images
SAY DEFAULT is now bzImageb


DEFAULT bzImageb

LABEL bzImage6
KERNEL g4l/bzImage6
APPEND initrd=g4l/ramdisk.gz ramdisk_size=65536 root=/dev/ram0
LABEL bzImagea
KERNEL g4l/bzImagea
APPEND initrd=g4l/ramdisk.gz ramdisk_size=65536 root=/dev/ram0
LABEL bzImageb
KERNEL g4l/bzImageb
APPEND initrd=g4l/ramdisk.gz ramdisk_size=65536 root=/dev/ram0
LABEL bzImagec
KERNEL g4l/bzImagec
APPEND initrd=g4l/ramdisk.gz ramdisk_size=65536 root=/dev/ram0

PROMPT 1
TIMEOUT 600
ONTIMEOUT bzImageb


F1 images
F2 preimage
F3 startup
F4 disclaim


11. Descargamos la ISO de g4l de la página del proyecto http://sourceforge.net/projects/g4l o directamente de (también funciona con la anterior versión 0.24):

wget http://optusnet.dl.sourceforge.net/sourceforge/g4l/g4l-v0.26.iso


12. Montamos la ISO

mount -o loop -t iso9660 /tmp/g4l-v0.26.iso /media/cdrom/

14. Una vez la ISO está montada necesitamos crear el directorio g4l y copiar los ficheros a ella:

mkdir /tftpboot/g4l

cp -rf /media/cdrom/* /tftpboot/g4l

15. Ahora, simplemente, necesitamos configurar los clientes para que arranquen a través de red.


Enlaces relacionados:

Manual de uso de clonezilla desde live cd: http://tecnoloxiaxa.blogspot.com/2008/12/manual-de-clonezilla-creacin-de-imgenes.html

Si te ha interesado este artículo es posible que te interesen los manuales de funcionamiento de g4l que he elaborado:

Manuales de g4l


También podrás encontrar un manual de instalación de un servidor (DRBL) de PXE en Ubuntu pero en este caso para emplear clonezilla que presenta ventajas de velocidad y compresión con respecto a g4l. Además no es necesario instalar un servidor ftp (con samba o ssh ya funcionaría en modo unicast)

Servidor PXE con clonezilla en Ubuntu



6 comentarios:

hbto dijo...

Sugerencias / Ajustes
En Ubuntu 8.04, no se el resto

*) En la sección uno (1):
Usar

apt-get install dhcp3-server

en lugar del comando original

*) En la sección cuatro (4):
usar

/usr/lib/syslinux/pxelinux.0
/usr/lib/syslinux/memdisk

si descargas por apt-get el paquete de syslinux

*) En la sección cinco (5):
se debe cambiar la sección del archivo

/etc/inetd.conf

que habla del TFTP
la linea deberá corresponder con

tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /tftpboot

en lugar de la sugerida, esto para que al momento de reiniciar siga funcionando.
Si has reiniciado y no actualizaste la linea, hazlo y luego ejecuta

sudo update-inetd --enable BOOT

Te darás cuenta que la prueba de Cliente de la Sección seis (6) volverá a funcionar, y por lo tanto tu TFTP.

Agradezco mucho a nuestro amigo, habia implementado algo similar en Ubuntu, a partir de una guia para PXE + TFTP + G4L + FEDORA

Pero esta guía mas estos ajustes, pretendo ir agregando nuevas utilidades a mi PXE,

Anónimo dijo...

Hola a Todos, primero que todo muchas gracias por este interesante Articulo, he seguido con cuidado los pasos para instalar el PXE, y despues de algunos ajustes he logrado arrancar G4l y AsteriskNow desde la red implementando ademas un servidor FTP, pero tengo dos problemas....el primero al restaurar una imagen de un disco hecha previamente con el g4l la cual se almacena en el servidor FTP , al hacer el restore desde el FTP me aparece el siguiente mensaje:

gunzip :short read

y no restaura la imagen.

y el segundo problema es como hacer para iniciar una imagen ISO desde la red con el PXE para poder bootear liveCDs, instaladores de Linux, Windows etc...

les agradezco sus respuestas y su atencion.

Anónimo dijo...

todo lo hice como manda la ley pero cuando intento hace cualquier backup me dice que la conexion fue rechazada, como hago para que pueda aceptar conexiones anonimas en ubuntu 8.4?

Gracias

Juan dijo...

yo en tu lugar crearía un usuario -supongo que estás hablando del servidor ftp- con su contraseña; en cualquier otro caso ¿has probado usando de nombre de usuario "anonymous" y contraseña en blanco?

Anónimo dijo...

hablo del servidor tftp no hay forma de poder conectarme y lo hise poniendo anonymous y el pass en blanco y nada

Juan dijo...

en principio, si tienes el servidor de tftp funcionando, lo único que tienes que hacer es entrar desde el equipo en el que tengas instalado el servidor y abrir una consola con privilegios de root.
tecleas tftp "ip_de tu equipo" y debería conectarte sin problemas.
Si necesitas ayuda con los comandos teclea "?" y pulsa enter. creo recordar que para conectar es connect y (si tecleas "verbose" y "trace" previamente te dará información de qué está haciendo).
Te hablo de memoria porque no lo tengo delante, pero también podrías comprobar en qué puertos está escuchando el equipo y qué demonios están corriendo.
Probablemente has reiniciado el equipo sin modificar las líneas del fichero inetd.conf. Repasa el punto 4 del manual.
En breve colgaré un manual para hacer lo mismo pero con clonezilla que tiene algunas/bastantes ventajas.
saludos y espero haberte ayudado