Linux Terminal Server Project (LTSP) permet de démarrer des Clients Légers (CL) à partir d’un serveur LTSP. LTSP diminue les coûts matériels en permettant l’utilisation de machines obsolètes en tant que CL, conduisant à une administration réduite du fait que les frais généraux soient destinés au maintien du serveur LTSP. Lorsqu’un CL échoue, il peut simplement être remplacé sans perte de données ou réinstallation du système d’exploitation.

Le concept est le suivant :

  1. Le client léger ne prend en charge que les fonctions de base telles que l’affichage, le clavier, la souris et le son ;
  2. Le serveur gère l’ensemble des ressources nécessaire au fonctionnement du CL. Toutes les applications s’exécutent sur le serveur, et elles s’affichent simplement sur le CL.

Cette solution est avant-tout avantageuse pour les établissements scolaires qui n’ont pas les moyens financiers pour investir dans de nouveaux postes de travail. Il est plus simple d’investir 5000 € pour un serveur qui fera fonctionner 20 CL, que 10 000 € pour 20 nouveaux ordinateurs.

Ce tutoriel explique comment installer & configurer un serveur LTSP 5 sous Debian 7.11.0. Si vous utilisez une autre distribution (ou version), il pourrait y avoir quelques divergences de paramétrage.

Toutes les manipulations à venir seront à effectuer en tant que super-utilisateur de la machine.


Présentation

Principe de fonctionnement

2 éléments définissent un CL :

  1. Lors de son démarrage sur le réseau en PXE, il va monter par le réseau son environnement de travail présent sur le serveur LTSP : il n’a pas besoin de disque dur ;
  2. Il peut exécuter des applications en utilisant ses propres ressources ou celles du serveur d’application.

L’identification des utilisateurs, les communications sont sécurisées par le protocole SSH, qui est géré par le gestionnaire d’affichage LDM spécialement créé pour LTSP.

Un serveur LTSP regroupe les services suivants :

  • DHCP pour fournir la configuration IP, le chemin vers l’environnement à monter, l’adresse IP du serveur TFTP et le chemin du chargeur d’amorçage PXE ;
  • TFTP pour réaliser le boot PXE des clients légers (récupérer le noyau linux) ;
  • NFS pour mettre à disposition l’environnement de travail, c’est à dire la racine / montée par les CL via le réseau lors de leur démarrage ;
  • SSH pour sécuriser l’identification des utilisateurs et éventuellement les échanges graphiques entre le serveur et les clients légers ;
  • LDM pour lancer les applications et gérer la liaison entre le serveur LTSP et ses clients légers. Dans notre structure ce service sera installé sur le serveur d’application.

Remarque : Il est possible d’utiliser NBD à la place de NFS : le boot du CL est censé être plus rapide (image compressée) et NBD devrait économiser de la bande passante sur le réseau. Par contre, il est nécessaire à chaque modification de l’environnement du client léger de reconstruire l’image compressée.

Voici un document détaillant simplement le démarrage d’un CL : Démarrage CL LTSP 5.

Types de client léger

Il existe trois types d’environnements différents pour les clients légers :

  • L’environnement léger

Le CL lance une session X sur le serveur LTSP et tout est exécuté sur celui-ci puis « déporté » sur l’écran du CL dans un tunnel X : le client se comporte alors comme un terminal X et a besoin de peu de ressources (128 à 256 Mo de RAM).

  • L’environnement hybride (LOCAL-APP)

Il s’agit d’un environnement léger dans lequel certaines applications sont exécutées avec les ressources locales du CL  et d’autres sur le serveur LTSP. 

Attention : il faut que le CL dispose de suffisamment de RAM. Si vous exécutez un logiciel qui demande 50 Mo de stockage en RAM et que votre poste n’a que 32Mo, votre CL crashera. 

  • L’environnement lourd (FAT CLIENT)

Le CL lance une session X de son environnement et exécute les applications avec ses propres ressources locales : le serveur LTSP est alors seulement utilisé pour identifier l’utilisateur et mettre à disposition des CL leur environnement de travail. Cette configuration permet d’alléger le serveur d’application mais nécessite des CL plus performants.

