SERVIDOR DE INSTALACIONES

Introducción

Un servidor de instalaciones es un sistema que posibilita la instalación de sistemas operativos a través de red. Normalmente, lo deseable es que esta instalación se realice de forma desatendida. Debería estar compuesto de:

El presente documento cubrirá solamente hasta que el kernel e initrd, con soporte para el sistema de instalación deseado, arrancanquen. Se realizará una pequeña introducción sobre los sistemas de instalación desatendida standard de las distribuciones debian y red hat (preseeding y kickstart respectibamente), pero se remite al lector a la documentación específica para más detalles.

Servidor DHCP

El paquete a instalar (en Debian) se llama dhcp3-server. Tras su instalación el servicio DHCP quedará funcionando.

Configuración del servidor DHCP

El archivo de configuración del servidor DHCP es /etc/dhcp3/dhcpd.conf

Como ejemplo de este archivo:

########################
## GENERAL PARAMETERS ##
########################

default-lease-time 600;                                             #01
max-lease-time 7200;                                                #02

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;

## Otras opciones relacionadas con arranque pxe:
allow booting;                                                      #03
allow bootp;                                                        #04

option domain-name "org.es";                                        #05

#################################
## PXELINUX RELATED PARAMETERS ##
#################################

## Conf especifica del pxelinux. Cogido del pxelinux.txt
## NOTA: la siguientes lineas DEFINEN opciones, pero no las usan...

option space pxelinux;                                              #06
option pxelinux.magic      code 208 = string;                       #07
option pxelinux.configfile code 209 = text;                         #08
option pxelinux.pathprefix code 210 = text;                         #09
option pxelinux.reboottime code 211 = unsigned integer 32;          #10

###################
### DECLARATIONS ##
###################

## La subnet básica, y los grupos....

subnet 100.100.173.0   netmask 255.255.255.0 {                      #11
        option subnet-mask 255.255.255.0;                           #12
        option broadcast-address 100.100.173.0;                     #13
        option domain-name-servers 100.100.34.209, 100.100.33.38;   #14
        option routers 100.100.173.254;                             #15

pool {range dynamic-bootp 100.100.173.240 100.100.173.249;          #16
# Este pool proporciona un rango de asignación de IPs dinámicas

filename "pxelinux.0";                                              #17
next-server 100.100.173.2;                                          #18
}                                                                   #19

group{                                                              #20
        filename "pxelinux.0";                                      #21
        next-server 100.100.173.2;                                  #22
        option domain-name "org.es";                                #23

host server{                                                        #24
option host-name "server";                                          #25
hardware ethernet d8:d3:85:ff:36:09 ;                               #26
fixed-address 100.100.173.5 ;                                       #27
}                                                                   #28

host node-01-1{                                                     #29
option host-name "node-01-1";                                       #30
hardware ethernet d8:d3:85:ff:31:17 ;                               #31
fixed-address 100.100.173.6 ;                                       #32
}                                                                   #33

}#del group                                                         #34
}#subnet                                                            #35

Como puede verse, tras algunos parámetros generales, se asocia a cada una de las MAC de las tarjetas de red de las máquinas una IP del rango asignado. También reserva un pequeño "pool" de ips dinámicamente asignadas para emplearlas en caso de ser necesarias.

Comentaremos a continuación algunas de las lineas relevantes:

Servidor TFTP

El paquete a instalar (en Debian) se llama atftpd. Tras su instalación, inetd se encarga de lanzar el demonio cuando sea necesario. Si se quiere cambiar este comportamiento, debe hacerse lo siguiente:

  1. Editar /etc/inetd.conf y comentar la linea correspondiente al tftp
  2. Editar /etc/default/atftpd para indicar al demonio que no use inetd. También se puede esficificar en este fichero el direcctorio cuyo contenido se servirá por tftp. En adelante asumiremos que este direcctorio es /srv/tftpboot
  3. Reiniciar el servicio inetd e iniciar el atftpd

Arranque por PXE

Dentro del directorio raíz del servidor tftp (/srv/tftpboot, por ejemplo), debe existir el archivo pxelinux.0 (tal como se especifica en la configuración del servidor dhcp). Este archivo es un binario que puede conseguirse de la distribución de Sylinux. El archivo en cuestión se encuentra dentro de la carpeta core del paquete.

Para configurar el arranque por PXE, debe existir la carpeta /srv/tftpboot/pxelinux.cfg y, dentro, una serie de archivos que contienen los parámetros de arranque (basicamente kernel y initrd) y cuyos nombres se corresponden con las ips de cada una de las máquinas a instalar, expresadas en hexal. Para convertir una ip desde el formato normal al format en hexal puede recurrirse la untilidad online ipconverter. Por ejemplo, la ip 100.100.173.10 se expresa en hexal como 5415AD0A. Estos archivos contienen los parámetros de arranque (kernel, initrd, ...) asociados a cada perfil de instalación.

