Table des Matières
- 1 Architecture physique, VLAN dédié
- 2 Correction du bug H3C
- 3 Permettre le boot réseau sur le serveur LTSP
- 4 Installation de LTSP sous UBUNTU 10.04
- 5 Installation de logiciels
- 6 Côté client
- 7 Réveil et extinction automatique des clients
- 8 Tuer les processus orphelins
- 9 Personnalisation de l’environnement utilisateur
- 10 Webliographie
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
|
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
|
unset |
Only make the specified applications appear/override items in desktop menu |
LOCAL_APPS_WHITELIST | list of commands | unset |
Use to allow only specified 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 …