====== PXE avec PXELINUX ====== Comment mettre en place un service PXE, comment partager une image de disquette bootable, comment charger un linux à distance. Pour qu'un service PXE fonctionne, il faut : * un serveur TFTP * un serveur DHCP, qui donne en plus l'adresse du serveur TFTP * un logiciel capable de fournir un menu de boot * des clients qui boot en PXE ===== Configuration DHCP ===== Le serveur DHCP distribue les adresses réseaux aux clients : il fournit l'adresse du client, l'adresse de la passerelle et du serveur de noms. Il peut donner d'autres informations aux clients, en l'occurrence on veut qu'il donne l'adresse du serveur TFTP et le nom du fichier que le client devra télécharger. Il suffit d'ajouter à la configuration du serveur les options suivantes : filename "pxelinux.0"; server-name "192.168.0.2"; Dans notre exemple le serveur TFTP aura l'IP //192.168.0.2//. ===== Installation du serveur TFTP ===== Les serveur TFTP fourni les fichiers nécesaires aux clients pour demarrer un OS (par exemple le noyau et l'initrd pour linux). Il fourni également un petit executable qui sera chargé par la carte réseau afin d'initier l'environnement avant le demarrage de l'OS. Le partage par TFTP est très simple (voir trivial :), il suffit d'indiquer le répertoire à partager à l'installation : apt-get install atftpd Ensuite on choisi le répertoire ''/tftpboot''. Généralement ce répertoire n'existe pas, il suffit de le créer, cependant on peut le mettre où l'on souhaite et jouer avec les liens symboliques... mkdir /tftpboot Pour information la configuration de atftpd se trouve dans ''/etc/default/atftpd''. ===== PXELINUX ===== L'éxécutable qui sera téléchargé par les clients se nomme ''pxelinux.0'', c'est un petit programme qui va lire un fichier de configuration, puis afficher un prompt pour que l'utilisateur choisisse son OS. Ce programme fait partie du projet SYSLINUX. Il suffit de télécharger [[http://syslinux.zytor.com/|SYSLINUX]], l'archive contient les sources et les executables. Il suffit d'aller piocher les executables nécessaires à ce que l'on souhaite faire. En l'occurence on a juste besoin de ''pxelinux.0'' qu'on copiera dans ''/tftpboot''. La configuration de PXELINUX est très souple : il est possible d'avoir un menu de boot différent pour chaque machine ou groupe de machine en fonction de leur adresse MAC, IP ou classe d'adresse IP. Mais nous nous contenterons d'un menu unique. L'executable ira chercher inconditionnellement sa configuration dans le répertoire ''pxelinux.cfg'' (à créer sous ''/tftpboot''). Le fichier par défaut se nomme ''default'' ; pour tester on peut y mettre : LABEL local localboot 0 LABEL linux kernel vmlinuz append initrd=initrd.gz Cela permet de booter en local, et sur un linux au cas où l'on a un noyau linux qui traîne avec son initrd (juste pour tester). ==== MEMDISK ==== Un interêt de PXELINUX est de pouvoir booter des images de disquettes. Le logiciel [[http://www.symantec.com|Ghost]] (TM) permet de déployer des images de disque dur sur des machines par le réseau. Le démarrage des machines cibles se fait par disquettes, nous allons voir comment mettre ses disquettes sur le boot PXE. Pour booter une image de disquette il faut un autre exécutable qui se trouve dans l'archive de SYSLINUX : ''memdisk''. Il suffit de le copier à côté de ''pxelinux.0''. Il faut également faire une image de la disquette qu'on veut booter, et de modifier le fichier de configuration : LABEL ghost kernel memdisk append initrd=ghost/ghost288.IMA Le paramètre kernel prend pour valeur l'exécutable ''memdisk'' et l'initrd l'image de la disquette (à la base c'est prévu pour Linux d'où le nom des paramètres). Pour que ce soit vraiment utile il faut générer une disquette multicarte avec la console Ghost. Cela nécessite 2 disquettes, ensuite il faut utiliser WinImage (un shareware sous Windows) pour les joindre sur une image de disquette de 2.88 Mo. * Installer [[http://www.winimage.com|WinImage]] (version d'évaluation disponible) * Générer les 2 disquettes de boot (driver + ghost) à partir de la console Ghost * Ouvrir la première disquette (driver) avec WinImage * Enregistrer la première disquette au format ''ima'' sur le disque dur * Idem 2eme disquette * Ouvrir la première image et changer le format en 2.88 : menu "Image" -> "Change format" -> 2'88 * Sauvegarder la disquette sous un autre nom * Ouvrir la deuxième image et extraire ghost.exe sur le disque dur * Copier (glisser/déposser) le fichier ghost.exe dans le répertoire ghost de la disquette 2'88 * Extraire les fichiers autoexec.bat et config.sys * Modifier ''autoexec.bat'' : après ''echo chargement'' taper ''goto GHOSTFND'' * Modifier ''config.sys'' : ne laisser que la section ''[COMMON]'', retirer tout ce qui est au dessus * Supprimer les fichier ''autoexec.bat'' et ''config.sys'' de la disquette * Injecter les fichiers modifiés * Sauvegarder la disquette L'image finale est une disquette au format 2.88Mo bootable, qui peut être utilisé avec un serveur PXE. ==== Menu ==== Une fois qu'on a plein d'option, on se rend compte que c'est long de taper le nom de l'image qu'on veut booter, qu'à cela ne tienne, on va mettre un menu. Dans l'archive de SYSLINUX se trouve un exécutable nommé ''menu.c32'' qui dote PXELINUX d'un menu graphique utilisable avec les flèches. On le copie à côté des autres et on modifie le fichier de configuration : DEFAULT menu.c32 PROMPT 0 TIMEOUT 100 NOESCAPE 1 MENU SHIFTKEY 1 MENU TITLE PXE Boot Menu en TEST LABEL local MENU LABEL Local Boot MENU DEFAULT localboot 0 LABEL b MENU LABEL Ubuntu NFS kernel vmlinuz append boot=caspernfs initrd=initrd.gz ramdisk_size=1048576 root=/dev/ram nfsroot=172.16.20.12:/tftpboot/fs/ rw debian-installer/locale=fr kbd-chooser/method=fr-latin9 -- LABEL ghost MENU LABEL Ghost kernel memdisk append initrd=ghost/ghost288.IMA Il faut ajouter en haut du fichier l'appel à ''menu.c32'', puis pour chaque LABEL on ajoute un MENU LABEL qui sera affiché à l'écran. Pour de plus amples informations il faut consulter la documentation de SYSLINUX. ==== Protection par mot de passe ==== L'archive SYSLINUX contient un exécutable nommé ''sha1pass'' (c'est un script Perl) qui génère les mot de passe au bon format. Pour l'utiliser sous Debian il faut le module Perl qui va bien : apt-get install libdigest-sha1-perl Ensuite on exécute la commande avec le mot de passe en paramètre et il nous donne la chaîne à coller dans le fichier de configuration. Par exemple pour protéger Ghost : LABEL ghost MENU LABEL Ghost MENU PASSWD $4$jfoBirJg$rSDbzznCZtmJAES9RH/lC92/3Rs$ kernel memdisk append initrd=ghost/ghost288.IMA ==== Passer le clavier en français ==== Par défaut le clavier est en qwerty, pour avoir l'azerty il faut copier le fichier ''fr.kbd'' (trouvable sur toute bonne distribution LiveCD) à côté de ''pxelinux.0''. La configuration est à adapter, il faut ajouter la ligne : KBDMAP fr.kbd Au cas où vous auriez du mal à trouver le fichier ''fr.kbd'', en voici un qui fonctionne : {{:debian:fr.kbd|fr.kbd}}