Ajout PXE linux sur WDS

Mise en œuvre de syslinux sur WDS

Pour de nombreuses sociétés, universités ou centres de formation, la solution de déploiement ne se cantonne pas toujours à des machines sous Windows et peut conduire à des choix difficiles. Dans le cadre d’une complémentarité  avec les systèmes d’exploitation tels que Linux, que naturellement Windows Deployment Services ne prend pas en charge, je vous propose une approche alternative,  prétexte à une analyse plus approfondie des mécanismes du chargeur de démarrage WDS (“bootstrap loader”).

A. Rappels et précisions sur WDS

En premier lieu, il convient de présenter la structure des dossiers retenue par Microsoft pour son serveur WDS. La racine, dénommée “TFTP Root“, est située dans le dossier défini lors de l’installation (ie. “E:\RemoteInstall\” ), mais les clients ont un droit de lecture par défaut uniquement sur les sous-dossiers “boot” et “tmp”. Ces réglages sont respectivement stipulés sous la clé de registre  suivante :

HKLM:\SYSTEM\CurrentControlSet\Services\WDSServer\Providers\WDSTFTP

  • Pour l’emplacement de la racine TFTP via l’entrée [REG_SZ] “RootFolder” =  “E:\RemoteInstall”
  • Pour les droits de lecture des clients PXE via l’entrée [REG_MULTI_SZ] “ReadFilter” = “\boot\* \tmp\* boot\* tmp\*”.

Au niveau de la racine TFTP, on distinguera 2 dossiers essentiels :

  • Boot” : Contient la structure composée principalement des fichiers liés à l’amorçage (Bootstrap Loaders) et des images .WIM de démarrage (Autrement dit, les images système WinPE).
  • Images” : Contient les images .WIM d’installation (Autrement dit, les distributions Windows préparées avec “sysprep”)

 

Dans la structure de dossier “Boot“,  il semblerait que Microsoft ait choisi d’utiliser un sous-répertoire propre à chaque plateforme (x86, x64, IA64,arm …), dans lesquels sont stockés les fichiers  d’amorçage (tels que bootmgr.exe , default.bcd, pxeboot.com, wdsnbp.com …)  et un sous-dossier “Images” dans lequel sont placés les images .WIM de WinPE ainsi qu’un fichier “.WIM.bcd” associé.

Sur le plan pratique, il apparait que les fichiers situés dans les dossiers x86 et x64 sont identiques et le répertoire  x86x64 ne contient que le fichier de configuration d’amorçage. En focalisant les actions uniquement sur le dossier x86, je n’ai pas relevé de soucis notables avec des machines x64. Réciproquement, si vous travaillez sur le dossier x64, et adaptez les réglages en conséquence, les résultats devraient être sensiblement les mêmes.

Le premier chargeur d’amorçage PXE, nommé “wdsnbp.com” commence par valider l’architecture processeur du client puis, initialise l’amorçage correspondant. En fonction des réglages du serveur la machine peut attendre une confirmation (cf  périphériques en attente)  ou initialiser le chargeur par défaut “pxeboot.com“(son équivalent, le fichier “pxeboot.n12” évite la confirmation du chargement via un second appui sur la touche [F12]). En fonction des images de démarrage disponibles, un éventuel menu est ensuite affiché puis le chargement du noyau WinPE est effectué.

Ce processus peut être modifié au niveau des propriétés du serveur sous l’onglet “Démarrer“.

En résumé, sous WDS, le principe d’amorçage standard PXE pourrait schématiquement être représenté comme suit :

Note : Sous WDS, les fichiers portant l’extension “.n12” sont équivalents à leurs homologues “.com”  à la différence qu’ils ne demandent pas de confirmation via l’appui de la touche [F12].

Mise en œuvre d’un chainage PXE Linux sur WDS

Dans cette démonstration ostensiblement marginale, je souhaitais simplement démontrer qu’il était possible de substituer ce système d’amorçage par un chargeur Linux ayant la possibilité de rendre la main au chargeur WDS initial en cas de besoin.

1. Récupérer un noyau syslinux

Pour modifier le processus d’amorçage précédemment décrit, vous devez préalablement télécharger un noyau “syslinux” tel que la version 4.07 à l’adresse suivante  http://www.kernel.org/pub/linux/utils/boot/syslinux/

Sachant que certains de ces fichiers spéciaux ne portent pas d’extension, pensez à démasquer les extensions de fichiers connus afin d’éviter les confusions, surtout si vous effectuez ces manipulations via l’interface graphique de Windows.

Choisissez l’un des packages proposés,  portant idéalement une extension “.zip” afin de le gérer au sein de l’explorateur Windows. Vous devrez ensuite extraire de cette archive  les 3 fichiers suivants vers le dossier “Boot\x86”  situé sous la racine TFTP du serveur WDS, soit “\RemoteInstall“.

  • modules/pxechain.com
  • core/pxelinux.0
  • com32/menu/menu.c32

