Nœuds sans disque

From Gentoo Wiki
Revision as of 12:33, 15 December 2013 by Jaaf (Talk | contribs)

Jump to: navigation, search
Other languages:English 100% • ‎español 100% • ‎français 100% • ‎日本語 1% • ‎русский 100%

Ce guide vous explique comment créer et configurer des nœuds sans disque avec Gentoo Linux.

Introduction

À propos de ce guide

Ce guide vous aide à configurer des stations sans disque utilisant la distribution Gentoo Linux. Nous essayons de rendre ce guide aussi facile d'utilisation que possible et apportons à nouveau venu à Linux tout ce dont il a besoin, parce que chacun d'entre nous en a été un d'une certaine manière. Alors qu'un utilisateur expérimenté pourrait très facilement faire la synthèse des nombreux guides disponibles sur les nœuds sans disque et la mise en réseau, nous espérons que ce guide facilitera l'installation pour tous les utilisateurs intéressés, qu'ils soient chevronnés ou pas.

Qu'est-ce qu'une machine sans disque ?

Une machine sans disque est un PC dépourvu des périphériques de démarrage habituels tels que des disques durs, des disquettes ou des CD-ROMs. Le nœud sans disque démarre à partir du réseau et nécessite un serveur qui lui fournit de l'espace de stockage tout comme le ferait un disque dur local. Désormais, nous appellerons le serveur maître, et la machine sans disque l'esclave. Le nœud esclave a besoin d'un adaptateur réseau qui prend en charge le démarrage PXE ou Etherboot ; consultez Etherboot.org pour la liste des matériels prenant en charge cette fonctionnalité. La plupart des cartes modernes prennent en charge PXE et beaucoup d'adaptateurs embarqués sur les cartes mère feront aussi l'affaire.

Avant de vous lancer

Vous devriez avoir Gentoo installé sur votre nœud maître et assez de place sur le maître pour y stocker le système de fichiers du nœud esclave que vous voulez héberger. Assurez-vous que vous disposez également d'une interface vers l'Internet séparée de la connexion au réseau local.

Configurer le maître et les esclaves

À propos des noyaux

Le noyau est le logiciel qui se trouve entre votre matériel et le reste du logiciel que vous avez chargé sur votre machine, essentiellement, le cœur d'un système d'exploitation basé sur un noyau. Lorsque votre ordinateur est démarré, le BIOS exécute les instructions trouvées dans l'espace de démarrage réservé de votre disque dur. Ces instructions sont typiquement un chargeur de démarrage qui charge votre noyau. Dès lors qu'il est chargé, le noyau prend en charge tous les processus.

Pour plus d'informations sur les noyau et sur leur configuration, reportez-vous au kernel HOWTO .

Configurer le noyau du maître

Le noyau du maître peut être aussi important et aussi personnalisé que vous le souhaitez, mais il y a quelques options du noyau que vous devez sélectionner. Rendez-vous dans la configuration de votre noyau en tapant :

root # cd /usr/src/linux
root #
make menuconfig

Vous devriez obtenir une interface graphique grise et bleue qui offre une alternative sûre à l'édition manuelle du fichier /usr/src/linux/.config. Si votre noyau fonctionne actuellement correctement, vous devriez en sauvegarder le fichier de configuration en sortant de l'interface et en tapant :

root # cp .config .config_working

Rendez-vous dans les sous-menus suivants et assurez-vous que les items listés sont cochés pour être compilés dans le noyau (pas en tant que module). Les options indiquées ci-dessous sont celles correspondant à un noyau de version 2.6.10. Si vous utilisez une version différente, le texte ou/et l'ordre des menus pourraient être différents. Assurez-vous que vous sélectionnez au moins les options indiquées ci-dessous.

Kernel configurationOptions du noyau du maître

Code maturity level options  --->
  [*] Prompt for development and/or incomplete code/drivers
  
Device Drivers --->
  Networking options --->
    <*> Packet socket
    <*> Unix domain sockets
    [*] TCP/IP networking
    [*]   IP: multicasting
    [ ] Network packet filtering (replaces ipchains)
  
File systems --->
  Network File Systems  --->
    <*> NFS server support
    [*]   Provide NFSv3 server support

Si vous voulez accéder à l'Internet via votre maître et/ou avoir un pare-feu sûr, assurez-vous d'ajouter la prise en charge des iptables.

Kernel configurationActiver la prise en charge des iptables

  [*] Network packet filtering (replaces ipchains)
  IP: Netfilter Configuration  --->
    <*> Connection tracking (required for masq/NAT)
    <*> IP tables support (required for filtering/masq/NAT)

