Serveur PXE - Preboot eXecution Environment - permet à un ordinateur client de démarrer, exécuter ou installer un système d'exploitation directement à partir d'une interface réseau, éliminant le besoin de graver un CD / DVD ou d'utiliser un support physique ou facilitant l'installation de Linux distributions sur votre infrastructure réseau sur plusieurs machines en même temps.
Cet article explique comment installer et configurer un serveur PXE sur RHEL/CentOS 7 x64 bits avec:
Il est absolument nécessaire qu'une interface réseau soit configuré avec une adresse IP statique de la même plage IP que celle du segment réseau qui fournira le servicle PXE.
Avant d'aller plus loin, il est important d'identifier quelle interface réseau va servir à effectuer les installations.
Pour activer le port forwarding (permet de laisser la machine accéder à Internet lorsqu'elle est sur le réseau filaire), cela se fait avec la commande suivante qui a été ajoutée dans le fichier /etc/rc.local
afin que le paramétrage soit effectué au démarrage de la machine :
$ iptables -t nat -A POSTROUTING -j MASQUERADE -s 192.168.2.0/24
Et enfin, en ajoutant l'option suivante dans le fichier /etc/sysctl.conf
net.ipv4.ip_forward=1
DNSmasq va servir à plusieurs choses :
Dnsmasq est un serveur léger pour fournir les services DNS, DHCP, Bootstrap Protocol et TFTP pour un petit réseau, voire pour un poste de travail. Il permet d'offrir un service de nommage des machines du réseau interne non intégrées au service de nommage global (i.e. le service DNS d'Internet). Le service de nommage est associé au service d'adressage de telle manière que les machines dont le bail DHCP est fourni par Dnsmasq peuvent avoir automatiquement un nom DNS sur le réseau interne. Le logiciel offre un service DHCP statique ou dynamique.
$ yum installer dnsmasq
Le fichier de configuration par défaut principal de DNSMASQ, est dans le répertoire /etc
.
Sauvegarder ce fichier au cas avant de le modifier pour pouvoir y revenir plus tard.
cp /etc/dnsmasq.conf /etc/dnsmasq.conf.backup
vi /etc/dnsmasq.conf
Configurer dnsmasq pour ne fonctionner que sur l'interface réseau concerné, ici eth0.
interface=eth0 except-interface=wlan0 bind-interfaces
Ensuite, on active la partie DHCP
dhcp-range=192.168.2.20,192.168.2.80,1h dhcp-option=3,192.168.2.1 dhcp-boot=pxelinux.0 dhcp-authoritative domain=toulibre.org
Puis TFTP
enable-tftp tftp-root=/srv/tfpd tftp-no-blocksize
Et enfin, la partie DNS
address=/security.ubuntu.com/192.168.2.1 address=/local.ubuntu.com/192.168.2.1 address=/boot.ubuntu.com/192.168.2.1
Ici, on effectue un “DNS menteur” sur la zone ubuntu.com, ce n'est pas forcément très heureux mais ça permet d'éviter d'aller sur internet pour des ressources que l'on peut servir localement. De plus, on « fabrique » deux sous-domaines qui n'existent pas chez ubuntu.com, pour local. et boot. on pouvait aussi prendre un domaine bidon comme chez.moi.
La configuration finale doit ressembler à ceci :
interface=eth0,lo #bind-interfaces domain=toulibre.org # DHCP range-leases dhcp-range=eth0,192.168.2.20,192.168.2.80,1h # PXE dhcp-boot=pxelinux.0,pxeserver,192.168.2.19 # Gateway dhcp-option=3,192.168.2.1 # DNS dhcp-option=6,92.168.1.1, 8.8.8.8 # Serveurs de noms en amont server=8.8.4.4 # Broadcast Address dhcp-option=28,10.0.0.255 # NTP Server dhcp-option=42,0.0.0.0 pxe-prompt="Press F8 for menu.", 60 pxe-service=x86PC, "Install CentOS 7 from network server 192.168.1.20", pxelinux enable-tftp tftp-root=/var/lib/tftpboot
Les déclarations qu'il faut modifier sont les suivantes:
$ mkdir -p /var/lib/tftpboot/centos7
En règle générale, le serveur PXE lit sa configuration à partir d'un groupe de fichiers spécifiques (fichiers GUID - d'abord, fichiers MAC - suivant, fichier default - en dernier) hébergé dans un dossier appelé pxelinux.cfg, qui doit se trouver dans le répertoire spécifié dans tftp-root du fichier de configuration principal de DNSMASQ.
Créer le répertoire requis pxelinux.cfg
et y créee un fichier default :
$ mkdir /var/lib/tftpboot/pxelinux.cfg
Editer le fichier de configuration de PXE Server avec des options d'installation de distributions Linux valides.
Tous les chemins utilisés dans ce fichier doivent être relatifs au répertoire /var/lib/tftpboot.
Exemple de fichier de configuration (modifier les images d'installation - fichiers noyau et initrd), protocoles (FTP, HTTP, HTTPS, NFS - et IP pour refléter les répertoires sources et chemins d'installation réseau ) :
$ cat /var/lib/tftpboot/pxelinux.cfg/default << EOF default menu.c32 prompt 0 timeout 300 ONTIMEOUT local menu title ########## PXE Boot Menu ########## label 1 menu label ^1) Install CentOS 7 x64 with Local Repo kernel centos7/vmlinuz append initrd=centos7/initrd.img method=ftp://192.168.1.20/pub devfs=nomount label 2 menu label ^2) Install CentOS 7 x64 with http://mirror.centos.org Repo kernel centos7/vmlinuz append initrd=centos7/initrd.img method=http://mirror.centos.org/centos/7/os/x86_64/ devfs=nomount ip=dhcp label 3 menu label ^3) Install CentOS 7 x64 with Local Repo using VNC kernel centos7/vmlinuz append initrd=centos7/initrd.img method=ftp://192.168.1.20/pub devfs=nomount inst.vnc inst.vncpassword=password label 4 menu label ^4) Boot from local drive EOF
Normalement, les chemins des fichiers sont interprétés comme relatifs au répertoire racine de tftp, mais on peut utiliser la syntaxe :: (par exemple ::boot/amd64/debian/10/install.amd /vmlinuz
) pour référencer la racine tftp d'une manière “absolue”. Le symbole :: permet de faire exactement cela : c'est un moyen de référencer le chemin absolu vers la racine tftp.
Installer le paquet de démarrage Syslinx PXE (Syslinux Bootloaders) :
$ yum install syslinux
Copier les fichiers de bootloaders PXE qui se trouvent dans /usr/lib/syslinux
(kernel et initrd) dans le répertoire /var/lib/tftpboot/centos7
$ cp -r /usr/share/syslinux/* /var/lib/tftpboot
$ wget http://mirror.centos.org/centos/7/os/x86_64/images/pxeboot/initrd.img $ wget http://mirror.centos.org/centos/7/os/x86_64/images/pxeboot/vmlinuz
On va activer nginx pour servir trois domaines (les trois que l'on usurpe à ubuntu.com).
Voici donc ce que l'on va placer dans /etc/nginx/sites-available/defaults
:
server { listen 80 default_server; root /srv/apt/archive.ubuntu.com/; index index.html index.htm; server_name archive.ubuntu.com local.ubuntu.com; location / { try_files $uri $uri/ =404; } } server { server_name security.ubuntu.com; root /srv/apt/security.ubuntu.com; location / { try_files $uri $uri/ =404; } } server { server_name boot.ubuntu.com; root /srv/boot/; location / { try_files $uri $uri/ =404; }
}
Il ne reste plus qu'à faire des liens symboliques pour rendre les fichiers d'apt-mirror visibles par nginx.
$ mkdir -p /srv/apt/ $ ln -s /var/spool/apt-mirror/mirror/archive.ubuntu.com/ /srv/apt/archive.ubuntu.com $ ln -s /var/spool/apt-mirror/mirror/archive.ubuntu.com/ /srv/apt/security.ubuntu.com
Pour cette étape, les fichiers CentOS, kernel et initrd sont requis. Pour obtenir ces fichiers, il faut utiliser de l'image ISO du DVD CentOS 7. Télécharger le socle CentOS DVD à l'adresse ftp://venezia.appli.dgfip/pub/socle-linux/socle2016_0.14/soclelinux-2016-0.14.iso Graver l'image, introdire le DVD dans le lecteur le DVD et monter l'image dans le chemin système /mnt en lançant la commande ci-dessous:
La raison de l'utilisation du DVD et non d'une image de CD minimale est le fait que plus tard ce contenu de DVD serait utilisé pour créer des référentiels d'installation locaux pour les sources FTP.
$ mount -o loop /dev/cdrom/mnt $ ls /mnt
Si la machine ne possède pas de lecteur DVD, on peut également télécharger localement l'ISO CentOS 7 DVD en utilisant les utilitaires wget ou curl depuis un miroir CentOS et le monter.
$ wget ftp://venezia.appli.dgfip/pub/socle-linux/socle2016_0.14/soclelinux-2016-0.14.iso $ mount -o loop /path/to/soclelinux-2016-0.14.iso /mnt
Une fois le contenu du DVD rendu disponible, créer le répertoire centos7 et copier les images du noyau et d'initialisation CentOS 7 à partir de l'emplacement du DVD monté dans la structure de dossiers centos7.
$ mkdir /var/lib/tftpboot/centos7 $ cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/centos7 $ cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/centos7
La raison de l'utilisation de cette approche est que, plus tard, on peut créer de nouveaux répertoires séparés dans le chemin /var/lib/tftpboot et ajouter d'autres distributions Linux au menu PXE sans perturber toute la structure du répertoire.
Bien qu'on puisse utiliser divers protocoles tels que HTTP, HTTPS ou NFS, on choisi le protocole serveur vsftpd car il est très fiable et facile à installer.
L'iamge du DVD Centos a déjà été monté à l'étape précédente
$ yum install vsftpd
$ cp -r /mnt/* /var/ftp/pub/
Définir les autorisations sur le chemin FTP
$ chmod -R 755 /var/ftp/pub
Démonter CentOS 7 DVD et supprimer le support physique.
$ umount /mnt $ rm /mnt -rf
Maintenant que la configuration du serveur PXE est terminée, démarrer les serveurs DNSMASQ et VSFTPD, vérifier leur état et activer le démarrage automatique, en exécutant les commandes ci-dessous.
$ systemctl start dnsmasq $ systemctl status dnsmasq $ systemctl start vsftpd $ systemctl status vsftpd $ systemctl enable dnsmasq $ systemctl enable vsftpd
Pour obtenir une liste de tous les ports devant être ouverts sur votre pare-feu afin que les ordinateurs clients puissent atteindre et démarrer à partir du serveur PXE, exécutez la commande netstat et ajoutez les règles CentOS 7 Firewalld aux ports d'écoute dnsmasq et vsftpd.
$ netstat -tulpn $ firewall-cmd --add-service=ftp --permanent ## Port 21 $ firewall-cmd --add-service=dns --permanent ## Port 53 $ firewall-cmd --add-service=dhcp --permanent ## Port 67 $ firewall-cmd --add-port=69/udp --permanent ## Port for TFTP $ firewall-cmd --add-port=4011/udp --permanent ## Port for ProxyDHCP $ firewall-cmd --reload ## Apply rules
Effectuer d'abord une installation de RHEL/CentOS 7 dans un environnement virtualisé et utiliser le fichier Kickstart résultant pour les futures installations.
Copier le fichier nommé anaconda-ks.cfg dans le chemin du serveur par défaut de Vsftpd (/var/ftp/pub)
$ cp anaconda-ks.cfg /var/ftp/pub/ $ chmod 755 /var/ftp/pub/anaconda-ks.cfg
Apporter les modifications minimales suivantes.
$ vi /var/ftp/pub/anaconda-ks.cfg
-url=ftp://192.168.1.25/pub/
Avant de tenter d'utiliser ce fichier pour les procédures d'installation, il est important de vérifier le fichier à l'aide de la commande ksvalidator incluse dans le package Pykickstart, en particulier si des personnalisations manuelles ont été effectuées.
Installer le paquet Pykickstart et vérifier le fichier Kickstart en lançant les commandes suivantes.
$ yum install pykickstart $ ksvalidator /var/ftp/pub/anaconda-ks.cfg
La dernière vérification consiste à s'assurer que le fichier Kickstart est accessible à partir de la source d'installation FTP Local Mirror définie dans l'étape précédente.
ftp://192.168.1.25/pub/
Pour accéder à l'option Installation automatique de RHEL / CentOS 7 à partir du menu PXE, ajouter l'étiquette suivante à la configuration par défaut du fichier PXE.
$ nano /var/lib/tftpboot/pxelinux.cfg/default
label 5 menu label ^5) Install CentOS 7 x64 with Local Repo using Kickstart kernel vmlinuz append initrd=initrd.img inst.ks=ftp://192.168.1.25/pub/anaconda-ks.cfg inst.vnc inst.vncpassword=password
L'installation automatique peut être supervisée graphiquement via VNC avec mot de passe (remplacer le mot de passe VNC en conséquence) et le fichier Kickstart est localisé localement sur le serveur PXE et spécifié par le paramètre de démarrage inst.ks (protocole et emplacement sur le réseau).
Les clients peuvent maintenant démarrer et installer CentOS 7 en configurant Démarrage réseau comme périphérique de démarrage principal dans le BIOS.
Une fois qu'on atteint le menu PXE, choisir le type d'installation CentOS 7, appuyer sur la touche Entrée et poursuivre la procédure d'installation de la même manière que l'installeation à partir d'un DVD.