Ubuntu : tftp, pxe et http
Bonjour,
Aujourd'hui, un billet rapide sur un serveur TFTP pour du boot PXE avec les ressources en HTTP.
Attention cependant, certains clients PXE ne supportent pas le chargement des sources via HTTP, par exemple, j'ai eu le cas sur un Lenovo M700 : TFTP obligatoire sinon les ressources ne sont pas trouvées car le client essaye d'utiliser l'url comme chemin TFTP.
Ce serveur est sous Ubuntu 22.04 LTS, hébergé sur un cluster Proxmox.
Certains packages sont nécessaires :
apt install tftpd-hpa pxelinux syslinux-common nginx
Il faut ensuite créer l'arborescence du TFTP (le dossier /srv/tftp est créé à l'installation de tftp-hpa) :
mkdir /srv/tftp/pxelinux.cfg
mkdir /srv/tftp/netboot
On copie ensuite le nécessaire pour le boot PXE :
cd /srv/tftp/
cp /usr/lib/PXELINUX/pxelinux.0 .
cp /usr/lib/syslinux/memdisk .
cp /usr/lib/syslinux/modules/bios/* .
En l'état, on pourrait faire le fichier default pour le boot PXE via TFTP mais c'est très lent donc on va servir les sources via HTTP.
Pour commencer, création de l'arborescence nécessaire :
root@deploy:/srv# tree -d deploy/
deploy/
├── cloudinit
│ └── ubuntu
│ └── jammy
├── images
│ ├── freebsd
│ │ └── 13.2
│ ├── gparted
│ └── ubuntu
│ └── jammy
├── post-install
├── preseed
└── sources
├── debian
│ └── bookworm
├── gentoo
└── ubuntu
├── focal
└── jammy
Le vhost Nginx qui servira les sources:
# MANAGED BY PUPPET
server {
listen *:80;
server_name deploy.adm.securmail.fr;
index index.html index.htm index.php;
access_log /var/log/nginx/deploy.access.log;
error_log /var/log/nginx/deploy.error.log;
location /pxelinux/ {
alias /srv/tftp/netboot;
autoindex on;
index index.html index.htm index.php;
}
location / {
root /srv/deploy;
index index.html index.htm index.php;
}
}
Il faut ensuite gérer les différentes sources.
Source Debian 12 :
wget https://deb.debian.org/debian/dists/bookworm/main/installer-amd64/current/images/netboot/netboot.tar.gz
tar xzf netboot.tar.gz -C /srv/tftp/netboot/debian/12/
cd /srv/tftp/netboot/debian/12/debian-installer/amd64/
cp linux /srv/deploy/sources/debian/bookworm/
cp initrd.gz /srv/deploy/sources/debian/bookworm/
Source Ubuntu 20.04 :
wget http://archive.ubuntu.com/ubuntu/dists/focal-updates/main/installer-amd64/current/legacy-images/netboot/netboot.tar.gz
tar xzf netboot.tar.gz -C /srv/tftp/netboot/ubuntu/20.04
cd /srv/tftp/netboot/ubuntu/20.04/ubuntu-installer/amd64/
cp linux /srv/deploy/sources/ubuntu/focal/
cp initrd.gz /srv/deploy/sources/ubuntu/focal/
Source Ubuntu 22.04 :
cd /srv/deploy/images/
wget https://releases.ubuntu.com/22.04.3/ubuntu-22.04.3-live-server-amd64.iso
mount -o loop ubuntu-22.04.3-live-server-amd64.iso /mnt/
cd /mnt/casper/
cp initrd /srv/deploy/sources/ubuntu/jammy/
cp vmlinuz /srv/deploy/sources/ubuntu/jammy/
umount /mnt
Une fois tout cela en place (avec les droits corrects suivant votre configuration), on peut créer le fichier /srv/tftp/pxelinux.cfg/default qui contiendra les différentes entrées PXE :
DEFAULT vesamenu.c32
PROMPT 0
MENU TITLE PXE Boot Menu
LABEL Mfsbsd 13.2 UFS
MENU LABEL Mfsbsd ^13.2 UFS
KERNEL memdisk
APPEND iso
INITRD http://deploy.adm.securmail.fr/images/freebsd/13.2/mfsbsd-13.2-custom-ufs.iso.gz
LABEL Gparted
MENU LABEL Gparted
KERNEL memdisk
APPEND iso
INITRD http://deploy.adm.securmail.fr/images/gparted/gparted-live-1.5.0-6-amd64.iso
LABEL Gentoo
MENU LABEL Gentoo live CD
KERNEL http://deploy.adm.securmail.fr/sources/gentoo/kernel
initrd http://deploy.adm.securmail.fr/sources/gentoo/network.igz
APPEND root=/dev/ram0 init=/linuxrc dokeymap looptype=squashfs loop=/image.squashfs cdroot net.ifnames=0
LABEL Ubuntu 20.04 LTS preseed
MENU LABEL Ubuntu ^20.04 LTS preseed
kernel http://deploy.adm.securmail.fr/sources/ubuntu/focal/linux
append initrd=http://deploy.adm.securmail.fr/sources/ubuntu/focal/initrd.gz DECONF_DEBUG=5 debian-installer/locale=en_US keyboard-configuration/layoutcode=fr auto=true priority=critical interface=auto netcfg/dhcp_timeout=60 vga=off fb=false preseed/url=http://deploy.adm.securmail.fr/preseed/ubuntu_focal
LABEL Ubuntu 20.04 LTS preseed tftp
MENU LABEL Ubuntu ^20.04 LTS preseed tftp
kernel netboot/ubuntu/20.04/ubuntu-installer/amd64/linux
append initrd=netboot/ubuntu/20.04/ubuntu-installer/amd64/initrd.gz DECONF_DEBUG=5 debian-installer/locale=en_US keyboard-configuration/layoutcode=fr auto=true priority=critical interface=auto netcfg/dhcp_timeout=60 vga=off fb=false preseed/url=http://deploy.adm.securmail.fr/preseed/ubuntu_focal
LABEL Ubuntu 20.04 LTS no preseed
MENU LABEL Ubuntu ^20.04 LTS no preseed
KERNEL http://deploy.adm.securmail.fr/sources/ubuntu/focal/linux
INITRD http://deploy.adm.securmail.fr/sources/ubuntu/focal/initrd.gz
APPEND initrd=http://deploy.adm.securmail.fr/sources/ubuntu/focal/initrd.gz
LABEL Ubuntu 20.04 LTS no preseed tftp
MENU LABEL Ubuntu ^20.04 LTS no preseed tftp
kernel netboot/ubuntu/20.04/ubuntu-installer/amd64/linux
append initrd=netboot/ubuntu/20.04/ubuntu-installer/amd64/initrd.gz
LABEL Ubuntu 22.04 LTS preseed
MENU LABEL Ubuntu ^22.04 LTS preseed
KERNEL http://deploy.adm.securmail.fr/sources/ubuntu/jammy/vmlinuz
INITRD http://deploy.adm.securmail.fr/sources/ubuntu/jammy/initrd
APPEND root=/dev/ram0 ramdisk_size=1500000 ip=dhcp cloud-config-url=/dev/null url=http://deploy.adm.securmail.fr/images/ubuntu/jammy/ubuntu-22.04.3-live-server-amd64.iso autoinstall ds=nocloud-net;s=http://deploy.adm.securmail.fr/cloudinit/ubuntu/jammy/
LABEL Ubuntu 22.04 LTS no preseed
KERNEL http://deploy.adm.securmail.fr/sources/ubuntu/jammy/vmlinuz
INITRD http://deploy.adm.securmail.fr/sources/ubuntu/jammy/initrd
APPEND root=/dev/ram0 ramdisk_size=1500000 ip=dhcp cloud-config-url=/dev/null url=http://deploy.adm.securmail.fr/images/ubuntu/jammy/ubuntu-22.04.3-live-server-amd64.iso
LABEL Debian 12 preseed
MENU LABEL Debian ^12 preseed
KERNEL http://deploy.adm.securmail.fr/sources/debian/bookworm/linux
APPEND initrd=http://deploy.adm.securmail.fr/sources/debian/bookworm/initrd.gz DECONF_DEBUG=5 debian-installer/locale=en_US keyboard-configuration/layoutcode=fr auto=true priority=critical interface=auto netcfg/dhcp_timeout=60 vga=off fb=false preseed/url=http://deploy.adm.securmail.fr/preseed/debian_bookworm
LABEL Debian 12 no preseed
MENU LABEL Debian ^12 no preseed
KERNEL http://deploy.adm.securmail.fr/pxelinux/debian/12/debian-installer/amd64/linux
APPEND initrd=http://deploy.adm.securmail.fr/sources/debian/bookworm/initrd.gz
Il reste à dire au DHCP le next-server. Utilisant isc-dhcp, il faut rajouter ces options dans la partie générale du fichier dhcpd.conf :
# PXE
next-server 192.168.0.29;
filename "pxelinux.0";
Un restart de isc-dhcp et tout est disponible.
Pour donner un ordre d'idée : l'installation d'Ubuntu 22.04 avec curtin c'est environ 20/25mins (avec la mise à jour de l'installation, l'installation de puppet et d'autres paramètres dans le curtin).
Have fun.