X. Pre-Boot Execution Environment (PXE)▲
Le Pre-Boot Execution Environment (PXE) permet d’utiliser le NAS comme espace de stockage à partir duquel démarrer une machine (en remplacement d’un live CD ou d’un disque dur).
Pour cela, le NAS doit offrir les services suivants :
- un serveur DHCP, pour offrir une adresse IP à la machine client utilisant PXE ;
- un serveur TFTP (Trivial FTP) pour fournir les fichiers permettant d’afficher un menu à l’utilisateur ;
- optionnellement, un serveur NFS, pour fournir un système de fichiers complet et persistant.
PXE est généralement disponible sur tous les PC si ces derniers sont connectés par câble Ethernet. Pour démarrer un PC à partir du NAS, il faudra certainement aller dans le BIOS afin d’activer le démarrage à partir du réseau et afin d’assigner celui-ci en premier dans la liste des périphériques sur lesquels démarrer.
X-A. TFTP▲
Le serveur TFTP s’active simplement dans le « Panneau de configuration » → « Serveurs d’applications » → « Serveur TFTP ». Une fois TFTP activé, il est nécessaire de spécifier le répertoire racine du partage :
Il est aussi possible d’activer les journaux spécifiques à ce serveur. Cela peut être très pratique pendant la période de mise en place du PXE.
X-B. DHCP▲
Le serveur DHCP se configure dans l’application « Réseau et commutateur virtuel ». Pour mettre en place PXE, il faut activer le serveur DHCP du NAS. Dans les paramètres avancés de celui-ci, vous pourrez spécifier le serveur TFTP et un fichier de démarrageChargeur de démarrage.
X-C. NFS▲
Le serveur NFS est optionnel. Il peut être activé dans le « Panneau de configuration » → « Réseau et service de fichiers » → « Win/Mac/NFS ». Une fois NFS activé, il ne faut pas oublier d’aller dans les propriétés des dossiers partagés « Panneau de configuration » → « Privilège » → « Dossiers partagés » afin de bien rendre accessible depuis un client NFS, le dossier voulu.
X-D. PXE▲
Comme vu dans la configuration du serveur DHCP, il faut spécifier un fichier de démarrage (ou chargeur).
X-D-1. Chargeur de démarrage▲
Le chargeur de démarrage est un programme spécial, car il ne doit reposer sur aucun système d’exploitation, ce dernier n’étant pas démarré. Le chargeur de démarrage est donc un programme d’apparence simple qui affichera un menu à l’utilisateur, permettant à ce dernier de sélectionner ce qu’il souhaite charger.
X-D-1-a. SYSLINUX▲
SYSLINUX est un chargeur de démarrage libre et open source. L’archive de SYSLINUX est téléchargeable ici (version 6.03). À partir de celle-ci, vous devez retrouver les fichiers :
- pxelinux.0, le programme initial ;
- ldlinux.c32, libcom32.c32, libutil.c32, mboot.c32, menu.c32, vesamenu.c32 (optionnel), des programmes additionnels pour gérer des éléments particuliers (tels que l‘affichage du menu, le chargement du noyau Linux…) ;
- un dossier prelinux.cfg contenant au minimum le fichier default. Ce dernier étant la configuration du menu affiché par PXE ;
- memtest, memdisk, des programmes optionnels, pour charger un test mémoire et lire un fichier ISO respectivement.
Pour plus de simplicité, voici une archive contenant les fichiers en question.
X-D-1-a-i. Configuration▲
À son lancement, SYSLINUX affiche un menu permettant à l’utilisateur de choisir quel système démarrer. Ce menu se configure à travers le dossier prelinux.cfg. SYSLINUX cherche et charge le fichier prelinux.cfg/default. La configuration peut être retrouvée dans le Wiki officiel. En voici un exemple simple :
DEFAULT menu.c32
MENU TITLE Serveur PXE
PROMPT 0
TIMEOUT 300
ONTIMEOUT chainlocal
LABEL local
MENU LABEL Boot local hard drive
LOCALBOOT 0
LABEL Memtest
KERNEL memtest
Facilement compréhensible, voici le détail :
Label |
Désignation |
DEFAULT |
Indique la ligne de commande par défaut. Ici, elle permet de décider quelle interface afficher. Elle est obligatoire. |
INCLUDE |
Inclut un sous-fichier de configuration. Ce dernier sera inséré tel quel dans le fichier actuel. |
MENU TITLE |
Le titre à afficher. |
PROMPT |
Indique si l’invite de commande doit être affichée. 0 permet de ne pas l’afficher, ou seulement si l’utilisateur appuie sur Maj ou Alt. |
TIMEOUT |
Le temps qui s’écoule avant une validation automatique du menu. |
ONTIMEOUT |
L’entrée du menu à choisir une fois le temps d’expiration écoulé. |
LABEL |
Une entrée dans le menu. |
MENU LABEL |
Le texte à afficher pour ce choix dans le menu. |
LOCALBOOT 0 |
Effectue un démarrage normal (démarre sur le disque dur). |
KERNEL |
Le fichier noyau à charger. |
INITRD |
Le fichier initrd à charger. |
APPEND |
Ajoute des options à la ligne de commande pour le noyau. |
Les labels ne sont pas sensibles à la case.
Globalement, pour ajouter une entrée, il suffira d’ajouter un LABEL, son nom et la commande pour le démarrer. Pour les systèmes Linux, il faudra indiquer un fichier noyau et un fichier initrd. Par exemple, Debian se démarre en ajoutant l’entrée suivante :
LABEL Debian 32 bit
KERNEL debian/linux
APPEND initrd=debian/initrd.gz --
Évidemment, pour que cela fonctionne, il faut ajouter le fichier linux et initrd.gz sur le serveur TFTP (ici, dans un sous-répertoire debian). Ces fichiers peuvent être trouvés dans les CD des distributions Linux ou dans le dossier /boot d’une installation.
Les machines utilisant EFI ne peuvent pas démarrer le programme pxelinux.0. Pour ces machines, il faut utiliser un programme spécifique syslinux.efi (disponible en 32 et 64bits).
X-D-1-a-ii. Chargement de fichier ISO▲
Jusqu’à présent, il n’était possible que de charger les fichiers noyau et initrd, et donc, que des systèmes Linux. Toutefois, cela ne couvre pas l’intégralité des cas et il peut être nécessaire de charger directement des ISO.
Pour pouvoir charger un fichier ISO (ou IMG), il faut utiliser le programme memdisk et spécifier l’ISO à charger. Voici une entrée d’exemple à ajouter au fichier de configuration :
LABEL ISO Debian
KERNEL memdisk
INITRD debian-iso/debian-10.1.0-amd64-netinst.iso
APPEND iso
Le fichier ISO de Debian est placé dans un sous-dossier debian-iso à la racine du serveur TFTP.
X-D-1-a-iii. Charger une ISO Windows▲
Vous ne pouvez pas utiliser une ISO « standard » de Windows avec PXE/SYSLINUX. Il est donc nécessaire de préparer une ISO WinPE, une version très allégée de Windows conçue pour être exécutée en mémoire et pour pouvoir démarrer à partir du réseau.
Pour obtenir cette ISO WinPE, vous avez deux possibilités :
- utiliser un fichier ISO Windows ;
- utiliser le Windows Assessment and Deployment Kit (WADK). Dans ce cas, sous Linux, il faudra le programme cabextract afin d’extraire les fichiers .cab.
Pour cet exemple, nous partons du fichier ISO Windows, téléchargeable ici. Aussi, sous Linux, nous avons besoin du paquet wimlib offrant la commande mkwinpeimg.
Nous utilisons les fichiers contenus dans le fichier ISO de Windows afin de créer notre ISO WinPE. Par conséquent, il faut monter l’image :
mount -o loop,ro ./Win10_2004_French_x64.iso /media/iso/
Aussi, il est possible de préparer un fichier start.cmd qui est automatiquement exécuté après le démarrage de WinPE :
cmd.exe
pause
L’exemple ci-dessus correspond à l’exemple le plus simple de fichier start.cmd : il ouvre une invite de commande et attend. Vous pouvez faire évoluer ce fichier comme bon vous semble.
Ensuite, nous pouvons créer notre fichier ISO WinPE avec mkwinpeimg :
mkwinpeimg --iso --windows-dir
=
/media/iso/ --start-script
=
start.cmd winpe.iso
Le fichier winpe.iso est à placer sur le NAS et vous devez évidemment ajouter une entrée dans votre menu SYSLINUX :
LABEL winpe
KERNEL memdisk
INITRD ISO/winpe.iso
APPEND iso raw
X-D-1-b. Chargeur de démarrage Windows▲
Microsoft propose un chargeur de démarrage pour démarrer les systèmes Microsoft. Pour récupérer les fichiers du chargeur de démarrage, il est nécessaire d’installer le Windows Assessment and Deployment Kit. Plus précisément, il faut le logiciel « Windows ADK » ainsi que « Windows PE add-on for the ADK ».
Le lancement du programme « Environnement de déploiement et d’outils de création d’images » (« Deployment and Imaging Tools Environment ») en tant qu’administrateur permet d’obtenir une invite de commande en mesure de récupérer les fichiers d’un système de base. La commande suivante créera un nouveau dossier avec les fichiers en question :
copype.cmd amd64 C:\dossier_travail
Dans la commande ci-dessus, ‘amd64’ peut être remplacé par ‘x86’, ‘arm’ et ‘arm64’. De plus, ‘dossier_travail’ indique simplement un dossier de destination, dans lequel la commande placera les fichiers. Le dossier ne doit pas exister, il sera créé par la commande.
Il est ensuite nécessaire de monter l’image de Windows PE afin d’y récupérer les fichiers nécessaires pour le PXE :
Dism /mount-image /imagefile:c:\dossier_travail\media\sources\boot.wim /index:1 /mountdir:C:\dossier_travail\mount
Le serveur TFTP fourni par QNAP est sensible à la casse. Sachant que le chargeur de démarrage de Microsoft cherche le fichier de configuration ‘BCD’ dans le dossier \Boot, le dossier doit avoir une majuscule dans son nom. Cela veut dire que lors de la création du fichier BCD, vous devez aussi spécifier les chemins avec une majuscule dans le nom.
Les fichiers à copier dans un dossier Boot sur le serveur TFTP sont les suivants :
- tous les fichiers dans c:/dossier_travail/mount/windows/boot/pxe/ ;
- le fichier c:/dossier_travail/media/boot/boot.sdi ;
- le fichier c:/dossier_travail/media/sources/boot.wim ;
- le dossier c:/dossier_travail/media/boot/fonts dans un sous dossier boot/Fonts sur serveur TFTP ;
- copier les fichiers pxeboot.n12 et bootmgr.exe du dossier Boot à la racine du serveur TFTP.
Finalement, il est nécessaire de créer le fichier de configuration de la procédure de démarrage (fichier BCD, pour Boot Configuration Data), grâce à l’outil bcdedit :
bcdedit /createstore c:\BCD
bcdedit /store c:\BCD /create {ramdiskoptions} /d "Ramdisk options"
bcdedit /store c:\BCD /set {ramdiskoptions} ramdisksdidevice boot
bcdedit /store c:\BCD /set {ramdiskoptions} ramdisksdipath \Boot\boot.sdi
Pour la suite des paramètres, il est nécessaire d’avoir un GUID qui peut être généré ainsi :
bcdedit /store c:\BCD /create /d "winpe boot image" /application osloader
Dans les commandes suivantes, « GUID » est à remplacer par le GUID qui vient d’être généré.
Il ne faut pas enlever les accolades autour du GUID.
bcdedit /store c:\BCD /set {GUID} device ramdisk=[boot]\Boot\boot.wim,{ramdiskoptions}
bcdedit /store c:\BCD /set {GUID} path \windows\system32\winload.exe
bcdedit /store c:\BCD /set {GUID} osdevice ramdisk=[boot]\Boot\boot.wim,{ramdiskoptions}
bcdedit /store c:\BCD /set {GUID} systemroot \windows
bcdedit /store c:\BCD /set {GUID} detecthal Yes
bcdedit /store c:\BCD /set {GUID} winpe Yes
bcdedit /store c:\BCD /create {bootmgr} /d "boot manager"
bcdedit /store c:\BCD /set {bootmgr} timeout 30
bcdedit /store c:\BCD -displayorder {GUID} -addlast
La commande bcdedit /store c:\BCD /enum all permet de vérifier les entrées configurées dans le BCD.
Finalement, il ne reste plus qu’à copier le fichier c:/BCD dans le dossier ‘boot’ du serveur TFTP. Dans la configuration du NAS de QNAP, il faut indiquer comme chargeur de démarrage le fichier PXEboot.n12.
X-D-2. Tests▲
Il est possible de réaliser des tests de la configuration du PXE en utilisant une machine virtuelle démarrant l’ISO de iPXE et en la configurant pour qu’elle apparaisse sur le même réseau que le NAS (réseau en mode pont, et non en mode NAT).
Si vous avez une machine avec GRUB, il est aussi possible de le configurer pour afficher un menu pour lancer un chargement à partir du réseau.
X-E. Système sans disque▲
Il est aussi possible d’utiliser le NAS comme espace de stockage du système d’exploitation, dont le démarrage a été initié à travers le réseau. Pour cela, il est nécessaire d’activer le partage de fichiers à travers le protocole NFS.
De plus, de nouvelles options doivent être passées au noyau afin de lui indiquer le serveur NFS. Ainsi, l’entrée dans la configuration de SYSLINUX deviendra :
LABEL Debian (AMD64)
KERNEL debian64/linux
APPEND root=/dev/nfs initrd=debian64/initrd.gz nfsroot=192.168.1.130:/volume1/Test/debian ip=dhcp rw --
Le dossier partagé sur le NFS doit contenir soit :
- les fichiers d’un CD Linux, permettant ainsi le démarrage d’un système Live. Toutefois, l’installation se fera sur le disque local à la machine ;
- les fichiers du système Linux à exécuter. Ceux-ci peuvent être préparés à travers un processus tel que debootstrap pour Debian, ou en copiant une installation existante de Linux.
Il existe l’option nfsrootdebug permettant d’afficher des messages supplémentaires en lien avec l’utilisation de nfsroot.
X-F. Conclusion▲
Ce chapitre a permis d’explorer une autre possibilité offerte par le TS-253D de QNAP.