.. meta:: :description: Servidor de Instalaciones :keywords: instalacion, pxe, sistemas, computacion :name: Rubén Díez lázaro :http-equiv=Content-Type: text/html; charset=utf-8 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: 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 `__.