Il est également possible de créer plusieurs environnements sur un même serveur LTSP et de les assigner à des groupes de CL.

L’environnement chroot

Précédemment, j’ai parlé d’environnement sans le définir. Pour transformer un ordinateur en CL, il faut exécuter une mini version de GNU/Linux sur le poste de travail. Elle doit être démarrée sur le réseau, car le poste de travail n’a pas obligatoirement de disque dur (et donc on ne peut pas démarrer une version complète).

Cette mini installation est stockée sur le serveur. Elle est personnalisée afin de pouvoir démarrer sur le réseau et s’appelle un environnement chroot (environnement racine).

La raison pour laquelle elle s’appelle un environnement chroot est que, sur le serveur, on va créer un (ou plusieurs) nouvel environnement GNU/Linux dans le répertoire /opt/ltsp/Nom_Du_Chroot (un répertoire par environnement, avec un nom différent).  Dans ce répertoire vous retrouvez une arborescente identique à une machine GNU/Linux de base (/etc, /home, /bin…).

En utilisant la commande chroot vous pourrez changer de répertoire racine pour gérer vos environnements, afin d’y aller vos logiciels ou encore faire des mises à jour.

Visualisation de l’objectif

L’objectif, est de mettre en service au moins 3 clients légers (CL), qui auront accès à un environnement de bureau exploitable sous Debian GNOME 3.

Pour cela nous allons mettre en service un serveur de démarrage qui va fournir aux CL les informations et fichiers nécessaires à leur démarrage sur le réseau. De plus, un serveur d’application pour contenir les ressources, les logiciels et le système d’exploitation qu’utiliseront les CL, sera requis.

Petite précision, il est possible de créer un unique serveur indépendant, qui va contenir tous les composants logiciels et matériels nécessaires à la mise en service d’un réseau LTSP, ou bien de séparer la partie démarrage sur le réseau et la partie gestion des ressources.

Ici nous allons séparer les 2 parties en mettant en place un serveur de démarrage avec LTSP, TFTP, NFS et DHCP et un serveur d’application avec un (ou plusieurs) environnement(s) de travail dans lequel seront installés les applications qu’utiliseront les utilisateurs.

Voici un petit schéma très simple pour vous donner une idée  :

Schéma Partie 1.png

Configuration matérielle des CL et du serveur

Les informations ci-dessous sont extraites du manuel LTSP et n’ont pas été testées.

Configuration pour environnement léger

CPU : au moins 533 Mhz

Mémoire : 256 Mo

Carte réseau : 100 Mbs (usage normal de 0,5 à 2 mbit mais pic possible à 70 Mbs si consultation de contenu multimédia sur le serveur LTSP)

Configuration pour environnement lourd

La configuration du serveur LTSP en Fat Client  (FC) va nécessiter moins de ressources du serveur. Par contre, les ressources réseaux sont sollicitées différemment :

  • Pour les CL, c’est le déport d’affichage graphique qui circule sur le réseau.
  • Pour les FC, à chaque fois qu’un utilisateur lance une application, cette
    application est chargée via le réseau dans la RAM du FC puis exécutée par son
    processeur. Plus la quantité de RAM demandée par l’application sera élevée, plus le temps nécessaire au lancement de l’application sera élevé.

En claire, le lancement d’une application en FC peut être plus long qu’en environnement léger (par contre, une fois chargée, l’utilisation de cette application doit être plus rapide qu’en environnement léger).

C’est pourquoi il est préférable d’utiliser le service NBD (car les fichiers sont compressés et donc moins
volumineux) plutôt que NFS, lorsque les CL sont configurés en FC.

Configuration pour le serveur d’application

Mémoire

Mémoire du serveur d’application se calcule de la manière suivante :

  • 256 + (192 * Nb_CL) MB

Exemple : pour gérer 20 CLs, au moins 4 Go de mémoire est nécessaire (Si les clients ont un usage graphique gourmand, doublez cette valeur précédente).

