Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
ipxe [Le 05/05/2019, 15:27] – [Démarrer Windows] nicolas84 | ipxe [Le 03/02/2021, 17:08] (Version actuelle) – [Bugs connus] 86.213.93.155 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> | ||
+ | ====== IPXE : utilisation avec TFTP, PXE, DHCP, NFS et HTTP ====== | ||
+ | |||
+ | iPXE permet de mettre en place un système de démarrage PXE (réseau) afin de lancer des systèmes d’exploitation, | ||
+ | |||
+ | L' | ||
+ | |||
+ | Il existe d’autres méthodes comme par exemple : [[: | ||
+ | |||
+ | |||
+ | ===== Installer et lancer les serveurs nécessaires ===== | ||
+ | |||
+ | ==== Serveur DHCP ==== | ||
+ | |||
+ | Installation du serveur DHCP sur le serveur. | ||
+ | <note important> | ||
+ | Un serveur doit avoir une adresse ip fixe ! Ici, le serveur dispose de l’ip 10.0.0.200. Voir : [[: | ||
+ | </ | ||
+ | < | ||
+ | sudo apt update && sudo apt install | ||
+ | sudo nano etc/ | ||
+ | </ | ||
+ | <file - / | ||
+ | default-lease-time 7200; | ||
+ | max-lease-time 7200; | ||
+ | |||
+ | allow unknown-clients; | ||
+ | # | ||
+ | option subnet-mask 255.255.255.0; | ||
+ | |||
+ | ###PXE### | ||
+ | option space PXE; | ||
+ | option PXE.mtftp-ip code 1 = ip-address; | ||
+ | option PXE.mtftp-cport code 2 = unsigned integer 16; | ||
+ | option PXE.mtftp-sport code 3 = unsigned integer 16; | ||
+ | option PXE.mtftp-tmout code 4 = unsigned integer 8; | ||
+ | option PXE.mtftp-delay code 5 = unsigned integer 8; | ||
+ | option arch code 93 = unsigned integer 16; | ||
+ | |||
+ | option space ipxe; | ||
+ | option ipxe-encap-opts code 175 = encapsulate ipxe; | ||
+ | option ipxe.priority code 1 = signed integer 8; | ||
+ | option ipxe.keep-san code 8 = unsigned integer 8; | ||
+ | option ipxe.skip-san-boot code 9 = unsigned integer 8; | ||
+ | option ipxe.syslogs code 85 = string; | ||
+ | option ipxe.cert code 91 = string; | ||
+ | option ipxe.privkey code 92 = string; | ||
+ | option ipxe.crosscert code 93 = string; | ||
+ | option ipxe.no-pxedhcp code 176 = unsigned integer 8; | ||
+ | option ipxe.bus-id code 177 = string; | ||
+ | option ipxe.san-filename code 188 = string; | ||
+ | option ipxe.bios-drive code 189 = unsigned integer 8; | ||
+ | option ipxe.username code 190 = string; | ||
+ | option ipxe.password code 191 = string; | ||
+ | option ipxe.reverse-username code 192 = string; | ||
+ | option ipxe.reverse-password code 193 = string; | ||
+ | option ipxe.version code 235 = string; | ||
+ | option iscsi-initiator-iqn code 203 = string; | ||
+ | # Feature indicators | ||
+ | option ipxe.pxeext code 16 = unsigned integer 8; | ||
+ | option ipxe.iscsi code 17 = unsigned integer 8; | ||
+ | option ipxe.aoe code 18 = unsigned integer 8; | ||
+ | option ipxe.http code 19 = unsigned integer 8; | ||
+ | option ipxe.https code 20 = unsigned integer 8; | ||
+ | option ipxe.tftp code 21 = unsigned integer 8; | ||
+ | option ipxe.ftp code 22 = unsigned integer 8; | ||
+ | option ipxe.dns code 23 = unsigned integer 8; | ||
+ | option ipxe.bzimage code 24 = unsigned integer 8; | ||
+ | option ipxe.multiboot code 25 = unsigned integer 8; | ||
+ | option ipxe.slam code 26 = unsigned integer 8; | ||
+ | option ipxe.srp code 27 = unsigned integer 8; | ||
+ | option ipxe.nbi code 32 = unsigned integer 8; | ||
+ | option ipxe.pxe code 33 = unsigned integer 8; | ||
+ | option ipxe.elf code 34 = unsigned integer 8; | ||
+ | option ipxe.comboot code 35 = unsigned integer 8; | ||
+ | option ipxe.efi code 36 = unsigned integer 8; | ||
+ | option ipxe.fcoe code 37 = unsigned integer 8; | ||
+ | option ipxe.vlan code 38 = unsigned integer 8; | ||
+ | option ipxe.menu code 39 = unsigned integer 8; | ||
+ | option ipxe.sdi code 40 = unsigned integer 8; | ||
+ | option ipxe.nfs code 41 = unsigned integer 8; | ||
+ | |||
+ | ### | ||
+ | subnet 10.0.0.0 netmask 255.255.255.0 { | ||
+ | option broadcast-address 10.0.0.255; | ||
+ | option routers 10.0.0.1; | ||
+ | option domain-name-servers 8.8.8.8, 1.1.1.1; | ||
+ | range 10.0.0.100 10.0.0.199; | ||
+ | ping-check = 1; | ||
+ | next-server 10.0.0.200; | ||
+ | # PXE | ||
+ | if option arch = 00:07 or option arch = 00:09 { | ||
+ | if exists user-class and option user-class = " | ||
+ | filename " | ||
+ | } else { | ||
+ | filename " | ||
+ | } | ||
+ | } else if option arch = 00:06 { | ||
+ | if exists user-class and option user-class = " | ||
+ | filename " | ||
+ | } else { | ||
+ | filename " | ||
+ | } | ||
+ | } else { | ||
+ | if exists user-class and option user-class = " | ||
+ | filename " | ||
+ | } else { | ||
+ | filename " | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | <note tip> | ||
+ | Dans la configuration ci-dessous le réseau est configuré en 10.0.0.0/ | ||
+ | </ | ||
+ | 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) | ||
+ | Pour plus d’info sur la configuration : | ||
+ | < | ||
+ | sudo service isc-dhcp-server restart | ||
+ | </ | ||
+ | |||
+ | <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 " | ||
+ | |||
+ | Dans le cas où il n'est pas possible de désactiver les autres serveur DHCP, à minima, il faut régler le paramètre " | ||
+ | |||
+ | Une autre méthode consiste à amorcer iPXE à l'aide d'une clé USB : [[: | ||
+ | </ | ||
+ | ==== Serveur TFTP ==== | ||
+ | |||
+ | Le serveur TFTP est celui qui va fournir les fichiers nécessaires au démarrage réseau. | ||
+ | < | ||
+ | sudo apt install tftpd-hpa | ||
+ | sudo nano / | ||
+ | </ | ||
+ | <file - / | ||
+ | # / | ||
+ | |||
+ | TFTP_USERNAME=" | ||
+ | TFTP_DIRECTORY="/ | ||
+ | TFTP_ADDRESS=" | ||
+ | TFTP_OPTIONS=" | ||
+ | RUN_DAEMON=" | ||
+ | </ | ||
+ | Ensuite, redémarrer le service : | ||
+ | < | ||
+ | sudo service tftpd-hpa restart | ||
+ | </ | ||
+ | <note tip> | ||
+ | Si un pare-feu est activé, ouvrir le port 69 | ||
+ | </ | ||
+ | |||
+ | ==== Serveur NFS ==== | ||
+ | |||
+ | Le serveur NFS sera nécessaire dans certains cas, il permet de laisser à disposition des fichiers au système démarré. | ||
+ | < | ||
+ | sudo apt install nfs-kernel-server | ||
+ | </ | ||
+ | <note tip> | ||
+ | Si un pare-feu est activé, consultez cette page : [[nfs-ufw|Fixer les ports pour un partage NFS]] | ||
+ | </ | ||
+ | |||
+ | ==== Serveur LAMP basique ==== | ||
+ | |||
+ | Pour fonctionner, | ||
+ | < | ||
+ | sudo apt install apache2 php libapache2-mod-php php-mysql php-curl php-gd php-intl php-json php-mbstring php-xml php-zip | ||
+ | </ | ||
+ | Pour plus d' | ||
+ | |||
+ | On créer un lien symbolique de tftpboot sur le serveur LAMP : | ||
+ | < | ||
+ | ln -s / | ||
+ | </ | ||
+ | |||
+ | ===== Préparer les fichiers de démarrage iPXE ===== | ||
+ | |||
+ | Ces fichiers sont téléchargeables sur le site officiel de ipxe. | ||
+ | < | ||
+ | cd / | ||
+ | wget http:// | ||
+ | wget http:// | ||
+ | </ | ||
+ | <note tip> | ||
+ | Ici, le lien vers le serveur HTTP est effectué par le serveur DHCP. | ||
+ | Il existe une autre méthode consistant à compiler manuellement pour simplifier le travail du serveur DHCP (le lien vers le serveur HTTP est intégré au fichier). | ||
+ | < | ||
+ | cd /tmp | ||
+ | git clone git:// | ||
+ | cd / | ||
+ | nano / | ||
+ | </ | ||
+ | <file - / | ||
+ | #!ipxe | ||
+ | |||
+ | dhcp | ||
+ | chain http:// | ||
+ | </ | ||
+ | < | ||
+ | cd / | ||
+ | make bin-x86_64-efi/ | ||
+ | make bin-i386-efi/ | ||
+ | make undionly.kpxe EMBED=chain.ipxe | ||
+ | |||
+ | cp bin-x86_64-efi/ | ||
+ | cp bin-i386-efi/ | ||
+ | </ | ||
+ | La construction nécessite les paquets suivants : [[apt> | ||
+ | </ | ||
+ | |||
+ | ===== Créer le menu de iPXE ===== | ||
+ | |||
+ | Le menu de iPXE doit être situé sur le serveur web. Le fichier install.ipxe doit selon le reste du tutoriel être situé à la racine du serveur DHCP. Dans le cas contraire, il faut adapter la configuration de DHCP ou le fichier chain.ipxe lors de la compilation. | ||
+ | < | ||
+ | sudo nano / | ||
+ | </ | ||
+ | <file - / | ||
+ | #!ipxe | ||
+ | |||
+ | set menu-timeout 9000000 | ||
+ | set submenu-timeout ${menu-timeout} | ||
+ | isset ${menu-default} || set menu-default item3 | ||
+ | set server_ip 10.0.0.200 | ||
+ | |||
+ | menu | ||
+ | item --gap -- | ||
+ | item item1 Item 1 | ||
+ | item --gap -- | ||
+ | item item2 Item 2 | ||
+ | item item3 Item 3 | ||
+ | item shell Shell iPXE | ||
+ | item exit Exit | ||
+ | |||
+ | choose --timeout ${menu-timeout} --default ${menu-default} target && goto ${target} | ||
+ | |||
+ | :item1 | ||
+ | # | ||
+ | |||
+ | :item2 | ||
+ | # | ||
+ | |||
+ | :item3 | ||
+ | # | ||
+ | |||
+ | :shell | ||
+ | shell | ||
+ | |||
+ | :exit | ||
+ | exit | ||
+ | </ | ||
+ | <note tip> | ||
+ | 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 [[: | ||
+ | </ | ||
+ | |||
+ | ===== Tester le fonctionnement ===== | ||
+ | Utiliser un ordinateur ou une machine virtuelle pour tenter un démarrage PXE. Pour cela, il faut changer l' | ||
+ | |||
+ | Plus d' | ||
+ | |||
+ | <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' | ||
+ | Dans les paramètres VirtualBox, ajouter l' | ||
+ | </ | ||
+ | ===== Compléter le menu ipxe ===== | ||
+ | |||
+ | ==== Savoir décompresser une ISO ==== | ||
+ | Souvent, il sera nécessaire d' | ||
+ | < | ||
+ | sudo mount -o loop / | ||
+ | sudo mkdir / | ||
+ | sudo cp -r /mnt/* / | ||
+ | sudo umount /mnt | ||
+ | </ | ||
+ | Il faudra rétablir les bons droits : | ||
+ | < | ||
+ | sudo chown -R root:root / | ||
+ | sudo chmod 755 / | ||
+ | </ | ||
+ | Parce qu'il est parfois plus simple d' | ||
+ | < | ||
+ | sudo ln -s / | ||
+ | </ | ||
+ | <note important> | ||
+ | Pour la suite du tutoriel, il faudra toujours vérifier que tous les chemins d' | ||
+ | </ | ||
+ | ==== Démarrer une installation Linux (casper) ==== | ||
+ | Après avoir décompressé sur le serveur tftp un __Live CD__ d' | ||
+ | <file - / | ||
+ | item ubuntuinstall | ||
+ | |||
+ | # Plus bas... | ||
+ | |||
+ | : | ||
+ | kernel http:// | ||
+ | initrd http:// | ||
+ | imgargs vmlinuz initrd=initrd root=/ | ||
+ | boot | ||
+ | </ | ||
+ | <note tip> | ||
+ | Il convient évidemment d' | ||
+ | </ | ||
+ | Il faudra ensuite autoriser le partage dans le fichier de configuration de NFS : | ||
+ | < | ||
+ | sudo echo "/ | ||
+ | sudo service nfs-kernel-server restart | ||
+ | </ | ||
+ | ==== Démarrer Windows ==== | ||
+ | Pour Windows, la méthode consiste a démarrer un Windows PE, puis, ci-besoin lancer une installation depuis un serveur samba. Il sera utilisé wimboot. | ||
+ | |||
+ | === Obtenir wimboot === | ||
+ | < | ||
+ | cd /tmp | ||
+ | wget git.ipxe.org/ | ||
+ | unzip wimboot-latest.zip | ||
+ | cp wimboot*/ | ||
+ | </ | ||
+ | |||
+ | === Créer un Windows PE === | ||
+ | |||
+ | == Sous Linux == | ||
+ | < | ||
+ | cd /tmp | ||
+ | wget https:// | ||
+ | mount -o loop KB3AIK_FR.iso /mnt | ||
+ | mkwinpeimg --iso --arch=[amd64|x86] --waik-dir=/ | ||
+ | umount /mnt | ||
+ | </ | ||
+ | |||
+ | == Sous Windows == | ||
+ | |||
+ | Pré-requis : Télécharger et installer Windows ADK [[https:// | ||
+ | |||
+ | <note important> | ||
+ | Désactiver votre programme antivirus lors de la manipulation des images. | ||
+ | </ | ||
+ | |||
+ | Dans le menu démarrer taper : " | ||
+ | |||
+ | Copier WinPE | ||
+ | < | ||
+ | copype amd64 C: | ||
+ | </ | ||
+ | |||
+ | Monter l' | ||
+ | < | ||
+ | Dism / | ||
+ | </ | ||
+ | |||
+ | <note tip> | ||
+ | Il est possible a ce stade de rajouter des fichiers/ | ||
+ | |||
+ | Il est aussi possible de modifier le script de démarrage (pour lancer des commandes automatiquement au démarrage) : | ||
+ | Exemple : | ||
+ | <file - C: | ||
+ | wpeinit | ||
+ | net use Y: \\10.0.0.200\win10_1809_custom_x64 /user:user pass | ||
+ | Y: | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | __Pour ajouter des pilotes de périphériques (.inf) : __ | ||
+ | |||
+ | Un seul à la fois : | ||
+ | < | ||
+ | Dism /Add-Driver / | ||
+ | </ | ||
+ | Tout un dossier de .inf (il peut être nécessaire d' | ||
+ | < | ||
+ | Dism /Add-Driver / | ||
+ | </ | ||
+ | Vérification : | ||
+ | < | ||
+ | Dism / | ||
+ | </ | ||
+ | <note tip> | ||
+ | D' | ||
+ | </ | ||
+ | Quand toutes les modifications sont terminées, il faut démonter l' | ||
+ | < | ||
+ | Dism / | ||
+ | </ | ||
+ | |||
+ | Création d'un image ISO : | ||
+ | < | ||
+ | Makewinpemedia /iso C: | ||
+ | </ | ||
+ | |||
+ | === Configuration du menu === | ||
+ | Après avoir extrait l'iso dans un dossier comme expliqué plus haut, les paramètres sont les suivants : | ||
+ | <file - / | ||
+ | item winpe Windows PE | ||
+ | |||
+ | # Plus bas.... | ||
+ | |||
+ | |||
+ | :winpe | ||
+ | kernel http:// | ||
+ | initrd http:// | ||
+ | initrd http:// | ||
+ | initrd http:// | ||
+ | boot | ||
+ | </ | ||
+ | |||
+ | === Lancer Windows PE === | ||
+ | Préalablement, | ||
+ | |||
+ | === Lancer une installation de Windows === | ||
+ | |||
+ | == Installer et lancer le serveur samba == | ||
+ | Pour lancer des installations, | ||
+ | < | ||
+ | sudo apt-get install samba samba-common-bin | ||
+ | sudo cp / | ||
+ | sudo nano / | ||
+ | </ | ||
+ | Ajouter à la fin du fichier : | ||
+ | <file - / | ||
+ | [win10] | ||
+ | path = / | ||
+ | browseable = no | ||
+ | writable = no | ||
+ | guest ok = yes | ||
+ | create mask = 0775 | ||
+ | directory mask = 0775 | ||
+ | </ | ||
+ | |||
+ | == Lancer setup.exe == | ||
+ | Une fois Windows PE de démarrer, saisir dans l' | ||
+ | < | ||
+ | net use Y: \\10.0.0.200\win10 /user:user pass | ||
+ | Y: | ||
+ | </ | ||
+ | <note tip> | ||
+ | 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. | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | Pour les deux solutions, il est possible d' | ||
+ | <file - %windir%/ | ||
+ | wpeinit | ||
+ | net use Y: \\10.0.0.200\win10 /user:user pass | ||
+ | Y: | ||
+ | </ | ||
+ | |||
+ | Si ce n'est pas automatiser, | ||
+ | </ | ||
+ | ==== Démarrer les petites ISO ==== | ||
+ | Pour démarrer des petites ISO, nous allons utiliser sanboot pour sa simplicité. | ||
+ | <note important> | ||
+ | Les démarrage via sanboot oblige l' | ||
+ | </ | ||
+ | |||
+ | <file - / | ||
+ | item memtest86 | ||
+ | |||
+ | # Plus bas... | ||
+ | |||
+ | :memtest86 | ||
+ | sanboot http:// | ||
+ | </ | ||
+ | |||
+ | ==== Démarrer une installation de MAC OS ==== | ||
+ | Un projet github propose une solution : [[https:// | ||
+ | |||
+ | |||
+ | |||
+ | ===== 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' | ||
+ | * 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' | ||
+ | |||
+ | Pour éviter l' | ||
+ | |||
+ | < | ||
+ | cd /tmp | ||
+ | git clone git:// | ||
+ | cd ipxe/src | ||
+ | </ | ||
+ | |||
+ | <note warning> | ||
+ | Manipulez la commande [[:dd]] avec beaucoup de précaution !! | ||
+ | </ | ||
+ | |||
+ | Pour la version bios : | ||
+ | < | ||
+ | make bin/ | ||
+ | dd if=bin/ | ||
+ | </ | ||
+ | |||
+ | Pour la version efi : | ||
+ | < | ||
+ | make bin-x86_64-efi/ | ||
+ | dd if=bin-x86_64-efi/ | ||
+ | </ | ||
+ | ==== Gagner de la place ==== | ||
+ | Si vos ISO sont déjà dans un autre emplacement sur votre serveur, il est possible d' | ||
+ | < | ||
+ | ln -s / | ||
+ | </ | ||
+ | |||
+ | Il est aussi faisable d' | ||
+ | |||
+ | <note important> | ||
+ | Ne pas utiliser de lien symbolique à l' | ||
+ | |||
+ | Il est en revanche possible d'en utiliser avant le point de montage du partage. | ||
+ | </ | ||
+ | |||
+ | ==== Bugs connus ==== | ||
+ | |||
+ | === Ubuntu et Lubuntu 18.04.* === | ||
+ | Si Ubuntu ou Lubuntu 18.04.1 n' | ||
+ | |||
+ | Pour Ubuntu ou Lubuntu 18.04.2, il faut rajouter en sus : " | ||
+ | |||
+ | Pour Ubuntu et Lubuntu 18.04.3, il faut enlever toutes ses modifications faites pour Ubuntu Server 18.04. 1 et 2 sinon l' | ||
+ | |||
+ | Voir : https:// | ||
+ | |||
+ | === 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 : [[: | ||
+ | ===== Voir aussi ===== | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | **__Contributeur__** | ||
+ | |||
+ | nicolas84 |