ltsp dans escolan (ex solaere)

 

Table des Matières

1   Architecture physique, VLAN dédié

Pour que le serveur ltsp puisse monter les espaces partagés sur Escolan et pour naviguer sur le web, il a besoin d’une seule carte réseau :

  • une patte serveur qui se trouve dans le vlan serveur (eth0) en ip fixe
  • une patte client éventuelle peut être mise en ip fixe (eth1) hors réseau (192.168.0.1 par exemple) avec un client branché directement. On peut donc laisser le serveur dhcp en route dans cette gamme d’ip

Tous nos clients sont isolés du vlan pédagogique dans un vlan spécifique (chez nous c’est le vlan 17, dans la gamme d’IP 192.168.236.0 )

Cela nous permet :

  • de faire de la réservation d’ip par ipr
  • d’avoir des ip fixes pour chacun des clients et donc de pouvoir (Bravo Stef ) se connecter en ssh dessus
  • d’utiliser italc qui le nécessite aussi …. enfin on ne l’a pas encore fait !

2   Correction du bug H3C

Ajouter dans /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default « clientid= »LTSP-i386 » pour obtenir

append ro initrd=initrd.img nbdport=2000 clientid="LTSP-i386"

Sinon, le cœur de réseau (H3C) plante et tout le réseau devient inaccessible

3   Permettre le boot réseau sur le serveur LTSP

Demander à la télégestion d’ajouter le nécessaire pour que les clients fins (VLAN dédié, chez nous le 17) bootent sur le serveur.

La config à faire est d’ajouter dans ipr, le fichier /etc/dhcpd/vlan17.inc contenant les lignes suivantes

next-server 10.145.15.141;
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";
}

4   Installation de LTSP sous UBUNTU 10.04

4.1   Partitionnement

Nous avons choisi le partitionnement suivant :

  • une partition sda1 de 20 G formatée en ext3 montée comme racine
  • une deuxième partition sda2 de 20 G formatée en ext3 non utilisée, mais qui porte notre système précédent une UBUNTU 10.04
  • une partition sda3 de 2 G formatée en swap
  • une partition sda4 pour le reste du disque formatée en ext3 montée comme /home

4.2   Installation de base

On commence par l’installation d’une Desktop classique sur sda1, avec le /home sur sda4
On met à jour le /etc/apt/sources.list

#########################################
### Depot Ubuntu

#section: Ubuntu lucid 10.04
deb http://archive.ubuntu.com/ubuntu/ lucid main multiverse
deb http://archive.ubuntu.com/ubuntu/ lucid restricted
deb http://archive.ubuntu.com/ubuntu/ lucid universe

#section: Ubuntu lucid Updates
deb http://archive.ubuntu.com/ubuntu/ lucid-updates main multiverse
deb http://archive.ubuntu.com/ubuntu/ lucid-updates restricted
deb http://archive.ubuntu.com/ubuntu/ lucid-updates universe

#section: Ubuntu lucid Security
deb http://archive.ubuntu.com/ubuntu/ lucid-security main multiverse
deb http://archive.ubuntu.com/ubuntu/ lucid-security restricted
deb http://archive.ubuntu.com/ubuntu/ lucid-security universe

#section: Ubuntu lucid Backports
deb http://archive.ubuntu.com/ubuntu/ lucid-backports main multiverse
deb http://archive.ubuntu.com/ubuntu/ lucid-backports restricted
deb http://archive.ubuntu.com/ubuntu/ lucid-backports universe

#########################################
### Depot Canonical

deb http://archive.canonical.com/ lucid partner

#########################################
### Depot Medibuntu
## KEY GPG: wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O- | sudo apt-key add -

#section: Medibuntu packages for Ubuntu lucid 10.04
deb http://packages.medibuntu.org/ lucid free
deb http://packages.medibuntu.org/ lucid non-free

#########################################
### Depot winehq
## KEY GPG: wget -q http://wine.budgetdedicated.com/apt/387EE263.gpg -O- | sudo apt-key add -

#section: Ubuntu lucid 10.04
deb http://wine.budgetdedicated.com/apt/ lucid main


##########################################
### Commercial
deb http://archive.canonical.com/ubuntu lucid partner

#############################################
### Depot Solaere
deb http://pub.giprecia.fr/debian/ experimental main contrib


###############DEPOT XCAS - GIAC CALCUL FORMEL #################
deb http://archive.ubuntu.com/ubuntu/ lucid-proposed restricted main multiverse universe
deb http://www-fourier.ujf-grenoble.fr/~parisse/debian/ stable main
deb http://ppa.launchpad.net/scratch/ppa/ubuntu lucid main

Prise en compte des dépôts et mise a jour

sudo apt-get update && sudo apt-get dist-upgrade

Installation d’un kernel-server (prise en compte de RAM > 4 Go donc nécessaire chez nous):

sudo apt-get install kernel-server

On installe le système ltsp

sudo apt-get install ltsp-server_standalone

On supprime le démarrage du dhcp sauf si on a une deuxième carte réseau (voir plus haut) Dans ce cas, il faudra vérifier la config /etc/ltsp/dhcpd.conf

sudo update-rc.d -f dhcp3-server remove

On construit l’environnement client

sudo ltsp-build-client --arch i386

On configure l’interface des deux cartes réseau – Editer le fichier /etc/network/interfaces

sudo nano /etc/network/interfaces

Il doit avoir les paramètres suivant