Si vous n’avez pas assez de mémoire dans votre serveur, vous constaterez que votre serveur devra utiliser le disque dur pour créer de la mémoire virtuelle. Un disque dur étant beaucoup plus lents, vous remarquerez des lenteurs.

Processeur

Le processeur dont vous avez besoin dépend entièrement des programmes que vous envisagez d’utiliser. Les jeux interactifs nécessiteront beaucoup plus de puissance de calcul qu’un logiciel de traitement de texte. Si vous envisagez d’utiliser des programmes comme Java ou Flash player dans votre navigateur Web, ceux-ci peuvent consommer beaucoup de puissance de traitement. Pour un modèle mixte, c’est-à-dire certaines personnes qui jouent à TuxMath, quelques personnes naviguant sur le Web,
et d’autres personnes qui entrent dans OpenOffice, un processeur de 2GHz ou mieux devrait être en mesure de gérer efficacement 20 personnes avec quelques retards mineurs. Un processeur 3GHz serait mieux.

Pour les réseaux plus importants, passer à un SMP (Symmetric Multi Processing) ou à un serveur à processeurs multiples peut être avantageux.

Rappelez-vous, si vous avez besoin de servir un grand nombre de clients, il vaut la peine de configurer plusieurs LTSP serveurs, chacun manipulant certains des terminaux.

Stockage

Il est conseillé d’utiliser du RAID. En plus de préserver vos données lorsqu’un disque unique échoue, il
améliore les performances (en particulier les performances lues, qui est le type d’accès au fichier le plus courant). Pour les personnes à faible budget, la configuration d’un RAID 1, avec 2 disques SATA avec NCQ fournira bons résultats. Si vous disposez d’un budget plus important et d’un réseau plus grand, configurez votre serveur avec du RAID 10.

Réseau

Si vous avez plus de 20 utilisateurs, il est recommandé d’utiliser une connexion Ethernet de l’ordre du Gigabit. Au moins 1 Gibatbit est nécessaire (surtout pour le multimédia).


Installation des serveurs

Les méthodes

Il existe 2 méthodes d’installation de LTSP. La première est destinée à séparer les éléments d’une infrastructure LTSP. Quant à la deuxième, elle permet de centraliser sur une seule machine tous les services nécessaires au fonctionnement d’une infrastructure LTSP.

  • Méthode élément par élément

Cette méthode regroupe 4 paquets principaux :

ltsp-server

Ce paquet est à installer sur le serveur de démarrage. Il permet d’installer un serveur LTSP + un serveur TFTP + un serveur NFS + un client OpenSSH.

ldm-server

Ce paquet est à installer sur le serveur d’application. Il permet d’installer un serveur LDM + un serveur OpenSSH.

isc-server-dhcp [Facultatif]

Ce paquet s’installe sur un serveur dédié ou non (il peut être installé sur le serveur de démarrage). Il permet d’installer un serveur DHCP. Si vous possédez déjà un serveur DHCP (linux), alors vous n’êtes pas obligé d’en installer un autre.

ltsp-docs [Facultatif]

Ce paquet s’installe sur le serveur de démarrage. Il permet d’obtenir la documentation de LTSP.

  • Méthode centralisée

Cette méthode de nécessite un seul paquet : ltsp-server-standalone

Il installe ltsp-server + ltsp-docs + ldm-server + isc-server-dhcp + openssh-serveur + openssh-client

Voici un tableau résumant ce que nous venons de voir :

Capture.PNG

Dans notre cas, nous voulons séparer le serveur d’application du serveur de démarrage. Nous allons donc utiliser la méthode élément par élément.

Installer le serveur de démarrage

Exécutez la commande suivante :

apt-get install ltsp-server ltsp-docs isc-dhcp-server

Le serveur DHCP retournera une erreur lors de la tentative de démarrage : ceci est normal car il n’est pas encore configuré.

Installer le serveur d’application

Exécutez la commande suivante :

apt-get install ldm-server

Une fois le serveur installé, vous pouvez déjà installer toutes les applications (apt-get install …) de bureau qui seront utilisées par les CLs (par exemple, LibreOffice).

Configuration du serveur de démarrage

Déclarer l’export NFS

