Manuel FreeBSD
Précédent | Chapitre 29. Administration réseau avancée | Suivant

# 29.6. Système sans disque dur

Mis à jour par Jean-François Dockès. Réorganisé et augmenté par Alex Dupre.

Une machine FreeBSD peut démarrer via le réseau et fonctionner sans disque dur local, en utilisant des systèmes de fichiers montés à partir d'un serveur NFS. Aucune modification du système n'est nécessaire en dehors des fichiers de configuration standards. Un tel système est facile à mettre en oeuvre comme tous les éléments sont directement disponibles:

- Il y a au moins deux méthodes possibles pour charger un noyau via le réseau:

  - PXE: l'environnement d'exécution préalable au démarrage d'Intel® (Preboot eXecution Environment) est une sorte de ROM intelligente présente sur certaines cartes réseau ou cartes mère. Consultez la page de manuel pxeboot(8) pour plus de détails.

  - Le logiciel porté Etherboot (`net/etherboot`) produit un code stockable dans une ROM pour démarrer des noyaux via le réseau. Le code peut être soit implanté dans une PROM de démarrage sur une carte réseau, soit chargé à partir d'une disquette (ou d'un disque dur local), ou à partir d'un système MS-DOS® en fonctionnement. De nombreuses cartes réseau sont supportées.

- Une procédure d'exemple (`/usr/share/examples/diskless/clone_root`) facilite la création et la maintenance du système de fichiers racine de la station de travail sur le serveur. La procédure demandera sûrement quelques modifications mais vous permettra de démarrer rapidement.

- Des fichiers de démarrage du système existent dans le répertoire `/etc` pour détecter et supporter le démarrage d'un système sans disque dur.

- La pagination, si nécessaire, peut être faite par l'intermédiaire d'un fichier NFS ou sur un disque local.

Il existe plusieurs façons de configurer des stations de travail sans disque dur. Plusieurs éléments entrent en oeuvre, et la plupart peuvent être ajustés en fonction des besoins locaux. Ce qui suit décrit des variations sur la configuration d'un système complet, mettant en avant le simplicité et la compatibilité avec les procédures standards de démarrage de FreeBSD. Le système décrit présente les caractéristiques suivantes:

- Les stations de travail sans disque dur utilisent des systèmes de fichiers `/` et `/usr` partagés et en lecture seule.

  Le système de fichiers racine est une copie d'une racine FreeBSD standard (généralement celle du serveur), avec certains fichiers de configuration remplacés par des versions spécifiques à un fonctionnement sans disque dur, et parfois à la station de travail auxquels ils appartiennent.

  Les parties de la racine qui doivent être inscriptibles sont remplacées par des systèmes de fichiers mfs(8) (FreeBSD 4.X) ou md(4) (FreeBSD 5.X). Toute modification sera perdue au redémarrage du système.

- Le noyau est transféré et chargé soit à l'aide d'Etherboot soit de PXE comme certaines situations peuvent exiger l'utilisation de l'une ou l'autre méthode.

> AttentionAinsi décrit, le système n'est pas sécurisé. Il devrait se trouver dans une partie protégée du réseau, et les autres machines ne devraient pas lui faire confiance aveuglément.

Toutes les instructions de cette section ont été testées sous FreeBSD 4.9-RELEASE et 5.2.1-RELEASE. Le texte est destiné à l'origine pour une utilisation sous 4.X. Des notes on été insérées aux endroits nécessaires pour indiquer les modifications concernant la branche 5.X.

## 29.6.1. Information de fond

Mettre en place des stations de travail sans disque dur est à la fois relativement simple et enclin aux erreurs. Ces dernières sont parfois difficiles à diagnostiquer pour de nombreuses raisons. Par exemple:

- Des options de compilation peuvent donner lieu à des comportements différents à l'exécution.

- Les messages d'erreurs sont souvent cachés ou totalement absents.