2. Facultatif : Récupérer une distribution Linux

Téléchargez ensuite un noyau d’amorçage réseau Linux comme par exemple celui d’une distribution Ubuntu à l’adresse suivante : http://archive.ubuntu.com/ubuntu/dists/devel/main/installer-amd64/20101020ubuntu609/images/netboot/

Enregistrez les 2 fichiers “linux” et “initrd.gz” dans le même dossier “boot\x86\ubuntu” situé sous la racine TFTP du serveur WDS.

3. Facultatif : Ajouter un outil de test mémoire

Pour compléter cet exemple, je vous propose d’ajouter le célèbre outil de test mémoire “Memtest86” que vous pouvez télécharger à l’adresse suivante : http://www.memtest.org/download/5.01/memtest86+-5.01.bin

Si vous avez récupéré un fichier au format “.gz”, ouvrez cette archive avec “7-Zip” et faites une extraction de l’unique fichier dans ce même dossier “boot/x86/memtest” sous la racine TFTP du serveur WDS, puis renommez ce fichier “memtest86” sans extension.

4. Préparer les amorces PXE

À partir de l’explorateur Windows ou en ligne de commande, au niveau du sous-dossier “Boot\x86“, créez une copie du fichier “pxeboot.n12” et renommez-la en “pxeboot.0“. Faites de même pour le fichier “abortpxe.com” que vous renommerez en “abortpxe.0

Créez un sous-dossier nommé “pxelinux.cfg” : Un fichier de configuration nommé “Default.” (sans extension) doit être stocké dans ce dossier. Tapez les commandes suivantes :

mkdir E:\RemoteInstall\Boot\pxelinux.cfg
echo "" > E:\RemoteInstall\Boot\pxelinux.cfg\default.

Ajoutez le contenu suivant dans ce fichier en prenant garde à ne pas ajouter d’extension erronée :

default menu.c32
prompt 0
TIMEOUT 100   # Delai avant boot automatique
ONTIMEOUT WDS (Services d'installation Windows) # Boot automatique vers ce menu
	
menu title Demarrage PXE / Installation

label WDS (Services d'installation Windows)
	menu default
	kernel pxeboot.0
	
label Test memoire
	kernel memtest\memtest86

label Installation Ubuntu
	kernel ubuntu\linux
	append initrd=ubuntu\initrd.gz vga=788

label Demarrage sur disque local
	localboot 0

		   
#Ajout d'un lien vers un autre serveur pxe dans votre menu 
#label Linux PXE
#  menu label Linux PXE server...
# 	kernel pxechain.com
#	append 192.168.100.201::pxelinux.0
	# Entrez l'adresse IP du serveur PXE Linux
	# append 192.168.100.201::\boot\x86\wdsnbp.com
  	# ou d'un autre serveur WDS "standard"

Label Annuler le boot PXE
	kernel abortpxe.0

A ce stade, le dossier “boot/x86” doit contenir les dossiers/fichiers suivants :

boot/x86/
		pxelinux.cfg
		abortpxe.0
		menu.c32
		pxeboot.0
		pxechain.com
		pxelinux.0

		ubuntu/
			initrd.gz
			linux

		memtest86

Recopier les dans le dossier “boot/x64” afin que cela prenne effet pour les 2 types de boot

Pour activer la nouvelle amorce sur le noyau PXE linux, entrez les commandes suivantes dans une invite de commande sur le serveur WDS en fonction du dossier utilisé.

Pour architecture x86 dossier (\boot\x86) :
wdsutil /set-server /bootprogram:boot\x86\pxelinux.0 /architecture:x86
wdsutil /set-server /N12bootprogram:boot\x86\pxelinux.0 /architecture:x86

Pour architecture x64 (\boot\x64) :
wdsutil /set-server /bootprogram:boot\x64\pxelinux.0 /architecture:x64
wdsutil /set-server /N12bootprogram:boot\x64\pxelinux.0 /architecture:x64

Vous pouvez utiliser 1 dossier pour les 2 types d'architectures : (exemple le dossier x86)
wdsutil /set-server /bootprogram:boot\x86\pxelinux.0 /architecture:x86
wdsutil /set-server /N12bootprogram:boot\x86\pxelinux.0 /architecture:x86
wdsutil /set-server /bootprogram:boot\x86\pxelinux.0 /architecture:x64
wdsutil /set-server /N12bootprogram:boot\x86\pxelinux.0 /architecture:x64

On utilise le même menu pour les architectures x86 et x64.

Zip avec tous les fichiers dont vous avez besoin : ICI

 

Pour une mise en place plus en détail, je vous conseils de vous rendre ici : https://tool.frogg.fr/Tutorial_Linux_PXE_on_WDS

Pour la mise en place d’un serveur WDS windows : https://www.it-connect.fr/dematerialisez-vos-supports-avec-wds2012r2/

Pour la mise en place d’un PXE debian : https://www.it-connect.fr/installation-et-configuration-dun-serveur-pxe/

Source