# The loopback network interface
auto lo
iface lo inet loopback
# eth0 dans le vlan serveur en ip fixe
auto eth0
address 10.145.15.141
netmask 255.255.255.224
gateway 10.145.15.158
#eth1 hors réseau en ip fixe
auto eth1
iface eth1 inet static
address 192.168.0.1
netmask 255.255.255.0
gateway 192.168.0.254

Une fois ce fichier réalisé et enregistré, redémarrer les interfaces réseau par un

sudo /etc/init.d/networking restart

Comme les IP du serveur ont changé, il faut faire un

sudo ltsp-update-sshkeys

On installe le paquet solaere-client-ubuntu

Décommenter la ligne du dépôt recia (si elle l’est) dans le sources.list et

sudo apt-get update

sudo apt-get install solaere-client-ubuntu

5   Installation de logiciels

Voici la liste des logiciels que nous avons installés :

  • polices(msttcorefonts, linux-libertine)
  • plugin pour son dans flash
  • gstreamer010
  • w32codecs
  • adobe-reader
  • google earth
  • celestia
  • vlc
  • mplayer
  • scite
  • gimp
  • openoffice
  • openclipart

Tout ca ainsi

sudo apt-get install msttcorefonts linux-libertine flashplugin-nonfree-extrasound \
libgstreamer0.10-0 w32codecs acroread googleearth celestia vlc mplayer \
scite gimp openoffice.org openclipart

5.1   Le fichier lts.conf ( /var/lib/tftpboot/ltsp/i386/lts.conf)

5.1.1   Rôle du lts.conf

Le fichier lts.conf a pour rôle d’envoyer un certain nombre de variables au ltsp-client-setup lancé au démarrage d’un client fin, il permet d’inscrire du matériel, de lancer des scripts … etc

5.1.2   La documentation du lts.conf

Il n’existe pas pour l’heure de page man pour le lts.conf, mais tout est dans /usr/share/doc/ltsp-server/lts-parameters.txt.gz

Voici la conversion en rst du contenu de ce fichier pour une distribution Ubuntu Jaunty 9.04 et un ltsp-server en 5.1.65-0ubuntu ( dpkg -l ltsp-server pour connaître votre version )

This file lists parameters that can go into your lts.conf file
* Switch on/off features (and dependant optional options) *

Variable Possible Values Default value Comment
SEARCH_DOMAIN Domainname unset required if DNS_SERVER is set
LDM_DIRECTX boolean unset disable ssh tunneling for video
CONSOLE_KEYMAP A valid console keymap en
CONFIGURE_FSTAB boolean True /etc/fstab is generated by boot scripts
DNS_SERVER (SEARCH_DOMAIN) A valid IP unset
LDM_XSESSION A custom command (path use to
override default session on the server)
Xsession
LDM_AUTOLOGIN boolean unset

automatically logs in with username

= hostname and password = hostname

LDM_DEBUG boolean unset Write to debug log /var/log/ldm.log
on client
LDM_USERNAME A valid username unset use this username for autologin
LDM_PASSWORD A valid password unset use this password for autologin
LDM_LANGUAGE A valid language unset use this language for ldm
LDM_SESSION A valid session unset use this session for ldm
LDM_GUESTLOGIN boolean unset

Add « Guest login » button to greeter

(autologin when pressed by user)

LOCAL_APPS boolean True
LOCAL_APPS_MENU boolean False

Make local applications appear/override

items in desktop menu

LOCAL_APPS_MENU_ITEMS

comma-delimited list of application

names as they appear in the .desktop filename

unset

Only make the specified applications

appear/override items in desktop menu

LOCAL_APPS_WHITELIST list of commands unset

Use to allow only specified
space-separated commands to be run as
local apps, allow all is default if

unset others are autodetected

Full-paths are required for

each command.

No spaces in names are allowed.

LOCALDEV boolean True Honors LOCAL_STORAGE (deprecated)
MODULE_nn Kernel module name autodetected use to force loading of specific module
NBD_SWAP boolean unset
SWAP_SERVER nbd server IP ltsp server
NBD_PORT A valid nbd portnumber 9572
NETWORK_COMPRESSION boolean unset compress ssh traffic
PRINTER_0_DEVICE dev (i.e. /dev/usblp0) unset
PRINTER_0_TYPE P(parallel), S(serial) U(USB)

only required for serial,

others are autodetected

PRINTER_0_PORT A valid portnumber 9100
PRINTER_0_WRITE_ONLY Y,N N
PRINTER_0_SPEED A baud rate 9600 serial only
PRINTER_0_FLOWCTRL flow control param S serial only
PRINTER_0_PARITY Parity setting N serial only
PRINTER_0_DATABITS Bitnumber 8 serial only
PRINTER_0_OPTIONS additional options the printer understands unset
RCFILE_nn A custom rc file unset
SCREEN_nn ldm, shell, xdmcp, telnet, startx (deprecated) ldm
SERVER Server IP ltsp server
SOUND boolean True
SOUND_DAEMON esd, nasd, pulse pulse
SSH_OVERRIDE_PORT Port number unset for use with a dedicated ssh port
SYSLOG_HOST Server IP ltsp server

add SYSLOGD= »-r » to the servers

/etc/ltsp/syslogd file first

