Linux Terminal Server Project (LTSP)

Vous trouverez mon expérience personnelle lors de la tentative plus ou moins réussie de l’utilisation LTSP.  J’ai effectivement réussi l’installation et la configuration sommaire pour l’installation de trois clients.  Un Asus N73, Lenovo T500 et un RaspberryPI.

Tous ont bien démarré en PXE sur mon réseau LTSP, mais je n’ai jamais réussi à monter une clef USB sur mon client afin qu’elle apparaisse sur le bureau.  Au mieux, le montage s’effectuait dans le répertoire /tmp de façon qui me semble un peu aléatoire.

Je partage ici ce que j’ai fait si cela peut aider quelqu’un.

Pour voir si l’installation par défaut de LTSP est ok, il faut juste allumer une machine ( déjà configuré pour démarrer sur le PXE) et vous verrez le logo de LTSP à l’écran. Ci-dessous, quelques explications à propos de tout ce qu’on voit sur l’écran du poste de travail :

La machine envoie un broadcast pour trouver le serveur DHCP

Le serveur DHCP répond en envoyant des informations réseau ( incluant l’adresse IP prise dans la plage d’adresses disponibles, un masque de sous-réseaux, etc…) et le nom du fichier à charger (dans /etc/dhcpd.conf vous pouvez voir que ce fichier est /tftpboot/lts/pxe/pxelinux.0).

La station de travail initialise son réseau à l’aide des informations reçues, charge le fichier en utilisant tftp et l’exécute. Ce fichier regarde dans /tftpboot/lts/pxe/pxelinux.cfg/ si un fichier de configuration dont le nom correspond à l’adresse MAC ou tout ou partie de la représentation hexadécimale de l’adresse IP de la machine, sinon, il utilise le fichier de configuration par défaut (/tftpboot/lts/pxe/pxelinux.cfg/default)

Le fichier de configuration par défaut indique à pxelinux.0 de charger le noyau (vmlinuz.ltsp) et un « ramdisk » (disque virtuel) (initrd.ltsp). Ils sont stockés sous /tftpboot/lts/pxe/. Le noyau est compilé avec des options spécifiques requises par LTSP telles que devfs. Le « ramdisk » est un système de fichier ext2 compressé contenant essentiellement quelques modules de cartes réseau. Un fichier texte avec les ID PCI des cartes réseau et le module correspondant à charger par le noyau est aussi présent dans ce disque virtuel.

Le système recherche une carte réseau, charge le module correspondant, traite les requêtes DHCP, monte quelques répertoires en utilisant NFS (voir /etc/exports sur le serveur), crée un fichier de configuration X en utilisant les paramètres donnés dans /opt/ltsp/i386/etc/lts.conf ou sinon, les paramètres par défaut. (Souris 3 buttons, clavier US, résolution d’écran de 1024×768, qualité de couleur de 16), démarre X et établie une connexion XDMCP avec le serveur.

Installation de LTSP

Pour ma part j’ai choisi d’installer SolydX 64bits dans une machine virtuelle Virtualbox sur une machine physique sur laquelle j’ai préalablement installé une seconde carte réseau.  J’obtiens donc

  1. eth0 sur l’adresse ipv4 192.168.0.12 sur mon réseau local
  2. eth1 sur l’adresse ipv4 192.168.1.12 sur mon réseau LTSP.

Voici mon fichier /etc/network/interfaces de ma machine physique:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5). # The loopback network interface
auto lo
iface lo inet loopback # The primary network interface
#auto eth0
#iface eth0 inet dhcp # The primary network interface
auto eth0
iface eth0 inet static
address 192.168.0.12
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-search reseau.maison
dns-nameservers 192.168.0.10 192.168.0.12 # The LTSP network interface
auto eth1
iface eth1 inet static
address 192.168.1.12
netmask 255.255.255.0

Installer SolydX en machine virtuelle et poursuivre avec ce qui suit.

Dans virtualBox configurer deux cartes réseaux:

  1. eth0 en pont vers eth0 (physique)
  2. eth1 en pont vers eth1 (physique)

Accéder au Shell super utilisateur:
su

Désactiver Network Manager

Tapez :
service network-manager stop
update-rc.d -f network-manager remove
nano /etc/NetworkManager/NetworkManager.conf

[ifupdown]
managed=true