Dans ce contexte, avoir quelques connaissances des mécanismes sous-jacents impliqués est très utile pour résoudre les problèmes qui peuvent surgir.

Plusieurs opérations doivent être effectuées pour un amorçage réussi:

- La machine doit obtenir des paramètres de base comme son adresse IP, le nom du fichier exécutable, le nom du serveur, l'emplacement de la racine. Ceci est fait en utilisant le protocole DHCP ou le protocole BOOTP. DHCP est une extension compatible de BOOTP, et utilise les mêmes numéros de ports et son format de paquets basic.

  Il est possible de configurer un système pour n'utiliser que BOOTP. Le programme serveur bootpd(8) fait partie du système de base de FreeBSD.

  Cependant, DHCP présente plusieurs avantage sur BOOTP (des fichiers de configuration plus lisibles, la possibilité d'utiliser PXE, plus de nombreux autres avantages n'ayant pas de relation directe avec les systèmes sans disque dur), et nous décrirons principalement une configuration DHCP, avec des exemples équivalent utilisant bootpd(8) quand cela est possible. L'exemple de configuration utilisera le logiciel ISC DHCP (la version 3.0.1.r12 était installée sur le serveur de test).

- La machine a besoin de transférer un ou plusieurs programmes en mémoire locale. TFTP ou NFS sont utilisés. Le choix entre TFTP et NFS est à de nombreux endroits une option sélectionnée lors de la compilation. Une source d'erreur courante est d'indiquer des noms de fichiers pour le mauvais protocole: TFTP transfère généralement tous les fichiers à partir d'un seul répertoire sur le serveur, et attendra des noms de fichiers relatifs à ce répertoire. NFS a besoin de chemins d'accès absolus.

- Les éventuels programmes d'amorce intermédiaires et le noyau doivent être initialisés et exécutés. Il existe plusieurs variations à ce niveau:

  - PXE chargera pxeboot(8), qui est une version modifiée du chargeur. Le chargeur (loader(8)) récupérera la plupart des paramètres nécessaires au démarrage du système, et les transmettra au noyau avant de lui abandonner le contrôle du système. Dans ce cas il est possible d'utiliser un noyau `GENERIC`.

  - Etherboot, chargera directement le noyau avec moins de préparation. Vous devrez compiler un noyau avec des options particulières.

  PXE et Etherboot fonctionnent aussi bien l'un que l'autre avec des systèmes 4.X. Comme le noyau des systèmes 5.X laisse au chargeur (loader(8)) un peu plus de travail à effectuer, PXE est préféré pour les systèmes 5.X.

  Si votre BIOS et vos cartes réseau supportent PXE, vous devriez probablement l'utiliser. Cependant, il est toujours possible de démarrer un système 5.X à l'aide d'Etherboot.

- Et enfin, la machine a besoin d'accéder à ses systèmes de fichiers. NFS est utilisé dans tous les cas.

Consultez également la page de manuel diskless(8).

## 29.6.2. Configuration

### 29.6.2.1. Configuration utilisant ISC DHCP

Le serveur ISC DHCP peut répondre aux requêtes BOOTP et DHCP.

Avec la version 4.9, ISC DHCP 3.0 ne fait pas partie du système de base. Vous devrez installer le logiciel porté `net/isc-dhcp3-server` ou la version pré-compilée correspondante.