Como un mismo perfil de instalación se puede asignar a varias máquinas diferente, lo más practico es poner los parámetros de arranque en archivos de nombres descriptivos (por ejemplo, debian-squeeze-basico.boot) y hacer que los archivos cuyos nombres se corresponden con las ips sean links blandos a estos.

Otro detalle práctico es crear en archivo /srv/tftpboot/pxelinux.cfg/default, que será el que contenga los parámetros de arranque por defecto en caso de no exista un archivo llamado como la ip (en hexal) del equipo que arranca por PXE. Este archivo indicará que se arranque desde el disco duro de la máquina.

La máquinas clientes deberían esta configuradas para arrancar por PXE por defecto. De esta forma, para realizar una instalación en una máquina el proceso a seguir es:

  1. Se crea un link cuyo nombre coincida con la ip de la máquina en hexal y que señale al fichero de parámetros de arranque deseado.
  2. Se reinicia la máquina.
  3. Tan pronto como la máquina haya arrancado, debe borrarse el link, para que en el próximo reinicio esta arranque desde disco duro.

Formato de los ficheros de parámetros de arranque por PXE

Dentro de la carpeta /srv/tftpboot/pxelinux.cfg debe haber una serie de ficheros que contengan parámetros de arranque tales como el kernel y el initrd, que serán cargados con el protocolo tftp. Un ejemplo del contenido de estos archivos es el siguente:

default 1
prompt 1
timeout 1
display DEBIAN_squeeze-boot-files/msgs/debian_squeeze.msg

label 1
    kernel DEBIAN_squeeze-boot-files/linux
    append initrd=DEBIAN_squeeze-boot-files/initrd_firmware-linux-nonfree_0.26.gz \
    locale=es_ES console-keymaps-at/keymap=es debian/priority=critical \
    netcfg/choose_interface=eth0 \
    preseed/url=http://100.100.173.2/pub/debian-preseed/preseed-squeeze-basico-dl165.cfg \
    hostname=unassigned domain=unassigned

Y también el llamado default, que indica arrancar por defecto desde el disco duro:

#Por defecto, arranca desde disco duro:
default linux
label linux
localboot 0

Nótese que los archivos del kernel, initrd y el archivo de texto que contiene el mensaje que se enseña al arrancar están referidos a la raiz que sirve el tftpd. Por tanto, deberá existir, en el ejemplo considerado, una carpeta /srv/tftpboot/pxelinux.cfg/DEBIAN_squeeze-boot-files que contenga el kernel y el initrd indicados, así como el archivo /srv/tftpboot/DEBIAN_squeeze-boot-files/msgs/debian_squeeze.msg que contenga el archivo de mensaje de inicio de instalación especificado.

Notar también que, en general, se necesitan pasar parámetros al kernel y/o al initrd. Estos parámetros dependerán del mecanismo de instalación específico, a medida del cual debe estar construído el initrd.

Los mecanismos de instalación específicos se tratarán en otro documento.

Obtención de los kernel e initrd adecuados.

Será necesario contar con un kernel e initrd adecuados al sistema de instalación usado. Aunque pueden generarse initrd a medida para el sistema que escojamos (por ejemplo, para instalar usando debootstrap), existen kernels e initrds específicos para cada distribución que usan el instalador oficial correspondiente. A su vez, estos programas de instalación pueden poseer mecanismos propios para lograr instalaciones desatendidas.

En el caso de los sistemas tipo debian, el kernel e initrd que pueden usarse para arrancar por red y que contienen el instalador propio de debian pueden encontrarse en la página de debian-instaler (usar la versión del día más reciente).

Aunque la página del debian-instaler también contine el archivo pxelinux.0, debería usarse la versión del mismo bajada de [syslinux]

El sistema de instalación desatendida para el instalador oficial de debian se llama preseeding, y puede encontrarse información sobre él como parte de la documentación del instalador de debian en su apéndice B. Hay que estar atento a usar el kernel, initrd y formato de archivo preseed correspondiente a la versión de debian que se desee instalar.

En el caso de sistemas basados en Red Hat, el kernel e initrd adecuados para arrancar por red y que continen el instador suelen encontrarse en el primer CD de instalación, en la carpeta images/pxeboot/. Aunque aquí también está el archivo pxelinux.0, debería usarse la versión del mismo bajada de [syslinux]

El sistema de instalación desatendida para el instalador oficial de Red Hat se llama kickstart, y puede encontrarse información sobre en uno de los capítulos del manual de instación de red Hat.