Installation serveur LTSP sous Ubuntu 10.04 LTS

De wikiGite

Mise en place d'un serveur ltsp avec des clients lourd. Les applications ne sont pas exécutées sur le serveurs mais sur le client. Le client charge seulement le noyau et le serveur lui envoi les applications en fonction de la demande. Le dhcp ne se trouve pas sur le serveur mais est géré par un IPCop. Les comptes clients sont en local sur le serveur et le home est montée par le réseau sur le client.

DELL T1600

carte réseau gigabyte de la carte mère visible par lpci mais invisible par le noyau. Affichage en 800x600.

Charger le module e1000e

wget http://sourceforge.net/projects/e1000/files/e1000e\ stable/1.9.5/e1000e-1.9.5.tar.gz
tar -xvf e1000e-1.9.5.tar.gz
cd e1000e-1.9.5/src/
sudo make install
sudo modprobe e1000e
sudo dhclient eth0 #si ne marche pas rebooter la machine

Sandy bridge chipset integré

sudo add-apt-repository ppa:glasen/intel-driver
sudo add-apt-repository ppa:kernel-ppa/ppa
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install linux-image-generic-lts-backport-natty linux-headers-generic-lts-backport-natty


LTSP

Configuration des cartes

Désactiver networkmanager pour la gestion du réseau :

sudo service network-manager stop
sudo update-rc.d -f network-manager remove
vim /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static
        address 192.168.2.149
        netmask 255.255.255.0
        network 192.168.2.0

Relancer /etc/init.d/networking

Installation de ltsp

sudo apt-get install ltsp-server-standalone
sudo apt-get remove dhcp3-server

Créer le fichier /var/lib/tftpboot/ltsp/i386/lts.conf
http://manpages.ubuntu.com/manpages/lucid/man5/lts.conf.5.html

[default]
        SERVER = 192.168.2.149
        LOCALDEV = True
        SOUND = True
        SYSLOG_HOST = server
        XKBLAYOUT = fr
        LDM_AUTOLOGIN = True
#       LDM_GUESTLOGIN = True
        LDM_LANGUAGE ="fr_FR.UTF-8"

[00:e0:c5:XX:XX:X1]
        LDM_USERNAME = X_public_01
        LDM_PASSWORD = XXXXX

[00:e0:c5:XX:XX:X2]
        LDM_USERNAME = X_public_02
        LDM_PASSWORD = XXXXX

[00:e0:c5:XX:XX:X3]
        LDM_USERNAME = X_public_03
        LDM_PASSWORD = XXXXX

[00:e0:c5:XX:XX:X4]
        LDM_USERNAME = X_public_04
        LDM_PASSWORD = XXXXX

[00:e0:c5:XX:XX:X5]
        LDM_USERNAME = X_public_05
        LDM_PASSWORD = XXXXX

[00:e0:c5:XX:XX:X6]
        LDM_USERNAME = X_public_06
        LDM_PASSWORD = XXXXX

Il faudra ajouter les utilisateurs sur le serveur. Leurs dossiers personnels seront ensuite montés en NFS sur les clients légers :

 adduser X_public_01
 adduser X_public_02
 ...

Création de l'image

LTSP fonctionne en créant une arborescence d'un système de fichier linux classique, stocké dans le dossier /opt/ltsp/i386/. Il se base ensuite sur ce dernier pour créer une image, au format .img, que les clients légers utiliseront pour booter via PXE :

sudo ltsp-build-client --arch i386 --locale fr_FR --fat-client

Le chroot

Pour paramétrer l'image, utiliser la commande "chroot" :

sudo chroot /opt/ltsp/i386

Avant d'effectuer des modifications dans l'image, toujours monter /proc et /sys :

mount -t proc proc /proc
mount -t sysfs sys /sys

Effectuez ensuite les modifications comme sur un système classique (Installer des paquets, paramétrer les services,...)

En quittant :

exit
sudo umount /opt/ltsp/i386/proc
sudo umount /opt/ltsp/i386/sys

Mise a jour de l'image

Après avoir effectuer les modifications dans le chroot, il faut mettre à jour l'image.

sudo ltsp-update-image i386
sudo ltsp-update-kernels #si mise a jour du kernel

Configuration de l'image

Echange de clé ssh

Dans le chroot :

apt-get install openssh-server
exit

Sur le compte qui administrera les clients, créer un coupe clé privée/clé publique demo.priv/demo.pub sans mot de passe et le mettre dans le chroot. Cela permettra notamment d'utiliser les scripts d'allumage/extinction des postes :

ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> $CHROOT/root/.ssh/authorized_keys

Cela permet de pouvoir se connecter en ssh, sur le compte root, sur un client démarré. Principalement utilisé pour debugger car les utilisateurs publics ont logiquement des droits restreints :

ssh root@[ip du client]

Configuration DHCP / PXE

Il faut maintenant paramétrer le dhcp, pour qu'il dirige les clients vers le serveur au boot. Exemple pour un dhcp linux :

Dans dhcpd.conf