Une fois ISC DHCP installé, il nécessite un fichier de configuration pour fonctionner (normalement appelé `/usr/local/etc/dhcpd.conf`). Voici un exemple commenté, où la machine `margaux` utilise Etherboot et où la machine `corbieres` emploie PXE:

    default-lease-time 600;
    max-lease-time 7200;
    authoritative;

    option domain-name "example.com";
    option domain-name-servers 192.168.4.1;
    option routers 192.168.4.1;

    subnet 192.168.4.0 netmask 255.255.255.0 {
      use-host-decl-names on;
      option subnet-mask 255.255.255.0;
      option broadcast-address 192.168.4.255;

      host margaux {
        hardware ethernet 01:23:45:67:89:ab;
        fixed-address margaux.example.com;
        next-server 192.168.4.4;
        filename "/data/misc/kernel.diskless";
        option root-path "192.168.4.4:/data/misc/diskless";
      }
      host corbieres {
        hardware ethernet 00:02:b3:27:62:df;
        fixed-address corbieres.example.com;
        next-server 192.168.4.4;
        filename "pxeboot";
        option root-path "192.168.4.4:/data/misc/diskless";
      }
    }

  Cette option dit à dhcpd d'envoyer le paramètre des déclarations `host` comme nom de machine pour la machine sans disque dur. Une autre méthode aurait été d'ajouter `option host-name `margaux`` à l'intérieur des déclarations `host`.
  La directive `next-server` désigne le serveur TFTP ou NFS à utiliser pour télécharger le chargeur ou le noyau (le comportement par défaut étant d'utiliser la même machine que le serveur DHCP).
  La directive `filename` précise le fichier que chargera Etherboot ou PXE à la prochaine étape. Il doit être défini en fonction de la méthode de transfert utilisée. Etherboot peut être compilé pour utiliser NFS ou TFTP. Le logiciel porté pour FreeBSD utilisera NFS par défaut. PXE emploie TFTP, c'est pourquoi un chemin d'accès relatif est utilisé ici (cela peut dépendre de la configuration du serveur TFTP, mais devrait être plutôt classique). De plus, PXE charge `pxeboot`, et non pas le noyau. Il existe d'autres possibilités intéressantes, comme le chargement de `pxeboot` à partir du répertoire `/boot` d'un CD-ROM FreeBSD (comme pxeboot(8) peut charger un noyau `GENERIC` cela rend possible l'utilisation de PXE pour démarrer à partir d'un lecteur de CD-ROM distant).
  L'option `root-path` définie le chemin d'accès au système de fichiers racine, suivant la notation classique de NFS. En utilisant PXE, il est possible de ne pas préciser l'adresse IP de la machine dès lors que vous n'activez pas l'option BOOTP du noyau. Le serveur NFS sera alors le même que le serveur TFTP.

### 29.6.2.2. Configuration utilisant BOOTP

Ce qui suit présente une configuration bootpd équivalente (réduite à un seul client). Elle se trouverait sous `/etc/bootptab`.

Veuillez noter qu'Etherboot doit être compilé avec l'option `NO_DHCP_SUPPORT` (qui n'est pas activée par défaut) afin d'utiliser BOOTP et que PXE nécessite DHCP. The seul avantage évident de bootpd est qu'il est disponible dans le système de base.

    .def100:\
      :hn:ht=1:sa=192.168.4.4:vm=rfc1048:\
      :sm=255.255.255.0:\
      :ds=192.168.4.1:\
      :gw=192.168.4.1:\
      :hd="/tftpboot":\
      :bf="/kernel.diskless":\
      :rp="192.168.4.4:/data/misc/diskless":

    margaux:ha=0123456789ab:tc=.def100

### 29.6.2.3. Préparation d'un programme de démarrage avec Etherboot

Le site Web d'Etherboot propose une documentation importante principalement destinée aux systèmes Linux, mais contenant néamoins des informations utiles. Ce qui suit présente comment vous utiliseriez Etherboot sur un système FreeBSD.

Vous devez tout d'abord installer le logiciel porté `net/etherboot` ou sa version pré-compilée.

Vous pouvez modifier la configuration d'Etherboot (i.e. pour utiliser TFTP au lieu de NFS) en éditant le fichier `Config` dans le répertoire des sources d'Etherboot.

Pour notre configuration nous utiliserons une disquette de démarrage. Pour d'autres méthodes (PROM, ou un programme MS-DOS), consultez la documentation d'Etherboot.

Pour créer une disquette de démarrage, insérez une disquette dans le lecteur de la machine où vous avez installé Etherboot, puis rendez-vous dans le répertoire `src` de l'arborescence Etherboot et tapez:

    # gmake bin32/devicetype.fd0

`devicetype` dépend du type de carte Ethernet se trouvant dans la station de travail sans disque dur. Référez-vous au fichier `NIC` dans le même répertoire pour déterminer la valeur `devicetype` correcte.

### 29.6.2.4. Démarrer avec PXE

Par défaut le chargeur pxeboot(8) charge le noyau via NFS. Il peut être compilé pour utiliser TFTP à la place en spécifiant l'option `LOADER_TFTP_SUPPORT` dans le fichier `/etc/make.conf`. Lisez les commentaires dans le fichier `/etc/defaults/make.conf` (ou `/usr/share/examples/etc/make.conf` pour les systèmes 5.X) pour plus de détails.

Il existe deux autres options de `make.conf` non-documentées qui peuvent être utiles pour la configuration d'une machine faisant fonction de console série sans disque dur: `BOOT_PXELDR_PROBE_KEYBOARD`, et `BOOT_PXELDR_ALWAYS_SERIAL` (cette dernière n'existe que sous FreeBSD 5.X).

Pour utiliser PXE quand la machine démarre, vous aurez normalement besoin de sélectionner l'option `Boot from network` dans votre BIOS, ou d'appuyer sur une touche de fonction lors de l'initialisation du PC.

### 29.6.2.5. Configuration des serveurs TFTP et NFS

Si vous utilisez PXE ou Etherboot configurés pour employer TFTP, vous devez activer tftpd sur le serveur de fichier:

1. Créez un répertoire à partir duquel tftpd proposera les fichiers, e.g. `/tftpboot`.

2. Ajoutez la ligne suivante à votre fichier `/etc/inetd.conf`:

       tftp   dgram   udp wait    root    /usr/libexec/tftpd  tftpd -l -s /tftpboot

   > Note : Il apparaît que certaines versions de PXE veulent la version TCP de TFTP. Dans ce cas, ajoutez une seconde ligne, en remplaçant `dgram udp` par `stream tcp`.

3. Demandez à inetd de relire son fichier de configuration:

       # kill -HUP `cat /var/run/inetd.pid`

Le répertoire `tftpboot` peut être placé n'importe où sur le serveur. Assurez-vous que son emplacement est défini dans les fichiers `inetd.conf` et `dhcpd.conf`.

Dans tous les cas, vous devez également activer NFS et exporter le système de fichiers approprié sur le serveur NFS.

1. Ajoutez ce qui suit au fichier `/etc/rc.conf`:

       nfs_server_enable="YES"

2. Exportez le système de fichiers contenant le répertoire racine du système sans disque dur en ajoutant ce qui suit au fichier `/etc/exports` (ajustez le point de montage et remplacez `margaux corbieres` avec les noms des stations de travail sans disque dur):

       /data/misc -alldirs -ro margaux corbieres

3. Demandez à mountd de relire son fichier de configuration. Si vous avez eu besoin d'activer NFS dans `/etc/rc.conf` lors du premier point, vous voudrez probablement plutot redémarrer la machine.

       # kill -HUP `cat /var/run/mountd.pid`

### 29.6.2.6. Compilation d'un noyau pour système sans disque dur

Si vous utilisez Etherboot, vous devez créer un fichier de configuration du noyau pour le client sans disque dur avec les options suivantes (en plus des options habituelles):

    options     BOOTP          # Use BOOTP to obtain IP address/hostname
    options     BOOTP_NFSROOT  # NFS mount root filesystem using BOOTP info

Vous pouvez vouloir également employer les options `BOOTP_NFSV3`, `BOOT_COMPAT` et `BOOTP_WIRED_TO` (référez-vous au fichier `LINT` sous 4.X ou `NOTES` sous 5.X).

Les noms de ces options sont historiques et légèrement trompeur comme elles activent indifférement l'utilisation de DHCP et BOOTP dans le noyau (il est également possible de forcer une utilisation stricte de BOOTP ou DHCP).

Compilez le noyau (voir Chapitre 8), et copiez-le à l'emplacement indiqué dans `dhcpd.conf`.

> Note : Quand on utilise PXE, la compilation d'un noyau avec les options précédentes n'est pas strictement nécessaire (bien que conseillé). Les activer causera un plus grand nombre de requêtes DHCP générées lors du démarrage du noyau, avec un petit risque d'inconsistance entre les nouvelles valeurs et celles récupérées par pxeboot(8) dans certains cas particuliers. L'avantage de leur utilisation est que le nom de la machine sera forcément défini. Sinon vous devrez définir le nom de la machine par une autre méthode, par exemple dans un fichier `rc.conf` particulier au client.

> Note : Afin d'être chargeable par Etherboot, un noyau 5.X doit être compilé avec les ``device hints''. Vous définirez normalement l'option suivante dans le fichier de configuration (voir le fichier de commentaires sur la configuration: `NOTES`):

>     hints      "GENERIC.hints"

### 29.6.2.7. Préparer le système de fichiers racine

Vous devez créer un système de fichiers racine pour les stations de travail sans disque dur, à l'emplacement défini par `root-path` dans le fichier `dhcpd.conf`. Les sections suivantes décrivent deux manières de le faire.

#### 29.6.2.7.1. Utilisation de la procédure `clone_root`

C'est la méthode la plus rapide pour créer un système de fichiers racine, mais elle est, pour le moment, uniquement supportée sous FreeBSD 4.X.. Cette procédure est située à l'emplacement `/usr/share/examples/diskless/clone_root` et demande quelques modifications, pour au moins ajuster l'emplacement du système de fichiers à créer (la variable `DEST`).

Référez-vous aux commentaires situés en début de la procédure pour information. Ils expliquent comment le système de fichiers de base est construit, et comment les fichiers peuvent être remplacés de façon sélective par des versions spécifiques à un fonctionnement sans disque dur, ou à un sous-réseau, ou encore à une station de travail particulière. Ils donnent également des exemples de fichiers `/etc/fstab` et `/etc/rc.conf` pour un fonctionnement sans disque dur.

Les fichiers `README` dans le répertoire `/usr/share/examples/diskless` contiennent beaucoup d'information de fond, mais, avec les autres exemples du répertoire `diskless`, ils documentent une méthode de configuration qui est distincte de celle utilisée par `clone_root` et les procédures de démarrage du système de `/etc`, ce qui est un peu à l'origine de confusions. Utilisez-les comme référence uniquement, à moins que vous préfériez la méthode qu'ils décrivent, dans quel cas vous devrez modifier les procédures `rc`.

#### 29.6.2.7.2. Utilisation de la procédure `make world` standard

Cette méthode s'applique aussi bien à FreeBSD 4.X qu'à FreeBSD 5.X et installera un système complet (et non pas uniquement le système de fichiers racine) dans le répertoire défini par `DESTDIR`. Tout ce dont vous avez besoin de faire est d'exécuter la procédure suivante:

    #!/bin/sh
    export DESTDIR=/data/misc/diskless
    mkdir -p ${DESTDIR}
    cd /usr/src; make world && make kernel
    cd /usr/src/etc; make distribution

Une fois cela terminé, vous devrez personaliser vos fichiers `/etc/rc.conf` et `/etc/fstab` situés dans `DESTDIR` en fonction de vos besoins.

### 29.6.2.8. Configuration de l'espace de pagination

Si nécessaire, un fichier de pagination situé sur le serveur peut être utilisé via NFS. Une des méthodes couramment utilisées pour cela n'est plus supportée sous 5.X.

#### 29.6.2.8.1. Pagination via NFS sous FreeBSD 4.X

L'emplacement et la taille du fichier de pagination peuvent être spécifiés avec les options BOOTP/DHCP 128 et 129 spécifiques à FreeBSD. Des exemples de fichiers de configuration pour ISC DHCP 3.0 ou bootpd suivent:

1. Ajoutez les lignes suivantes au fichier `dhcpd.conf`:

       # Global section
       option swap-path code 128 = string;
       option swap-size code 129 = integer 32;

       host margaux {
         ... # Standard lines, see above
         option swap-path "192.168.4.4:/netswapvolume/netswap";
         option swap-size 64000;
       }

   `swap-path` est le chemin d'accès vers un répertoire où les fichiers de pagination sont situés. Chaque fichier sera nommé `swap.`ip-client``.

   Les anciennes version de dhcpd utilisaient une syntaxe du type `option option-128 "...`, qui n'est plus supportée.

   `/etc/bootptab` utiliserait la syntaxe suivante à la place:

       T128="192.168.4.4:/netswapvolume/netswap":T129=0000fa00

   > Note : Dans le fichier `/etc/bootptab`, la taille de l'espace de pagination doit être exprimée en hexadécimal.

2. Sur le serveur du fichier de pagination par NFS, créez le(s) fichier(s) de pagination:

       # mkdir /netswapvolume/netswap
       # cd /netswapvolume/netswap
       # dd if=/dev/zero bs=1024 count=64000 of=swap.192.168.4.6
       # chmod 0600 swap.192.168.4.6

   `192.168.4.6` est l'adresse IP du client sans disque dur.

3. Sur le serveur du fichier de pagination par NFS, ajoutez la ligne suivante au fichier `/etc/exports`:

       /netswapvolume  -maproot=0:10 -alldirs margaux corbieres

   Ensuite demandez à mountd à relire le fichier `exports`, comme plus haut.

#### 29.6.2.8.2. Pagination via NFS sous FreeBSD 5.X

Le noyau ne supporte pas l'activation de la pagination par NFS au démarrage. L'espace de pagination doit être activé par les procédures de démarrage, en montant un système de fichiers accessible en écriture et en créant et en activant un fichier de pagination. Pour créer un fichier de pagination de la taille appropriée, vous pouvez effectuer ce qui suit:

    # dd if=/dev/zero of=/path/to/swapfile bs=1k count=1 oseek=100000

Pour ensuite l'activer, vous devez ajouter la ligne suivante à votre fichier `rc.conf`:

    swapfile=/path/to/swapfile

### 29.6.2.9. Problèmes divers

#### 29.6.2.9.1. Utilisation d'un `/usr` en lecture seule

Si la station de travail sans disque dur est configurée pour exécuter X, you devrez ajuster le fichier de configuration de XDM, qui envoie le journal d'erreurs sur `/usr` par défaut.

#### 29.6.2.9.2. Utilisation d'un serveur non-FreeBSD

Quand le serveur pour le système de fichiers racine ne fait pas tourner FreeBSD, vous devrez créer le système de fichiers racine sur une machine FreeBSD, puis le copier vers sa destination en utilisant `tar` ou `cpio`.

Dans cette situation, il y a parfois des problèmes avec les fichiers spéciaux de périphériques dans `/dev`, en raison de différences de taille sur les entiers. Une solution à ce problème est d'exporter un répertoire à partir du serveur non-FreeBSD, de monter ce répertoire sur une machine FreeBSD, et exécuter `MAKEDEV` sur la machine FreeBSD pour créer les entrées de périphériques correctes (FreeBSD 5.X et les versions suivantes utilisent devfs(5) pour l'allocation des fichiers spéciaux de périphériques de manière transparente pour l'utilisateur, exécuter `MAKEDEV` sur ces versions est inutile).

Précédent | Sommaire | Suivant
Bridging | Niveau supérieur | ISDN

Ce document, ainsi que d'autres peut être téléchargé sur ftp.FreeBSD.org/pub/FreeBSD/doc/.

Pour toutes questions à propos de FreeBSD, lisez la documentation avant de contacter <questions@FreeBSD.org>.
Pour les questions sur cette documentation, contactez <doc@FreeBSD.org>.