Diskless
De Diablotins.org.
| Un réseau de stations sans disques
|
| ||
| FreeBSD va vous permettre aisément de créer des stations dites sans disque ou diskless(8), à partir d'un seul serveur.
|
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:
- rc.conf qui devra contenir:
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.
De plus, dans les versions récentes /usr/X11R6 est un lien vers /usr/local.
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
Documentation
La seule véritable documentation qui m'ait permis de construire mon premier Diskless Que son auteur en soit loué.