Si vous voulez utiliser le filtrage des paquets, vous pouvez ajouter le reste des modules plus tard. Assurez-vous de lire le chapitre Pare-feu du manuel de sécurité Gentoo pour savoir comment configurer le filtrage de manière appropriée.

Note
Ces options de configuration du noyau s'ajoutent aux options spécifiques à votre matériel, elles ne les remplacent pas.

Après avoir configuré le noyau maître, vous devez le compiler. Tapez ceci :

root # make && make modules_install
root #
cp arch/i386/boot/bzImage /boot/bzImage-master

Ensuite, ajoutez une entrée pour ce nouveau noyau dans lilo.conf ou grub.conf selon le chargeur de démarrage que vous utilisez et faites de ce nouveau noyau le noyau par défaut. Maintenant que la nouvelle bzimage a été copiée dans votre répertoire boot, il ne vous reste plus qu'à redémarrer le système afin de charger ces nouvelles options.

À propos du noyau de l'esclave

Il est recommandé de compiler le noyau esclave sans module, c'est-à-dire avec les options compilées en dur parce qu'il est difficile et inutile de charger des modules lors d'un démarrage via le réseau. De plus, ce noyau doit être aussi compact que possible pour démarrer plus rapidement. Nous allons compiler le noyau esclave au même endroit que le noyau maître.

Pour éviter toute confusion et toute perte de temps, il vaut mieux garder une copie de la configuration du noyau maître comme ceci :

root # cp /usr/src/linux/.config /usr/src/linux/.config_master

Nous devons maintenant configurer le noyau des nœuds esclaves de la même façon que pour le noyau maître. Si vous préférez repartir d'une configuration vierge, vous pouvez réinitialiser /usr/src/linux/.config comme ceci :

root # cd /usr/src/linux
root #
cp .config_master .config

Ensuite, utilisez l'interface de configuration en tapant :

root # cd /usr/src/linux
root #
make menuconfig

Assurez-vous que les options suivantes sont sélectionnées pour une compilation dans le noyau et PAS comme module :

Kernel configurationOptions du noyau des esclaves

Code maturity level options  --->
  [*] Prompt for development and/or incomplete code/drivers
  
Device Drivers --->
  [*] Networking support
  Networking options --->
    <*> Packet socket
    <*> Unix domain sockets
    [*] TCP/IP networking
    [*]   IP: multicasting
    [*]   IP: kernel level autoconfiguration
    [*]     IP: DHCP support (NEW)
  
File systems --->
  Network File Systems  --->
    <*> file system support
    [*]   Provide NFSv3 client support
    [*]   Root file system on NFS
