Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
ipxe [Le 05/05/2019, 16:38]
nicolas84 [Savoir décompresser une ISO]
ipxe [Le 27/11/2021, 18:27] (Version actuelle)
nicolas84 [Créer le menu de iPXE]
Ligne 1: Ligne 1:
 +{{tag>​Bionic}}
 +
 ====== IPXE : utilisation avec TFTP, PXE, DHCP, NFS et HTTP ====== ====== IPXE : utilisation avec TFTP, PXE, DHCP, NFS et HTTP ======
  
Ligne 5: Ligne 7:
 L'​avantage de iPXE est qu'il s'​adapte facilement aux interfaces BIOS et EFI. L'​avantage de iPXE est qu'il s'​adapte facilement aux interfaces BIOS et EFI.
  
-Il existe d’autres méthodes comme par exemple : ​https://​doc.ubuntu-fr.org/​netboot ou https://​doc.ubuntu-fr.org/​netboot_live +Il existe d’autres méthodes comme par exemple : ​[[:netboot]] ou [[:​netboot_live]]
-<note warning>​ +
-Cet article est en cours de rédaction. Certaines informations peuvent être erronés ou incomplète. +
-</​note>​+
  
-===== Processus de démarrage ===== 
- 
-  - L'​ordinateur client démarre par l'​interface réseau en mode PXE. 
-  - Le serveur DHCP, présent sur le réseau, lui envoie un fichier ipxe à démarrer. 
-  - L'​ordinateur client accède alors, par TFTP, au fichier de configuration de la machine. 
-  - Il charge le fichier de configuration par défaut. 
-  - Le fichier contient les informations nécessaire à l'​affichage d'un menu sur l'​écran de l'​ordinateur client. 
  
 ===== Installer et lancer les serveurs nécessaires ===== ===== Installer et lancer les serveurs nécessaires =====
Ligne 24: Ligne 16:
 Installation du serveur DHCP sur le serveur. Installation du serveur DHCP sur le serveur.
 <note important>​ <note important>​
-Un serveur doit avoir une adresse ip fixe ! Ici, le serveur dispose de l’ip 10.0.0.200. Voir : https://​doc.ubuntu-fr.org/​utilisateurs/​ool/​netplan+Un serveur doit avoir une adresse ip fixe ! Ici, le serveur dispose de l’ip 10.0.0.200. Voir : [[:​utilisateurs/​ool/​netplan|netplan]]
 </​note>​ </​note>​
 <​code>​ <​code>​
 sudo apt update && sudo apt install ​ isc-dhcp-server sudo apt update && sudo apt install ​ isc-dhcp-server
-sudo nano etcdhcp/dhcpd.conf+sudo nano etc/dhcp/dhcpd.conf
 </​code>​ </​code>​
 <file -  /​etc/​dhcp/​dhcpd.conf>​ <file -  /​etc/​dhcp/​dhcpd.conf>​
 +default-lease-time 7200;
 +max-lease-time 7200;
 +
 allow unknown-clients;​ allow unknown-clients;​
 +#​authoritative;​
 option subnet-mask 255.255.255.0;​ option subnet-mask 255.255.255.0;​
  
Ligne 95: Ligne 91:
         next-server 10.0.0.200;         next-server 10.0.0.200;
 #      PXE #      PXE
-        if option arch = 00:07 {+        if option arch = 00:07 or option arch = 00:09 {
                 if exists user-class and option user-class = "​iPXE"​ {                 if exists user-class and option user-class = "​iPXE"​ {
                         filename "​http://​10.0.0.200/​install.ipxe";​                         filename "​http://​10.0.0.200/​install.ipxe";​
Ligne 101: Ligne 97:
                         filename "​ipxe/​ipxe.efi";​                         filename "​ipxe/​ipxe.efi";​
                 }                 }
-        } else if option arch = 00:09 {+        } else if option arch = 00:06 {
                 if exists user-class and option user-class = "​iPXE"​ {                 if exists user-class and option user-class = "​iPXE"​ {
                         filename "​http://​10.0.0.200/​install.ipxe";​                         filename "​http://​10.0.0.200/​install.ipxe";​
                 } else {                 } else {
-                        filename "ipxe/ipxe.efi";+                        filename "ipxe/ipxe32.efi";
                 }                 }
         } else {         } else {
-         ​  ​   ​if exists user-class and option user-class = "​iPXE"​ {+          if exists user-class and option user-class = "​iPXE"​ {
                         filename "​http://​10.0.0.200/​install.ipxe";​                         filename "​http://​10.0.0.200/​install.ipxe";​
                 } else {                 } else {
                         filename "​undionly.kpxe";​                         filename "​undionly.kpxe";​
                 }                 }
-        }+        } 
 } }
 </​file>​ </​file>​
 <note tip> <note tip>