# Sous-reseau IP (range et options propres au subnet)
subnet 192.168.37.0 netmask 255.255.255.0 {
        option domain-name-servers 192.168.37.1,192.168.1.254;
        option broadcast-address 192.168.37.255;
        option routers 192.168.37.254;
        default-lease-time 86400; # 1 jour
        max-lease-time 604800; # 7 jours
        pool {range 192.168.37.100 192.168.37.200;}
        if substring( option   vendor-class-identifier, 0, 9 ) = "PXEClient" {
                next-server 192.168.37.135;
                option root-path "/opt/ltsp/i386";
                filename "ltsp/i386/pxelinux.0";
        }
}

On indique le serveur PXE avec le paramètre next-server, et le chemin de l'image avec "root-path" (qui correspond au dossier chroot) et "filename".


Exemple avec Ipcop :Ipcopltsp.png

DD-wrt :
Dans la section service
DNSmasq:

dhcp-boot=ltsp/i386/pxelinux.0,,192.168.2.149

Éteindre les machines à distance

#!/bin/bash
Nbr=1
for i in `seq 111 116` ; do
echo "Extinction de X_Public_0$Nbr"
ssh -l -f -o StrictHostKeyChecking=no root@192.168.2.$i "halt;exit"
Nbr=`expr $Nbr + 1`
done

Lancer des scripts au démarrage des clients

Placer votre script dans le chroot

sudo chroot /opt/ltsp/i386
vim /etc/init.d/rclocal01.sh #création d'un fichier rclocal01.sh dans lequel je colle un script a lancer au démarrage
exit

Indiquer ensuite au serveur que l'on souhaite lancer se script au démarrage du client : Dans /var/lib/tftpboot/i386/lts.conf ajouter la ligne :

RCFILE_01=/etc/init.d/rclocal01.sh

Verrouiller la session

#!/bin/bash
#suppression des répertoires inutiles
rmdir ~/Documents
rm ~/examples.desktop
rmdir ~/Images
rmdir ~/Modèles
rmdir ~/Musique
rmdir ~/Public
rmdir ~/Téléchargements
rmdir ~/Vidéos


#modification de gconf
gconftool-2 --set --type string /apps/metacity/general/button_layout ":minimize,maximize,close" #déplacer les boutons des fenêtre vers la droite
gconftool-2 --set --type bool /apps/panel/global/locked_down true #verrouiller le tableau de bord
gconftool-2 --set --type string /apps/metacity/global_keybindings/panel_run_dialog "disabled" #desactiver alt + F2
gconftool-2 --set --type string /apps/metacity/global_keybindings/run_command_terminal "disabled" #desactiver raccourci clavier du terminal
gconftool-2 --set --type int /apps/metacity/general/num_workspaces 1 #limiter les espaces de travail à 1
gconftool-2 --set --type bool /apps/gnome-screensaver/lock_enabled false #desactiver le verrouillage de l'ecran
gconftool-2 --set --type bool /apps/gnome-screensaver/idle_activation_enabled false
gconftool-2 --set --type bool /desktop/gnome/interface/menus_have_icons true #icones dans les menus
gconftool-2 --set --type bool /desktop/gnome/interface/buttons_have_icons true
gconftool-2 --set --type bool /desktop/gnome/lockdown/disable_lock_screen true
gconftool-2 --set --type string /desktop/gnome/background/picture_filename "/home/$USER/.wallpaper/wallpaper.jpg"
gconftool-2 --set --type int /apps/gnome-power-manager/timeout/sleep_display_ac 0

Acceder au Bureau des clients léger depuis le compte admin

Executer le script depuis un compte administrateur de la Machine

#!/bin/bash

for i in `seq -w 01 10`; do
sudo chmod 777 /home/X_public_$i/Bureau
sudo ln -s /home/X_public_$i/Bureau /home/ADMIN/Bureau/Bureau\ clients/X_public_$i
sudo mkdir /home/X_public_$i/.wallpaper
sudo rm /home/X_public_$i/Bureau/Bureau
done

Problèmes

Le client léger charge le noyaux mais refuse de booter

Dans les log de pfsense ceci :

dhcp: Dropped DHCPv4 packet with zero-length client-id

et en boucle lors du démarrage du client léger (f2 pour cacher plymouth)

 udhcpc (v0.9.9-pre) started
 Sending discover...
 Sending discover...
 Sending discover...
 No lease, failing.
 sleepnow
 udhcpc (v0.9.9-pre) started
 Sending discover...
 Sending discover...
 ...

Il semblerait que ce soit un bug de la version de ltsp de ubuntu 10.04 https://bugs.launchpad.net/ubuntu/+source/ltsp/+bug/505916. Pour le résoudre :

  • Dans /opt/ltsp/i386/usr/share/initramfs-tools/scripts/init-premount/udhcp, changer la ligne suivante:
        if udhcpc -n -c "$clientid" -s /tmp/dhcp-script.sh -i $i $hostname_param $ip_param >/dev/null 2>&1; then

par

        if udhcpc -n -C -s /tmp/dhcp-script.sh -i $i $hostname_param $ip_param >/dev/null 2>&1; then
  • puis recharger la séquence de démarrage et reconstruire le noyau :
sudo chroot /opt/ltsp/i386 update-initramfs -u && sudo ltsp-update-kernels

Relancer les clients léger le problème sera résolu

Sources

https://help.ubuntu.com/community/UbuntuLTSP
http://manpages.ubuntu.com/manpages/lucid/man5/lts.conf.5.html