TELNET_HOST Telnet server IP ltsp server for use with SCREEN_nn=telnet
TIMEZONE Timezone unset Timezone for client to use
TIMESERVER IP/Hostname unset NTP time server to set client time
USE_LOCAL_SWAP boolean unset
USE_TOUCH Enable touchscreen unset Enable touchscreen
X_TOUCH_DEVICE Path to device /dev/ttyS0 set device for touchscreen
X_TOUCH_DRIVER Touchscreen driver elographics set driver for touchscreen
X_TOUCH_MAXX) integer 3588 Xmax
X_TOUCH_MAXY) integer 3526 Ymax
X_TOUCH_MINX) integer 433 Xmin
X_TOUCH_MINY) integer 569 Ymin
X_TOUCH_UNDELAY) integer 10 Untouch delay
(X_TOUCH_RPTDELAY) integer 10 Repeat touch delay
USE_XFS boolean unset
(XFS_SERVER) Font server IP unset
VOLUME percentage 90 Main volume preset percentage
HEADPHONE_VOLUME Headphone volume preset
PCM_VOLUME PCM volume preset
CD_VOLUME CD volume preset
FRONT_VOLUME Front speaker volume preset
MIC_VOLUME Microphone volume preset
X_BLANKING seconds unset DPMS blanking of screen (0=never)
X_COLOR_DEPTH 2, 4, 8, 16, 24, 32 24
16 in Debian
set to 16bit to save client mem
X_CONF
or
XF86CONFIG_FILE
full path to a file autodetected relative to /opt/ltsp/$ARCH
X_HORZSYNC min-max MHz autodetected use for forcing horizontal sync
X_VERTREFRESH min-max Hz autodetected use for forcing vertical refresh

X_MODE_0

X_MODE_1

X_MODE_2

A valid mode name autodetected

use for forcing X_MODE

(XRANDR_MODE_0 preferred –

see below for details)

X_MONITOR_OPTION_01

X_MONITOR_OPTION_10
A valid Monitor option unset set Monitor option for driver
X_MOUSE_DEVICE /dev/ttySn autodetected

serial mice only,

all others are autodetected

X_MOUSE_PROTOCOL sunkbd
lkkbd
vsxxxaa
spaceorb
spaceball
magellan
warrior
stinger
mousesystems
sunmouse
microsoft
mshack
mouseman
intellimouse
mmwheel
iforce
h3600ts
stowawaykbd
ps2serkbd
twiddler
twiddlerjoy
unset serial only (see above)
X_MOUSE_EMULATE3BTN boolean unset
X_NUMLOCK boolean unset Set numlock key status (requires
numlockx installed)
X_OPTION_01

X_OPTION_10
A valid Device option unset set Device option for driver
X_VIDEO_RAM integer unset Video RAM (kBytes)
X_VIRTUAL « width height » unset Sets Virtual screen allocation
XDM_SERVER XDMCP server IP ltsp server for use with SCREEN_nn=xdmcp
XKBLAYOUT A valid xorg Layout unset see xorg documentation for value
XKBMODEL A valid xkb model unset see xorg documentation for value
XKBRULES A set of xkb rules unset see xorg documentation for value
XKBOPTIONS A set of xkb options unset see xorg documentation for value
XKBVARIANT A valid xkb variant unset see xorg documentation for value
XRAMPERC An integer 80 Percentage of RAM for X server

XRANDR_OUTPUT_01

XRANDR_OUTPUT_09

Valid xrandr output name unset

Define xrandr output – can also

use for multihead positioning

XRANDR_MODE_01

XRANDR_MODE_09

Valid video

mode/resolution

unset

Set mode for corresponding

output

XRANDR_NEWMODE_01

XRANDR_NEWMODE_09

Valid modeline unset

Add new modeline for corresponding

output

XRANDR_RATE_01

XRANDR_RATE_09

Refresh rate unset

Set refresh rate for corresponding

output

XRANDR_DPI_01

XRANDR_DPI_09

DPI value unset Set dpi for corresponding output

XRANDR_ROTATE_01

XRANDR_ROTATE_09

Rotation unset Set rotation for corresponding output

XRANDR_REFLECT_01

XRANDR_REFLECT_09

Reflection unset Set reflection for corresponding output

XRANDR_SIZE_01

XRANDR_SIZE_09

Resolution unset

Set resolution for corresponding output

(For xrandr <1.2)

XRANDR_ORIENTATION_01

XRANDR_ORIENTATION_09

Orientation unset

Set orientation for corresponding output

(For xrandr <1.2)

XSERVER A valid Xorg driver autodetected see xorg documentation for value

5.1.3   Le lts.conf chez nous

Ce fichier permet de régler bon nombre de paramètres

##DEFAUT###############################################
[default]
# USB key
LOCALDEV = True

# Ne crypte pas le flux
LDM_DIRECTX = True
SCREEN_07 = ldm

#serveur de temps
TIMESERVER=10.145.15.178

#Theme de l ecran de connexion
LDM_THEME=themeLJM

#Une seule session par utilisateur
LDM_LIMIT_ONE_SESSION = True

################### MODELE HP  ############
[HP]
SEARCH_DOMAIN = lyc-jacques-monod-st-jean-de-braye.ac-orleans-tours.fr
DNS_SERVER = 10.145.15.130
RCFILE_01=/etc/init.d/chmod-resolv.sh
LOCAL_APPS=True
LOCAL_APPS_MENU = True
LOCAL_APPS_MENU_ITEMS = firefox,mplayer,vlc,gimp,acroread

#utiliser la swap locale
USE_LOCAL_SWAP = True

