Diskless

Un article de Diablotins.org.


Image:brush.png
  • Auteur :David Marec
  • Date : 27 Mai 2006

Un réseau de stations sans disques.




FreeBSD va vous permettre aisément de créer des stations dites sans disque ou «diskless» à partir d'un seul serveur.
Ce serveur va distribuer sur le réseau un noyau et ses applications aux stations clientes.
Le serveur est un DHCP qui va construire le réseau local et distribuer un noyau aux stations selon leur adresse MAC.
Ensuite, le serveur va distribuer ses applications via N.F.S.. Votre station est alors déjà opérationnelle, il lui manque une interface graphique, ce sera fait par X-Window et une extension de son protocole: XDMCP.
Le terminal va faire partie d'un réseau dont le nœud sera le serveur. Dans les exemples qui vont suivre, ce serveur gère un petit réseau de terminaux: .Toy.Dolls sur 192.168.0./24 et a lui même l'adresse 192.168.0.1 sous le nom «Nelly».


Sommaire

Construire le terminal

Le terminal va devoir exécuté le noyau FreeBSD que le serveur va lui fournir et intégrer dans ce noyau le protocole N.F.S. pour accéder à son espace, à ses scripts de démarrage sur le serveur dès son lancement. Pour cela, il vous faudra noter l'adresse MAC de la machine, son architecture pour lui construire un noyau adapté.

Préparer le serveur

Le serveur est avant tout un serveur de réseau, tout ce qui s'applique à la construction d'un serveur de réseau local est à mettre en œuvre ici.
Préparez un espace dédié aux clients sur le serveur, par exemple dans /usr/terminaux/:

mkdir -p /usr/terminaux/TurtleCrazy    TurtleCrazy sera le nom d'un terminal

Ensuite décrivez votre réseau.

Le réseau

Pour décrire votre réseau, définissez en le nom, ici: «.dmarec.local» et construisez

le fichier hosts:
192.168.0.1     Nelly.Toy.Dolls Nelly Nelly.Toy
192.168.0.2     TurtleCrazy.Toy.Dolls    TurtleCrazy TurtleCrazy.Toy

Évidemment, le serveur doit avoir l'adresse «192.168.0.1» sur l'interface réseau connectée aux terminaux; précisez donc dans /etc/rc.conf:

ifconfig_rl0="inet 192.168.0.1  netmask 255.255.255.0" 
rl0 est l'interface connectée aux terminaux

DHCP

Après avoir configuré un DHCP, ordonnez lui de distribuer le noyau idoine à TurtleCrazy:

#    /usr/local/etc/dhcpd.conf
# [...]      votre configuration DHCP classique 
host TurtleCrazy {
 hardware ethernet 00:05:5D:FF:FF:FF;    notez ici l'adresse MAC du terminal
 filename "/usr/terminaux/TurtleCrazy/kernel";
 fixed-address TurtleCrazy.Toy.Dolls;
 next-server 192.168.0.1;
 option root-path "192.168.0.1:/usr/terminaux/TurtleCrazy/";
 }

NFS

La distribution N.F.S. va donner un système de fichier aux terminaux. Ainsi, le système accédera aux points de montages du serveur par le réseau.
Le fichier /etc/exports détermine les points de montage à distribuer:

/usr/terminaux -maproot=0:0    TurtleCrazy
/usr -alldirs TurtleCrazy -network 192.168.0 -netmask 255.255.255.0

La première ligne va distribuer le noyau et le monde à TurtleCrazy.
La seconde est plus générale, elle distribue tous les logiciels que comportent le serveur sur le réseau.

Fichier d'échange

Le swap n'est pas nécessaire mais peut être utile; créez le ainsi:

mkdir /usr/terminaux/TurtleCrazy/swap 
dd if=/dev/zero bs=1024 count=64000 of=/usr/terminaux/TurtleCrazy/swap/Pagefile.sys
chmod 0600 /usr/terminaux/TurtleCrazy/swap/Pagefile.sys

Préparer un client

Le terminal est un FreeBSD standard, il comporte un noyau et son monde, ainsi qu'une configuration particulière.

Noyau

Préparez un Noyau pour votre terminal:

cp /usr/src/sys/i386/conf/GENERIC /usr/src/sys/i386/conf/TurtleCrazy

Ajoutez les options:

options         BOOTP           # BOOTP va obtenir IP et nom
options         BOOTP_NFSROOT   # NFS Monte «/» d'après «option root-path»
options         BOOTP_NFSV3     # Version de NFS
options         BOOTP_COMPAT    # 
options         BOOTP_WIRED_TO=rl0 # interface de connexion 
options         NULLFS

Configuration

Créez un espace dédié aux scripts particuliers du client:

mkdir -p /usr/terminaux/TurtleConf/etc

et copiez y la configuration de votre terminal. En particulier:

swapfile="/swap/Pagefile.sys"
local_startup=""
Commentez ou supprimez les services locaux dont:
cron_enable="YES"    
192.168.0.1:/usr/terminaux/TurtleCrazy /     nfs    rw 0 0
192.168.0.1:/usr     /usr  nfs    rw 0 0
192.168.0.1:/usr/home   /home   nfs     rw      0       0
proc               /proc procfs rw 0 0

Ne conservez que les consoles virtuelles et désactivez le gestionnaire de connexion graphique le cas échéant.

  • Les fichiers de configuration du serveur Ă  reprendre tels que:
/etc/hosts
/etc/login.conf
/etc/csh.cshrc interpréteur csh
/etc/profile interpréteur bash
devfs.rules
devfd.conf
  • N'oubliez pas les utilisateurs:
cd /usr/terminaux/TurtleConf/
cp /etc/master.passwd etc/
pwd_mkdb -d etc/ etc/master.passwd
pwd_mkdb -p -d etc/ etc/master.passwd

Construction

Enfin, il faut créer tout ça:

export DESTDIR=/usr/terminaux/TurtleCrazy
mkdir -p ${DESTDIR}
rm -rf /usr/obj/
cd /usr/src && nice make -j2 world && nice make kernel KERNCONF=TurtleCrazy
cd /usr/src/etc; make distribution
cp -r /usr/terminaux/TurtleConf/etc/ ${DESTDIR}/etc/

Utilisation

Configurez le BIOS du terminal pour un démarrage par le réseau; si cela n'est pas possible, préparez un démarrage sur disquette et créer une disquette de démarrage.

Etherboot


Installez le port net/etherboot.
Vous disposerez ainsi dans /usr/ports/net/etherboot/work/src/bin d'une collections de ROM à inscrire sur une disquette selon l'interface réseau du client:

cd /usr/ports/net/etherboot/work/src/bin
cat boot1a.bin <interface>.zrom  > /dev/fd0

Il vous reste à démarrer le terminal sur la disquette.
Comment ça, ça ne marche pas ? Ah, vous avez remarquĂ© vous aussi ? Le port etherboot est assez mal documentĂ©, il plante mĂŞme Ă  la fin de son installation et contrairement Ă  ce que vous trouverez Ă©crit ici oĂą lĂ , le noyau n'est pas chargĂ© par dĂ©faut par NFS mais par TFTP.
Actuellement, version 5.4.2, voici la procédure:

cd /usr/ports/net/etherboot/work/etherboot-5.2.4/src

Editez «config» et dé-commentez la ligne:

CFLAGS+=        -DDOWNLOAD_PROTO_NFS

et ajoutez celle-ci:

CFLAGS+=        -DDEFAULT_PROTO_NFS

Ensuite entrez:

gmake bin/<interface>.fd0 

soit:

gmake bin/rtl8139.fd0    

pour la carte Dlink 530 DFE, en fait une Realtek 8139. Notez «'bin/» et non pas «bin32» comme indiqué dans le manuel.

Session X

Si votre terminal dispose d'assez de mémoire, vous pouvez ouvrir à la fois un client et un serveur X par un simple:

startx

Évidemment, privilégiez les gestionnaires légers, tel blackbox et surtout, utilisez Xfs pour l'affichage des polices de caractères plutôt que déclarer des chemins vers un disque dans xorg.conf.

Terminal X

Le protocole X est un protocole réseau qui va vous permettre de transformer votre terminal en terminal X; c'est à dire qu'il va gérer un display, l'affichage des clients X exécutés par le serveur d'applications.
Comme précédemment, utilisez Xfs.

XDMCP

Pour gérer les connexions des display nous allons démarrer un gestionnaire de connexions graphique sur le serveur d'applications. i.e. XDM.
Le terminal initie la connexion vers XDM via le protocole XDMCP, port UDP 177. Dans /usr/X11R6/lib/X11/xdm, ajoutez les entrées suivantes dans xdm-config:

DisplayManager.TurtleCrazy_0.setup: /usr/X11R6/lib/X11/xdm/Xsetup_0
DisplayManager.TurtleCrazy_0.startup: /usr/X11R6/lib/X11/xdm/GiveConsole
DisplayManager.TurtleCrazy_0.reset: /usr/X11R6/lib/X11/xdm/TakeConsole

Pour distribuer les scripts de démarrage d'une session X à «TurtleCrazy».
Commentez la ligne «DisplayManager.requestPort: 0» en insérant le symbole «!» en tête de la ligne ( et non «#» comme de coutume ).
Ensuite, autorisez l'accès à XDM depuis les stations concernées. Dans Xaccess, ajoutez les entrées correspondant à vos stations, ou «*» pour toutes.
Note: Certaines versions de Xorg ont «cassé» XDM. Par exemple, il est nécessaire de commenter l'entrée suivante dans xdm-config:

!DisplayManager*startup:                /usr/X11R6/lib/X11/xdm/Xstartup

«usr/X11R6/lib/X11/xdm/Xstartup» n'existant pas.

Ouvrir une session

Simplement, entrez après vous être connecté:

X -query serveur

Attention, votre terminal n'est alors qu'un afficheur, tout s'exécute sur le serveur d'applications. Les périphériques qui ne composent pas le display ( CédéROM, lecteur de disquettes, USB etc.) sont ceux du serveurs. Ne demandez pas l'extinction du terminal à partir d'une session XDMCP: vous étendriez le serveur d'applications.

Variantes

Les mĂ©thodes pour mettre en Ĺ“uvre des stations sans disque diffèrenet essentiellement sur la manière de distribuer un noyau, (NFS, TFTP, PXE, disquette, CĂ©dĂ©rom, clef USB, que sais-je ?) et de l'exĂ©cuter.
Lecid en propose une qui repose sur PXE.

En savoir plus

Le manuel

Documentation

La seule véritable documentation qui m'ait permis de construire mon premier Diskless Que son auteur en soit loué.

Récupérée de « http://diablotins.org/index.php/Diskless »
Projets :
Boîte à outils