Servidor pxe con rapberry
1-Que es PXE?
Entorno de ejecución de prearranque, es decir, un entorno para arrancar e instalar el sistema operativo en nodos a través de la red.
2-Que hace?
Permite conectarte automáticamente a un servidor donde puedes descargar e instalar el sistema operativo que tenga disponible el servidor.
3-Que necesita?
-
Servidor DHCP (Red)
-
Servidor FTP (ISOS)
-
Menú de previsualización.
4-Como funciona?
Almacena las imágenes en un servidor en el que accedes cuando te conectas por PXE mediante DHCP, y una vez conectado permite descargar e instalar dichas imágenes mediante un servidor ftp.
Instalación
Raspberry pi 3b
- IP: 192.168.4.103
- Mascara: 255.255.0.0
- Broadcast: 192.168.255.255
- Router: 192.168.0.1
Instalamos dhcp, inet utils y ftp
sudo apt-get install -y isc-dhcp-server inetutils-inetd tftp tftpd-hpa
configurar dhcp
/etc/dhcp/dhcpd.conf
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
authoritative;
allow booting;
allow bootp;
subnet 192.168.4.0 netmask 255.255.255.0 {
option broadcast-address 192.168.4.255; # broadcast
range 192.168.4.100 192.168.4.240;
option domain-name-servers 8.8.8.8;
option routers 192.168.0.1; # router
next-server 192.168.4.103; # server
filename "pxelinux.0";
}
Archivo de configuración del servicio dhcp
/etc/default/isc-dhcp-server
INTERFACESv4="eth0"
INTERFACESv6=""
Creo estructura de carpetas que luego utilizare para organizar el archivos de inicio de isos
sudo mkdir -p /var/lib/tftpboot/debian/stretch
sudo mkdir -p /var/lib/tftpboot/windows
Descargo archivo pxelinux.0 de arranque pxe de la web a /var/lib/tftpboot/
cd /var/lib/tftpboot/
sudo wget http://ftp.uk.debian.org/debian/dists/wheezy/main/installer-i386/current/images/netboot/debian-installer/i386/pxelinux.0
Configuración inet.d
/etc/inetd.conf
tftp dgram udp wait root /usr/sbin/tcpd in.tftpd /var/lib/tftpboot
Configuración FTP
/etc/default/tftpd-hfa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-s"
Añado iso debian dentro de la carpeta debian creada.
# descargo iso debian
wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-9.2.1-amd64-netinst.iso
# monto iso en /tmp/iso y lo copio a su carpeta correspondiente
mkdir /tmp/iso
# debian monto en /tmp/iso
sudo mount -t iso9660 -o loop debian-9.2.1-amd64-netinst.iso /tmp/iso
# copio en la carpeta del ftp para que pueda acceder desde pxe.
sudo cp -arv /tmp/iso/* /var/lib/tftpboot/debian/stretch/
sudo umount /tmp/iso
Creo menú de iniciación pxe
se encuentra dentro de la carpeta pxelinux.conf que creo a continuación.
sudo mkdir /var/lib/tftpboot/pxelinux.conf
sudo touch /var/lib/tftpboot/pxelinux.conf/default
# copio archivo que permite la visualización del menú
sudo cp /usr/share/syslinux/vesamenu.c32 /var/lib/tftpboot/
# añado foto de 640*480
sudo cp fondo.jpg /var/lib/tftpboot/pxelinux.conf/
/var/lib/tftpboot/pxelinux.conf/default
ui vesamenu.c32
menu title Utilities
menu background pxelinux.cfg/fondo.jpg
label debian stretch
menu label debian stretch
# vmlinuz se encuentra dentro de la imagen de debian
kernel debian/stretch/install.amd/vmlinuz
# initrd.gz se encuentra dentro de la imagen de debian
append vga=normal initrd=debian/stretch/install.amd/initrd.gz repo=ftp://192.168.4.103/debian/stretch
PROMPT 1
TIMEOUT 0
Arrancar servicios
sudo /etc/init.d/tftpd-hpa start
sudo /etc/init.d/inetutils-inetd.service start
sudo /etc/init.d/isc-dhcp-server start
sudo systemctl enable isc-dhcp-server
sudo systemctl enable inetutils-inetd.service
Ya está operativo pxe con debian, seguimos con windows.
Instalar samba con windows paquetes necesarios
bash
sudo apt-get install -y genisoimage wimtools cabextract samba
ln -s /usr/bin/genisoimage /usr/bin/mkisofs
Creamos los directorios
mkdir -p /mnt/waik
mkdir -p /var/lib/tftpboot/windows
Descargamos Windows Automated Installation Kit (WAIK) ISO:
wget https://download.microsoft.com/download/8/E/9/8E9BBC64-E6F8-457C-9B8D-F6C9A16E6D6A/KB3AIK_EN.iso
Montamos la imagen
mount KB3AIK_EN.iso /mnt/waik
Generamos una imagen booteable
mkwinpeimg --iso --arch=amd64 --waik-dir=/mnt/waik /var/lib/tftpboot/winpe.iso
Desmontamos
umount /mnt/waik
Editamos el fichero de samba
Añadimos lo siguiente al final
/etc/samba/smb.conf
[windows]
browsable = true
read only = yes
guest ok = yes
path = /var/lib/tftpboot/windows
Descargamos un windows iso y montamos.
sudo mount win10.iso /var/lib/tftpboot/windows
Le añadimos la siguiente linea a fstab para que monte automáticamente al arrancar
/etc/fstab
/home/pi/win10.iso /var/lib/tftpboot/windows auto loop 0 0
Añadimos lo necesario al menú del pxe para arrancar windows
/var/lib/tftpboot/pxelinux.cfg/default:
ui vesamenu.c32
menu title Utilities
menu background pxelinux.cfg/fondo.jpg
label debian stretch
menu label debian stretch
kernel debian/stretch/install.amd/vmlinuz
append vga=normal initrd=debian/stretch/install.amd/initrd.gz repo=ftp://192.168.4.103/debian/stretch
LABEL windows10
MENU LABEL Windows 10
KERNEL /memdisk
INITRD /winpe.iso
PROMPT 1
TIMEOUT 0
Al arrancar con pxe y seleccionando la imagen de windows se abre una terminal donde tenemos que acceder a samba.
# Montar samba en z
# net use Z: \\ipnuestra\carpeta
net use z: \\192.168.4.103\windows
# acceder a z
z:
# acceder a carpeta windows donde esta la imagen de samba
cd windows
# ejecutar setup.exe de la iso
setup.exe
Y listo seguimos instalación de windows.