FLASH INFORMATIQUE FI



expert Installation de Linux avec PXE et Grub2


Toute personne qui gère un parc de machines Linux rêve d’une méthode d’installation automatique, et chaque utilisateur désireux d’installer Linux sur son poste au travail serait ravi d’avoir une méthode d’installation assistée ou, au moins, d’éviter de graver des CD.



Anybody managing a farm of Linux machines dreams of an automatic installation method, and any user willing to install Linux on his computer would be pleased to have an assisted method of installation, or at least, to avoid burning CDs.


Vittoria REZZONICO


Installation (semi-)automatique de postes de travail Linux avec PXE  et Grub2

Prérequis

Un serveur DHCP doit être présent dans votre subnet. Ce serveur nécessitera les ajouts suivants :

next-server <VOTRE_SERVEUR_DE_BOOT>
filename "grub2pxe"

Il faut également un serveur de démarrage, c’est-à-dire un serveur avec le service tftp. Le serveur de démarrage et le serveur DHCP ne sont pas forcément sur la même machine.

Grub2

Dans cet exemple pratique, nous utiliserons Grub2 comme Network Bootstrap Program, il n’y a pas besoin de pxelinux.
Mais pourquoi Grub2 et non pas le plus standard pxelinux ? D’abord, tout simplement parce que c’est possible, et cela sans trop de difficultés (contrairement à pxegrub avec grub-legacy). Deuxièmement, Grub2 a des fonctionnalités qui nous rendent bien service :

  • la possibilité de bloquer des rubriques du menu par un mot de passe, avec en plus la gestion des utilisateurs ;
  • la possibilité d’empêcher le démarrage depuis tout autre périphérique que le réseau dans le BIOS et arriver quand même à charger un OS depuis le disque dur ou même une clef USB ;
  • un mini-environnement interactif depuis lequel on peut charger un système de secours (rescue) ;
  • un excellent support PXE via le device (pxe) qui accède au serveur tftp;
  • la possibilité de monter des images ISO.

Enfin, n’oublions pas le côté end-user. Le Grub2 est un bon choix aussi pour les raisons suivantes :

  • les utilisateurs finaux ne sont pas perturbés par un écran de démarrage non familier ;
  • lors du chargement du noyau et de l’initrd, on peut admirer un écran avec des annonces importantes ou des règles d’utilisation.

En conclusion, le Grub2 est un bon choix par sa facilité d’installation et ses possibilités de configuration pour l’administrateur système, ainsi que pour sa transparence pour l’utilisateur final.

Installation de grub2pxe

Contrairement au cas de Grub Legacy, il n’est pas nécessaire de recompiler Grub2 pour faire du PXE, il faut par contre en avoir une installation. Ensuite, faites

grub-mkimage --output=core.img --prefix="(pxe)/boot/grub" pxe pxecmd
cat pxeboot.img core.img > grub2pxe

Le fichier pxeboot.img se trouve dans notre cas dans /usr/lib/grub/i386-pc. Il faudra ensuite copier grub2pxe ainsi que le répertoire /boot/grub dans la racine du serveur tftp. Votre répertoire racine tftp doit avoir l’aspect suivant :

/tftpboot/  boot/grub/  915resolution.mod
                       acpi.mod
                       ...
                       zfs.mod
                       locale/   en_AU.mod
                                 en_GB.mod
           grub2pxe

Maintenant, il faut choisir la configuration du menu de démarrage. Voici deux cas de figure.

Serveur d’installation générique memtest, Ubuntu, Fedora