############################### NON HP  ######

# CVL
[192.168.236.105]
PRINTER_0_TYPE = P
PRINTER_0_device = /dev/lp0
MODULE_01 = lp
MODULE_02 = ppdev

# D22
[192.168.236.104]
PRINTER_0_TYPE = P
PRINTER_0_device = /dev/lp0
MODULE_01 = lp
MODULE_02 = ppdev

############################ REZ DE CHAUSSEE########

#cabe  00:24:81:9a:4c:82
[192.168.236.1]
LIKE    = HP

#A05  00:24:81:9a:4c:68
[192.168.236.2]
LIKE    = HP

#eps  00:24:81:9a:4c:67
[192.168.236.3]
LIKE    = HP

Etc ……

5.2   Avoir un système de secours

Une fois notre ltsp fonctionnel, il peut être utile d’avoir une deuxième racine fonctionnelle sur le même disque dur ….. en cas de panne, on a un système de secours parfaitement opérationnel. De plus c’est transparent pour l’utilisateur.

Il suffit de démarrer la machine portant votre ltsp sur un LiveCd (SystemRescueCD par exemple) et de synchroniser /dev/sda1 (racine de votre système) sur /dev/sda2 (racine numéro deux) on procédant d ela manière suivante

mkdir /mnt/sda1 # Point de montage de sda1
mkdir /mnt/sda2 # Point de montage de sda2
mount /dev/sda1 /mnt/sda1 # On monte sda1 sur son point de montage
mount /dev/sda2 /mnt/sda2 # On monte sda2 sur son point de montage

rsync -av --del --ignore-errors --force /mnt/sda1/ /mnt/sda2/

A la fin de cette opération, vous avez une deuxième racine fonctionnelle. Attention, il faut modifier les fichiers /boot/grub/menu.list (grub est installé dans le mbr sur le serveur) et /etc/fstab (celui de /dev/sda2) afin de pouvoir booter sur cette deuxième racine

sudo blkid

On note l’UUID de /dev/sda2 (exemple c71e2d7c-f50b-48dd-8bff-ee949b6db02b)

sudo uname -r

On note la version du noyau utilisé (exemple 2.6.28-17-server). Ensuite, dans /boot/grub/menu.list, on ajoute après ces lignes

### END DEBIAN AUTOMAGIC KERNELS LIST
# This is a divider, added to separate the menu items below from the Debian
# ones.
title          Other operating systems:
root

les entrées suivantes

title           Ubuntu 9.04, kernel 2.6.28-17-server
uuid            c71e2d7c-f50b-48dd-8bff-ee949b6db02b
kernel          /boot/vmlinuz-2.6.28-17-server root=UUID=c71e2d7c-f50b-48dd-8bff-ee949b6db02b ro quiet splash
initrd          /boot/initrd.img-2.6.28-17-server
quiet

title           Ubuntu 9.04, kernel 2.6.28-17-server (recovery mode)
uuid            c71e2d7c-f50b-48dd-8bff-ee949b6db02b
kernel          /boot/vmlinuz-2.6.28-17-server root=UUID=c71e2d7c-f50b-48dd-8bff-ee949b6db02b ro single
initrd          /boot/initrd.img-2.6.28-17-server

Voici les modifications de /mnt/sda2/etc/fstab

# / was on /dev/sda2 during installation
UUID=c71e2d7c-f50b-48dd-8bff-ee949b6db02b /               ext3    relatime,errors=remount-ro 0       1

Vous avez maintenant deux racines identiques et fonctionnelles

5.3   Configuration du client

Copier le fichier sources.list du serveur sur le client

sudo cp /etc/apt/sources.list /opt/ltsp/i386/etc/apt/

Déplacement de la racine

sudo chroot /opt/ltsp/i386

Prise en compte du nouveau sources.list

mount -t proc proc /proc
apt-get update
apt-get upgrade
umount /proc
exit

Si le noyau (kernel) a été mis à jour

sudo ltsp-update-kernels
##Reconstruction de l'image du client
sudo ltsp-update-image

6   Côté client

6.1   Boot PXE

Si le bios de vos clients le supporte, il faut le configurer pour que le boot se fasse sur le réseau.

Nous protégeons le bios par un mot de passe et empêchons tout autre boot que par le réseau.

6.2   Fabrication d’une disquette de boot

Si la carte réseau du client est incapable de booter sur le réseau malgré une bonne configuration du bios, il faudra fabriquer une disquette de boot.

Récupération du modèle de la carte réseau.

A partir d’un liveCd linux, taper dans une console

sudo lspci | grep Ethernet

Par exemple, le résultat est : 07:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)

Taper ensuite

sudo lspci -n

et recopier les références de votre carte réseau (par exemple) : 07:00.0 0200: 10ec:8139 (rev 10)

Aller sur le site http://www.rom-o-matic.net et cliquer sur la dernière « Etherboot Releases ».

Trouver dans le premier menu déroulant, les référence de la carte réseau et cliquer sur get rom.

Introduire une disquette formatée dans votre lecteur et taper l’instruction suivante dans une console

cat eb-macartereseau.zdsk > /dev/fd0

Et votre disquette de boot est prête.

7   Réveil et extinction automatique des clients

7.1   Passage des clients en IP réservée

Dans IPR, faire de la réservation d’ip à partir de l’addresse MAC

Configuration particulière des clients Imprimante locale …. dans le lts.conf voir plus haut
Réglage de l’affichage ?