-Dans la configuration ci-dessous le réseau est configurer ​en 10.0.0.0/​24,​ libre a vous de l’adapter à votre réseau actuel.+Dans la configuration ci-dessous le réseau est configuré ​en 10.0.0.0/​24,​ libre a vous de l’adapter à votre réseau actuel.
 </​note>​ </​note>​
 Les premières « option » permettent à isc-dhcp-server de comprendre des options DHCP spécifique à ipxe. Les premières « option » permettent à isc-dhcp-server de comprendre des options DHCP spécifique à ipxe.
 Cela sera plus compréhensible plus tard, mais les « if » en fin de document permettent de distribuer le bon fichier en fonction du client PXE (Bios, EFI) Cela sera plus compréhensible plus tard, mais les « if » en fin de document permettent de distribuer le bon fichier en fonction du client PXE (Bios, EFI)
-Pour plus d’info sur la configuration :​ [[:https://​doc.ubuntu-fr.org/​isc-dhcp-server|isc-dhcp-server]]+Pour plus d’info sur la configuration :​ [[:​isc-dhcp-server|isc-dhcp-server]]
 <​code>​ <​code>​
 sudo service isc-dhcp-server restart sudo service isc-dhcp-server restart
 </​code>​ </​code>​
  
 +<note important>​
 +Avoir deux serveurs DHCP sur le même réseau est souvent synonyme de conflits. Il est préférable de désactiver tous les autres serveurs DHCP (de votre box ou routeur par exemple). Dans ce cas, il faut décommenter la ligne "​authoritative;"​ en dessous allow unknown-clients.
 +
 +Dans le cas où il n'est pas possible de désactiver les autres serveur DHCP, à minima, il faut régler le paramètre "​range"​ sur une autre plage que celle de votre autre serveur DHCP.
 +
 +Une autre méthode consiste à amorcer iPXE à l'aide d'une clé USB : [[:​ipxe#​creer_une_cle_usb_d_ipxe|Créer une clé USB d'​iPXE]]
 +</​note>​
 ==== Serveur TFTP ==== ==== Serveur TFTP ====
  
 Le serveur TFTP est celui qui va fournir les fichiers nécessaires au démarrage réseau. Le serveur TFTP est celui qui va fournir les fichiers nécessaires au démarrage réseau.
 <​code>​ <​code>​
-sudo apt install tftpd-hda +sudo apt install tftpd-hpa 
-sudo nano etc/​default/​tftpd-hpa+sudo nano /etc/​default/​tftpd-hpa
 </​code>​ </​code>​
 <file - /​etc/​default/​tftpd-hpa>​ <file - /​etc/​default/​tftpd-hpa>​
Ligne 147: Ligne 150:
 </​code>​ </​code>​
 <note tip> <note tip>
-Si un pare-feu est activé, ​il faut ouvrir le port 69+Si un pare-feu est activé, ouvrir le port 69
 </​note>​ </​note>​
  
Ligne 157: Ligne 160:
 </​code>​ </​code>​
 <note tip> <note tip>
-Si un pare-feu est activé, ​il faut ouvrir le port 2049+Si un pare-feu est activé, ​consultez cette page : [[nfs-ufw|Fixer les ports pour un partage NFS]]
 </​note>​ </​note>​
  
Ligne 167: Ligne 170:
 </​code>​ </​code>​
 Pour plus d'​infos : https://​doc.ubuntu-fr.org/​lamp Pour plus d'​infos : https://​doc.ubuntu-fr.org/​lamp
 +
 +On créer un lien symbolique de tftpboot sur le serveur LAMP :
 +<​code>​
 +ln -s /​var/​lib/​tftpboot /​var/​www/​html/​tftpboot
 +</​code>​
 +
 ===== Préparer les fichiers de démarrage iPXE ===== ===== Préparer les fichiers de démarrage iPXE =====
  
Ligne 193: Ligne 202:
 cd /​tmp/​ipxe/​src cd /​tmp/​ipxe/​src
 make bin-x86_64-efi/​ipxe.efi EMBED=chain.ipxe make bin-x86_64-efi/​ipxe.efi EMBED=chain.ipxe
-make bin-i386-efi/​ipxe32.efi EMBED=chain.ipxe+make bin-i386-efi/​ipxe.efi EMBED=chain.ipxe
 make undionly.kpxe EMBED=chain.ipxe make undionly.kpxe EMBED=chain.ipxe
 +
 +cp bin-x86_64-efi/​ipxe.efi undionly.kpxe /​var/​lib/​tftpboot/​
 +cp bin-i386-efi/​ipxe.efi /​var/​lib/​tftpboot/​ipxe32.efi
 </​code>​ </​code>​
-Ses deux fichiers seront ensuite à copier dans /​var/​lib/​tftpboot.+La construction nécessite les paquets suivants : [[apt>​gcc]] [[apt>​binutils]] [[apt>​liblzma-dev]]
 </​note>​ </​note>​
  
Ligne 240: Ligne 252:
 </​file>​ </​file>​
 <note tip> <note tip>
-Ce menu ne sert à rien dans l’état, il est à compléter en fonction de ce que l’on a démarrer. ​Une petite liste est situé dans le chapitre ​suivant+Ce menu ne sert à rien dans l’état, il est à compléter en fonction de ce que l’on a démarrer. ​Voir sur le chapitre ​[[:​ipxe#​completer_le_menu_ipxe|Compléter le menu iPXE]] 
 + 
 +Des exemples de menu sont proposés sur cette page : [[http://​boot.salstar.sk/​|Exemples de menus IPXE]]
 </​note>​ </​note>​
  
Ligne 246: Ligne 260:
 Utiliser un ordinateur ou une machine virtuelle pour tenter un démarrage PXE. Pour cela, il faut changer l'​ordre de boot dans le bios/uefi de votre machine pour sélectionner "​PXE"​ ou "​réseau"​. Utiliser un ordinateur ou une machine virtuelle pour tenter un démarrage PXE. Pour cela, il faut changer l'​ordre de boot dans le bios/uefi de votre machine pour sélectionner "​PXE"​ ou "​réseau"​.
  
-Plus d'​infos : [[https://​doc.ubuntu-fr.org/​tutoriel/​modifier_ordre_amorcage_du_bios#​etapes_a_suivre_pour_modifier_l_ordre_d_amorcage_du_bios|Modifier l'​ordre d'​amorçage du BIOS]]+Plus d'​infos : [[:​tutoriel/​modifier_ordre_amorcage_du_bios#​etapes_a_suivre_pour_modifier_l_ordre_d_amorcage_du_bios|Modifier l'​ordre d'​amorçage du BIOS]]
  
 +<note tip>
 +Si cela ne fonctionne pas dans une machine virtuelle, tentez quand même sur un ordinateur physique. Sur les machines virtuelles, cela a parfois tendance à être capricieux !
 +Par exemple pour un test via VirtualBox, il faut impérativement installer les extensions packs pour ne pas avoir d'​erreur sur les fichier gz (utilisé pour lancer les kernel linux notamment)
 +Dans les paramètres VirtualBox, ajouter l'​extension pack correspondant à votre version. Voir cette page pour le télécharger : https://​www.virtualbox.org/​wiki/​Download_Old_Builds
 +</​note>​
 ===== Compléter le menu ipxe ===== ===== Compléter le menu ipxe =====
  
Ligne 286: Ligne 305:
 Il convient évidemment d'​adapter les paramètres à sa situation. Les fichiers vmlinuz et initrd étant parfois accompagnés d'une extensions comme .gz, il faudra l'​ajouter. ​ Il convient évidemment d'​adapter les paramètres à sa situation. Les fichiers vmlinuz et initrd étant parfois accompagnés d'une extensions comme .gz, il faudra l'​ajouter. ​
 </​note>​ </​note>​
-Il faudra ensuite ​autorisé ​le partage dans le fichier de configuration de NFS :+Il faudra ensuite ​autoriser ​le partage dans le fichier de configuration de NFS :
 <​code>​ <​code>​
 sudo echo "/​var/​lib/​tftpboot/​ubuntuinstall *(async,​no_root_squash,​no_subtree_check,​ro) /​etc/​exports"​ >> /​etc/​exports sudo echo "/​var/​lib/​tftpboot/​ubuntuinstall *(async,​no_root_squash,​no_subtree_check,​ro) /​etc/​exports"​ >> /​etc/​exports
Ligne 314: Ligne 333:
  
 == Sous Windows == == Sous Windows ==
 +
 +Pré-requis : Télécharger et installer Windows ADK [[https://​docs.microsoft.com/​fr-fr/​windows-hardware/​get-started/​adk-install#​winADK|WinADK]]
 +
 +<note important>​
 +Désactiver votre programme antivirus lors de la manipulation des images.
 +</​note>​
 +
 +Dans le menu démarrer taper : "​Environnement de déploiement et d’outils de création d’images"​ et l'​ouvrir en tant qu'​administrateur.
 +
 +Copier WinPE 
 +<​code>​
 +copype amd64 C:​\WinPE_am64
 +</​code>​
 +
 +Monter l'​image de démarrage :
 +<​code>​
 +Dism /​Mount-Image /​ImageFile:"​C:​\WinPE_amd64\media\sources\boot.wim"​ /index:1 /​MountDir:"​C:​\WinPE_amd64\mount"​
 +</​code>​
 +
 <note tip> <note tip>
-A compléter, cette solution ​est plus complète que la création sous Linux+Il est possible a ce stade de rajouter des fichiers/​dossier dans C:​\WinPE_amd64\mount 
 + 
 +Il est aussi possible de modifier le script de démarrage (pour lancer des commandes automatiquement au démarrage) : 
 +Exemple : 
 +<file - C:​\WinPE_amd64\mount\Windows\System32\Startnet.cmd>​ 
 +wpeinit 
 +net use Y: \\10.0.0.200\win10_1809_custom_x64 /user:user pass 
 +Y:​\setup.exe 
 +</​file>​
 </​note>​ </​note>​
 +
 +__Pour ajouter des pilotes de périphériques (.inf) : __
 +
 +Un seul à la fois :
 +<​code>​
 +Dism /Add-Driver /​Image:"​C:​\WinPE_amd64\mount"​ /​Driver:"​C:​\SampleDriver\driver.inf"​
 +</​code>​
 +Tout un dossier de .inf (il peut être nécessaire d'​utiliser /​ForceUnsigned pour ajouter des pilotes non signés)
 +<​code>​
 +Dism /Add-Driver /​Image:"​C:​\WinPE_amd64\mount"​ /​Driver:"​C:​\SampleDriver"​ /Recurse
 +</​code>​
 +Vérification :
 +<​code>​
 +Dism /​Image:"​C:​\WinPE_amd64\mount"​ /​Get-Drivers
 +</​code>​
 +<note tip>
 +D'​autres manipulations et modifications sont possibles : [[https://​msdn.microsoft.com/​fr-fr/​library/​windows/​hardware/​dn938390(v=vs.85).aspx|WinPE : Monter et personnaliser]]
 +</​note>​
 +Quand toutes les modifications sont terminées, il faut démonter l'​image :
 +<​code>​
 +Dism /​Unmount-Image /​MountDir:"​C:​\WinPE_amd64\mount"​ /commit
 +</​code>​
 +
 +Création d'un image ISO :
 +<​code>​
 +Makewinpemedia /iso C:​\winpe_amd64 C:​\winpe_amd64.iso
 +</​code>​
  
 === Configuration du menu === === Configuration du menu ===
Ligne 364: Ligne 437:
 </​code>​ </​code>​
 <note tip> <note tip>
-Même si le répertoire samba est accessible anonymement (guest ok = yes), il faut saisir un utilisateur et un mot de passe bidon pour que la connexion fonctionne.+Même si le répertoire samba est accessible anonymement (guest ok = yes), il faut parfois ​saisir un utilisateur et un mot de passe bidon pour que la connexion fonctionne.
 </​note>​ </​note>​
  
Ligne 399: Ligne 472:
 ===== Astuces ===== ===== Astuces =====
  
 +==== Si cela ne fonctionne pas ====
 +__**Si je n'ai pas de menu**__
 +  * Tester avec un autre ordinateur
 +  * Vérifier que la connexion ethernet fonctionne
 +  * Vérifier si l'​ordinateur récupère une adresse IP et les paramètres auprès du serveur DHCP
 +  * Vérifier les droits du fichier menu (install.ipxe) et des fichiers de démarrage (undionly.kpxe et ipxe.efi)
 +
 +__**Si j'ai le menu**__ (dans ce cas là, c'est le système choisi qui ne démarre pas)
 +  * Vérifier que tous les fichiers pointés dans la configuration du menu sont accessibles et que les chemins sont corrects.
 +  * Vérifier si il n'y a pas un problème de droit 
 +  * Si vous êtes en EFI, vérifiez que ce que vous voulez démarrer est compatible.
 +
 +====Créer une clé USB d'​iPXE====
 +
 +Pour éviter l'​utilisation de dhcp par exemple, il est possible de mettre iPXE sur une clé USB bootable. Il faut compiler ipxe.usb à partir des sources pour ensuite le transférer sur la cle usb. Le paquet suivant sera nécessaire : [[apt>​liblzma-dev]]
 +
 +<​code>​
 +cd /tmp
 +git clone git://​git.ipxe.org/​ipxe.git
 +cd ipxe/src
 +</​code>​
 +
 +<note warning>
 +Manipulez la commande [[:dd]] avec beaucoup de précaution !!
 +</​note>​
 +
 +Pour la version bios :
 +<​code>​
 +make bin/​ipxe.usb
 +dd if=bin/​ipxe.usb of=/dev/sdX status=progress # où sdX représente la clé USB
 +</​code>​
 +
 +Pour la version efi :
 +<​code>​
 +make bin-x86_64-efi/​ipxe.usb
 +dd if=bin-x86_64-efi/​ipxe.usb of=/dev/sdX # où sdX représente la clé USB 
 +</​code>​
 ==== Gagner de la place ==== ==== Gagner de la place ====
 Si vos ISO sont déjà dans un autre emplacement sur votre serveur, il est possible d'​effectuer des liens symbolique afin d'​éviter les doublons. Si vos ISO sont déjà dans un autre emplacement sur votre serveur, il est possible d'​effectuer des liens symbolique afin d'​éviter les doublons.
Ligne 405: Ligne 515:
 </​code>​ </​code>​
  
-Il est aussi faisable d'​automatiser le montage d'ISO au démarrage pour les ISO qui doivent être décompressées. Il suffit d'​automatiser toutes les commandes "mount -o loop" qui sont nécessaires. Par exemple avec une tâche cron @reboot : https://​doc.ubuntu-fr.org/​cron#​comment_fonctionne_cron+Il est aussi faisable d'​automatiser le montage d'ISO au démarrage pour les ISO qui doivent être décompressées. Il suffit d'​automatiser toutes les commandes "mount -o loop" qui sont nécessaires. Par exemple avec une tâche cron @reboot : [[:​cron#​comment_fonctionne_cron|cron]] (il est préférable de lancer un script contenant toutes les commandes mount)
  
 <note important>​ <note important>​
Ligne 415: Ligne 525:
 ==== Bugs connus ==== ==== Bugs connus ====
  
-=== Ubuntu ​Server ​18.04.=== +=== Ubuntu ​et Lubuntu ​18.04.=== 
-Si Ubuntu ​Server ​18.04.1 n'​arrive pas a ce lancer (il s'​arrête en mode maintenance), ​rajouter ​"​systemd.mask=tmp.mount"​ entre "​ip=dhcp"​ et "​--" ​+Si Ubuntu ​ou Lubuntu ​18.04.1 n'​arrive pas à se lancer (il s'​arrête en mode maintenance), ​rajoutez ​"​systemd.mask=tmp.mount"​ entre "​ip=dhcp"​ et "​--" ​
  
-Source ​: https://​bugs.launchpad.net/​ubuntu/​+source/​casper/​+bug/​1754777#​yui_3_10_3_1_1557065713426_342+Pour Ubuntu ou Lubuntu 18.04.2, il faut rajouter en sus : "​systemd.mask=dev-hugepages.mount systemd.mask=dev-mqueue.mount systemd.mask=sys-fs-fuse-connections.mount systemd.mask=sys-kernel-config.mount systemd.mask=sys-kernel-debug.mount systemd.mask=tmp.mount toram"​ 
 + 
 +Pour Ubuntu et Lubuntu 18.04.3, il faut enlever toutes ses modifications faites pour Ubuntu Server 18.04. 1 et 2 sinon l'​installateur plante pendant la copie des fichiers de /​media/​filesystem  
 + 
 +Voir : https://​bugs.launchpad.net/​ubuntu/​+source/​casper/​+bug/​1754777#​yui_3_10_3_1_1557065713426_342 
 + 
 +=== Ubuntu 20.04 === 
 +Sur les distributions basées sur Ubuntu 20.04, un fsck des fichiers est effectué, ce qui rend le démarrage très long. Pour éviter cette étape il suffit de rajouter fsck.mode=skip après boot=casper 
 + 
 +=== Pas de réseau dans Windows PE === 
 +Si le retour de la commande ipconfig ne donne rien, alors c'est qu'il n'y a pas le pilote réseau adéquat pour votre carte réseau. Recherchez son pilote chez le constructeur de votre carte réseau, et, intégrez ce pilote lors de la construction de WinPE. (voir paragraphe : [[:​ipxe#​creer_un_windows_pe|Créer un WinPE sous windows]])
 ===== Voir aussi ===== ===== Voir aussi =====
  
 [[http://​ipxe.org|Site officiel de iPXE]] [[http://​ipxe.org|Site officiel de iPXE]]
 +
 +[[http://​boot.salstar.sk/​|Exemples de menus IPXE]]
  
 **__Contributeur__** **__Contributeur__**
  
 nicolas84 nicolas84
  • ipxe.1557067117.txt.gz
  • Dernière modification: Le 05/05/2019, 16:38
  • par nicolas84