Ce cas est utile pour déployer un serveur d’installation de stations de travail. Vous configurez le bios des stations de travail pour démarrer uniquement du disque dur et lorsque vous souhaitez les réinstaller, vous appuyez sur F12 au démarrage (ou similaire). Il s’agit ici d’une installation semi-automatique (ou pas du tout automatique).
Commencez par préparer les fichiers nécessaires au démarrage :
memtest - copiez un memtest dans le serveur tftp. Par exemple sous /tftpboot/boot/.
ubuntu - copiez l’iso ubuntu mini dans /tftpboot/isos.
fedora - copiez les fichiers initrd.img et vmlinuz qui se trouvent dans le répertoire images/pxeboot/ sur le CD de Fedora dans /tftpboot/fedora/. Vous pouvez aussi placer un fichier kickstart quelque part sur un serveur http pour assister l’installation.
ubuntu live - copiez le contenu du cdrom ubuntu-10.04-desktop-i386.iso dans /srv/ubuntu-10.04-desktop-i386 (n’oubliez pas le répertoire caché .disk) et exportez ce répertoire par NFS. Ensuite copiez les fichiers vmlinuz et initrd.lz qui se trouvent dans /srv/ubuntu-10.04-desktop-i386/casper dans /tftpboot/ubuntu-10.04.
Sur votre serveur d’installation, vous aviez copié le répertoire /boot/grub. Allez chercher le fichier grub.cfg et modifiez-le comme suit :

  • enlevez les avertissements menaçants au début du fichier. Vous allez devoir le modifier à la main. Ré-écrire des scripts qui vont le générer à votre place est une tâche bien trop longue et sans assez de valeur ajoutée pour ce cas particulier.
  • cherchez où commencent les rubriques des menus. Enlevez-les toutes et remplacez-les par celles-ci.
menuentry "Memory test (memtest86+)" {
       insmod pxe
       set root='(pxe)'
       linux16 /boot/memtest86
}

menuentry 'Ubuntu Lucid installer' --class ubuntu --class gnu-linux --class gnu --class os {
       insmod iso9660
       insmod loopback
       loopback loop (pxe)/iso/ubuntu-lucid-i386-mini.iso
       linux   (loop)/linux
       initrd  (loop)/initrd.gz
}

menuentry 'Fedora Core 13 installer' --class fedora --class gnu-linux --class gnu --class os {
       insmod pxe
       set root='(pxe)'
       linux   /fedora13/vmlinuz ramdisk_size=9216 network ks=http://128.178.131.120/ks.ks
       initrd  /fedora13/initrd.img
}

menuentry 'Ubuntu Lucid Live' --class ubuntu --class gnu-linux --class gnu --class os {
       insmod pxe
       set root='(pxe)'
       linux   /ubuntu-10.04/vmlinuz boot=casper netboot=nfs nfsroot=128.178.131.120:/srv/ubuntu-10.04-desktop-i386
       initrd  /ubuntu-10.04/initrd.lz
}

Installation d’une salle Linux

Dans ce cas nous considérons l’installation d’une salle de stations pour les étudiants. Les contraintes suivantes s’appliquent :

  • les étudiants ne doivent pas avoir accès aux fonctions admin ;
  • l’écran de démarrage ne doit pas être trop perturbant pour l’utilisateur final, c’est-à-dire, il est préférable que l’utilisateur final ne remarque rien par rapport à un démarrage local standard.

La première question est facilement résolue avec l’introduction d’un mot de passe dans Grub2. Le mot de passe bloquera le mode ligne de commande et toutes les entrées du menu Grub2 sauf le démarrage en local. Pour définir un mot de passe, ajoutez le suivant a votre grub.cfg :

set superusers="user1"
password_pbkdf2 user1 MOT_DE_PASSE

Le mot de passe sera généré avec la commande grub-mkpasswd_pbkdf2 .
Pour ne pas perturber les utilisateurs, nous allons nous restreindre pour l’instant à cacher le menu (comme cela est fait par défaut dans la plupart des distributions avec Grub Legacy). Insérez les lignes suivantes après la définition du mot de passe :

echo -n "Press ESC to enter the menu... "
if sleep --verbose --interruptible 10 ; then
       set timeout=0
else
       set timeout=1
fi

Maintenant, nous pouvons nous attaquer à notre système d’installation. Nous allons utiliser la méthode plus simple possible : installer une machine modèle (master) et ensuite la cloner sur les autres avec partimage. Nous avons donc besoin d’un noyau, d’un initrd et d’un système minimal qui est juste capable de lancer partimage. La création d’un tel système n’est pas traitée ici. Ce que le mini-système doit être capable de faire est :

  • démarrer ;
  • lancer partimage et sfdisk ;
  • exécuter quelques commandes pour par exemple copier des clefs ssh ;
  • redémarrer.

Notre menu aura trois rubriques :
1.- Boot local : c’est la rubrique par défaut, et la seule non verrouillée par mot de passe :

menuentry 'Red Hat 6.0 Beta Desktop' --class redhat --class gnu-linux --class gnu --class os {
       insmod biosdisk
       insmod part_msdos
       insmod ext2
       set root='(hd0,1)'
       linux   /boot/vmlinuz-2.6.32-19.el6.i686 ro root=/dev/sda1 ro rhgb quiet
       initrd  /boot/initramfs-2.6.32-19.el6.i686.img
}