Les CLs auront besoin de monter un environnement (racine /), stocké dans le répertoire /opt/ltsp/, grâce au serveur NFS. Pour qu’il puisse effectuer le montage il faut d’abord autoriser l’accès dans fichier /etc/exports.

Éditez le fichier exports :

nano /etc/exports

Ajoutez la lignes suivante à la fin du fichier :

/opt/ltsp *(ro,no_root_squash,async,no_subtree_check)

/opt/ltsp : dossier sur lequel s’applique les autorisations ;

* : représente « tout le monde » pour qui s’applique les instructions ;

Pour obtenir plus d’informations sur les options, exécutez la commande suivante :

man exports 

Redémarrez le service nfs-kernel-server :

service nfs-kernel-server restart

Construire un environnement chroot

Les commandes

Pour construire l’environnement des CLs sur le serveur LTSP, on utilise la commande ltsp-build-client. Si vous souhaitez avoir une liste détaillée des options possibles, exécutez la commande suivante :

ltsp-build-client --extra-help

Pour un environnement léger ou hybride, la commande est la suivante :

ltsp-build-client --arch i386 --chroot Nom_Du_Chroot --prompt-rootpass
  • –arch i386 : Spécifie que l’environnement doit être en 32 bits ;
  • -chroot Nom_Du_Chroot : Spécifie le nom du chroot (de la racine de l’environnement client) ;
  • –prompt-rootpass : Spécifie qu’il faut demander la saisie d’un mot de passe super-utilisateur de l’environnement durant la construction de celui-ci.

Pour un environnement lourd, la commande est la suivante : 

ltsp-build-client --arch i386 --chroot Nom_Du_Chroot --fat-client-desktop gnome-desktop-environment --promptrootpass
  • –fat-client-desktop : Spécifie qu’on exécute toutes les applications, ou presque, localement ;
  • gnome-desktop-environment : Spécifie qu’il faut utiliser l’environnement de bureau GNOME.

Dans le cas de l’environnement hybride ou lourd, les applications doivent directement être installées dans l’environnement chroot, pour être exécutées avec les ressources locales du CL.

Pour cela, il vous faut à la racine de cet environnement, à l’aide de la commande suivante :

ltsp-chroot --mount-dev --mount-proc --arch Nom_Du_Chroot

Une fois dans l’environnement, vous pouvez installer vos applications de la même manière que sur une machine normale, en utilisant la commande apt-get install. Par exemple, pour Firefox :

apt-get install firefox-esr

Pour valider les modifications et sortir de l’environnement, utilisez la commande suivante :

exit

Il est très important de quitter votre environnement de cette façon, sinon vous vous risquez à un Kernel panic l’or du démarrage d’un CL ;

Attention : Dans le cas de ces 2 environnementd, le mode hybride ou fatclient, que nous verrons plus tard devra, être activé dans le fichier /opt/ltsp/hybridclient/etc/lts.cfg.

Configurer le serveur DHCP

Pré-requis

Pour que le serveur DHCP fonctionne il faut lui indiquer dans sa liste d’interfaces réseau (eth0, eth1…), située dans le fichier /etc/default/isc-dhcp-server, le ou les noms des interfaces connectées au réseau LTSP.

Comme vous avez pu le voir sur le schéma réseau plus haut, une interface du serveur de démarrage est connectée au switch qui relie tous les éléments du réseau LTSP, c’est donc le nom de cette interface qu’il faudra renseigner.

Éditez le fichier isc-dhcp-server :

nano /etc/default/isc-dhcp-server

Repérez la ligne suivante :

INTERFACES=""

Renseignez entre les guillemets le ou les noms des interfaces réseau que vous utilisez pour vous relier au réseau LTSP ;

Maintenant, il nous faut configurer le fichier /etc/dhcp/dhcpd.conf, qui va contenir toute la configuration du
serveur DHCP. 
La configuration du fichier dépendra du nombre d’environnements que vous voulez créer.

Sauvegardez le fichier par défaut dhcpd.conf :

mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.save

Configuration pour un seul environnement

Créez un nouveau fichier dhcpd.conf :