7.2   Connexion ssh sur les clients sans mot de passe (validé)

Installation de ssh sur le client – fixation du mot de passe root – expiration du mot de passe l’année de ma retraite 🙂

chroot /opt/ltsp/i386/
mount -t proc proc /proc
apt-get update
apt-get install ssh
passwd root
usermod -e 01/01/2036 root
umount /proc
exit

Génération d’une clé DSA en tant que root sur une machine dédiée dans le vlan 17 ip=192.168.236.110

ssh-keygen -q -t dsa -f /root/.ssh/id_dsa

Créer un répertoire .ssh sur le serveur dans /opt/ltsp/i386/root/

mkdir /opt/ltsp/i386/root/.ssh
chmod 700 /opt/ltsp/i386/root/.ssh

Copier le fichier dsa public de la machine dédiée sur le serveur (depuis le serveur)

scp root@192.168.236.110:/root/.ssh/id_dsa.pub /opt/ltsp/i386/root/.ssh/authorized_keys

Mettre à jour l’image du client

ltsp-update-image

Redémarrer un client.

Depuis la machine dédiée

ssh -o StrictHostKeyChecking=no root@machine

Ca marche sans vérification du fingerprint !!!!!!! Le root de la machine 192.168.236.110 se connecte sans mot de passe sur n’importe quel client fin.

7.3   Arrêt « automatique » des clients

Sur la machine dédiée, on fait un crontab qui renvoie vers le fichier permettant l’extinction automatique. Par exemple

0 19 * * 1-5 root /etc/extinction/haltcl.sh

éteint à 19h du lundi au vendredi les machines du vlan 17

Le script haltcl.sh

#! /bin/bash
# test des machines réveillées - suppression 0 et 254
# inscription dans fping
fping -g 192.168.236.0/24 | sed 's/192.168.236.0.*$//g' | sed 's/192.168.236.254.*$//g' |grep alive > /etc/extinction/fping
# suppression des "is alive" et inscription dans ip
perl -ne 'print "$1\n" if m/((\d{1,3}\.){3}\d{1,3})/' < /etc/extinction/fping > /etc/extinction/ip
# Extinction des machines allumées
# sans verif du fingerprint
while read line
do
cmd="echo ${line};halt;exit"
ssh -f -o StrictHostKeyChecking=no root@${line} $cmd
done < /etc/extinction/ip

7.4   Arrêt d’urgence des clients avant reboot du serveur

Les clients HP ont la fâcheuse tendance à refuser les accès ssh après un reboot du serveur s’ils ne sont pas arrêtés avant.

Se connecter sur la machine wol :

  • depuis le réseau pédagogique on accède à la machine wol de n’importe ou.

Ouvrir une console et se connecter par : root@192.168.236.110 et taper dans la console stophp.sh (il y a autocomplétion car j’ai mis le script dans le
path –> /usr/local/bin). En 1 min les 20 machines sont arrêtées.

Il ne reste plus qu’à redémarrer le serveur

7.5   WakeOnLan des clients

  • Configurer le bios de chaque client pour le WOL

  • Vérifier que la carte réseau du client support le wol :

    • se connecter sur le client en ssh

      apt-get install ethtool
      
    • taper la commande

      # ethtool eth0
      

      Si la réponse est

      Supports Wake-on: g
      Wake-on: g
      
    • Alors tout va bien …… le WOL risque de marcher

    • Si Supports Wake-on ne contient pas g c’est sûrement que le BIOS est mal configuré ou que la carte réseau ne supporte pas le WOL.

    • Si Wake-on n’est pas à g il faut rajouter la ligne suivante au fichier /opt/ltsp/i386/etc/network/interfaces

      pre-up /usr/sbin/ethtool -s eth0 wol g
      
    • Ensuite, on interdit l’extinction de la carte réseau du client en modifiant le fichier /opt/ltsp/i386/etc/init.d/halt.
      • On remplace la ligne

        halt -d -f -i $poweroff $hddown
        
      • par

        halt -d -f $poweroff $hddown
        
      • Ou alors, suivant les versions de halt, il faut remplacer NETDOWN=yes par NETDOWN=no

  • On régénère l’image du client par : ltsp-update-image. Et ça marche !!

  • Sur la machine dédiée, on fait un crontab qui renvoie vers le fichier permettant le wol. Par exemple

    45 7 * * 1-5 root /etc/wol/hp.sh
    

    réveille à 7h45 du lundi au vendredi les machine dont l’adresse mac figure après l’instruction wakeonlan du fichier hp.sh

    Le fichier hp.sh contient seulement

    #! /bin/bash
    i=1;
    bc="192.168.236.255";
    while [ $i -lt 4 ]; # tant que $i vaut moins de 4
    do
    ###########################################
    #### Reveil des machines HP CL01 - CL20
    ##########################################
    while read line
    do
    wakeonlan -i $bc ${line}
    sleep 3
    done< /etc/wol/mac.txt # ce fichier contient toutes adresses MAC des machines à réveiller
    i=$(expr $i + 1); # incrémentation
    done
    

7.6   Mise à l’heure de la machine WOL

Installation de ntp

apt-get install ntp

Modification du /etc/ntp.conf en ajoutant:

server 10.145.15.178

Ip du vserver de temps !!

8   Tuer les processus orphelins

Passer ce script

