GRUB en netboot par PXE

Quand on gère un parc de plusieurs centaines de postes dispersés sur un campus, on ne veut plus devoir se promener de bureau en salle de cours avec trois clefs USB et une pile de CD ie. on veut disposer de nos outils favoris de déploiement quel que soit le poste (x86…) et ce, sans trop se fatiguer. Et surtout, pas question d'installer quoi que ce soit sur 300 machines. Pour ne rien avoir à installer sur les clients, il n'y a qu'une seule solution : l'amorçage sur le réseau ou netboot.

Plusieurs solutions s'offrent à nous mais pour disposer facilement d'un menu pour choisir sur quoi amorcer, GRUB s'impose. Renseignement pris, la version legacy est capable d'amorcer via le réseau, plus précisément par PXE. Nos clients sont des PC décents, capables de PXE justement.

Récupérer une archive des sources récentes (0.97) et l'extraire. Avant de lancer le ./configure, aller sur http://os.inf.tu-dresden.de/~adam/grub/ pour récupérer la dernière version du patch d'Adam Lackorzyski et l'appliquer.

Quand c'est fait, lancer :

$ ./configure --enable-diskless --enable-pxe

Pas besoin d'indiquer des pilotes de cartes réseau au script configure. Compiler (make(1)) ; le plus dur est fait :-)

Dans le répertoire stage2 on trouve un binaire pxegrub. C'est le seul fichier qui nous intéresse. Pour l'installer, on le copiera à la racine du serveur TFTP à la prochaine étape.

On utilise ISC-DHCPd 3. Dans la configuration, pour les sous-réseaux qui nous intéressent ajoutons les lignes suivantes pour activer le lancement via PXE :

allow bootp;
allow booting;

option option-150 code 150 = text;

subnet 192.168.0.0 netmask 255.255.248.0 {
	next-server 192.168.7.253;
	option option-150 "(nd)/menu.lst";
	filename "pxegrub";
}

La ligne next-server renseigne l'adresse du serveur TFTP. L'option 150 sera utilisée par GRUB pour savoir où le client doit aller quérir le fichier de configuration (par défaut menu.lst) ; (nd) lui indique Net Disk.

Si le serveur DHCP propose des adresses aux invités, attention à ne proposer de boot PXE qu'aux hôtes connus.

Configurer le daemon TFTP pour qu'il sache où est sa racine et y déposer pxegrub. À côté, déposer menu.lst contenant :

# Boot apres 5 secondes
timeout 5

# 1ere entree par defaut
default 0

# par defaut revient a la 1ere entree si le reste est HS
fallback 0

# mot de passe
password --md5 $1$G8GXZEpM$GMO5cioMUY5U3sb89rcuk.

# 1ere entree : on passe au disque local
title Demarrage normal
	root (hd0,0)
	chainloader +1

# 2eme entree : G4U
title [sysadmin@] Amorcage reseau : G4U
	dhcp
	lock
	kernel --type=netbsd (nd)/g4u

Dans cette configuration, on a deux entrées (on pourra en ajouter autant qu'on veut) :

  • la première renvoie à l'amorce sur le disque local,
  • la seconde amorce le système sur Ghost for Unix (G4U).

À noter :

  1. Si on veut amorcer sur la seconde entrée, il faudra connaître le mot de passe (option lock) qui a été déclaré et stocké en MD5.
  2. Le fichier g4u est déposé à côté de pxegrub et menu.lst sur le serveur TFTP.
  3. L'option dhcp indique à la machine de demander via BOOTP/DHCP où est le serveur TFTP (la machine n'en aura plus conscience dès que GRUB aura passé la main).

Pour générer la chaîne MD5, sur un NetBSD 2.0 ou plus récent, utiliser :

$ echo passwd |pwhash -m 

Plus qu'à ajouter Memtest, les outils de tests des constructeurs de disques, un mini-Unix, etc, la seule limite est votre imagination :-)

  • user/pc/sysadmin/grub-netboot.txt
  • Dernière modification : 2011/07/23 23:57
  • de pc