nano /etc/dhcp/dhcpd.conf

Configurez le fichier de la même manière que ci-dessous (à adapter), en retirant les commentaires :

authoritative;

subnet 192.168.1.0 netmask 255.255.255.0 {            # Adresse sous-réseau
     range 192.168.1.50 192.168.1.60;                 # Étendue DHCP
     option domain-name "example.com";                # Nom du serveur DNS
     option domain-name-servers 192.168.1.1;          # Adresse du serveur DNS
     option broadcast-address 192.168.1.255;          # Adresse de broadcast
     option routers 192.168.1.1;                      # Adresse de la passerelle
     next-server 192.168.1.253;                       # Adresse du serveur TFTP
     option subnet-mask 255.255.255.0;                # Adresse masque du réseau
     option root-path "/opt/ltsp/hybridclient";       # chemin de l'environnement hybride
     if substring( option vendor-class-identifier, 0, 9 ) = "PXEClient" {
          filename "/ltsp/hybridclient/pxelinux.0";   # chemin du chargeur d'amorçage PXE
     } else {
          filename "/ltsp/hybridclient/nbi.img";      # chemin charg. d'amorç. Etherboot
     }
} 

Enregistrez les modifications ;

Redémarrez le service isc-dhcp-server :

service isc-dhcp-server restart

Configuration pour plusieurs environnements

A chaque environnement il faudra définir un groupe dans lequel sera renseigné les CL ayant accès à tel
environnement. La configuration (principale) d’un groupe sera la même quelque soit l’environnement.

Créez un nouveau fichier dhcpd.conf :

nano /etc/dhcp/dhcpd.conf

Configurez le fichier de la même manière que ci-dessous (à adapter), en retirant les commentaires :

authoritative;
     subnet 192.168.1.0 netmask 255.255.255.0 {     # Adresse sous-réseau
     option broadcast-address 192.168.1.255;        # Adresse de broadcast
     range 192.168.1.50 192.168.1.60;               # Étendue DHCP4
     option subnet-mask 255.255.255.0;              # Addresse masque du réseau
     option routers 192.168.1.1;                    # Adresse de la passerelle
     option domain-name-servers 192.168.1.1;        # Adresse du serveur DNS
     option domain-name "example.com";              # Nom du serveur DNS
     next-server 192.168.1.253;                     # Adresse IP du serveur TFTP
} 

Configurez ensuite les groupes (dans le sous-réseau) de la manière suivante, en retirant les commentaires :

Group {
     # next-server 192.168.1.253;                          # @IP du serveur TFTP si plusieurs
     option root-path "/opt/ltsp/hybridclient";            # Chemin de l'environnement
     if substring( option vendor-class-identifier, 0, 9 ) = "PXEClient" {
          filename "/ltsp/hybridclient/pxelinux.0";        # Chemin du charg. d'amorç. PXE
     } else {
          filename "/ltsp/hybridclient/nbi.img";           # chemin charg. d'amorç. Etherboot
     }

# On définit ensuite chaque CL dans un  host
# Client léger N°1
     host Nom_CL {
          hardware ethernet 00:fc:b9:15:13:gh;             # @MAC du CL
          # fixed-address 192.168.1.50;                    # @IP du CL [Facultatif]
     }
# (...)
}

Vous pouvez assigner des adresses IP fixes (fixed-address) aux hôtes ou encore, si vous avez plusieurs serveurs TFTP, indiquer l’adresse des serveurs TFTP (next-server) en fonction du groupe ;

Enregistrez les modifications ;

Redémarrez le service isc-dhcp-server :

service isc-dhcp-server restart

Configurer l’environnement

Nous allons configurer le fichier /opt/ltsp/Nom_Du_Chroot/etc/lts.cfg en renseignant l’adresse IP du serveur
d’application, en activant le mode hybride ou fatclient si besoin et en configurant quelques
options supplémentaires.

Éditez le fichier lts.conf :

nano /opt/ltsp/Nom_Du_Chroot/etc/lts.conf

Renseignez les options suivantes, en retirant les commentaires :