#!/bin/bash
# List users with processes
ps -eo user --no-headers | sort | uniq > procUsers
# List logged-in users
who | awk '{print $1}'| sort | uniq > loginUsers
sdiff -s loginUsers procUsers | awk '{print $2}' > procNoLoginUsers
while read -r USER
do
        tempUID=`id -u $USER`
        # ndbroot process
        if [ $tempUID -eq 65534 ]
        then
                tempUID=100;
        fi
        # Processes of users UID >= 1000
        if [ $tempUID -ge 1000 ]
        then
                # SIGTERM
                killall -u $USER -s 15
                sleep 2
                # SIGKILL
                killall -u $USER -s 9
        fi
done < procNoLoginUsers
rm procUsers
rm loginUsers
rm procNoLoginUsers
# end of script

Puis installer gnome-watchdog

sudo apt-get install gtkdialog

wget -c http://logicalnetworking.net/other/gnome-watchdog_0.9.2_i386.deb

sudo dpkg -i gnome-watchdog_0.9.2_i386.deb

sudo touch /etc/check_previous_login

Tous les processus orphelins seront tués

9   Personnalisation de l’environnement utilisateur

Deux outils de personnalisation des configurations utilisateurs existent :
  • Sabayon
  • Gconf-editor ?

Malheureusement, Sabayon semble être presque abandonné, et pour le moment, nous n’avons pas eu le temps de travailler sur Gconf-editor. Ceci étant, ces 2 pistes devraient être explorées.

9.1   Le dossier /etc/skel/

C’est le dossier equivalent au Default Users de Window$…

A régler aux petits oignons avant de mettre en fonction votre serveur

On peut y configurer pour bien démarrer

  • .mozilla pour firefox ( notamment le nom du profil par défaut )
Modifier le nom du Dossier en Defaut et le fichier /.mozilla/firefox/Profiles.ini ::
[General]
StartWithLastProfile=1
[Profile0]
Name=Default User
IsRelative=1
Path=Defaut
  • .config pour les menus gnome ( je crois )

Tous les fichiers de personnalisation que vous voulez imposer au départ … Attention !

9.2   Configurer les /home des utilisateurs

9.2.1   Script

Pour configurer les homes des utilisateurs, on peut être amené à effectuer des opérations dans le home. Ce script permet de copier, d’effacer des fichiers dans le home.

Il permet aussi de créer les icônes Mon Espace Réseau et Mes espaces Coopératifs sur le bureau.

Parmi les fonctionnalités nécessaires, il manque les instructions chown, chgrp et chmod … Peut-être plus tard.

Nous avons placé ce script dans /usr/local

Script gest-home-ltsp

#!/bin/bash
# On attend en paramètre
#
#
# $1 la commande : Valeur parmi cp rm ou esp
#
#
# $2
# cp : chemin absolu du fichier source
# rm : chemin relatif au home du fichier à supprimer
# esp : aucun paramètre
#
#
# $3
# cp : chemin relatif au home de la destination ( si absent copy sur le Bureau, mettre un point . pour copier dans le home )
# rm : rm aucun paramètre
# esp : aucun paramètre
#
#FONCTION DE VALIDATION DES PARAMETRES DE COPY #################################
valid_param_cp()
{
if [ -e "${src}" ]
then
echo "OK pour la source"
if [ -z "$dstntn" ]
then
echo -n "Vous n'avez pas indiqué de destination de copie. Voulez-vous copier vers le Bureau des utilisateurs ? (O/n)"
read -t 10 -n 1 dstntnOK
case "$dstntnOK" in
N|n)
echo "Abandon"
exit ;;
*)
echo "La copie est faite vers le Bureau"
dstntn="Bureau"
return 1
;;
esac
fi
return 1
else
echo $src" n'existe pas"
return 0
fi
}
# FONTION ESPACES ###########################################################
espaces()
{
while read line
do
#echo $line
proprio=$(echo $line | cut -d/ -f4)
#echo $proprio
echo "[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=Mes Espaces Reseau
Type=Link
Terminal=false
Icon[fr_FR]=/usr/share/icons/EspacePersonnel.ico
Name[fr_FR]=Mes Espaces Reseau
URL=file://"$line"/Mes_espaces/
Icon=/usr/share/icons/EspacePersonnel.ico" > $line/Bureau/Mes_Espaces_Reseau.desktop
chown $proprio $line/Bureau/Mes_Espaces_Reseau.desktop
echo "[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=Mes Groupes
Type=Link
Terminal=false
Icon[fr_FR]=/usr/share/icons/EspacePersonnel.ico
Name[fr_FR]=Mes Groupes
URL=file://"$line"/Mes_espaces/Mes groupes
Icon=/usr/share/icons/EspacesMutuels.ico" > $line/Bureau/Mes_Groupes.desktop
chown $proprio $line/Bureau/Mes_Groupes.desktop
done</tmp/tmp_list_home
}
#FONCTION COPY#################################################################
copy()
{
while read line
do
proprio=$(echo $line | cut -d/ -f4)
#echo "$line"
#echo $proprio
if [ -d "$line$dstntn" ]
then
cp -Rf "$src" "$line$dstntn" && echo " Copie de $src vers $line$dstntn/"
nom_base_src=$(basename $src)
#echo $nom_base_src
chown -Rf $proprio  "$line$dstntn/$nom_base_src"
else
echo "Le dossier "$dstntn" n'existe pas dans "$line
exit
fi
done < /tmp/tmp_list_home
}
# FONCTION REMOVE #############################################################
remove()
{
while read line
do
#echo -e "$line$src"
if [ -e "$line$src" ]
then
rm -fR "$line$src" && echo "Le fichier ou dossier $line$src a été effacé !"
else
echo "Le fichier ou dossier $line$src n'existe pas !"
fi
done < /tmp/tmp_list_home
}
#FONCTION LSHOMES ############################################################
lshomes()
{
# VALEUR POUR TEST MAISON
#REP='ls /home/cynico/ArchiLTSP/*/*/Bureau/'
# VALEUR POUR LYCEE
REP='ls /home/*/*/Bureau/'
REP1=$(echo $REP | sed 's/ls //' | sed 's/Bureau\///g' )
echo $REP1 | sed -e "s/ /\n/g" > /tmp/tmp_list_home
}
# PRINCIPAL ##################################################################
information="
En premier -> Commande : Valeur parmi
cp -> copie de fichier ou de répertoire
rm -> effacement de fichier ou de répertoire
esp -> création des raccourcis Mes Espaces sur les bureaux