Configurer les 2 cartes réseau

Tapez :

ifdown eth0
ifdown eth1

Il faut maintenant configurer l’adresse ipv4 statique de notre machine virtuelle (j’ai utilisé 192.168.0.11 pour le réseau local et 192.168.1.1 pour le réseau LTSP)

nano /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5). # The loopback network interface
auto lo
iface lo inet loopback # The primary network interface
#allow-hotplug eth0
auto eth0
iface eth0 inet static
address 192.168.0.11
netmask 255.255.255.0
network 192.168.0.0
gateway 192.168.0.1
dns-nameservers 192.168.0.10 192.168.0.12
dns-search reseau.maison # Interface reseau local
# /etc/ltsp/nat : regles iptables pour acces a Internet des postes clients a partir du reseau local # The ltsp network interface
auto eth1
iface eth1 inet static
pre-up ip addr del 192.168.1.1/24 dev eth1 2> /dev/null || true
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
#dns-nameservers 192.168.0.10 192.168.0.12
#dns-search reseau.maison
up iptables-restore < /etc/ltsp-nat

nano /etc/ltsp-nat

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

sh -c 'iptables-save > /etc/ltsp-nat'

ifup eth0
ifup eth1
mii-tool
ifconfig

/etc/init.d/networking restart

apt-get install ltsp-server-standalone xrestop

nano /etc/exports

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

nano  /etc/sysctl.conf

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

nano /etc/inetd.conf

# Commenter la ligne tftpd:

#tftp           dgram   udp     wait    root  /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot

nano /etc/default/tftpd-hpa

#/etc/default/tftpd-hpa TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
RUN_DAEMON="yes"

Redémarrer les services altérés:
service tftpd-hpa restart
service nfs-kernel-server restart
service openbsd-inetd restart

Configurer le serveur DHCP

Fichier /etc/default/isc-dhcp-server :

Configurez le port d’écoute pour le réseau local :

nano /etc/default/isc-dhcp-server

#############################################
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#    Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth1"
#############################################

Effacez le contenu du fichier /etc/dhcp/dhcpd.conf et ajoutez :

nano /etc/dhcp/dhcpd.conf

#############################################
# Configuration LTSP
include "/etc/ltsp/dhcpd.conf";
#############################################

nano /etc/ltsp/dhcpd.conf

# Default LTSP dhcpd.conf config file.
#

authoritative;

subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.13 192.168.1.250;
# domain-name et domain-name-servers uniquement si serveur DNS
# option domain-name "reseau.maison";
# option domain-name-servers 192.168.0.10;
option broadcast-address 192.168.1.255;
option routers 192.168.1.1;
next-server 192.168.1.1;
# Utilisation d'un serveur DNS
# Si pas de serveur DNS, mettre en commentaire get-lease-hostnames
# get-lease-hostnames true;
# Si pas de serveur DNS, on peut decommenter use-host-decl-names pour passer les noms host ci-dessous
use-host-decl-names true;

option subnet-mask 255.255.255.0;
option root-path "/opt/ltsp/i386";
if substring( option vendor-class-identifier, 0, 9 ) = "PXEClient" {
filename "/ltsp/i386/pxelinux.0";
} else {
filename "/ltsp/i386/nbi.img";
}

# Configuration des postes clients

host n73-ltsp {
next-server 192.168.1.1;
filename "/ltsp/i386/pxelinux.0";
hardware ethernet c8:60:00:b3:30:12;
fixed-address 192.168.1.105;
}

host t500-ltsp {
next-server 192.168.1.1;
filename "/ltsp/i386/pxelinux.0";
hardware ethernet 00:22:68:18:cf:3d;
fixed-address 192.168.1.107;
}

host rbpi-ltsp {
hardware ethernet b8:27:eb:8f:f6:bc;
fixed-address 192.168.1.106;
}

}

Redémarrez le serveur DHCP :

service isc-dhcp-server restart

Préparation de l’environnement client:

Pour trouver le nom de la version:

cat /etc/*-release

cd /usr/share/ltsp/plugins/ltsp-build-client
ln -s Debian SolydXK
ln -s Debian-functions SolydXK-functions

rm -r /opt/ltsp/i386
ltsp-build-client --arch i386

nano /etc/ssh/ssh_host_rsa_key.pub

Copier la clé dans le presse-papier ctrl-C

nano /opt/ltsp/i386/etc/ssh/ssh_known_hosts

Insérer la clé du serveur ltsp

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

# This is the default lts.conf file for ltsp 5. For more information about
# valid options please see lts.conf(5) man page, available in the ltsp-docs
# package.
#
# Note that things like sound and local device support are auto-enabled if the
# corresponding packages are installed, there is no need to manually set these
# options anymore. [default]
LTSP_CONFIG=True
SYSLOG_HOST=192.168.1.1
DNS_SERVER="192.168.0.10 192.168.0.12"
SEARCH_DOMAIN="reseau.maison"
SOUND=True
#NBD_SWAP=False
#SCREEN_02=shell
#SCREEN_07=ldm
LDM_DIRECTX=yes
#LDM_SERVER="interactif1.math interactif2.math"
X_NUMLOCK=True [c8:60:00:b3:30:12]
HOSTNAME="n73-ltsp"
USE_LOCAL_SWAP=True
#LOCALDEV=True
#LOCAL_APPS=True
#LOCAL_APPS_MENU=True
#LOCAL_APPS_MENU_ITEMS=iceweasel
VOLUME=30
#CONFIGURE_X=True
#XSERVER=auto
#X_COLOR_DEPTH=16
#XRANDR_DISABLE=True
#X_MODE_0=1920x1200
#pour voir les differents modele:/usr/share/X11/xkb/rules/base.lst
XKBMODEL="pc105"
XkbSymbols ="fr_CA(pc105)"
XKBLAYOUT="Français (Canada)" [00:22:68:18:cf:3d]
HOSTNAME="t500-ltsp"
USE_LOCAL_SWAP=True
LOCALDEV=True
LOCAL_APPS=True
LOCAL_APPS_MENU=True
LOCAL_APPS_MENU_ITEMS=iceweasel
VOLUME=30
#CONFIGURE_X=True
#XSERVER=auto
#X_COLOR_DEPTH=16
#XRANDR_DISABLE=True
#X_MODE_0=1600x1050
#pour voir les differents modele:/usr/share/X11/xkb/rules/base.lst
XKBMODEL="pc105"
XkbSymbols ="fr_CA(pc105)"
XKBLAYOUT="Français (Canada)" [b8:27:eb:8f:f6:bc]
HOSTNAME="rbpi-ltsp"
LOCALDEV=True
VOLUME=20
XKBMODEL="pc105"
XkbSymbols="fr_CA(pc105)"
XKBLAYOUT="fr_CA"

nano /etc/ltsp/ltsp-chroot.conf

#############################################
ROOT=/opt/ltsp/i386 #############################################

#Dans le chroot maintenant pour l’ajout d’applications locale au client léger

ltsp-chroot

apt-get install firmware-linux-nonfree
apt-get install nano

J’ai essayé d’ajouter les dépôts Solydx au client léger afin d’installer Firefox en local. Mais bien que j’ai réussi à ajouter les dépôts, l’installation de Firefox ne fonctionne pas. Je laisse donc l’information ici, mais je ne le conseille pas

Ajouter les clefs gpg:

gpg --recv-key BCA63C3C
gpg --export --armor --output /tmp/gpg_solydx.txt BCA63C3C | apt-key add /tmp/gpg_solydx.txt
gpg --recv-key 1F41B907
gpg --export --armor --output /tmp/gpg_solydx.txt 1F41B907 | apt-key add /tmp/gpg_solydx.txt

Modifier les dépôts:

nano /etc/apt/sources.list
deb http://packages.solydxk.com/production/ solydxk main upstream import
deb http://community.solydxk.com/production/ solydxk main
deb http://debian.solydxk.com/production testing main contrib non-free
deb http://debian.solydxk.com/production/multimedia testing main non-free
deb http://debian.solydxk.com/security testing/updates main contrib non-free

apt-get install solydxk-keyring
apt-get update
apt-get install firefox firefox-l10n-fr solydxk-flashplugin-11

J’ai plutôt installé iceweasel en local sur le client:

apt-get install iceweasel iceweasel-l10n-fr flashplugin-nonfree

Ceci ne fonctionne pas sous Debian puisque LTFS fonctionne en NFS:
ltsp-update-image /opt/ltsp/i386