[default]                                       # Section par défaut
     LTSP_CONFIG=True                           # Activer la configuration
     NBD_SWAP=True                              # Utiliser le swap
     LDM_LANGUAGE=fr_FR.UTF-8                   # Configurer langue française
     XKBLAYOUT=fr                               # Régler le clavier en français
     LDM_SERVER="192.168.1.253"                 # Indiquer @IP du serveur d'application
     SOUND=True                                 # Activer le son
     LOCALDEV=True                              # Activer le montage de périphérique
     X_NUMLOCK=True                             # Activer le pavé numérique
     CONFIGURE_X=False                          # Désactiver la conf. du serveur d'app.
     SYSLOG_HOST=SERVER                         # Enregistrer logs sur serv. démarrage

# Activer l'environnement hybride
     # LOCAL_APPS=True                          # Activer le mode hybride
     # LOCAL_APPS_MENU=True                     # Autorise l'exécution des applications
     # LOCAL_APPS_MENU_ITEMS="firefox-esr"      # Liste des applications

# Ou, activer l'environnement fatclient
     # LTSP_FATCLIENT=True                      # Activer le mode fatclient

#  Vous pouvez également assigner une configuration spécifique à un CL, en créant une 
#  nouvelle section avec son adresse MAC
# [00:01:GE:AE:45:31]                           # Section du CL 00:01:GE:AE:45:31
     # LTSP_CONFIG=True                         # Activer la configuration
     # LDM_LANGUAGE=fr_FR.UTF-8                 # Langue française
     # XKBLAYOUT=fr                             # Régler le clavier français

Pour plus d’options, exécutez la commande suivante :

man lts.conf

Enregistrez les modifications ;

Renseigner l’option LOCALDEV=True n’est pas suffisant pour pouvoir monter des périphériques, telle qu’une
clé USB. En effet, l’utilisateur connectait doit également faire partie du groupe fuse en rapport au logiciel
fuse qui permet, entre autres, de monter un système de fichier. Celui-ci a été installé sur le serveur
d’application en même temps que le paquet ldm-server.

Pour ajouter un utilisateur au groupe fuse, utilisez la commande suivante :

adduser Nom_Utilisateur fuse

Récupérer la clé publique du serveur d’application

Un CL ne pourra s’identifier sur un serveur d’application de manière sécurisée que s’il possède dans son environnement la clé publique de celui-ci.

Récupérez la clé publique du serveur d’application :

ltsp-update-sshkeys @IP_Serveur_Apps

La clé est sauvegardée dans le fichier /etc/ltsp/ssh_known_hosts.auto ;

Mettez à jour les clés publiques de(s) l’environnement(s) :

ltsp-update-sshkeys

Mise en route des clients légers

Si vos clients ont plusieurs cartes réseaux, désactivez-les toutes, sauf la carte utilisée pour le boot réseau. Si vous laissez activé une carte réseau inutilisée, celle-ci tentera également de booter sur le réseau et empêchera le démarrage du CL.

La configuration de l’infrastructure est maintenant terminée, vous pouvez démarrer vos clients. Vous devriez accéder à l’écran d’ouverture de session graphique ressemblant à ceci :

02.PNG

Si c’est le cas, alors cela signifie que votre client a bien récupéré son environnement et qu’il a démarré le
gestionnaire d’affiche LDM.

Maintenant, connectez-vous à l’aide d’un utilisateur du serveur d’application. Vous devriez accéder à une session utilisateur :
03.PNG Si ça ne fonctionne pas et que vous avez en retour un message du type Not found @IP, alors vérifiez que vous avez correctement renseigné l’adresse IP du serveur d’application dans le fichier lts.conf et que celui-ci soit bien connecté au réseau.

Ou encore, si vous avez un message du type Connection refused, assurez de bien avoir récupéré la clé
publique du serveur d’application et d’avoir mis à jour l’environnement client.


Ce tutoriel est terminé. Prochainement je vous montrerez comment assurer la continuité de service et la tolérance de panne.

Si vous avez des problèmes, où que vous trouvez que certains points sont mal expliqués (ou faux), n’hésitez pas à m’avertir.