En deuxième ->
cp : chemin absolu du fichier source
rm : chemin relatif au home du fichier à supprimer
esp : aucun paramètre

En troisième ->
cp : chemin relatif au home de la destination (sans le nom de fichier )( si absent, copie sur le Bureau )
rm : rm aucun paramètre
esp : aucun paramètre

Si la source ou la destination contiennent des espaces, mettre entre guillemets \" ou passer les espaces à l'aide de la combinaison d'échappement \"\\ \" (backslash + espace)
"
#echo $@
cmmnd=$1
src=$2
dstntn=$3
#echo $cmmnd
#echo $src
#echo $dstntn
#echo $USER
[ $USER != "root" ] && printf "Ce script doit être lancé en tant que super utilisateur !\n \n $information" && exit
lshomes
case $cmmnd in
"cp") valid_param_cp
[ $? -eq 0 ] && echo "Les paramètres ne sont pas validés" && exit
echo "Validation des paramètres de la copie"
copy
;;

"rm") #tester qu'il n'y a pas de troisième argument
[ -z "$src" ] && printf "NON ! Vous ne voulez sans doute pas effacer tous les \"/home\"" && echo && printf "$information" && exit
echo -n "Voulez-vous réellement effacer le fichier ou répertoire "$src" ( et les eventuels sous-dossiers ) de tous les homes des utilisateurs ? (o/N)"
read -t 10 -n 1 reponse
case "$reponse" in
O|o)
remove ;;
*)
echo "Abandon"
exit
;;
esac
;;

"esp") espaces;;

"") echo "Usage : Il faut un argument !
$information" ;;

*) echo "Cet argument n'est pas valide
$information" ;;
esac

9.2.2   Creation des raccourcis vers Mon Espace Perso et Mes Groupes

Ce script, à executer en sudo, crée des icones identiques à celle de Window$ sur les bureaux

sudo bash /usr/local/gest-home-ltsp.sh esp

Dans ESU, on trouve les icones EspacePersonnel.ico et EspacesMutuels.ico qu’il faut copier dans /usr/share/icons/ ( Penser à mettre les droits en lecture pour tous )

9.2.3   Fond d’écran avec le nom de l’utilisateur

Dans /usr/local, créer le script fondecran.sh

sudo nano /usr/local/fondecran.sh

Dans l’éditeur nano, coller

#!/bin/bash
NOM=$(echo $USER | sed 's/\./\ /g')
if ! [ -f ~/.fondperso.png ]
then
    [ -f ~/fond.png ] || cp /usr/share/backgrounds/warty-final-ubuntu.png ~/fond.png
    convert ~/fond.png -resize 1024x768 -gravity NorthEast -pointsize 50 \
               -stroke '#000C' -strokewidth 4 -annotate 0 "$NOM" \
               -stroke  none   -fill white    -annotate 0 "$NOM" \
               - colors 256 \
               ~/.fondperso.png
    rm ~/fond.png
fi
gconftool-2 -t string -s /desktop/gnome/background/picture_filename ~/.fondperso.png
gconftool-2 -t string -s /desktop/gnome/background/picture_options scaled
gconftool-2 -t bool -s /desktop/gnome/background/draw_background yes

Sauver par Ctrl+O, puis quitter par Ctrl+X

Rendre ce script exécutable

sudo chmod +x /usr/local/fondecran.sh

Dans /etc/skel, créer le dossier .config/autostart/

cd /etc/skel
sudo mkdir .config && sudo mkdir .config/autostart

Dans /etc/skel/.config/autostart/ , créer le fichier fond-ecran.desktop suivant

cd /etc/skel/.config/autostart/
sudo nano fond-ecran.desktop

Dans l’éditeur nano, coller ( ATTENTION ! les lignes Name doivent correspondre au nom du fichier .desktop , et même vides les lignes Comment sont nécessaires )

[Desktop Entry]
Type=Application
Encoding=UTF-8
Version=1.0
Name=fond-ecran
Name[fr_FR]=fond-ecran
Exec=bash /usr/local/fondecran.sh
X-GNOME-Autostart-enabled=true
Comment=
Comment[fr_FR]=Application du fond ecran

Sauver par Ctrl+O, puis quitter par Ctrl+X

Ainsi tous les nouveaux utilisateurs devraient avoir un fond d’écran personnalisé…

