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.
Ainsi 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.
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).
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
| |
La directive
| |
La directive
| |
L'option
|
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
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.
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.
Si vous utilisez PXE ou Etherboot configurés pour employer TFTP, vous devez activer tftpd sur le serveur de fichier:
Créez un répertoire à partir
duquel tftpd proposera les
fichiers, e.g. /tftpboot
.
Ajoutez la ligne suivante à votre fichier
/etc/inetd.conf
:
tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /tftpboot
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
.
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.
Ajoutez ce qui suit au fichier
/etc/rc.conf
:
nfs_server_enable="YES"
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 -romargaux corbieres
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`
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, Configurer le noyau de FreeBSD),
et copiez-le à l'emplacement indiqué dans
dhcpd.conf
.
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.
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"
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.
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
.
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.
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.
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:
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-size64000
; }
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
Dans le fichier
/etc/bootptab
, la taille de
l'espace de pagination doit être exprimée
en hexadécimal.
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.
Sur le serveur du fichier de pagination par
NFS, ajoutez la ligne suivante au
fichier /etc/exports
:
/netswapvolume
-maproot=0:10 -alldirsmargaux corbieres
Ensuite demandez à
mountd à relire le
fichier exports
, comme plus
haut.
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
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.
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).
Ce document, ainsi que d'autres peut être téléchargé sur ftp://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>.