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:
- Un servidor DHCP configurado específicamente para la tarea.
- Un servidor TFTP configurado específicamente para la tarea.
- Fichero binario para arranque PXE por red, junto con las configuraciones específicas para cada máquina cliente.
- Conjunto de kernel e initrds para posibilitar el arranque de los clientes como sistemas disk-less. Especificamente, el initrd debe contener la aplicación que se usará para hacer la instalación definitiva. Existen varias opciones para esto:
- El instalador oficial de la distribución
- Scripts personalizados basados en sistemas tipo debootstart
- Información, en el formato esperado por el método de instalación elegido, de qué instalar en el sistema cliente.
- Posiblemente, repositorio de paquetes de la distribución a instalar.
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:
- Las lineas de la 1 a la 5 fijan algunos parámetros generales del servidor DHCP
- Las lineas de la 6 a la 10 fijan algunos parámetros específicos del fichero de arranque PXE empleado (véase sección sobre PXE más adelante)
- El resto del archivo, de las lineas 11 a la 35, definen una subnet
- Dentro de la subnet definida, las lineas de la 12 a la 15 contienen parámetros específicos de la subnet
- Las lineas de 16 a 19 define un pool de direcciones asignada dinámicamente. La linea 17 especifica el fichero de arranque PXE y la 18 el servidor TFTP donde encontrarlo. Notar que este pool está incluído en la definición de subnet
- Las lineas de la 20 a la 34 definen un group, también contenido deltro de la subred. Las lineas de la 21 a la 23 contienen parámetros generales para el group, específicamente se definen el fichero de arranque PXE y el servidor TFTP donde encontrarlo.
- Los dos host (lineas 24-28 y 29-33), dentro de group especifican, para las MAC asociadas a cada máquina cliente, la IP y nombre que se le asignará...
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:
- Editar /etc/inetd.conf y comentar la linea correspondiente al tftp
- 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
- 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:
- 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.
- Se reinicia la máquina.
- 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.