Note
Configurer un serveur BOOTP est une alternative au serveur DHCP.
Important
I Il est important de compiler votre adaptateur réseau dans le noyau des nœuds (plutôt que d'en faire un module). Toutefois, l'utilisation de modules pour les nœuds sans disque n'est généralement pas un problème.

Compilons le noyau esclave. Vous devez prendre garde à ne pas écraser les modules que vous avez compilés pour le nœud maître. Faites :

root # cd /usr/src/linux
root #
make

Maintenant, créez le répertoire qui va accueillir le système de fichiers des nœuds esclaves sur le maître et copiez-y le fichier bzImage. Nous utilisons /diskless, mais vous pouvez utiliser un autre nom.


Note
Si vous utilisez plusieurs architectures, vous voudrez peut-être sauvegarder chaque fichier config sous le nom .config_arch . Faites de même avec les images : sauvegardez chacune d'elles dans le répertoire /diskless sous le nom bzImage_arch.


root # mkdir /diskless
root #
cp /usr/src/linux/arch/i386/boot/bzImage /diskless

Configurer un système de fichiers préliminaire pour l'esclave

Les systèmes de fichiers des nœuds maître et esclaves peuvent subir de nombreuses adaptations. Concentrons-nous d'abord sur les fichiers de configuration et les points de montage. Nous avons besoin d'un répertoire sous /diskless pour le premier nœud esclave. Chaque esclave a besoin de son propre système de fichiers racine (root) parce que certains fichiers ne peuvent pas être communs à plusieurs machines sans causer de graves problèmes. Peu importe les noms des sous-répertoires, vous pouvez, par exemple, les nommer d'après les adresses IP, car elles sont uniques et évitent les confusions. Dans cet exemple, l'adresse IP du premier nœud esclave est 192.168.1.21 :

root # mkdir /diskless/192.168.1.21

Certains fichiers de configuration de /etc doivent être modifiés pour les esclaves. Copiez d'abord le répertoire /etc du maître dans le nouveau répertoire destiné au nœud esclave :

root # cp -r /etc /diskless/192.168.1.21/etc

Le système de fichiers est encore incomplet, il lui manque différents points de montage. Pour les créer tapez :

root # mkdir /diskless/192.168.1.21/home
root #
mkdir /diskless/192.168.1.21/dev
root #
mkdir /diskless/192.168.1.21/proc
root #
mkdir /diskless/192.168.1.21/tmp
root #
mkdir /diskless/192.168.1.21/mnt
root #
chmod a+w /diskless/192.168.1.21/tmp
root #
mkdir /diskless/192.168.1.21/mnt/.initd
root #
mkdir /diskless/192.168.1.21/root
root # mkdir /diskless/192.168.1.21/sys
root #
mkdir /diskless/192.168.1.21/var
root #
mkdir /diskless/192.168.1.21/var/empty
root #
mkdir /diskless/192.168.1.21/var/lock
root #
mkdir /diskless/192.168.1.21/var/log
root #
mkdir /diskless/192.168.1.21/var/run
root #
mkdir /diskless/192.168.1.21/var/spool
root #
mkdir /diskless/192.168.1.21/usr
root #
mkdir /diskless/192.168.1.21/opt

La plupart de ces noms devraient vous être familiers. Les points tels que /dev , /proc ou /sys seront utilisés au démarrage de l'esclave, les autres seront montés un peu plus tard. Vous devez également indiquer le nom de machine de l'esclave dans le fichier /diskless/192.168.1.21/etc/conf.d/hostname . Les programmes, bibliothèques et autres fichiers seront copiés au bon endroit plus loin dans ce guide. En fait, ce sera juste avant de démarrer l'esclave.

Bien que les fichiers de périphériques de /dev soient créés par udev plus loin, vous devez créer l'entrée console. Si vous ne le faites pas, vous verrez l'erreur « unable to open initial console ».

root # mknod /diskless/192.168.1.21/dev/console c 5 1

Configurer le serveur DHCP

À propos du serveur DHCP

DHCP signifie Dynamic Host Configuration Protocol (protocole dynamique de configuration des hôtes). Le serveur DHCP est le premier ordinateur contacté par les nœuds esclaves quand ils démarrent par le système PXE via le réseau. La principale fonction d'un serveur DHCP est d'attribuer des adresses IP. Un tel serveur peut attribuer des adresses en se basant sur les adresses MAC des cartes réseau (N.D.T. : l'adresse MAC est censée être unique pour chaque carte sur le marché et est attribuée par le constructeur). Une fois l'adresse attribuée, le serveur DHCP indique au nœud esclave où il peut obtenir son noyau et son système de fichiers préliminaire.

Avant de commencer

Vous devez vérifier plusieurs choses avant de poursuivre. D'abord, vérifions si votre connexion réseau fonctionne :

root # ifconfig eth0 multicast
root #
ifconfig -a

Vous devez vérifier que vous avez un périphérique eth0 qui fonctionne. Vous devriez voir quelque chose comme ceci :

CodeUn périphérique eth0 fonctionnant correctememt

eth0      Link encap:Ethernet  HWaddr 00:E0:83:16:2F:D6
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:26460491 errors:0 dropped:0 overruns:2 frame:0
          TX packets:32903198 errors:0 dropped:0 overruns:0 carrier:1
          collisions:0 txqueuelen:100
          RX bytes:2483502568 (2368.4 Mb)  TX bytes:1411984950 (1346.5 Mb)
          Interrupt:18 Base address:0x1800

L'option MULTICAST est essentielle. Si vous ne l'avez pas, vous devez recompiler votre noyau avec cette option activée dans sa configuration.

Installer le serveur DHCP

Si votre réseau n'a pas encore de serveur DHCP, vous devez en installer un :

root # emerge --ask dhcp

Si un serveur DHCP est déjà installé sur votre réseau, vous devez modifier sa configuration pour permettre un démarrage via PXE.

Configurer le serveur

Le serveur DHCP est configuré grâce au seul fichier /etc/dhcp/dhcpd.conf. Le répertoire/etc/dhcp devrait contenir un exemple que vous pouvez utiliser comme point de départ :

root # cp /etc/dhcp/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
root #
nano -w /etc/dhcp/dhcpd.conf

Le fichier de configuration est organisé et indenté comme ceci :

CodeExemple de présentation du dhcpd.conf

# global options here
ddns-update-style none;
shared-network LOCAL-NET {
  # shared network options here
  subnet 192.168.1.0 netmask 255.255.255.0 {
    # subnet network options here
    host slave{
        # host specific options here
    }
    group {
        # group specific options here
    }
  }
}

La mention shared-network est facultative et est réservée pour des adresses IP que vous voulez attribuer aux nœuds qui font partie de votre réseau. Vous devez avoir au moins une section subnet et la section facultative group permet de définir des options communes aux nœuds spécifiés dans la section subnet. Voici un exemple de dhcpd.conf complet :

CodeExemple de fichier dhcpd.conf

#
# Exemple de fichier  dhcpd.conf pour les clients sans disque
#
  
# Désactiver le  DNS dynamique
ddns-update-style none;
  
# Supposons qu'une passerelle par défaut pour le trafic IP suffise 
option routers 192.168.1.1;
  
# Procure les information DNS aux clients
option domain-name-servers 192.168.1.1;
option domain-name "mydomain.com";
  
# Spécifie le serveur TFTP à utiliser
next-server 192.168.1.1;
  
# Declare une option de  tampon spécifique au constructeur pour les clients  PXE :
# Code 1: adress IP Multicast du serveur de fichier de démarrage 
# Code 2: port UDP que le clien devrait surveiller pour les réponse MTFTP
# Code 3: port UDP que les serveurs  MTFTP utilisent pour écouter les requêtes  MTFTP 
# Code 4: Nombre de secondes pendant lesquelles un client doit écouter avant d'essayer
#  de  démarrer un nouveau transfert  MTFTP 
# Code 5: Nombre de secondes pendant lesquelles un client doit écouter avant d'essayer
#  de redémarrer un  transfert  MTFTP 
  
option space PXE;
option PXE.mtftp-ip               code 1 = ip-address;
option PXE.mtftp-cport            code 2 = unsigned integer 16;
option PXE.mtftp-sport            code 3 = unsigned integer 16;
option PXE.mtftp-tmout            code 4 = unsigned integer 8;
option PXE.mtftp-delay            code 5 = unsigned integer 8;
option PXE.discovery-control      code 6 = unsigned integer 8;
option PXE.discovery-mcast-addr   code 7 = ip-address;
  
# Déclare le sous-réseau où se trouvera notre nœud sans disque 
subnet 192.168.1.0 netmask 255.255.255.0 {
  
  # Procure aux clients PXE l'information appropriée
  class "pxeclient" {
    match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";
    vendor-option-space PXE;
  
    # Au moins une option PXE spécifique au constructeur  doit être définie
    # afin que la ROM de démarrage du client  réalise que nous adhérons au protocole  PXE
    # serveur.  Nous définissons l'adresse IP MCAST à  0.0.0.0 pour dire à la ROM de démarrage 
    # que nous ne pouvons pas fournir le  multicast TFTP.
  
    option PXE.mtftp-ip 0.0.0.0;
  
    # Le nom du fichier que la ROM de démarrage devrait télécharger.
    filename "pxelinux.0";
  }
  
  # Procure aux clients  Etherboot l'information appropriée
  class "etherboot" {
    match if substring(option vendor-class-identifier, 0, 9) = "Etherboot";
    filename "vmlinuz_arch";
  }
  
  # Ajoutez une déclaration d'hôte pour chacun des hôtes sans disque
  host slave21 {
    hardware ethernet 00:02:A5:04:3B:66;
    fixed-address 192.168.1.21;
  }
}
Note
Rien n'empêche d'utiliser PXE boot et Etherboot ensemble. L'exemple ci-dessus est un exemple ; en cas de problème, veuillez consulter la documentation de DHCPd.

L'option next-server indique l'adresse IP de la machine à laquelle le nœud esclave doit demander le fichier filename après avoir reçu son adresse IP. Cette adresse est l'adresse du serveur TFTP, généralement la même que celle du nœud maître. Le nom du fichier spécifié dans l'option filename est relatif au répertoire /diskless si votre serveur TFTP est configuré comme indiqué plus loin dans ce guide. La section host contient l'adresse matérielle (ou « MAC address ») de votre carte réseau et l'option fixed-address permet d'y associer l'adresse IP spécifiée. L'ensemble des options du fichier dhcpd.conf n'ont pas leur place dans ce guide, mais sont évidemment disponibles dans les pages man.

user $ man dhcpd.conf

Démarrer le serveur DHCP

Avant de lancer le script d'initialisation de DHCP, vous devez modifier le fichier /etc/conf.d/dhcp pour qu'il ressemble à ceci :

CodeExemple de fichier /etc/conf.d/dhcp

IFACE="eth0"
# Insert any customizations needed

La variable IFACE indique le péripherique réseau sur lequel votre serveur DHCP va tourner. Dans notre cas, c'est eth0. Il peut être intéressant d'ajouter des valeurs à IFACE si le serveur est équipé de plusieurs cartes réseau. Pour démarrer le serveur DHCP, faites :

root # /etc/init.d/dhcp start

Pour faire démarrer le serveur DHCP automatiquement par votre machine, faites :

root # rc-update add dhcp default

Dépanner le serveur DHCP

Quand un nœud esclave démarre correctement, vous devriez voir des messages ressemblant à ce qui suit à la fin du fichier /var/log/messages sur le maître :

CodeExemple d'entrée de journalisation créée par dhcp

DHCPDISCOVER from 00:00:00:00:00:00 via eth0
DHCPOFFER on 192.168.1.21 to 00:00:00:00:00:00 via eth0
DHCPREQUEST for 192.168.1.21 from 00:00:00:00:00:00 via eth0
DHCPACK on 192.168.1.21 to 00:00:00:00:00:00 via eth0
Note
Ce fichier peut aussi vous aider à trouver les adresses MAC des nœuds esclaves.

Si vous voyez le message ci-dessous, cela indique que le serveur DHCP émet bien sur le réseau, mais qu'il y a une erreur dans le fichier de configuration.

CodeExemple d'erreur du serveur dhpc

no free leases on subnet LOCAL-NET

Chaque fois que vous modifiez le fichier de configuration, vous devez relancer le serveur DHCP comme ceci :

root # /etc/init.d/dhcpd restart

Configurer le serveur TFTP et le chargeur de démarrage Linux PXE et/ou Etherboot

À propos du serveur TFTP

TFTP signifie « Trivial File Transfer Protocol ». Le serveur TFTP va fournir un noyau et un système de fichiers aux nœuds esclaves. Tous les noyaux des esclaves et leur système de fichiers seront stockés sur le serveur TFTP. Il est donc recommandé de l'installer sur le nœud maître.

Installer le serveur TFTP

Un serveur TFTP reconnu est celui compris dans le paquet tftp-hpa. Il se trouve qu'il a été écrit par le même auteur que SYSLINUX et ils fonctionnent très bien ensemble. Faites :

root # emerge --ask tftp-hpa

Configurer le serveur TFTP

Modifiez le fichier /etc/conf.d/in.tftpd. Vous devez y indiquer le répertoire principal servi par le serveur TFTP avec l'option INTFTPD_PATH . Les éventuelles options de la ligne de commande utilisée pour lancer le serveur viennent après INTFTPD_OPTS. Votre fichier devrait ressembler à ceci :

CodeExemple de fichier /etc/conf.d/in.tftpd

INTFTPD_PATH="/diskless"
INTFTPD_OPTS="-l -v -s ${INTFTPD_PATH}"

L'option -l indique que le serveur doit écouter lui-même sur le réseau, ce qui vous évite d'utiliser inetd. L'option -v demande au serveur de fournir plus de messages dans son journal. L'option -s spécifie le répertoire racine du serveur.

Démarrer le serveur TFTP

Pour démarrer le serveur tftp tapez :

root # /etc/init.d/in.tftpd start

Ce script va lancer le serveur TFTP avec les options spécifiées dans le fichier /etc/conf.d/in.tftpd. Si voulez que le serveur TFTP soit lancé au démarrage de votre machine, faites :

root # rc-update add in.tftpd default

À propos de PXELINUX

Cette partie ne vous intéresse pas si vous utilisez Etherboot. PXELINUX est l'équivalent réseau de LILO ou de GRUB, il est envoyé par le serveur TFTP. Il s'agit en fait d'un petit bout de code qui indique au client où trouver son noyau et son système de fichiers initial et qui permet de passer quelques options au noyau.

Avant de commencer

Vous avez besoin du fichier pxelinux.0 fourni avec le paquet SYSLINUX de H. Peter Anvin. Vous pouvez l'installer comme ceci :

root # emerge --ask syslinux

Configurer PXELINUX

Note
Ceci n'est pas nécessaire pour Etherboot

Avant de démarrer votre serveur TFTP, vous devez installer pxelinux. Copiez le binaire de pxelinux dans /diskless comme ceci :

root # cp /usr/share/syslinux/pxelinux.0 /diskless
root #
mkdir /diskless/pxelinux.cfg
root #
touch /diskless/pxelinux.cfg/default

Cela va créer un fichier de configuration par défaut pour syslinux. Le binaire pxelinux.0 cherche son fichier de configuration dans le répertoire pxelinux.cfg . Il commence par chercher un fichier dont le nom est l'adresse IP attribuée au nœud écrite en hexadécimal. Si un tel fichier n'existe pas, pxelinux.0 enlève successivement le chiffre le plus à droite et regarde si un fichier correspondant existe jusqu'à ce qu'il trouve un fichier ou qu'il n'y ait plus de chiffre. Les version 2.05 et ultérieures de syslinux recherchent d'abord un fichier nommé d'après l'adresse MAC. Si ce fichier n'existe pas, la routine de recherche présentée ci-haut est effectuée. En dernier recours, le fichier default est utilisé.

CodeRecherche du fichier de configuration dans pxelinux.cfg/

## (Le préfixe 01 signifie Ethernet, les octets suivant correspondent à l'adresse MAC de l'esclave)
01-00-40-63-c2-ca-c9
  
## (Adresse IP assignée en hexadécimal)
C0A80115
C0A8011
C0A801
C0A80
C0A8
C0A
C0
C
  
default
Note
Tout ceci est en minuscules.

Démarrons avec le fichier default file:

CodeExemple de pxelinux.cfg/default

DEFAULT /bzImage
APPEND ip=dhcp root=/dev/nfs nfsroot=192.168.1.1:/diskless/192.168.1.21

L'option DEFAULT indique le chemin vers le noyau. L'option APPEND fournit les paramètres à passer au noyau. Puisque nous avons compilé le noyau avec l'option NFS_ROOT_SUPPORT, nous indiquons ici le chemin vers notre système de fichiers racine (root via NFS). La première adresse IP est l'adresse du nœud maître et la seconde est le nom du répertoire que nous avons créé dans /diskless pour contenir le système de fichiers de l'esclave.

À propos d'Etherboot

Note
Ceci n'est pas nécessaire si vous utlisez le démarrage PXE.

Le système Etherboot permet de démarrer à partir d'images stockées sur un serveur TFTP. Comme PXE, ceci est similaire à LILO ou GRUB. L'utilitaire mknbi permet de créer différentes images avec des options différentes.

Avant de commencer

Vous devez d'abord installer l'utilitaire mknbi qui permet de marquer des images de noyaux qui seront démarrés via le système Etherboot. Cet outil créera une image de votre noyau original et la configurera comme décrit ci-dessous.

root # emerge --ask mknbi

Configurer Etherboot

Voyons comment configurer une simple image qui permet de démarrer via Etherboot. Comme le serveur DHCP définit la racine utilisée par les clients dans l'option « option root-path » dans le fichier dhcp.conf, il n'est pas nécessaire de la spécifier ici. Veuillez consulter la page man de mknbi pour plus d'informations.

user $ man mknbi

Pour créer une image ELF sur laquelle démarrer qui sait passer les paramètres DHCP et la racine à utiliser au noyau tout en forçant le noyau à demander une adresse IP via DHCP, faites :

root # mkelf-linux -ip=dhcp /diskless/bzImage > /diskless/vmlinuz
Note
Pour une architecture spécifique, utilisez bzImage_arch et vmlinuz_arch .

Dépanner le processus de démarrage sur réseau

Il y a plusieurs façons de résoudre les problèmes de démarrage via le réseau. Un outil fréquemment utilisé est tcpdump . Pour l'installer, faites :

root # emerge --ask tcpdump

Maintenant, vous pouvez surveiller le trafic réseau et vous assurer que votre serveur et les clients se parlent. En cas de problèmes, vous devriez d'abord vérifier que vos machines sont physiquement connectées et que les câbles ne sont pas endommagés. Vous devriez aussi vous assurer que le trafic n'est pas bloqué par un pare-feu. Pour visualiser le dialogue entre deux ordinateurs, faites :

root # tcpdump host client_ip and server_ip

Vous pouvez aussi surveiller un port particulier avec tcpdump, celui du serveur TFTP par exemple :

root # tcpdump port 69

Une erreur fréquente est « PXE-E32: TFTP open time-out ». Elle est généralement causée par un pare-feu. Si vous utilisez TCPwrappers, vous devriez aussi vérifier que les fichiers /etc/hosts.allow et etc/hosts.deny soient correctement configurés. Les nœuds esclaves doivent avoir accès au maître.

Configurer le serveur NFS

À propos du serveur NFS

NFS signifie « Network File System » (Système de fichiers réseau). Un serveur NFS fournit un système de fichiers via le réseau. Cette partie peut être reconfigurée plus tard, mais nous voulons d'abord un système de base permettant au nœud esclave de démarrer.

À propos de Portmapper

Certains services ne sont pas toujours liés au même port, mais utilisent le système d'appel de fonction à distance (les RPC en anglais pour « Remote Procedure Call »). Dans ce cas, lorsqu'un service démarre, il écoute sur un port disponible choisi au hasard et il s'inscrit dans la liste de tels services tenue par le programme portmapper. NFS utilise ce mécanisme et a besoin que le programme portmapper soit actif avant de démarrer.

Avant de commencer

Pour pouvoir activer le serveur NFS, vous devez avoir compilé le noyau avec les options adéquates. Pour vérifier que cela a bien été fait, tapez :

root # grep NFS /usr/src/linux/.config_master

L'affichage devrait ressembler à ceci :

Kernel configurationOptions spécifiques NFS adéquates dans la configuration du noyau du maître.

CONFIG_PACKET=y
# CONFIG_PACKET_MMAP is not set
# CONFIG_NETFILTER is not set
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
# CONFIG_NFS_V4 is not set
# CONFIG_NFS_DIRECTIO is not set
CONFIG_NFSD=y
CONFIG_NFSD_V3=y
# CONFIG_NFSD_V4 is not set
# CONFIG_NFSD_TCP is not set

Installer le serveur NFS

Le paquet NFS est installé via Portage comme ceci :

root # emerge --ask nfs-utils

Ce paquet comprend le programme portmapper, le serveur nfs et les utilitaires pour les clients NFS. Les dépendances lors de l'initialisation sont automatiquement résolues.

Configurer le serveur NFS

Il y a trois fichiers de configuration principaux à modifier :

CodeFichiers de configuration Nfs

/etc/exports
/diskless/192.168.1.21/etc/fstab
/etc/conf.d/nfs

Le fichier /etc/exports indique comment, à qui et quoi exporter via NFS. Le fichier /etc/fstab des nœuds esclaves sera modifié pour monter les systèmes de fichiers exportés par le maître.

Le fichier /etc/exports typique du maître devrait ressembler à ceci :

CodeExeple de /etc/exports du maître

# une telle ligne pour  chaque esclave
/diskless/192.168.1.21   192.168.1.21(sync,rw,no_root_squash,no_all_squash)
# commun à tous les esclaves
/opt   192.168.1.0/24(sync,ro,no_root_squash,no_all_squash)
/usr   192.168.1.0/24(sync,ro,no_root_squash,no_all_squash)
/home  192.168.1.0/24(sync,rw,no_root_squash,no_all_squash)
# if you want to have a shared log
/var/log   192.168.1.21(sync,rw,no_root_squash,no_all_squash)

Le premier champ indique le nom du répertoire à exporter et le suivant spécifie à qui et comment. Le « qui » indique quel nœud peut monter ce répertoire via le réseau et le « comment » liste ce que le nœud peut faire. L'option ro interdit l'écriture (=read-only) et rw l'autorise. Les options no_root_squash et no_no_all_squash sont importantes pour les clients sans disque qui écrivent sur le disque, de manière à ce qu'ils ne soient pas squashés lors qu'ils font des requêtes d'entrée/sortie . Le fichier fstab de l'esclave, /diskless/192.168.1.21/etc/fstab: devrait ressembler à ceci :

CodeExemple de fichier fstab de l'esclave

# these entries are essential
master:/diskless/192.168.1.21   /         nfs     sync,hard,intr,rw,nolock,rsize=8192,wsize=8192    0 0
master:/opt                     /opt      nfs     sync,hard,intr,ro,nolock,rsize=8192,wsize=8192    0 0
master:/usr                     /usr      nfs     sync,hard,intr,ro,nolock,rsize=8192,wsize=8192    0 0
master:/home                    /home     nfs     sync,hard,intr,rw,nolock,rsize=8192,wsize=8192    0 0
none                            /proc     proc    defaults                                     0 0
# useful but superfluous
master:/var/log                 /var/log  nfs     hard,intr,rw                                 0 0

Dans cet exemple, master est le nom du nœud maître, mais il pourrait être remplacé par son adresse IP. Le premier champ indique le répertoire à monter et le deuxième spécifie le point de montage sur le nœud esclave. Le troisième champ indique le type de système de fichiers (NFS dans notre cas). Le quatrième champ donne des indications au processus de montage des répertoires (voir mount(1) pour plus d'infos). Certains ont rencontré des problèmes avec l'option soft et nous avons donc opté pour des points montés avec l'option hard, mais vous devriez consulter la documentation relative aux options de /etc/fstab pour rendre votre groupe plus efficient.

Le dernier fichier à modifier est /etc/conf.d/nfs. Il décrit les options de démarrage du serveur NFS. Il devrait ressembler à ceci :

CodeExemple de fichier /etc/conf.d/nfs du maître

# Fichier de configuration pour /etc/init.d/nfs
  
# Nomber de serveur à démarrer par défaut
RPCNFSDCOUNT=8
  
# Options à passer à rpc.mountd
RPCMOUNTDOPTS=""

Vous devriez indiquer le nombre de machines sans disque de votre réseau avec l'option RPCNFSDCOUNT .

Démarrer le serveur NFS

Vous devriez lancer le serveur NFS grâce au script situé dans/etc/init.d comme ceci :

root # /etc/init.d/nfs start

Si vous voulez ajouter ce script au processus de démarrage du maître, faites :

root # rc-update add nfs default

Finaliser le système de fichiers de l'esclave

Copier les fichiers manquants

Vous devez maintenant synchroniser le système de fichiers de l'esclave avec celui du maître et fournir les binaires nécessaires tout en préservant les fichiers spécifiques à l'esclave.

root # rsync -avz /bin /diskless/192.168.1.21
root #
rsync -avz /sbin /diskless/192.168.1.21
root #
rsync -avz /lib /diskless/192.168.1.21
Note
L'utilisation de rsync -avz, au lieu de cp, permet de copier les liens symboliques et les permissions de fichiers.

Configurer le réseau des nœuds sans disque

Afin d'empêcher les scripts d'init du réseau de couper les connexions à votre serveur NFS, vous devez ajouter une option au fichier /etc/conf.d/net sur le système de fichiers de votre client sans disque.

CodeEditing /etc/conf.d/net

config_eth0=( "noop" )
Note
Pour plus d'informations, veuillez vous référer à /usr/share/doc/openrc-*/net.example.bz2 .

Scripts d'initialisation

Vous pouvez avoir autant de scripts liés dans le sous-répertoire /diskless/192.168.1.21/etc/runlevels que de services à lancer sur votre nœud esclave. Cela ne dépend que de ce que vous voulez que vos esclaves fassent.

Warning
N'utilisez pas rc-update pour ajouter ou enlever des scripts d'initialisation sur vos esclaves en étant connecté sur le maître, car cela modifierait les niveaux d'exécution du maître. Vous devez créer les liens symboliques manuellement ou vous connecter au nœud esclave via ssh ou un clavier et un écran attachés à l'esclave.
CodeNiveaux d'exécution typiques d'un esclave

/diskless/192.168.1.21/etc/runlevels/:
total 16
drwxr-xr-x    2 root     root         4096 2003-11-09 15:27 boot
drwxr-xr-x    2 root     root         4096 2003-10-01 21:10 default
drwxr-xr-x    2 root     root         4096 2003-03-13 19:05 nonetwork
drwxr-xr-x    2 root     root         4096 2003-02-23 12:26 single
  
/diskless/192.168.1.21/etc/runlevels/boot:
total 0
lrwxrwxrwx    1 root     root           20 2003-10-18 17:28 bootmisc -> /etc/init.d/bootmisc
lrwxrwxrwx    1 root     root           19 2003-10-18 17:28 checkfs -> /etc/init.d/checkfs
lrwxrwxrwx    1 root     root           17 2003-10-18 17:28 clock -> /etc/init.d/clock
lrwxrwxrwx    1 root     root           22 2003-10-18 17:28 domainname -> /etc/init.d/domainname
lrwxrwxrwx    1 root     root           20 2003-10-18 17:28 hostname -> /etc/init.d/hostname
lrwxrwxrwx    1 root     root           22 2003-10-18 17:28 localmount -> /etc/init.d/localmount
lrwxrwxrwx    1 root     root           19 2003-10-18 17:28 modules -> /etc/init.d/modules
lrwxrwxrwx    1 root     root           18 2003-10-18 17:28 net.lo -> /etc/init.d/net.lo
lrwxrwxrwx    1 root     root           20 2003-10-18 17:28 netmount -> /etc/init.d/netmount
lrwxrwxrwx    1 root     root           21 2003-10-18 17:28 rmnologin -> /etc/init.d/rmnologin
lrwxrwxrwx    1 root     root           19 2003-10-18 17:28 urandom -> /etc/init.d/urandom
  
/diskless/192.168.1.21/etc/runlevels/default:
total 0
lrwxrwxrwx    1 root     root           23 2003-10-18 17:28 consolefont -> /etc/init.d/consolefont
lrwxrwxrwx    1 root     root           19 2003-10-18 17:28 distccd -> /etc/init.d/distccd
lrwxrwxrwx    1 root     root           19 2003-10-18 17:28 keymaps -> /etc/init.d/keymaps
lrwxrwxrwx    1 root     root           17 2003-10-18 17:28 local -> /etc/init.d/local
lrwxrwxrwx    1 root     root           16 2003-10-18 17:28 sshd -> /etc/init.d/sshd
lrwxrwxrwx    1 root     root           21 2003-10-18 17:28 syslog-ng -> /etc/init.d/syslog-ng
lrwxrwxrwx    1 root     root           17 2003-10-18 17:28 vixie-cron -> /etc/init.d/vixie-cron
  
/diskless/192.168.1.21/etc/runlevels/nonetwork:
total 0
lrwxrwxrwx    1 root     root           17 2003-10-18 17:28 local -> /etc/init.d/local
  
/diskless/192.168.1.21/etc/runlevels/single:
total 0

C'est le moment de démarrer votre nœud esclave et de croiser les doigts. Ça marche ? Bravo, vous disposez maintenant d'un PC sans disque fonctionnel.

Remerciements

Nous tenons à remercier les auteurs et éditeurs suivants pour leur contribution à ce guide :


  • Michael Andrews
  • Kristian Jerpetjoen
  • Sven Vermeulen
  • Xavier Neys