2.- memtest, verrouillée par mot de passe :

menuentry "Memory test (memtest86+)" --users user1 {
       insmod pxe
       set root='(pxe)'
       linux16 /boot/memtest86
}

3.- réinstallation de la machine, verrouillée par mot de passe :

menuentry 'PXE install' --class gnu-linux --class gnu --class os --users user1 {
       insmod pxe
       set root='(pxe)'
       linux   /boot/vmlinuz-2.6.24 ip=dhcp root=/dev/ram0 init=/linuxrc ramdisk_size=130000 SERVER=192.168.2.13  insttype=ma
       initrd  /boot/initrd.gz
}

À vous de tester

Le serveur sbitsrv13 est à votre disposition pour des tests. Pour l’utiliser comme serveur d’installation, il faut que vous ayez un serveur DHCP dans votre subnet avec les paramètres :

next-server 128.178.131.120
filename "grub2pxe"

Un client qui démarre par PXE se verra proposer le menu Grub2 :

Depuis ce serveur vous pouvez installer une Ubuntu Lucid en mode interactif, une Fedora 13 en mode semi-automatisé et une Ubuntu Lucid depuis le LiveCD. Pour plus de renseignements, vous pouvez visiter la page Web du serveur.

Ressources

Ubuntu : l’image mini.iso.
Fedora : le noyau et l’initrd.
Ubuntu Live : l’image ubuntu-10.04-desktop-i386.iso.

Références



Glossaire

PXE :
(Preboot eXecution Environment, appelé aussi Pre-Execution Environment) : environnement qui permet aux clients de démarrer en utilisant uniquement leur interface réseau, indépendamment des autres périphériques ou systèmes d’exploitation installés sur la machine.
Le protocole PXE est une combinaison de DHCP et TFTP avec des petits ajouts.
Le DHCP est utilisé (en outre que pour assigner des paramètres réseau) pour localiser le serveur de démarrage avec TFTP, qui est utilisé pour charger le network boot program (NBP) et éventuellement d’autres fichiers.
En résumé, le démarrage par le réseau se passe ainsi :
  • le firmware PXE du client envoie un paquet DHCPDISCOVER étendu avec des options PXE ;
  • le serveur DHCP répondra le cas échéant par un paquet DHCPOFFER étendu avec des options spécifiques PXE ;
  • si le serveur DHCP ne comprend pas le PXE, il va ignorer les options PXE ;
  • le DHCPOFFER étendu contient en particulier l’adresse du serveur TFTP et le chemin vers le NBP ;
  • le client envoie un DHCPREQUEST ;
  • le serveur envoye un DHCPACK ;
  • le client ouvre une connexion TFTP avec le serveur indiqué dans le DHCPOFFER étendu et télécharge le NBP indiqué. Dans notre cas, le NBP est grub2pxe. D’habitude, sous Linux, on utilise pxelinux ;
  • le NBP prend contrôle du client et se charge de la suite.

Voir aussi : Séminaires Logiciels Libres.



Cherchez ...

- dans tous les Flash informatique
(entre 1986 et 2001: seulement sur les titres et auteurs)
- par mot-clé

Avertissement

Cette page est un article d'une publication de l'EPFL.
Le contenu et certains liens ne sont peut-être plus d'actualité.

Responsabilité

Les articles n'engagent que leurs auteurs, sauf ceux qui concernent de façon évidente des prestations officielles (sous la responsabilité du DIT ou d'autres entités). Toute reproduction, même partielle, n'est autorisée qu'avec l'accord de la rédaction et des auteurs.


Archives sur clé USB

Le Flash informatique ne paraîtra plus. Le dernier numéro est daté de décembre 2013.

Taguage des articles

Depuis 2010, pour aider le lecteur, les articles sont taggués:
  •   tout public
    que vous soyiez utilisateur occasionnel du PC familial, ou bien simplement propriétaire d'un iPhone, lisez l'article marqué tout public, vous y apprendrez plein de choses qui vous permettront de mieux appréhender ces technologies qui envahissent votre quotidien
  •   public averti
    l'article parle de concepts techniques, mais à la portée de toute personne intéressée par les dessous des nouvelles technologies
  •   expert
    le sujet abordé n'intéresse que peu de lecteurs, mais ceux-là seront ravis d'approfondir un thème, d'en savoir plus sur un nouveau langage.