Instalación de openSuse por red mediante tftp-pxe
Enviado por miguelcarmona :: 28 de mayo de 2010
Hay varias maneras de instalar un equipo por red:
- Iniciar con el disco de instalación y escoger la opción de instalación por red.
- Instalar remótamente mediante vnc o ssh (muy útil para servidores dedicados externos).
- Iniciar por red el disco de instalación
Seguramente se me habrá pasado alguna. En esta guía nos vamos a centrar en «Iniciar por red el disco de instalación».
¿Qué ventajas nos reporta?
- No necesitamos ningún dispositivo extra (usb, dvd, cdrom…).
- Una vez configurado, instalamos muy fácilmente los clientes.
- Podemos tener todas las versiones/distribuciones que deseemos/configuremos para dicha instalación.
Lógicamente tiene contras, como el proceso de elaboración del sistema, o la necesidad de otro equipo funcionando para entregar «arranques» por red.
La parte de servidor de esta guía la basaré sobre openSuse 11.1 (en 32 bits), pero es válida desde la versión 10.1 hasta la fecha del artículo (también para 64 bit). Ya que no es un servicio que vaya a estar demandado a diario, por facilidad en migraciones y comodidad, lo he implantado sobre una máquina virtual (que es lo que os recomiendo).
Para los clientes, sólo es requerido que puedan iniciar desde red.
Para empezar, lógicamente necesitamos ya el equipo servidor instalado (cualquier tipo de instalación). Una vez cumplido este requisito, nos ponemos manos a la obra:
Lo primero será instalar un servidor DHCP. Si ya tenemos un servidor funcionando en algún equipo de la red y podemos cambiar su configuración, recomiendo hagáis las modificaciones sobre el mismo.
La mayoría de servidores DHCP incluidos en los routers que nos entregan las compañías ISP no nos permite especificar un archivo para el inicio por red, por lo que no son válidos pero podemos establecer una configuración para que funcione con los mismos.
En todos los casos excepto en el que podemos actualizar la configuración del servidor DHCP y este nos permite establecer el archivo de inicio, deberemos:
Instalar el servidor DHCP:
zypper install dhcp-server
El archivo de configuración es /etc/dhcpd.conf. Viene bien comentado cada apartado, pero como es bastante lioso ir explicando que modificar y que nó, recomiendo cambiarle el nombre y establecer uno nuevo con lo básico especificado en cada escenario.
mv /etc/dhcpd.conf /etc/dhcpd.conf.original
Así pues, separamos este apartado en 2 opciones:
Si no tenemos ningún servidor DHCP funcionando en la red (o no podemos modificar sus parámetros):
El contenido que deberemos insertar en el archivo /etc/dhcpd.conf es:
authoritative;
ddns-update-style none;
allow booting;
subnet 192.168.1.0 netmask 255.255.255.0
{
option subnet-mask 255.255.255.0;
option routers 192.168.1.1;
option domain-name-servers 80.58.61.250, 8.8.8.8;
range dynamic-bootp 192.168.1.100 192.168.1.199;
default-lease-time 3600;
max-lease-time 7200;
filename "pxelinux.0";
next-server 192.168.1.8;
}
Explicandolo un poco:
- subnet => Indicamos nuestra red para la configuración. Deberemos establecer la ip de nuestra red (el último número debe ser un 0 «cero» en la mayoría de los casos -depende de la máscara de red-)
- netmask => Indicamos nuestra máscara de red.
- option subnet-mask => Nuestra máscara de red (la misma que antes).
- option routers => La ip de nuestra puerta de enlace (suele ser la ip del router).
- option domain-name-servers => Las ip de los servidores DNS separadas por comas.
- range => Rango de ips para cuando se soliciten. Osease, cuando un cliente se conecte y solicite una ip, se la concederá dentro de ese rango.
- default-lease-time => Tiempo (en segundos) por defecto que durará la asignación de ip al cliente. Llegados a este tiempo, el cliente deberá renovar dicha dirección.
- mas-lease-time => Tiempo (en segundos) máximo que durará la asignación de ip al cliente. Llegados a este tiempo, si el cliente no renueva, se libera dicha ip para asignarla de nuevo.
- filename => Indica a los clientes el nombre del archivo a obtener si inician mediante red.
- next-server => Indica la dirección del servidor tftp para iniciar el «arranque» por red. En este caso, pondremos la dirección del equipo que estamos configurando
Si tenemos otro servidor DHCP funcionando en la red el cual no podemos modificar:
El contenido que deberemos insertar en el archivo /etc/dhcpd.conf es:
authoritative;
allow booting;
ddns-update-style none;
subnet 192.168.1.0 netmask 255.255.255.0
{
option routers 192.168.1.1;
option domain-name-servers 80.58.61.250, 8.8.8.8;
broadcast-address 192.168.1.255;
pool {
default-lease-time 180;
max-lease-time 360;
next-server 192.168.1.8;
filename "pxelinux.0";
allow members of "pxe";
allow members of "etherboot";
filename "pxelinux.0";
range 192.168.1.100 192.168.1.199;
}
}
class "pxe" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
}
class "etherboot" {
match if substring (option vendor-class-identifier, 0, 9) = "Etherboot";
}
En el apartado anterior se explica cada sección, por lo que no lo repetiremos. Es importante actualizar los datos de ip a los vuestros.
En openSuse, también deberemos editar el archivo /etc/sysconfig/dhcpd y establecer en DHCPD_INTERFACE la interface de red conectada normalmente eth0). Podemos comprobrarla con un simple ifconfig.
Reciniciamos el demonio dhcpd:
rcdhcpd restart
Con esto ya tenemos el servidor dhcp funcionando. Este demonio simplemente lo que hace es asignar una ip a una determinada máquina para evitar el tener que configurarla manualmente.
El siguiente paso será instalar y configurar el servidor tftp. Recomiendo utilizar atftp por ser libre y estar en los repositorios:
zypper install atftp
Editamos /etc/sysconfig/atftpd y establecemos la ruta que vamos a utilizar de forma que quede así:
ATFTPD_OPTIONS="--daemon --user tftp -v"
ATFTPD_USE_INETD="no"
ATFTPD_DIRECTORY="/srv/tftp/tftpboot"
Comprobamos si existe el usuario tftp
cat /etc/passwd | grep tftp
Si no existe, lo creamos
useradd -d /srv/tftp/ tftp
Reiniciamos el servicio:
rcatftpd restart
Si deseamos que inicie automáticamente, haremos:
chkconfig tftp on
Ya por último, nos queda crear el entorno de inicio PXE.
Creamos la estructura en el sistema de ficheros:
mkdir -p /srv/tftp/tftpboot/pxelinux.cfg
Necesitamos el archivo pxelinux.0 el cual se encuentra en el paquete syslinux:
zypper install syslinux
cp /usr/share/syslinux/pxelinux.0 /srv/tftp/tftpboot
Creamos el archivo de configuración de PXE en /srv/tftp/tftpboot/pxelinux.cfg/default con el contenido:
DISPLAY f1.txt
F1 f1.txt
default OS11.2
prompt 1
timeout 30
# openSuse 11.2 32bits
label OS11.2
kernel openSuse_11.2_32
append initrd=initrd_openSuse_11.2_32 splash=silent vga=0x314 showopts install=http://download.opensuse.org/distribution/11.2/repo/oss/
# openSuse 11.2 32bits
label OS11.264
kernel openSuse_11.2_64
append initrd=initrd_openSuse_11.2_64 splash=silent vga=0x314 showopts install=http://download.opensuse.org/distribution/11.2/repo/oss/
Descargamos los archivos kernel e initrd para openSuse 11.2:
cd /srv/tftp/tftpboot
wget -O openSuse_11.2_32 http://download.opensuse.org/distribution/11.2/repo/oss/boot/i386/loader/linux
wget -O initrd_openSuse_11.2_32 http://download.opensuse.org/distribution/11.2/repo/oss/boot/i386/loader/initrd
wget -O openSuse_11.2_64 http://download.opensuse.org/distribution/11.2/repo/oss/boot/x86_64/loader/linux
wget -O initrd_openSuse_11.2_64 http://download.opensuse.org/distribution/11.2/repo/oss/boot/x86_64/loader/initrd
Creamos el archivo de configuración para mostrar en el inicio a los clientes. Este archivo será /srv/tftp/tftpboot/f1.txt y contendrá:
boot options:
OS11.2 - Instalación en 32 bit para openSuse 11.2
OS11.264 - Instalación en 64 bit para openSuse 11.2
Y esto es todo. En verdad, aunque sea largo el artículo, el proceso es bastante rápido.
Si tenemos descargado el dvd o alguna copia del repositorio en nuestra red, podemos cambiar las rutas del archivo /srv/tftp/tftpboot/pxelinux.cfg/default