Linux en boot PXE

L’objet de cet article est de décrire l’installation d’un petit linux sur une machine sans disque dur (network boot). Pour l’occasion, j’ai a ma diposition un monstre de puissance (sic) a savoir une Dell PIII550. Marchine au demerrant très silencieuse … impec !
Cette machine permet le boot PXE. Ce systeme permet de faire booter une machine sur le réseau sans avoir a programmer le prom sur la carte reseau. Un peu comme le DHCP permet d’obtenir une adresse IP.

Pour commencer j’installe sur le serveur (celui qui contient le HD) (une suse 10.0) le serveur atftp qui est recommandé plutot que le classique tftpd proposé par Yast. Sa configuration se fait en modifiant le fichier /etc/sysconfig/atftpdavec les options suivantes ;

ATFTPD_OPTIONS="--daemon --user tftp -v"
ATFTPD_USE_INETD="no"
ATFTPD_DIRECTORY="/srv/tftp"

Avant de lancer le demon, il sera nécessaire de créer un utilisateur tftp sur le systeme. Le demon se lance ensuite par la commande /etc/rc.d/atftpd restart

Le package syslinux fournit une image bootable. Il faut alors la copier de /usr/share/syslinux/pxelinux.0 vers le répertoire tftpboot choisi lors de l’installation du serveur. TFTP est un protocole réseau de transfert de fichier (Trivial File Transfert Protocol) ; ce protocole est suffisemment simple pour qu’un périférique comme une carte réseau puisse l’utiliser sans qu’un OS ne soit démarré.

Il faut ensuite créer un petit fichier de configuration pour indiquer sur quel noyau booter. Les noyaux sont disponible sur suse dans le repetoire d’installation /boot/loader/. Il faudra donc copier initrd et linux dans le répertoire tftpboot puis créer un fichier tftpboot/pxelinux.cfg/default contenant les informations ci-dessous :

default linux

 # Install Linux
 label linux
   kernel linux
   append initrd=initrd splash=silent showopts

 prompt   1
 timeout  10

A noter qu’au lieu de s’appeler default, il est possible de donner comme nom l’adresse MAC du client sous la forme ee-ff-gg-aa-bb-cc-dd ce qui permet d’avoir des configurations différentes par client.

Il est ensuite nécessaire de configurer le serveur DHCPD. Ce qui se fait avec Yast sans problème. Il faut ensuite ajouter une entrée spécifique pour cet hote dans le fichier /etc/dhcpd.confqui aura la forme suivante :

host target_host {
     hardware ethernet xx:xx:xx:yy:yy:yy;
     fixed-address 10.0.0.???;
     server-name "10.0.0.???";
     filename "/tftpboot/pxelinux.0";
}

Le champ hardware ethernet correspond à l’adresse MAC du client. qu’il faudra que vous trouviez (ifconfig permet de l’avoir par exemple). Le champ fixed-addrress correspond à une adresse IP que l’on affecte au client. server-name correspond à l’adresse IP du serveur tftpd et filename au fichier que nous avons précédemment copié et qui sera utilisé pour le démarrage du client.

Il ne reste plus qu’à booter le client et comme par magie (héhé) il va démarrer sur l’image mise à sa disposition depuis le serveur !
Cette image telle que décrit permet de démarrer l’installation de la suse …

Tout cela est bien joli, mais ce n’est aps exactement ce que je cherchais… Mon objectif booter un linux dejà installé ! Donc pour ca il me faut installer une linux dans un répertoire … et celà se fait simplement avec Yast. Ensuite, il faut modifier le fichier tftpboot/pxelinux.cfg/default pour le faire pointer vers le noyau créé par Yast lors de l’install précédente … Sauf que bien sure ce n’est pas si simple puisque le noyau par defaut n’a pas de resau et qu’il faudra donc s’en compiler un avec les modules réseaux nécessaires.

Il faut donc compiler un noyau avec les options suivantes :

  • Le driver de la carte réseau doit être compilé dans le noyau et non en module
  • Le noyau doit être capable de configurer son réseau durant le boot en demandant une ip au serveur DHCP. Ceci est activé dans le menu Networking-TCP/IP – networking par l’option Kernel level autoconfiguration
  • Le noyau doit être capable de monté son FS racine depuis un lien NFS. Cette option se configure dans File systems-Nework File Systems-NFS-Root file system on NFS.

Une fois compilé avec ces options (make bzImage) le nouveau noyau disponible dans arch/i386/boot/bzImage peut être copié en temps que vmlinuz dans l’arborescence vu tftpboot.

Il faut enfin modifier le fichier tftpboot/pxelinux.cfg/default comme suit :

default linux
label linux
  kernel vmlinuz
  append root=/dev/nfs devfs=mount ip=::::::dhcp nfsroot=IP_du_seveur_nfs:rep_nfs_partage initrd=initrd
prompt   1
timeout  10

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.