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.
Sommaire
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".
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
Vérouiller 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ésolut
Sources
https://help.ubuntu.com/community/UbuntuLTSP
http://manpages.ubuntu.com/manpages/lucid/man5/lts.conf.5.html