Il faut installer quelques paquets supplémentaires qui ne font pas partie de la
Pour installer les paquets via l'Internet éditer « à la main » le fichier /etc/apt/sources.list,
pour y ajouter la ligne :
# deb http://debian.odys-solutions.net/debian/ stable/
Le fichier /etc/apt/sources.list pourrait par exemple ressembler à :
# See sources.list(5) for more information, especialy
# Remember that you can only use http, ftp or file URIs
# CDROMs are managed through the apt-cdrom tool.
# Miroir français
deb ftp://ftp.fr.debian.org/debian/ woody main non-free contrib
deb ftp://ftp.fr.debian.org/debian-non-US/ woody/non-US main contrib non-free
# Mises à jour de sécurité
deb ftp://security.debian.org/debian-security/ woody/updates main contrib non-free
# Paquets TX n'existant sur la distribution standart. Accès http uniquement !!!
deb http://debian.odys-solutions.net/debian/ stable/
Ensuite, installer les paquets avec les commandes :
# apt-get update
# apt-get -u install debootstrap dhcp3-common dhcp3-server nfs-kernel-server tftpd-hpa xfs tx-bootstrap
Une fois les paquets installés il ne reste plus qu'a créer le système de fichier pour le terminal X. Pour cela, il faut éxécuter sous le compte de root:
# mk-tx-root
Une fois terminé, le dossier /var/lib/diskless/tx est créé et peuplé par le système des terminal X.
Si les cartes réseaux des clients ont un bootrom utilisant le protocol PXE il faut installer le « loader » pxelinux dans le dossier /var/tftp.
# cp /usr/lib/syslinux/pxelinux.0 /var/tftp/
# cp -r /usr/share/doc/tx-bootstrap/examples/pxelinux.cfg /var/tftp/
Afin que les terminaux soient connus du serveur il faut ajouter une ligne pour chaque terminal X dans le fichier
/etc/hosts. Ex:
# /etc/hosts
127.0.0.1 localhost 192.168.0.1 serveur.mondomaine.loc serveur
# adresses IP, FQDN et aliases des terminaux X
192.168.0.101 tx1.mondomaine.loc tx1
192.168.0.102 tx2.mondomaine.loc tx2
192.168.0.103 tx3.mondomaine.loc tx3
192.168.0.104 tx4.mondomaine.loc tx4
192.168.0.105 tx5.mondomaine.loc tx5
192.168.0.106 tx6.mondomaine.loc tx6
Les terminaux accèdent à leur système de fichiers par le réseau via NFS. Pour autoriser les machines à accéder à leur
système de fichiers vous devez en autoriser l'exportation. Pour cela vous devez créer le fichier /etc/exports et ajouter
la ligne:
# /etc/exports
/var/lib/diskless/tx *.mondomaine.loc(ro,no_root_squash)
Quelques explications.
/var/lib/diskless/tx correspond au système de fichier utilisé par les terminaux. Il est commun à tous les
terminaux. Il ne faut pas que l'on puisse modifier ce système de fichiers depuis un poste et c'est pour cela que l'on précise
ro (read only).
L'option no_root_squash, est indispensable pour autoriser la machine qui utilise ce dossier comme son système de
fichier à y accéder en tant que root.
Une fois le fichier /etc/exports renseigné, il faut réexporter l'ensemble des dossiers avec la commande :
# exportfs -r
ou, plus radicalement :
# /etc/init.d/nfs-kernel-server restart
Le serveur tftpd est lancé par inetd. Le fichier /etc/inetd.conf devrait contenir une ligne
du genre :
tftp dgram udp wait root /usr/sbin/in.tftpd in.tftpd -s /var/tftp
Si ce n'est pas tftpd-hpa qui est utilisé mais atftpd ou tftpd il faut veiller à ce que le
dossier des fichiers à partager (ici uniquement les noyaux) soit bien /var/tftp. Attention : le protocole TFTP est
par définition peu sécurisé, et c'est pourquoi il convient de limiter le plus strictement possible l'arborescence qu'il rend
accessible via le réseau ; c'est à dire ne pas autoriser l'accès à /var ou encore moins à la racine du système de
fichiers du serveur, et ne pas placer de fichier ou données confidentielles dans ce répertoire.
Une fois le fichier inetd.conf modifié, il ne faut pas oublier de prendre en compte les changements par la
commande :
# killall -HUP inetd
ou, plus radicalement :
# /etc/init.d/inetd restart
À priori, il n'y a pas grand chose à faire. Simplement, par défaut XFS ne répond pas aux requêtes distantes, c'est à dire
qu'il n'écoute pas sur un port TCP. Il faut l'autoriser à écouter le port TCP en commentant la ligne "no-listen =
tcp" du fichier /etc/X11/fs/config, comme dans l'exemple ci-dessous :
# turn off TCP port listening (Unix domain connections are still permitted)
#no-listen = tcp
Si c'est le serveur xfs-xtt qui est utilisé, il faut retenir que par défaut il répond sur le port
7110 et non pas 7100 comme xfs. Il faudra soit indiquer aux terminaux X que le
port du serveur de fontes est 7110 ou remplacer la valeur dans /etc/init.d/xfs-xtt par
7100. Il faut en outre autoriser xfs-xtt à écouter sur le port TCP de la même manière que
xfs.
Une fois les fichiers modifiés, faire prendre en ccompte les changements par la commande :
# /etc/init.d/xfs restart
Pour pouvoir se connecter au serveur d'applications, il est nécessaire de configurer le gestionnaire graphique de session (display manager) pour faire en sorte qu'il accepte les connexions distantes.
Par défaut, c'est kdm qui est installé sur la
kdm Pour autoriser kdm à répondre aux demandes de connexion distante il faut éditer /etc/kde2/kdm/kdmrc et
remplacer :
[Xdmcp]
Enable=false
par
[Xdmcp]
Enable=true
Puis éditer le fichier /etc/kde2/kdm/Xaccess et ajouter la ligne :
*.mondomaine.loc
Une fois les fichiers modifiés exécuter :
# /etc/init.d/kdm restart
gdm Pour pouvoir se connecter sous X au serveur d'application, il faut autoriser gdm à repondre aux requêtes distantes. Editer
/etc/gdm/gdm.conf et remplacer
[Xdmcp]
enable=false
par
[Xdmcp]
Enable=true
Une fois les fichiers modifiés, exécuter :
# /etc/init.d/gdm restart
xdm Editer /etc/X11/xdm/xdm-config. Commenter la ligne ci-dessous en ajoutant un « ! ».
DisplayManager.requestPort: 0
devient
!DisplayManager.requestPort: 0
Puis éditer le fichier /etc/xdm/Xaccess et ajouter la ligne :
*.mondomaine.loc
Une fois les fichiers modifiés exécuter :
# /etc/init.d/xdm restart
Il n'y a qu'un seul fichier à éditer : /etc/dhcp3/dhcpd.conf. Un exemple se trouve dans le
dossier /usr/share/doc/tx-bootstrap/examples/dhcpd.conf.V3
L'idée générique du projet TX est d'utiliser le protocole DHCP pour personnaliser chaque terminal. Puisqu'il faudra configurer le serveur DHCP pour la configuration réseau des terminaux, autant s'en servir pour configurer les autres paramètres. De cette façon, il n'y a qu'un seul fichier à éditer pour configurer l'ensemble des postes.
Il est de cette façon possible de transmettre au client n'importe quels autres paramètres comme par exemple : ses propres paramètres d'affichage (dépendant de la carte vidéo et de l'écran connecté), le serveur de polices, le module à utiliser pour la carte son, le type de souris connectée...
Au démarrage de la machine, la carte réseau du terminal X adresse une première requête (mode broadcast) à
destination du serveur DHCP. Ce dernier répond en indiquant l'adresse de la machine et le nom de fichier où télécharger et
exécuter le programme loader) afin d'amorcer un noyau Linux. Le paquetage proposé par Odys utilise par défaut
PXELinux pour les cartes conformes au standard PXE et etherboot+mknbi pour les autres cartes réseau.
Il n'est pas question ici d'étudier en détail le fonctionnement de PXElinux, mais simplement d'en comprendre les principes.
Au démarrage de la machine, le client charge le binaire pxelinux.0 puis l'exécute. Ce programme
est en fait un bootloader proche de lilo mais destiné aux machines diskless. Une fois en mémoire, ce programme va
lire son fichier de configuration dans le dossier pxelinux.cfg pour connaître l'adresse du noyau.
Ici il n'y a rien à configurer, tout est déjà prévu. Tous les fichiers se trouvent dans /var/tftp/.
Il convient seulement d'indiquer l'adresse Mac adéquate de la carte Ethernet dans le fichier /etc/dhcp3/dhcpd.conf
Exemple :
host tx1 {
hardware ethernet 00:50:8b:8e:F6:d6; #Adresse Mac de la carte ethernet
fixed-address tx1.mondomaine.loc; # Le nom du client ou de son adresse IP
filename "/var/tftp/pxelinux.0";
}
Pour ces cartes, il faut indiquer le nom du noyau à et le chemin de la racine du système diskless.
Le noyau ici est un peu spécial. Il est patché avec l'utilitaire mknbi-linux. Ce programme vient greffer un
loader au noyau pour que ce dernier soit exploitable par etherboot ou netboot. Le noyau
kernel_tx.nbi adéquat se trouve dans /var/tftp/
Le plus simple, pour faire les essais, consiste à télécharger depuis le site Rom-o-Matic la version « disquette » du programme d'amorçage via le réseau correspondant à la carte réseau installée sur le client.
En effet, ce bootrom permet d'utiliser une disquette pour booter le terminal X. Une fois que tout est opérationnel, il est temps d'envisager la fabrication d'un programmeur d'EEPROM ou son achat au magasin électronique du coin, afin de brûler l'EEPROM de la carte réseau et se dispenser ainsi du lecteur de disquette ou du disque dur.
Pour créer, par exemple, la disquette avec un bootrom adapté à une carte réseau basée sur le
chipset rtl8139, le plus simple est de se rendre sur le site
rom-o-matic puis générer et télécharger le bootrom correspondant à la carte et ayant l'extension
.lzdsk. Il ne reste plus qu'a le copier sur une disquette formatée avec la commande :
$ cat eb-5.0.7-rtl8139.lzdsk > /dev/fd0
# dhcpd.conf
#
option domain-name "mondomaine.loc"; option domain-name-servers dns.mondomaine.loc, 192.168.0.154;
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
subnet 192.168.0.0 netmask 255.255.255.0 {
option broadcast-address 192.168.0.255;
host tx1 {
hardware ethernet 00:50:8b:8e:F6:d6; #Adresse Mac de la carte ethernet
fixed-address tx2.mondomaine.loc; # Le nom du client ou de son adresse IP
filename "pxelinux.0";
}
host tx2 {
hardware ethernet 00:50:8b:8e:60:2d; #Adresse Mac de la carte ethernet
fixed-address tx1.mondomaine.loc; # Le nom du client ou de son adresse IP
filename "vmlinuz-2.4.20-386-diskless.nbi";
option root-path "/var/lib/diskless/tx";
}
}
Une liste des cartes réseaux supportées par l'utilitaire etherboot est accessible à l'adresse suivante :
www.etherboot.org/db/. Elles sont très nombreuses et, si la marque du
fabriquant ne correspond pas, il y a fort à parier que le chipset de la carte se trouve déjà supporté sous un
autre nom.
Pour personnaliser les terminaux il faut utiliser les options vendor de DHCP. Le protocole DHCP autorise 256 options. Les 128 premières font partie intégrante du standard du protocole DHCP. On peut naturellement s'en servir, mais pas en modifie la destination. Par contre les options supérieures à 128, sont libres pour une utilisation locale.
Les options 220 à 250 sont ici mises à profit pour la configuration les clients. Toutes ne sont pas utilisées pour le moment.
L'exemple du fichier dhcpd.conf proposé ci-dessous correspond à la syntaxe de la version 3 du protocole DHCP.
Le répertoire /usr/share/doc/tx-bootstrap/examples contient un fichier d'exemple dhcpd.conf.v2 qui, comme son
nom l'indique, est adapté à un serveur DHCP v2.
Une fois le fichier /etc/dhcp3/dhcpd.conf édité, il faut relancer le serveur DHCP par la
commande :
# /etc/init.d/dhcp3-server restart
une copie de ce fichier se trouve dans /usr/share/doc/tx-bootstrap/example/dhcpd.conf.v3
# /etc/dhcp3/dhcpd.conf
#
option domain-name "mondomaine.loc";
option domain-name-servers dns.mondomaine.loc, 192.168.0.154;
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
### Descriptions des nouvelles options
option LpServerEnable code 222 = string;
option LpServerDevice code 223 = string;
option LpServerPort code 224 = string;
option EsdEnable code 225 = string;
option SoundModule code 226 = string;
option SoundDevice code 227 = string;
option SoundVolum code 228 = string;
option XMouseDevice code 229 = string;
option XMouseProtocol code 230 = string;
option XkbLayout code 231 = string;
option XkbModel code 232 = string;
option XkbVariant code 233 = string;
option XkbOptions code 234 = string;
option DefaultDepth code 235 = string;
option XfsEnable code 236 = string;
option XfsServer code 237 = string;
option XfsPort code 238 = string;
option HorizSync code 239 = string;
option VertRefresh code 240 = string;
option XMode code 241 = string;
option Modeline code 242 = string;
option XVersion code 243 = string;
option XDriver code 244 = string;
option XdmMode code 245 = string;
option AppServer code 246 = string;
option SwapEnable code 247 = string;
option SwapSize code 248 = string;
option SwapServer code 249 = string;
subnet 192.168.0.0 netmask 255.255.255.0 {
option broadcast-address 192.168.0.255;
# if this option is not set, it is necessary to set
# option host-name "an_hostname";
# on any host declaration
use-host-decl-names on;
### Options "Vendor" valable pour tous les terminaux X
## Tous les terminaux ont un clavier AZERTY Français de 101 touches
option XkbLayout "fr";
option XkbModel "pc101";
## Tous les terminaux utilise le serveur de polices
option XfsEnable "1";
## Adresse Ip du serveur de polices si il est diffèrent du serveur nfs
# option XfsServer "192.168.0.x";
## Tous les Terminaux font une requête directe au serveur d'applications.
option XdmMode "query"; ##
## Adresse IP du serveur d'application si il est diffèrent du serveur nfs.
# option AppServer "192.168.0.x";
### Options DHCP valables pour tous les terminaux X
option root-path "/var/lib/diskless/tx";
host tx1 {
hardware ethernet 00:50:8b:8e:F6:d6; #Adresse Mac de la carte ethernet
fixed-address tx1.mondomaine.loc; # Le nom du client ou de son adresse IP
filename "pxelinux.0";
## Indiquer le chemin absolu si le serveur tftpd ne fonctionne
## pas en mode "chrooté"
## filename "/var/tftp/pxelinux.0";
option LpServerEnable "1"; ## Ce terminal X fait aussi serveur d'impression (/dev/lp0 port 9100)
## Cette station possède une carte son SoundBlaster Vibra16C.
## Le démon Esound (esd) est nécessaire pour utiliser la carte son a travers le réseau.
## Cette carte a une dma 16 bits non standard qu'il faut préciser au module.
## On souhaite que le volume de sortie (Master) soit a 60%.
option EsdEnable "1";
option SoundModule "sb dma=1 dma16=0";
option SoundVolum "60" ;
## La carte graphique est une ati Rage Pro sur laquelle est connecté
## un écran Compaq V500. L'affichage de 1024x768 à 85 Hz.
## Les caractéristiques de l'écran données par le constructeur sont:
## Fréquence horizontal 30 à 70 Khz
## Fréquence verticale 50 à 160 Hz
##
## C'est le driver ati de Xfree 4.1.0 qui est utilisé
option HorizSync "30-70";
option VertRefresh "50-160";
option XMode "1024x768";
option XVersion "4.1.0";
option XDriver "ati";
}
host tx2 {
hardware ethernet 00:50:8b:8e:60:2d; #Adresse Mac de la carte ethernet
fixed-address tx2.mondomaine.loc; # Le nom du client ou de son adresse IP
filename "vmlinuz-2.4.20-386-diskless.nbi";
## Pour avoir le "Splatch screen" :
## filename "vmlinuz-2.4.20-386-diskless-lpp.nbi";
## Indiquer le chemin absolu si le serveur tftpd ne fonctionne
## pas en mode "chrooté"
## filename "/var/tftp/vmlinuz-2.4.20-386-diskless.nbi";
option root-path "/var/lib/diskless/tx";
## La carte graphique de cette station est une S3 trio/64 2 Mo
## l'écran est Hp 1024 ref D2813 14''
## Les caractéristiques de l'écran données par le constructeur sont:
## Affichage 1024x768 60Hz
## Fréquence horizontal 30.9 à 49.0
## Fréquence verticale 50.0 à 100.0
## C'est le serveur XF86_S3 version 3.3.6 qui est utilisé
option HorizSync "30.9-49.0";
option VertRefresh "50.0-100.0";
option XMode "1024x768";
option XVersion "3.3.6";
option XDriver "XF86_S3";
}
}
Valeur par défaut: 0
Si la valeur est 1 le terminal fait office de serveur d'impression. Il émule un boîtier HP Jetdirect. Par
défaut c'est le port imprimante lp0 qui est utilisé sur la station.
Valeur par défaut: /dev/lp0
Périphérique sur lequel sera connecté l'imprimante.
Valeur par défaut: 9100
9100 correspond au port standard des boîtiers HP Jetdirect. À priori il n'y a pas de raison d'en changer.
Valeur par défaut: 0
Si le terminal X dispose d'une carte son supportée par le noyau, il est
possible d'utiliser les applications sonores supportant le système
Module du noyau à charger pour la carte son du terminal plus les options. Exemple pour une carte son SoundBlaster vibra16c: sb irq=5 io=0x220 dma=1 dma16=0 ou pour une SB 128 Pci es1371
Valeur par défaut: /dev/dsp
Périphérique utilisé par la carte son. Comme à priori il n'y a qu'une carte son dans un terminal X, il est peu probable qu'il soit nécessaire de changer cette valeur.
Valeur par défaut: 50
Pourcentage du volume audio en sortie de la carte son.
Valeur par défaut: /dev/psaux
Périphérique sur lequel est connectée la souris. Si vous disposez d'une souris branchée sur un port COM il faudra
indiquer /dev/ttyS0 ou /dev/ttyS1 selon que votre souris est branchée sur le port COM1 ou le COM2 de votre
terminal.
Valeur par défaut: PS/2
Cf. la documentation de Xfree. Identique à la valeur "Option Protocole" que vous mettriez dans XF86Config à la section correspondante à la souris. Ex: PS/2, ImPS/2
Par défaut le terminal émule le troisième bouton (clic gauche+droit simultané), tandis que la molette est opérationnelle si le protocole ImPS/2 a été précisé.
Valeur par défaut: fr
Cf. la documentation de Xfree. Identique à la valeur "Option XkbLayout" de la section correspondant au clavier dans un
fichier de configuration XF86Config (ou XF86Config-4) standard.
Valeur par défaut: pc101
Cf. la documentation de Xfree. Identique à la valeur "Option XkbModel" de la section correspondant au clavier dans un
fichier de configuration XF86Config (ou XF86Config-4) standard.
Cf. la documentation de Xfree. Identique à la valeur "Option XkbLayout" de la section correspondant au clavier dans un
fichier de configuration XF86Config (ou XF86Config-4) standard.
Cf. la documentation de Xfree. Identique à la valeur "Option XkbLayout" de la section correspondant au clavier dans un
fichier de configuration XF86Config (ou XF86Config-4) standard.
Valeur par défaut: 8
Valeur possibles: 1 4 8 15 16 24 32
Cela correspond au nombre de couleurs affichables. Pour les terminaux X11 nous recommandons, dans la mesure du possible, de mettre cette valeur à 16. Cela correspond à un affichage de 64000 couleurs et représente un bon compromis entre la qualité d'affichage et la charge du réseau et de la mémoire coté client. Cf. la documentation de Xfree.
Valeur par défaut: 1
Si la valeur est à 1, le terminal X cherchera à utiliser un serveur de fontes disponible sur le réseau, dont l'adrese
est par défaut celle du serveur NFS, mais peut être aussi renseignée par l'option XfsServer.
Valeur par défaut: IP du serveur NFS
Si l'usage d'un serveur de fontes est validé, on indiquera ici l'adresse IP de ce dernier. Si aucune adresse n'est spécifiée, le client utilisera par défaut l'adresse IP du serveur NFS.
Valeur par défaut: 7100
En général, les serveurs de fontes écoutent sur le port 7100. La valeur par défaut devrait convenir dans la plupart des cas.
Valeur par défaut: 30-50
Fréquence de syncro Horizontale supportée par le moniteur du TX. La valeur par défaut correspond aux fréquences d'un écran SVGA 800x600 à 60Hz.
Pour connaître les valeurs il faut se référer au manuel du moniteur ou consulter la base de donnée du projet
Valeur par défaut: 50-100
Fréquence verticale supportée par le moniteur du TX. La valeur par défaut correspond aux fréquences d'un écran SVGA 800x600 à 60Hz.
Valeur par défaut: 800x600
Résolution verticale et horizontale de l'affichage exprimée en nombre de pixels.
Permet d'utiliser un modeline particulier. Ce paramètre peut se révéler indispensable pour certains moniteurs à fréquence fixe ou améliorer la qualité de l'affichage.
Syntaxe :
option Modeline "\"1152x864\" 137.65 1152 1184 1312 1536 864 866 885 902 -hsync -vsync";
Valeur par défaut: 3.3.6
Valeurs possible: 3.3.6 4.1.0
Permet de choisir la version de X que l'on veut utiliser en fonction de la carte graphique. Deux versions sont disponibles: 3.3.6 et 4.1.0.
Valeur par défaut: XF86_VGA16
Serveur disponible pour la version de Xfree 3.3.6 : XF86_VGA16, XF86_SVGA, XF86_S3 et XF86_S3V.
Serveur disponible pour la version de Xfree 4.1.0 : ati, cirrus, cyrix, i128, i740, i810, mga, nv, r128, radeon, s3virge, savage, sis, tdfx, tga, trident, tseng,i vesa, vga
Valeur par défaut: broadcast
Valeurs possibles : broadcast, query, indirect
Il s'agit du mode de connexion X.
Valeur par défaut: IP du serveur NFS
Cette option permet de préciser l'adresse IP du serveur d'applications. S'il s'agit de la même machine que le serveur NFS, il n'est pas nécessaire de renseigner ce paramètre.
Valeur par défaut: 0
Si la valeur est égale à 1, le terminal X disposera d'un fichier de swap accessible par NFS. La taille de ce
fichier doit être indiquée via l'option SwapSize. Il n'est pas recommandé d'utiliser le swap via NFS
(pour des raisons de performance et, parfois, de stabilité). Il ne doit être utilisé que si la station ne dispose pas de
suffisamment de mémoire pour fonctionner en diskless. Par exemple, il faudra un swap d'environ 16 Mo si
l'on utilise un affichage de 1024x768 16 bits sur une machine dotée de 32Mo de RAM. Si la machine dispose de 48 Mo et
plus, pas besoin de swap.
Taille du fichier de swap en Mo.
Valeur par défaut: IP du serveur NFS
Cette option permet de préciser l'adresse IP du serveur de swap. S'il s'agit de la même machine que le serveur NFS, il n'est pas nécessaire de renseigner ce paramètre.