#Centos : Configuration d'un serveur de déploiemernt PXE {{INLINETOC}} ##Présentaion Serveur **PXE** - **P**reboot e**X**ecution **E**nvironment - 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. ##Définition du démarrage réseau PXE Cet article explique comment installer et configurer un serveur PXE sur RHEL/CentOS 7 x64 bits avec: * Un serveur DNSMASQ qui fournit les services DNS, TFTP et DHCP * Un serveur TFTP, qui permet de télécharger des images amorçables via le réseau en utilisant le protocole TFTP (Trivial File Transfer Protocol) * Un paquet Syslinux qui fournit des bootloaders pour le démarrage réseau, * Un dépôt local contenant les paquets de l'image ISO DVD CentOS 7 * Un serveur VSFTPD qui hébergera l'image DVD en miroir montée localement. - qui servira de référentiel d'installation miroir officiel RHEL / CentOS 7 d'où l'installateur extraira les paquets requis. #Prérequis 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. ##Configuration de l'interface réseau en IP statique Avant d'aller plus loin, il est important d'identifier quelle interface réseau va servir à effectuer les installations. ##Activation du port forwarding 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 #Étape 1: Installer et configurer le serveur DNSMASQ DNSmasq va servir à plusieurs choses : * Serveur DHCP ; * Serveur TFTP ; * Serveur DNS. ##Présentation **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. ##Installer le paquet dnsmasq $ yum installer dnsmasq ##Configuration de 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: * **interface** - Interfaces sur leqel le serveur doit écouter et fournir des services. * **bind-interfaces** - Ne pas commenter pour lier uniquement sur cette interface. * **domain** - Remplacer par le nom de domaine. * **dhcp-range** - Remplacer par la plage IP. * **dhcp-boot** - Remplacer par adresse IP d'interface. * **dhcp-option = 3 192.168.1.1** - Remplacer l'adresse IP par passerelle réseau. * **dhcp-option = 6,92.168.1.1** - Remplacer l'adresse IP par l'adresse IP du serveur DNS - plusieurs adresses IP DNS peuvent être définies. * **server = 8.8.4.4** - Mettez vos adresses IP des redirecteurs DNS. * **dhcp-option = 28,10.0.0.255** - Remplacer l'adresse IP par l'adresse de diffusion réseau - facultativement. * **dhcp-option = 42,0.0.0.0** - Remplacer par l'adresse ip du serveur de temps de réseau - facultativement (adresse 0.0.0.0 ). * **pxe-prompt** - Laisser par défaut - signifie appuyer sur la touche F8 pour entrer dans le menu avec le temps d'attente en secondes. * **pxe = service** - Utiliser x86PC pour les architectures 32 bits / 64 bits et entrer une invite de description de menu sous guillemets. Les autres types de valeurs peuvent être: PC98, IA64_EFI, Alpha, Arc_x86, Intel_Lean_Client, IA32_EFI, BC_EFI, Xscale_EFI et X86-64_EFI. * **enable-tftp** - Active le serveur TFTP intégré. * **tftp-root** - Utilise /var/lib/tftpboot - l'emplacement de tous les fichiers de netbooting. #Étape 2: Installer le serveur TFTP ## Créer les répertoires $ mkdir -p /var/lib/tftpboot/centos7 ##Configurer le menu de boot PXE 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 * **Le menu label 3** : spécifie que l'installation du client doit être effectuée à partir d'un emplacement distant via VNC (remplacer "password" par un mot de passe fort) * **Le menu label 2** : permet d'installer sur un client headless depuis les sources d'installation d'un miroir Internet officiel CentOS 7 (ce qui nécessite une connexion Internet disponible sur le client via DHCP et NAT). 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. #Étape 3:Installation des chargeurs d'ammorçages SYSLINUX ## Installer SYSLINUX Installer le paquet de démarrage Syslinx PXE (Syslinux Bootloaders) : $ yum install syslinux ##Charger les bootloaders 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 ##Télécharger l'image netboot fournie par centos $ 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 #Étape 4: Configuration de l'entrepôt contenant les images amorçables ##Configuration de nginx 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 ##Ajouter des images DVD ###Monter le DVD/l'image DVD sur le système local 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 ###Copier les fichiers amorçables CentOS 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. #Étape 5:Création de la source d'installation de Mirror local de CentOS 7 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 ##Installer le serveur Vsftpd $ yum install vsftpd ##Copier les rpms sur le repos $ 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 #Étape 6: Démarrage des services ##Démarrer et activer les démons 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 ## Ouvrir le pare-feu et tester la source d'installation FTP 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 #Étape 7: Configuration du kickstart Effectuer d'abord une installation de RHEL/CentOS 7 dans un environnement virtualisé et utiliser le fichier **Kickstart** résultant pour les futures installations. ##Créer et copier le fichier **Kiskstart** sur le serveur FTP 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 * Remplacer **-url** avec l'emplacement de la source d'installation réseau: Ex: `-url=ftp://192.168.1.25/pub/` * Remplacer **network -bootproto** par **dhcp** si on a configuré manuellement des interfaces réseau lors du processus d'installation. ##Vérification du fichier Kickstart 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/ ##Ajouter le menu Kikstart à la configuration du serveur PXE 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). #Étape 8: Configurer les clients pour démarrer à partir du 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.