Remarque : Il suffit pour un utilisateur de mettre une image nommée fond.png et d’effacer .fondperso.png dans son home pour qu’il puisse choisir son image.

Pour les utilisateurs déjà existants, il faut faire ( si gest-home-ltsp.sh est dans /usr/local )

sudo bash /usr/local/gest-home-ltsp-test.sh cp /etc/skel/.config .

Attention : Le point en fin de ligne est nécessaire pour copier dans le home de l’utilisateur

9.2.4   Firefox 3

9.2.4.1   Forcer le proxy

Editer le fichiers : /etc/firefox-3.0/pref/firefox.js

Ajouter

pref("network.proxy.type", 1); //Pour selectionner le reglage manuel du proxy

pref("network.proxy.ftp", "10.145.15.177");

pref("network.proxy.ftp_port", 8080);

pref("network.proxy.gopher", "10.145.15.177");

pref("network.proxy.gopher_port", 8080);

pref("network.proxy.http", "10.145.15.177");

pref("network.proxy.http_port", 8080);

pref("network.proxy.ssl", "10.145.15.177");

pref("network.proxy.ssl_port", 8080);

pref("network.proxy.socks", "10.145.15.177");

pref("network.proxy.socks_port", 8080);

pref("network.proxy.socks_version", 5);

pref("network.proxy.socks_remote_dns", false);

pref("network.proxy.no_proxies_on", "localhost, 127.0.0.1");

9.2.4.2   Forcer l’environnement utilisateur

Pour un utilisateur quelconque nommé utilisateur_de_reglage, régler les options que vous voulez imposer dans Firefox, c’est à dire faire les réglages de préférences ( Edition-Préférences ) pour cet utilisateur. Fermer Firefox.

Ceci a généré un fichier prefs.js dans le /home/utilisateur_de_reglage/.mozilla/firefox/profile/Default/pref.js

Ouvrir ce fichier et vérifier les options (vous devrez sans doute élaguer ).

Copier ce fichier dans /etc/skel

sudo cp /home/utilisateur_de_reglage/.mozilla/firefox/profile/Default/pref.js /etc/skel/.mozilla/firefox/profile/Default/pref.js

Ainsi, tous les nouveaux utilisateurs « bénéficieront » de vos réglages.

Copier ce fichier dans tous les homes des utilisateurs

sudo ./gest-home-ltsp.sh cp /etc/skel/.mozilla/firefox/profile/Default/pref.js .mozilla/firefox/profile/Default/

Ainsi, tous les anciens utilisateurs « bénéficient » de vos réglages.

9.2.5   Des raccourcis sur tous les Bureaux

Pour un utilisateur quelconque nommé utilisateur_de_reglage, faites vous de beaux raccourcis sur le Bureau.

Ces raccourcis sont des fichiers xxxxxx.desktop

Vous verrez les fichiers en faisant un

ls -l ~/Bureau

Copier le raccourci xxxxxx.desktop dans /etc/skel

sudo cp ~/Bureau/xxxxxx.desktop /etc/skel/Bureau/

Ainsi, tous les nouveaux utilisateurs « bénéficieront » de votre joli raccourci.

Copier ce fichier sur tous les Bureaux des utilisateurs

sudo ./gest-home-ltsp.sh cp /etc/skel/Bureau/xxxxxx.desktop

Ainsi, tous les anciens utilisateurs « bénéficient » de votre joli raccourci.

9.3   Installation de Wine

Le problème de Wine est qu’il s’installe en environnement utilisateur …

Si un utilisateur X installe un programme A pour Wine … il n’est disponible que pour lui, car il s’installe dans le dossier /home/X/.wine/
Un utilisateur Y ne pourra donc pas lancer le programme A car il n’a pas accès au dossier home de X !

Procédure proposée … A tester ! (Fait partiellement)

Si Wine est déjà installé, le virer
Créer un utilisateur wine (ou autre nom)… Cet utilisateur est forcément sudoer !
Avec cet utilisateur, installer wine et les applications souhaitées
Passer tout le dossier /home/wine/.wine/ en autorisation 774 (ou 770 ?) (éventuellement un cron pour le refaire périodiquement)
Ajouter tous les utilisateurs dans le groupe wine ( ? /etc/security/groups.conf ? )

Pour tous les utilisateurs virer le dossier /home/x/xlogin/.wine/drive_c et le remplacer par un lien symbolique vers /home/wine/.wine.drive_c ( a refaire périodiquement ? Peut-on le faire avant que l’utilisateur se soit connecté ?) SCRIPT A ECRIRE

Pour bien faire, il faudrait virer l’affichage du menu wine de gnome… Et créer des raccourcis pour chaque programme, à mettre dans les bons menus … BEAUCOUP DE BOULOT TOUT CA On retombe sur gconf et/ou sabayon
TOUS LES LOGICIELS DOIVENT ETRE INSTALLÉS PAR L’UTILISATEUR WINE !

9.3.1   Liste de logiciels à installer

GeoplanW (ca tourne a peu près)

GeospacW (ca tourne a peu près)

Regressi (tourne a peu près, le curseur n’est pas toujours visible … j’ai testé entrée au Clavier, un petite simulation , modélisation même complexe, curseurs)

Crocodile Physics (tourne nickel)

Photofiltre

Chemsketch ( voir http://bugs.winehq.org/show_bug.cgi?id=12001)

Pour les raccourcis sur le Bureau, ça va aussi …

 

Laisser un commentaire