Articles sur le thème "linux" - Thegeekcorner

Transcription

Articles sur le thème "linux" - Thegeekcorner
Articles sur le thème "linux"
http://thegeekcorner.free.fr
Sommaire
NOTE_TECHNIQUE
Chiffrer un répertoire sous Linux
Installation et configuration................................................................................................... p.
Installation des dépendances.......................................................................................... p.
Chargement du module.................................................................................................. p.
Ajout de l'utilisateur au groupe fuse ......................................................................... p.
Création d'un répertoire chiffré.............................................................................................. p.
Usages..................................................................................................................................... p.
Démontage...................................................................................................................... p.
Montage.......................................................................................................................... p.
8
8
8
8
8
8
8
9
Installer et configurer un disque dur vierge sous Linux
Avant-propos......................................................................................................................... p. 10
Création de la partition........................................................................................................p. 10
Formatage de la partition.....................................................................................................p. 10
Créer un script de démarrage Upstart
I - Contexte/pré-requis......................................................................................................... p.
Script /etc/init.d/tomcat ...................................................................................p.
II - Script de démarrage tomcat.conf .............................................................................p.
Commentaires............................................................................................................... p.
III - Lancement de tomcat via Upstart................................................................................p.
IV - Conclusion.....................................................................................................................p.
11
11
11
11
11
11
Faire coexister plusieurs versions d'un programme
Avant-propos......................................................................................................................... p.
Téléchargement et décompression de l'archive .................................................................... p.
Création de l'alternative....................................................................................................... p.
Changement d'instance d'alternative.................................................................................... p.
13
13
13
14
Optimiser l'affichage d'Eclipse sous Linux
I - Création d'un fichier .gtkrc-eclipse .......................................................................p. 15
II - Editer le lanceur d'Eclipse............................................................................................. p. 15
III - La preuve par l'exemple............................................................................................... p. 15
Rendre un répertoire visible par Apache
Modification du fichier /etc/apache2/sites-available/default .......................... p. 16
Modification des droits du système de fichier...................................................................... p. 16
Actualisation de la configuration d'Apache.......................................................................... p. 16
Outils Favoris sous Linux
Accessoires liés au système de fichiers................................................................................. p.
Unison........................................................................................................................... p.
Kdiff3............................................................................................................................ p.
Encfs............................................................................................................................. p.
17
17
17
17
Installation et configuration................................................................................. p.
Installation des dépendances........................................................................ p.
Chargement du module................................................................................p.
Ajout de l'utilisateur au groupe fuse........................................................... p.
Création d'un répertoire chiffré............................................................................p.
Usage.................................................................................................................... p.
Démontage....................................................................................................p.
Montage........................................................................................................p.
17
17
17
17
17
18
18
18
TUTORIEL
Installation et configuration de Xplico sous Backtrack 4
I-Pré-requis............................................................................................................................p.
II-Installation et configuration.............................................................................................. p.
a) Installation de Xplico.............................................................................................. p.
b) Configuration de Xplico...........................................................................................p.
c) Préparation du matériel wifi....................................................................................p.
1) Activation du mode monitor ....................................................................... p.
2) Création d'une interface réseau virtuelle......................................................... p.
3) Activation de l'interface virtuelle at0 ........................................................... p.
d) 1er démarrage de Xplico..........................................................................................p.
III-Xplico in action............................................................................................................... p.
a) 1ere connexion à l'interface Web de Xplico.............................................................p.
b) Création d'un nouveau cas d'utilisation.................................................................. p.
c) Création d'une session d'utilisation......................................................................... p.
d) Démarrage de la capture......................................................................................... p.
e) Test de la capture....................................................................................................p.
20
20
20
20
20
20
20
21
21
21
21
21
22
22
23
Installer les polices Latex sous Linux
Installation des polices Tex...................................................................................................p.
Utilisation dans openoffice .................................................................................................. p.
Utilisation dans FOP .......................................................................................................... p.
Installation Ubuntu .....................................................................................................p.
Installer FOP .............................................................................................................. p.
Générer le fichier de métadonnée XML ...................................................................... p.
Configurer FOP .......................................................................................................... p.
Usage dans le .fo ......................................................................................................... p.
Lancer la transformation XSL-FO .............................................................................. p.
24
24
24
24
24
24
24
24
24
Utiliser Klibido et Stunnel pour sécuriser vos connexions aux
newsgroups.
I - Installation de stunnel et Klibido................................................................................... p.
II - Configuration de Stunnel............................................................................................... p.
a) Création du certificat...............................................................................................p.
b) Activation de Stunnel.............................................................................................. p.
c) Modification du fichier stunnel.conf ................................................................ p.
d) Redémarrage de stunnel ..................................................................................... p.
III - Configuration de KLibido............................................................................................. p.
IV - Test de la configuration................................................................................................p.
25
25
25
25
25
25
25
26
Livre blanc KVM (Kernel-based Virtual Machine)
I - Généralités.......................................................................................................................p. 27
a) Conventions typographiques.................................................................................... p. 27
Invite de commande............................................................................................. p. 27
Nature des utilisateurs......................................................................................... p.
Environnement d'exécution des commandes........................................................ p.
b) Remarques sur les commandes shell........................................................................ p.
c) Vocabulaire............................................................................................................... p.
d) Abréviations............................................................................................................. p.
II - Préparation pour l'installation....................................................................................... p.
a) prise en charge de la virtualisation......................................................................... p.
b) Installation de KVM et Qemu................................................................................ p.
c) Chargement du module noyau KVM.......................................................................p.
d) Ajout de l'utilisateur courant au groupe kvm ........................................................ p.
III - Eléments d'administration............................................................................................ p.
a) Création de la machine virtuelle............................................................................. p.
b) Installation de l'image virtuelle............................................................................... p.
Téléchargement..................................................................................................... p.
Démarrage de l'installation.................................................................................. p.
1er démarrage de la machine virtuelle installée................................................... p.
Mise à jour du système invité Debian Lenny.............................................. p.
Installation du serveur SSH......................................................................... p.
IV - Administration avançée................................................................................................ p.
a) Déploiement sur le réseau local............................................................................... p.
Installation des dépendances................................................................................ p.
Préparation du pont réseau (bridge) et de l'interface réseau virtuelle..................p.
Ajout de l'utilisateur courant au groupe uml-net:.................................... p.
Configuration du groupe tunusers:...........................................................p.
Edition du fichier 50-udev.rules .......................................................... p.
Modification de /lib/udev/devices/net/tun .................................... p.
Redémarrage du système hôte..................................................................... p.
Le fichier /etc/network/interfaces .......................................................... p.
Caractéristiques réseau du système hôte......................................................p.
Modification du fichier /etc/network/interfaces ............................. p.
Redémarrage du réseau et test de la configuration du système hôte....................p.
Test du bridge..............................................................................................p.
Test de la création de l'interface réseau virtuelle........................................ p.
Test de l'association du bridge avec l'interface réseau virtuelle................... p.
Redémarrage de la machine virtuelle................................................................... p.
Test de la configuration réseau de la machine virtuelle....................................... p.
b) Para-virtualisation................................................................................................... p.
Tests de performances avant l'activation de la para-virtualisation....................... p.
Installation des outils de test...................................................................... p.
Test sans activation de la para-virtualisation.............................................. p.
Configuration de la machine virtuelle.................................................................. p.
Edition du fichier /etc/initramf-tools/modules .............................p.
Edition du fichier /boot/grub/menu.lst ..............................................p.
Redémarrage de la VM en activant la para-virtualisation................................... p.
Tests de performances après activation de la para-virtualisation......................... p.
V - Trucs et astuces............................................................................................................. p.
a) Montage d'une image KVM sous linux................................................................... p.
b) Executer une machine virtuelle sans affichage graphique........................................ p.
27
27
27
27
28
28
28
28
28
28
28
28
28
28
29
29
29
29
29
29
29
30
30
30
30
30
30
30
30
30
30
30
30
31
31
31
31
31
31
31
32
32
32
32
32
32
32
32
Les bases de la 3D sous Linux
I - Le système X Window ou X11....................................................................................... p.
a) Généralités............................................................................................................... p.
b) Accélération matérielle et contexte graphique direct............................................... p.
II - 3D et OpenGL............................................................................................................... p.
a) Généralités............................................................................................................... p.
b) GLX : OpenGL et X11............................................................................................p.
33
33
34
35
35
36
III - Les bureaux 3D............................................................................................................ p.
a) X.Org, AIGLX et XGL........................................................................................... p.
i) L'implémentation classique X.Org....................................................................p.
ii) L'implémentation AIGLX................................................................................p.
iii) L'implémentation XGL...................................................................................p.
b) Les C.W.M (Composite Window Manager).............................................................p.
IV - Conclusion.....................................................................................................................p.
37
37
37
37
37
38
38
MEMO
Memento Subversion
Administration...................................................................................................................... p.
Installer subversion....................................................................................................... p.
Créer le répertoire des dépôts...................................................................................... p.
Démarrer le service subversion ................................................................................... p.
Démarrer le service subversion sur un port spécifique ................................................ p.
Créer un dépôt subversion........................................................................................... p.
Configuration d'un dépôt............................................................................................. p.
Authentification/autorisations.............................................................................. p.
Modification du fichier svnserve.conf .................................................. p.
Modification du fichier passwd ................................................................. p.
Sauvegarde de dépôts................................................................................................... p.
Sauvegarde .......................................................................................................... p.
Restauration..................................................................................................................p.
Utilisation..............................................................................................................................p.
Importer un projet dans un dépôt ..............................................................................p.
Depuis un dépôt local.......................................................................................... p.
Depuis un dépôt distant...................................................................................... p.
Créer une copie de travail depuis un dépôt................................................................. p.
Exporter un projet sans versionnement........................................................................p.
Ignorer certains fichiers et répertoires..........................................................................p.
Supprimer un fichier ou un répertoire directement dans le dépôt................................ p.
...................................................................................................................................... p.
41
41
41
41
41
41
41
41
41
41
41
41
42
42
42
42
42
42
42
42
42
42
Memento manipulations multimédia sous Linux
I - Convertir des vidéos MTS en AVI..................................................................................p.
a) installation des pre-requis logiciels...........................................................................p.
b) Connaitre quelques informations sur la vidéo d'origine........................................... p.
c) - Encodages AVI...................................................................................................... p.
1) Encodage en mp4............................................................................................ p.
2) Encodage en divx............................................................................................ p.
3) Encodage en xvid............................................................................................ p.
4) Les paramètres.................................................................................................p.
II - Concatener des fichiers videos....................................................................................... p.
a) Installation des pre-requis........................................................................................p.
b) concatenation dans la pratique................................................................................p.
43
43
43
43
43
43
43
43
43
43
43
Mémento XSLT
I - Processeurs XSLT 2.0 sous Linux................................................................................... p.
a) Installation de saxonb-xslt ................................................................................p.
b) Usage de saxonb-xslt ........................................................................................p.
II - Supprimer les espaces de noms suite à une transformation XSL................................... p.
III - Générer plusieurs fichiers de sortie à partir d'une seule XSL....................................... p.
a) Exemple....................................................................................................................p.
Fichier XML d'entrée...........................................................................................p.
44
44
44
44
44
44
44
Fichier XSLT........................................................................................................p.
Fichiers de sortie..................................................................................................p.
article1.xml...................................................................................................p.
article2.xml...................................................................................................p.
IV - Manipulation des dates.................................................................................................p.
a) Connaitre la date courante...................................................................................... p.
b) Générer une date au format compatible RFC 822.................................................. p.
c) Convertir une chaine en date.................................................................................. p.
V) Limiter le nombre d'éléments dans une boucle............................................................... p.
VI - Boucler sur des éléments regroupés par une condition................................................. p.
Remplacer une occurrence de caractère................................................................................p.
44
45
45
45
45
45
45
45
45
45
46
NOTE_TECHNIQUE
Chiffrer un répertoire sous Linux
créé le 21/10/2010 par Antoine Schellenberger .
dernière mise à jour le 27/10/2010.
Cette note présente comment chiffrer un répertoire en ligne de commandes sous Linux à
l'aide de l'utilitaire Encfs
Encfs est un outil en ligne de commande qui permet
de chiffrer un répertoire. Il est basé sur le module fuse
.
Ce tutoriel a été testé sous Ubuntu 10.04.
Création d'un répertoire chiffré
Avant de monter la mécanique de chiffrage nous il
nous faut créer deux répertoires :
mkdir ~/.monrepertoirechiffre
mkdir ~/monrepertoireenclair
Installation et configuration
quelques explications :
monrepertoirechiffre est le répertoire qui
contiendra les données chiffrés
Installation des dépendances
L'installation de Encfs se fait en saisissant dans un
terminal:
monrepertoireenclair est le répertoire de
travail
sudo apt-get install encfs fuse-utils
Chargement du module
Une fois l'installation terminée, il faut automatiser le
chargement du module fuse à chaque démarrage
Pour cela, saisir dans un terminal en root :
echo fuse >> /etc/modules
afin de ne pas avoir à redemarrer le serveur pour
prendre en compte cette modification, on va charger le
module manuellement :
sudo modprobe fuse
Ajout de l'utilisateur au groupe fuse
Une fois le module chargé, il faut ajouter l'utilisateur
usuel au groupe fuse :
sudo adduser $USER fuse
Pour que cette modification soit effective il faut
relancer une session shell :
su - $USER
La commande groups, devrait faire apparaître le
groupe fuse, si ce n'est pas le cas c'est qu'un problème
est survenu et il faut refaire les manip.
Pour activer le chiffrage entre ces deux répertoires,
il faut saisir la commande suivante :
encfs ~/.monrepertoirechiffre ~/monrepertoireenclair
au premier lancement de cette commande, le système
détecte qu'aucun lien de chiffrage n'existe entre ces
deux répertoires, de ce fait il va vous poser quelques
questions pour finalement vous demander un mot de
passe qui sera la clé permettant de déchiffrer votre
répertoire pour ses prochains usages.
Une fois la création du chiffrage terminé, le répertoire
monrepertoireenclair devrait apparaître dans la
liste des éléments montés sur votre système. Pour s'en
assurer ; il suffit d'afficher le contenu de /proc/
mounts :
ex :
cat /proc/mounts
encfs /home/thegeekcorner/monrepertoireenclair fuse.encfs
rw, nosuid,nodev, relatime, user_id=1000,group_id=1000,
default_permissions 0 0
Ici nous voyons bien que /home/thegeekcorner/
monrepertoireenclair est monté sur la base du
filesystem fuse
Usages
Ex :
groups
thegeekcorner adm dialout cdrom plugdev fuse lpadmin admin
sambashare vboxusers uml-net tunusers
Démontage
Pour démonter un répertoire chiffré, il faut saisir
dans un terminal :
Chiffrer un répertoire sous Linux
http://thegeekcorner.free.fr
8
fusermount -u ~/monrepertoireenclair
Montage
Pour (re)monter un répertoire chiffré, il faut
(re)saisir la commande :
encfs ~/.monrepertoirechiffre ~/monrepertoireenclair
Les commandes fusermount et encfs n'ont nul besoin
d'être saisie en tant que super-utilisateur
Chiffrer un répertoire sous Linux
http://thegeekcorner.free.fr
9
Installer et configurer un
disque dur vierge sous Linux
créé le 28/10/2010 par .
dernière mise à jour le 28/10/2010.
Cette note présente comment installer et configurer en ligne de commandes un disque dur
vierge sous Linux
Nous allons vérifier que la partition a bien été créée :
pour cela, il nous faut d'abord quitter fdisk en saisissant
q puis consulter contenu de /proc/partitions qui
devrait désormais afficher une nouvelle partition sdb1
Avant-propos
Dans les exemples qui suivent nous utilisons un
scénario dans lequel nous venons d'installer un disque
vierge sur une ubuntu 10.04
ex :
cat /proc/partitions
8
0
15549440
8
1
14849024
8
2
1
8
5
697344
8
16
20971520
8
17
20970496
Ce disque a pour label /dev/sdb et nous nous
apprêtons à ne créer qu'une seule partition EXT4
occupant la totalité du disque
Création de la partition
sda
sda1
sda2
sda5
sdb
sdb1
Formatage de la partition
Sous Linux la création de partitions se fait en
utilisant l'interpréteur de commandes fdisk :
Pour commencer il nous faut executer fdisk sur le
disque /dev/sdb:
sudo fdisk /dev/sdb
une fois l'invite de commandes apparue, nous allons
créer notre nouvelle partition en appuyant sur la
touche n
Le système nous demande si nous voulons une
partition primaire ou étendue, nous choisissons
primaire car le disque est complétement vierge.
Comme nous l'avons dit en avant-propos, nous
cherchons à installer un système de fichier ext4 sur la
partition fraichement créée.
Pour cela, c'est très simple il suffit d'utiliser la
commande mkfs.ext4 en lui passant en argument le
label de la partition à formater à savoir /dev/sdb1.
Ex :
sudo mkfs.ext4 /dev/sdb1
Ensuite il nous demande de saisir le numéro de la
partition, nous lui spécifions alors le numéro 1
Viens au tour du choix du secteur de démarrage de
la partition, nous choisissons la valeur par défaut qui
nous est proposée qui correspond en fait au premier
secteur utilisable pour une partition
Puis pour terminer il nous faut choisir le numéro du
secteur marquant la fin de la partition, nous prenons
le choix par défaut qui correspond au dernier secteur
utilisable sur le disque.
A cet instant, bien que nous ayons fait tout ce qui
est nécessaire pour créer une partition aucune action
n'a été menée sur le disque. Pour valider définitivement
nos changements il faut appuyer sur la touche w
Installer et configurer un disque dur vierge sous Linux
http://thegeekcorner.free.fr
10
Créer un script de démarrage Upstart
créé le 18/04/2010 .
dernière mise à jour le 18/04/2010.
Upstart a remplacé le bon vieu système V de démarrage bien connu des administrateurs
système. A travers ce tutoriel nous allons appréhender les rudiments de Upstart en rédigant un
script de démarrage très sommaire.
I - Contexte/pré-requis
Notre script de démarrage Upstart sera basé sur le
script tomcat de l'ancien système V dont le chemin
est /etc/init.d/tomcat.
Script /etc/init.d/tomcat
#!/bin/bash
export CATALINA_HOME="/usr/local/tomcat"
case "$1" in
start)
if [ -f $CATALINA_HOME/bin/startup.sh ];
then
echo "Starting Tomcat..."
$CATALINA_HOME/bin/startup.sh
fi
;;
stop)
if [ -f $CATALINA_HOME/bin/shutdown.sh ];
then
echo -n "Stopping Tomcat."
$CATALINA_HOME/bin/shutdown.sh ]
fi
;;
# Ce service délègue le démarrage de tomcat au script /
etc/init.d/tomcat
start on runlevel [2345]
stop on runlevel [16]
respawn
pre-start exec /etc/init.d/tomcat start
post-stop exec /etc/init.d/tomcat stop
Commentaires
Le script ci-dessus permet de démarrer tomcat pour
les niveaux 2,3,4,5 et de le stopper pour les niveaux
1 et 6
III - Lancement de tomcat via
Upstart
Une fois les fichiers /etc/init.d/tomcat et
/etc/init/tomcat.conf créés, Il nous faut
recharger la configuration de Upstart.
Pour cela, saisir dans un terminal:
*)
echo Usage : $0 "{start | stop}"
;;
esac
Remarque: Evidemment ce script est un script de test et
il n'est pas à utiliser pour démarrer une instance de tomcat
en usage normal.
II - Script de démarrage
tomcat.conf
Upstart place ces scripts de démarrage dans le
répertoire /etc/init.
Par convention un script de démarrage Upstart doit
posseder l'extension .conf.
Pour notre exemple nous allons créer le script de
démarrage /etc/init/tomcat.conf dont voici le
code:
# tomcat
>sudo initctl reload-configuration
Si aucun message d'erreur n'apparaît, nous pouvons
tester le démarrage de tomcat à l'aide de la commande:
>sudo initctl start tomcat
Le terminal devrait afficher un message comme
tomcat start/running.
Pour verifier que le processus est bien lancé, nous
saisissons la commande suivante:
>sudo ps ax | grep tomcat
Ce qui devrait afficher une ligne de ce genre:
tomcat 176808
2 /usr/lib/java-6-sun/....
IV - Conclusion
Au tout début, l'intégration de Upstart dans Ubuntu
9.10 a engendré de nombreuses régressions dues aux
non démarrages de scripts relativement importants.
Créer un script de démarrage Upstart
http://thegeekcorner.free.fr
11
A l'aide de ce tutoriel nous avons posé les bases du
fonctionnement de Upstart.
Evidemment, Upstart est bien plus riche que l'aperçu
que nous en avons fait et que le système V en généra;: je
vous invite donc à consulter la documentation officielle
du projet si vous souhaitez aller plus avant dans sa
compréhension.
Créer un script de démarrage Upstart
http://thegeekcorner.free.fr
12
Faire coexister plusieurs
versions d'un programme
créé le 21/10/2010 par Antoine Schellenberger .
dernière mise à jour le 27/10/2010.
Cette note présente comment faire coexister plusieurs instances/versions d'un même
programme au sein d'une distribution linux comme ubuntu
Dans notre exemple nous allons installer la dernière
version de thunderbird (3.1.5 à ce jour) sur une ubuntu
10.04 qui comporte déjà la version 3.0.9.
Avant-propos
Il arrive de vouloir installer un programme qui n'est
pas fourni par le système de packaging APT, dans ce
cas point de salut sans installation manuelle.
Différentes modalités existent
manuellement un programme :
pour
installer
CAS 1 : soit ce programme est pré-compilé pour
votre architecture matériel, auquel cas on a souvent
un répertoire racine contenant les exécutables et les
librairies dynamiques,
CAS 2 : soit ce programme est uniquement livré sous
la forme de son code source et il vous revient de le
compiler.
Dans tous les cas il est bon de ne pas mélanger
son contenu parmi les différents répertoires du système
de fichiers (/etc, /usr/lib, /usr/bin) car sa
désinstallation ultérieure peut ne pas être complète.
D'où l'intérêt de centraliser l'ensemble dans un
répertoire racine.
Sous Unix, ces répertoires « racines » « doivent »
figurer dans /opt.
Remarque : quand il s'agit de compiler un programme à
l'aide de configure, deux options s'offrent à nous :
soit on lance ./configure sans argument ce qui
a pour effet d'installer le programme compilé dans /
usr/local et d'éclater son contenu dans les sousrépertoires /usr/local/etc, /usr/local/bin, …
soit on lance ./configure –prefix=/opt/
monprogramme et là l'ensemble du programme
est contenu dans le répertoire racine /opt/
monprogramme
Ma préférence va vers la deuxième option
Téléchargement et décompression
de l'archive
On
télécharge
l'archive
sur
http://
www.mozillamessaging.com/fr/thunderbird/
qu'on
dépose dans le répertoire ~/Téléchargements.
on décompresse son
thunderbird-3.1.5 :
contenu
dans
/opt/
sudo tar jxvf ~/Téléchargements/thunderbird-3.1.5.tar.bz2 C /opt
on teste le lancement manuel de la nouvelle version
de thunderbird :
/opt/thunderbird/thunderbird
Nous voilà en possessions de deux instances de
thunderbird avec des versions différentes. Nous
allons créer maintenant les alternatives à l'aide de
l'utilitaire update-alternatives.
Création de l'alternative
update-alternatives est un programme qui
joue sur les liens symboliques (généralement présent
dans /usr/bin) afin de conserver plusieurs versions
d'un même binaires tout en considérant une version
par défaut.
Nous allons crée l'alternative thunderbird à partir
de l'instance manuelle que nous venons d'installer.
sudo update-alternatives --install /usr/bin/thunderbird
thunderbird /opt/thunderbird/thunderbird 1
Quelques explications :
--install permet de créer ou de mettre à jour
une alternative
/usr/bin/thunderbird est le chemin absolu
qui contiendra le lien symbolique, ce chemin doit
Faire coexister plusieurs versions d'un programme
http://thegeekcorner.free.fr
13
absolument appartenir au $PATH de l'utilisateur (ce
qui est le cas de /usr/bin)
thunderbird est le nom de l'alternative
/opt/thunderbird/thunderbird
est
le
chemin absolu de la véritable instance du programme
à ajouter en tant qu'alternative
Ajout de la version de thunderbird pré-founit par
APT dans la liste des alternatives :
sudo update-alternatives --install /usr/bin/thunderbird
thunderbird /usr/lib/thunderbird-3.1.6pre/thunderbird 1
Changement d'instance
d'alternative
La force de update-alternatives n'est pas tant
dans la création de liens symbolique mais plutôt dans
son aptitude à les gérer (passer d'une alternative à une
autre, supprimer une alternative, ...)
Voici comment changer d'alternative :
sudo update-alternatives –config thunderbird
Cette commande présente la liste des alternatives
connus pour le programme thunderbird en faisant
figurer l'alternative utilisé par défaut.
Voici un exemple d'affichage :
Il existe 2 choix pour l'alternative thunderbird (qui
fournit /usr/bin/thunderbird).
Sélection
Chemin
Priorité État
-----------------------------------------------------------* 0
/opt/thunderbird/thunderbird
0
mode automatique
1
/opt/thunderbird/thunderbird
0
mode manuel
2
/usr/lib/thunderbird-3.1.6pre/thunderbird
0
mode manuel
Appuyez sur <Entrée> pour conserver la valeur par défaut[*]
ou choisissez le numéro sélectionné
Afin de basculer vers l'usage d'une autre version
de thunderbird il suffit de saisir son numéro comme
indiqué.
Faire coexister plusieurs versions d'un programme
http://thegeekcorner.free.fr
14
Optimiser l'affichage d'Eclipse sous Linux
créé le 29/12/2009 .
dernière mise à jour le 22/04/2010.
Si comme moi, vous trouvez que l'affichage de Eclipse sous Windows XP est plus optimisé
que sous Linux, sachez qu'il y a un moyen de changer ce comportement par défaut. Ce mémo
présente comment optimiser l'affichage sous Linux de certains composants de l'IDE eclipse en
jouant notamment avec les paramètres du moteur d'habillage GTK.
Voici à quoi ressemble habituellement une fenêtre
eclipse:
doit executer la commande suivante avant le lancement
eclipse:
export GTK2_RC_FILES=$GTK_RC_FILES:/$HOME/.gtkrc-eclipse
I - Création d'un fichier .gtkrceclipse
Créez un fichier .gtkrc-eclipse à la racine de
votre répertoire personnelle:
gedit $HOME/.gtkrc-eclipse
Une fois ce fichier édité, relancer eclipse. Voici à quoi
cela devrait ressembler:
III - La preuve par l'exemple
Voici deux copies d'écrans : celle de gauche présente
avant la modif et celle de droite...
Dans ce fichier, copiez-coller le contenu suivant
style "gtkcompact" {
font_name="Sans 9"
GtkButton::default_border={0,0,0,0}
GtkButton::default_outside_border={0,0,0,0}
GtkButtonBox::child_min_width=0
GtkButtonBox::child_min_heigth=0
GtkButtonBox::child_internal_pad_x=0
GtkButtonBox::child_internal_pad_y=0
GtkMenu::vertical-padding=1
GtkMenuBar::internal_padding=0
GtkMenuItem::horizontal_padding=4
GtkToolbar::internal-padding=0
GtkToolbar::space-size=0
GtkOptionMenu::indicator_size=0
GtkOptionMenu::indicator_spacing=0
GtkPaned::handle_size=4
GtkRange::trough_border=0
GtkRange::stepper_spacing=0
GtkScale::value_spacing=0
GtkScrolledWindow::scrollbar_spacing=0
GtkExpander::expander_size=10
GtkExpander::expander_spacing=0
GtkTreeView::vertical-separator=0
GtkTreeView::horizontal-separator=0
GtkTreeView::expander-size=8
GtkTreeView::fixed-height-mode=TRUE
GtkWidget::focus_padding=0
}
class "GtkWidget" style "gtkcompact"
Figure 1:Avant la modification
style "gtkcompactextra" {
xthickness=0
ythickness=0
}
class "GtkButton" style "gtkcompactextra"
class "GtkToolbar" style "gtkcompactextra"
class "GtkPaned" style "gtkcompactextra"
Figure 2
II - Editer le lanceur d'Eclipse
Afin de prendre en compte le fichier précedemment
créé, il faut soit créer un alias soit créer un lanceur qui
Optimiser l'affichage d'Eclipse sous Linux
http://thegeekcorner.free.fr
15
Rendre un répertoire visible par Apache
créé le 22/04/2010 .
dernière mise à jour le 22/04/2010.
Cette note présente comme rendre un répertoire local accessible par le web via un serveur
Apache installé.
L'accessiblité d' un répertoire local depuis un serveur
Apache se résumé à la création d' un Alias puis à
donner les bons droits sur la config d'apache puis sur
le système de fichier.
Remarque: Ces exemples ont été réalisés sur une Ubuntu
server 8.04
.
Pour illustrer ce mécanisme nous allons partir
d'un exemple dans lequel nous souhaitons rendre le
répertoire /home/thegeekcorner/public_html
accessible depuis apache.
Modification des droits du système
de fichier
Afin que le user Unix executant Apache (wwwdata sous Ubuntu server 8.04) puisse accéder au
répertoire /home/thegeekcorner/public_html
il faut donner les droits en éxecutation et en lecture
sur ce répertoire.
Pour cela, il y a différentes méthodes plus ou moins
propres... En voici une qui vaut ce qu'elle vaut et qui
consiste simplement à ajouter le user www-data au
groupe thegeekcorner:
sudo adduser www-data thegeekcorner
Note:
Le
répertoire
/home/thegeekcorner/
public_html a successivement pour utilisateur et groupe
thegeekcorner et thegeekcorner
Modification du fichier /etc/
apache2/sites-available/
default
En tant que super utilisateur il faut modifier le fichier
/etc/apache2/sites-available/default en
ajoutant le code suivant:
Alias /thegeekcorner/ "/home/thegeekcorner/public_html/"
<Directory "/home/thegeekcorner/public_html/">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
Ensuite, il faut faire en sorte que le groupe
a bien les droits de lecture et d'éxecutation sur
/home/thegeekcorner/public_html, pour cela
saisir dans un terminal:
sudo chown -R g+xr /home/thegeekcorner/public_html
Attention: Il faut que successivement /home puis /
home/thegeekcorner soit executable pour le user wwwdata. Cette erreur est très fréquente.
Actualisation de la configuration
d'Apache
Afin de prendre en compte nos modifications, il
faut recharger la configuration d'apache à l'aide de la
commande:
sudo /etc/init.d/apache2 reload
Quelques explications:
Alias
/thegeekcorner/
"/home/
thegeekcorner/public_html/" permet de
rendre
le
contenu
du
répertoire
/
home/thegeekcorner/public_html/ accessible
depuis l'alias /thegeekcorner
Pour tester il ne reste plus qu'à ouvrir un navigateur
et saisir dans la barre d'adresse l'URL http://
localhost/thegeekcorner/
<Directory
"/home/thegeekcorner/
public_html"> permet de définir les bons droits
d'accessibilité de manière à rendre accessible l'URL
http://localhost/thegeekcorner/.
Rendre un répertoire visible par Apache
http://thegeekcorner.free.fr
16
Outils Favoris sous Linux
créé le 21/10/2010 par .
dernière mise à jour le 21/10/2010.
Cette note présente quelques outils bien utiles au quotidien pour les linuxiens basiques que
nous pouvont être.
Accessoires liés au système de
fichiers
Une fois l'installation terminée, il faut automatiser le
chargement du module fuse à chaque démarrage
Pour cela, saisir dans un terminal en root :
echo fuse >> /etc/modules
Unison
L'utilitaire unison permet de synchroniser des
fichiers et des répertoires comme ce que permet de faire
des outils de type subversion ou CVS avec cependant
la gestion des révisions en moins.
unison permet de synchroniser des répertoires
locaux et aussi distants en proposant les protocoles SSH
ou RSH.
afin de ne pas avoir à redemarrer le serveur pour
prendre en compte cette modification, on va charger le
module manuellement :
sudo modprobe fuse
Ajout de l'utilisateur au groupe fuse
Une fois le module chargé, il faut ajouter l'utilisateur
usuel au groupe fuse :
sudo adduser $USER fuse
L'installation se fait de la sorte :
sudo apt-get install unison
Pour que cette modification soit effective il faut
relancer une session shell :
su - $USER
Kdiff3
L'utilitaire kdiff3 permet de comparer le contenu de
deux fichiers visuellement
L'installation se fait en saisissant en console :
sudo apt-get install kdiff3
kdiff3 est un outil KDE, de ce fait ne vous effrayez
pas si son installation exige un nombre de dépendances
importantes vers des composants KDE.
La commande groups, devrait faire apparaître le
groupe fuse, si ce n'est pas le cas c'est qu'un problème
est survenu et il faut refaire les manip.
Ex :
groups
thegeekcorner adm dialout cdrom plugdev fuse lpadmin admin
sambashare vboxusers uml-net tunusers
Création d'un répertoire chiffré
Avant de monter la mécanique de chiffrage nous il
nous faut créer deux répertoires :
Encfs
Encfs est un outil en ligne de commande qui permet
de chiffrer un répertoire. Il est basé sur le module fuse
.
Installation et configuration
Installation des dépendances
L'installation de Encfs se fait en saisissant dans un
terminal:
mkdir ~/.monrepertoirechiffre
mkdir ~/monrepertoireenclair
quelques explications :
monrepertoirechiffre est le répertoire qui
contiendra les données chiffrés
monrepertoireenclair est le répertoire de
travail
Pour activer le chiffrage entre ces deux répertoires,
il faut saisir la commande suivante :
sudo apt-get install encfs fuse-utils
encfs ~/.monrepertoirechiffre ~/monrepertoireenclair
Chargement du module
au premier lancement de cette commande, le système
détecte qu'aucun lien de chiffrage n'existe entre ces
Outils Favoris sous Linux
http://thegeekcorner.free.fr
17
deux répertoires, de ce fait il va vous poser quelques
questions pour finalement vous demander un mot de
passe qui sera la clé permettant de déchiffrer votre
répertoire pour ses prochains usages.
Une fois la création du chiffrage terminé, le répertoire
monrepertoireenclair devrait apparaître dans la
liste des éléments montés sur votre système. Pour s'en
assurer ; il suffit d'afficher le contenu de /proc/
mounts :
ex :
cat /proc/mounts
encfs /home/thegeekcorner/monrepertoireenclair fuse.encfs
rw, nosuid,nodev, relatime, user_id=1000,group_id=1000,
default_permissions 0 0
Ici nous voyons bien que /home/thegeekcorner/
monrepertoireenclair est monté sur la base du
filesystem fuse
Usage
Démontage
Pour démonter un répertoire chiffré, il faut saisir
dans un terminal :
fusermount -u ~/monrepertoireenclair
Montage
Pour (re)monter un répertoire chiffré, il faut
(re)saisir la commande :
encfs ~/.monrepertoirechiffre ~/monrepertoireenclair
Les commandes fusermount et encfs n'ont nul besoin
d'être saisie en tant que super-utilisateur
Outils Favoris sous Linux
http://thegeekcorner.free.fr
18
TUTORIEL
Installation et configuration
de Xplico sous Backtrack 4
créé le 24/04/2010 .
dernière mise à jour le 26/04/2010.
XPlico est une solution qui permet non seulement de sniffer un réseau wifi mais aussi et
surtout de reconstituer le contenu dérobé. Ce tutoriel présente comment installer et configurer
Xplico sous Backtrack 4.
Ce tutoriel a pour but de vous sensibiliser à la
vulnérabilité des réseaux wifi en vous présentant la
simplicité de mise en place et d'usage de l'outil XPlico
dans le but de dérober des informations circulant sur
un réseau wifi même protégé. La mise en pratique de ce
tutoriel doit impérativement être réalisée sur un réseau
wifi dont vous êtes le seul responsable légal.
Remarque: l'ensemble des commandes shell de ce tutoriel
sont à saisir en tant que super-utilisateur
I-Pré-requis
Pour mettre en pratique ce tutoriel les pré-requis
suivants sont indispensables:
Distribution Linux Backtrack 4
Une carte wifi dont le chipset supporte le mode
monitor
Un réseau wifi cible sécurisé en WEP dont la clé est
connue
Un deuxième poste de travail (ou une deuxième
carte wifi sur le même poste que celui qui éxecute
XPlico) connecté au réseau wifi cible
II-Installation et configuration
L'avantage de passer par APT permet de nous
affranchir de l'intégration manuelle de Xplico avec
Apache (activation du module rewrite, création d'un
virtualhost,etc.).
Malgrès cela, il reste une modification à effectuer
dans le fichier /etc/php5/apache2/php.ini afin
de "débrider" l'upload et le download par défaut
de PHP. Pour cela nous recherchons les occurrences
post_max_size et upload_max_filesize et
remplaçons leurs valeurs par les suivantes:
post_max_size=100M
upload_max_filesize=100M
c) Préparation du matériel wifi
La préparation du matériel wifi consiste en
l'activation du mode monitor de la carte wifi et la
création d'une interface virtuelle. Pour cette dernière
étape nous nous appuyons sur l'utilitaire airtun-ng
de la suite Aircrack installée par défaut dans Backtrack
4.
1) Activation du mode monitor
Avant d'utiliser airtun-ng il nous faut activer le
mode monitor de la carte wifi à l'aide de la commande
suivante:
airmon-ng start wlan0
Remarques:
a) Installation de Xplico
La distribution Backtrack 4 est basée sur un
socle Ubuntu ce qui lui permet notamment d'hériter
du célébre système de packaging APT. De ce fait
l'installation de Xplico est grandement simplifiée et se
résume à la commande suivante:
apt-get install xplico
wlan0 est à remplaçer par le nom de votre interface.
Evidemment, il faut que votre chipset wifi supporte le
mode monitor ce qui n'est pas le cas de toutes les cartes
wifi.
Suivant le chipset wifi cette commande peut conduire
à la création d'une nouvelle interface : par exemple dans
le cas d'une AWUS036H (chipset rtl8187) l'interface
mon0 est alors créée.
b) Configuration de Xplico
2) Création d'une interface réseau virtuelle
Installation et configuration de Xplico sous Backtrack 4
http://thegeekcorner.free.fr
20
Une fois le mode monitor activé, il faut créer une
interface réseau virtuelle que l'on nomme at0.
Attention: Sous Backtrack 4 le plugin firefox
NOSCRIPT doit obligatoirement être désactivé pour que
l'interface web fonctionne correctement.
Pour cela nous saisissons dans un terminal:
airtun-ng -a 00:13:23:00:13:23 -w 12345678912345678912345678
mon0
Voici quelques explications sur cette commande:
-a 00:13:23:00:13:23 signifie l'adresse MAC
du wifi cible (ou point d'accès (AP)); ici il faut
remplaçer 00:13:23:00:13:23 par l'adresse MAC
de votre AP
a) 1ere connexion à l'interface Web de
Xplico
Comme illustré dans la figure 1, un écran de
connexion nous est présenté dans lequel il faut saisir
les identifiants xplico/xplico.
-w 12345678912345678912345678 signifie la
clé WEP du point d'accès; ici il faut remplaçer
12345678912345678912345678 par votre clé
WEP
mon0 est l'interface créée par airmon-ng lors du
basculement du chipset wifi en mode monitor.
at0 va permettre de décrypter "à la volée" les packets
réseaux grâce à la clé WEP que nous avons spécifié
dans la commande.
Attention: La commande précédente doit toujours
tourner en tâche de font, il est donc indispensable d'y
dédier un terminal et de le laisser actif tout au long de
l'opération.
3) Activation de l'interface virtuelle at0
Désormais que l'interface at0 est créée nous
l'activons à l'aide de la commande suivante:
Figure 1:Ecran de connexion
b) Création d'un nouveau cas
d'utilisation
Une fois l'écran de connexion passé, nous sommes
redirigés vers une page présentant un menu sur la
gauche. Dans ce menu il faut selectionner New case
pour créer un nouveau cas d'utilisation.
ifconfig up at0
d) 1er démarrage de Xplico
Pour démarrer Xplico nous saisissons dans un
terminal la commande suivante:
/etc/init.d/xplico start
Même si APT s'est chargé de configurer correctement
Xplico pour qu'il s'intègre avec Apache, on ne
s'affranchira pas de redémarrer Apache pour la forme
car on ne sait jamais...
Un formulaire nous propose de créer un nouveau cas
d'utilisation (figure 2):
Choisir Live
acquisition pour activer
l'acquisition des données à la volée via l'interface
at0.
Saisir
Mon_etude_de_cas_thegeekcorner
comme nom de cas d'utilisation.
Cliquer sur Create pour valider la création.
/etc/init.d/apache2 restart
III-Xplico in action
Dans ce paragraphe nous déroulons un scénario très
simple mais déjà très redoutable. Pour cela nous nous
rendons sur l'interface web de Xplico disponible à
l'URL http://localhost:9876.
Remarque:Dans la version 0.5.5 de Xplico qui est
celle distribuée par Backrack 4 un bug semble empecher
de saisir des caractères accentués dans le nom du cas
d'utilisation..ça fait planter la prochaine étape.
Remarque: XPlico fournit en plus de son interface
web une interface en ligne de commande que nous ne
détaillerons pas.
Installation et configuration de Xplico sous Backtrack 4
http://thegeekcorner.free.fr
21
Un formulaire apparaît dans lequel nous
sommes invités à saisir le nom de la session
d'utilisation. Dans notre cas nous saisissons
ma_session_thegeekcorner (figure 5).
Figure 2:Formulaire de création d'un cas d'utilisation
Comme le présente la figure 3 une fois la création
du cas d'utilisation terminée un tableau listant les
cas d'utilisation apparaît: il nous faut alors cliquer
sur le cas Mon_etude_de_cas_thegeekcorner
nouvellement créé.
Figure 5:Création d'une nouvelle session - partie 2
Une fois la session créée, un tableau apparait avec
la liste des sessions (figure 6). Choisir alors la session
nouvellement créée.
Figure 3:Selection du cas d'utilisation
c) Création d'une session d'utilisation
Il nous reste à créer une nouvelle session d'utilisation,
pour cela nous cliquons sur l'item New Session du
menu comme l'illustre la figure 4.
Figure 6:Choix de la nouvelle session
d) Démarrage de la capture
Une fois la session sélectionnée un tableau de bord
apparait qui nous permet entre autre de démarrer la
capture sur l'interface virtuelle at0.
Comme l'illustre la figure 7, il nous faut choisir dans
le champ interface l'interface virtuelle at0 puis
cliquer sur start pour démarrer la capture.
Figure 4:Création d'une nouvelle session - partie 1
Installation et configuration de Xplico sous Backtrack 4
http://thegeekcorner.free.fr
22
Figure 7:Démarrage de la capture
à partir du tableau de bord
Remarque: si l'interface at0 n'apparaît pas dans la liste
c'est que airtun-ng n'a pas fonctionné correctement, il
faut donc bien veiller à ce que aucune erreur ne soit survenu
durant la création de l'interface virtuelle via airtun-ng.
e) Test de la capture
A l'aide d'un deuxième poste connecté sur le réseau
wifi et d'un navigateur nous nous connectons sur un
site internet quelconque.
Une fois la connexion établie nous retournons au
tableau de bord de Xplico puis nous cliquons dans le
menu de gauche sur l'item web puis images.
Dès lors, nous devrions voir si tout a bien fonctionner
un tableau présentant les images qui ont été dérobé
depuis la navigation réalisée à partir du second poste.
La figure 8 présente un exemple de ce tableau.
Figure 8:Exemple d'images dérobées
Installation et configuration de Xplico sous Backtrack 4
http://thegeekcorner.free.fr
23
Installer les polices Latex sous Linux
créé le 10/10/2010 par Antoine schellenberger .
dernière mise à jour le 10/10/2010.
Ce tutoriel présente comment installer les polices LaTeX sous Linux
Installation des polices Tex
sudo apt-get install texlive
Les polices sont installées (entre autres) dans /usr/
share/texmf/fonts/type1/public/lm
Télécharger le fichier lmr10.pfm :
wget http://mirror.ctan.org/fonts/lm/fonts/type1/public/lm/
lmr10.pfm
Placer le dans /usr/share/texmf/fonts/
type1/public/lm
Configurer FOP
Editer
le
fichier
/opt/fop-1.0/conf/
fop.xconf puis ajouter dans la section <fonts></
fonts> :
<font metrics-url="/opt/fop-1.0/fonts/cmr10.xml"
kerning="yes"
embed-url="/usr/share/texmf-texlive/fonts/type1/public/
amsfonts/cm/cmr10.pfb">
<font-triplet name="cmr10" style="normal" weight="normal"/
>
</font>
Usage dans le .fo
Utilisation dans openoffice
Pour utiliser la police lmr10 il faut spécifier fontfamily="lmr10" dans votre balise <fo:block>
puis choisir la police “LMRoman10”dans Openoffice
Utilisation dans FOP
Installation Ubuntu
Lancer la transformation XSL-FO
fop titre.fo titre.pdf
Attention: vous manipuler un alias qui rajoute
automatiquement -c /opt/fop-1.0/conf/fop.xconf
apt-get install texlive-base
Veillez à ce qu’il n’y a pas le message :
Installer FOP
Décompresser l’archive dans /opt/fop-1.0
Créer le répertoire /opt/fop-1.0/fonts
ATTENTION: Font "cmr10,normal,400" not found.
Substituting with "any,normal,400". Si c’est le cas c’est que
l’installation n’a pas été réalisée correctement
Attribuer les bons droits à votre installation :
chown -R $USER:$USER /opt/fop-1.0
Mettre dans .bashrc :
export PATH=/opt/fop-1.0:$PATH
alias fop=’fop -c /opt/fop-1.0/conf/fop.xconf’
Générer le fichier de métadonnée XML
java -cp build/fop.jar:lib/avalon-framework-4.2.0.jar:lib/
commons-logging-1.0.4.jar:lib/commons-io-1.3.1.jar
org.apache.fop.fonts.apps.PFMReader /usr/share/texmftexlive/fonts/type1/public/amsfonts/cm/lmr10.pfm /opt/fop/
fonts/cmr10.xml
Attention! à la fin de chaque fichier jar il faut préciser
la version (ex: commons-logging-1.4.1 à la place
de commons-logging.jar)
Cette commande crée un fichier cmr10.xml dans le
répertoire /opt/fop-1.0/fonts/
Installer les polices Latex sous Linux
http://thegeekcorner.free.fr
24
Utiliser Klibido et Stunnel pour sécuriser
vos connexions aux newsgroups.
créé le 15/05/2010 .
dernière mise à jour le 15/05/2010.
Klibido est un client de newsgroups Linux appartenant à la boite à outils KDE. Par défaut,
ce client ne permet pas d'établir de connexion à un serveur de newsgroup via SSL. Ce tutoriel
présente comment contourner cette limitation en joignant à KLibido l'usage de l'utilitaire
stunnel.
Ce tutoriel a été testé sous Ubuntu 9.10 et 10.04.
I - Installation de stunnel et
Klibido
Dans un terminal, saisir:
sudo apt-get install klibido stunnel4
II - Configuration de Stunnel
Stunnel est un utilitaire permettant d'encrypter un
protocole quelconque au sein d'un tunnel en se reposant
sur SSL.
a) Création du certificat
c) Modification du fichier
stunnel.conf
Le fichier de configuration principal de stunnel est /
etc/stunnel/stunnel.conf.
Dans ce fichier, il faut ajouter les lignes suivantes
pour permettre la création du tunnel SSL:
[nntp]
accept = 119
connect = mon_serveur_de_newsgroupe.com:443
Evidemment
il
faut
remplacer
mon_serveur_de_newsgroup.com par le nom de
domaine ou l'IP de votre serveur de newsgroup.
Toujours dans ce fichier, il faut ensuite remplaçer
(décommenter):
Afin de créer le tunnel crypté il est nécessaire de
générer un certificat SSL.
;client=yes
Pour cela nous utilisons l'utilitaire openssl. Ainsi
pour générer un certificat SSL (stunnel.pem dans
notre exemple), il nous faut saisir dans un terminal:
client=yes
sudo openssl req -new -x509 -days 365 -nodes -out /etc/ssl/
certs/stunnel.pem -keyout /etc/ssl/certs/stunnel.pem
Répondez aux questions qui vous sont posées puis
à la fin de procédure le fichier stunnel.pem devrait
être généré.
b) Activation de Stunnel
Par défaut APT inscrit Stunnel dans le démarrage du
serveur cependant il reste à l'activer manuellement en
éditant le fichier /etc/default/stunnel4. Ainsi il
suffit de remplacer dans ce fichier:
ENABLE=0
par
par
d) Redémarrage de stunnel
Pour prendre en compte nos modifications il faut
redémarrer stunnel à l'aide de la commande:
/etc/init.d/stunnel4 restart
III - Configuration de KLibido
Désormais que Stunnel est correctement paramétré,
passons au tour de KLibido:
Lançez Klibido puis dans serveur->nouveau
serveur saisissez les valeurs suivantes:
adresse: localhost
port: 119
ENABLE=1
Utiliser Klibido et Stunnel pour sécuriser vos connexions aux newsgroups.
http://thegeekcorner.free.fr
25
Figure 1:Exemple de configuration
d'un serveur de newsgroup
IV - Test de la configuration
Pour tester la configuration il suffit de télécharger
un fichier .nzb et s'assurer que le téléchargement
démarre.
Utiliser Klibido et Stunnel pour sécuriser vos connexions aux newsgroups.
http://thegeekcorner.free.fr
26
Livre blanc KVM (Kernelbased Virtual Machine)
créé le 19/04/2010 par Antoine Schellenberger .
dernière mise à jour le 26/04/2010.
Ce document présente les commandes de base pour l'administration et l'usage de la solution
de virtualisation KVM sous Linux.
>ce texte doit être saisie dans un terminal sur une seule
et même ligne même s'il s'étend sur plusieurs lignes
dans ce document
>ligne 2
I - Généralités
KVM est une solution de virtualisation libre intégrée
aux distributions Linux dotées d'un noyau 2.6.20 ou
supérieur.
Nature des utilisateurs
Elle se compose d'un module noyau et d'un client
dérivé du produit Qemu.
Les commandes devant être saisies en tant que superutilisateur(root) sont en gras comme dans l'exemple
suivant:
Le matériel hôte doit comporter un hyperviseur
matériel (technologie VT pour les processeurs intel, ou
SVM pour les processeurs AMD).
KVM supporte deux types de virtualisation: la
virtualisation « complète » (full virtualization) et sous
certaines conditions la para-virtualisation.
L'installation et les tests effectués dans ce document
ont été réalisé sur un serveur équipé d'un processeur
Intel QuadCore 2.44 Ghz avec support VT - 4G de
RAM et un disque dur de 1T. Le système hôte est une
distribution Linux Ubunty 9.04 et le système invité est
une Debian Lenny.
>sudo apt-get install kvm
Celles ne demandant pas les privilèges du superutilisateur ne seront pas en gras, comme dans l'exemple
ci-après:
>cd /home/thegeekcorner
Environnement d'exécution des commandes
Les commandes exécutées au sein du système hôte
sont représentées sur un fond clair avec une couleur de
police noire comme illustré ci-après:
> commande hôte
Bien que KVM nous permette de virtualiser de
nombreux systèmes d'exploitations, nous retenons le
système invité Debian Lenny qui nous permettra
d'illustrer l'activation de la para-virtualisation avec
Virtio.
a) Conventions typographiques
Ce document comporte de nombreuses commandes
à saisir dans un terminal, des conventions
typographiques sont utilisées pour assister le lecteur
dans sa compréhension.
Invite de commande
Tout ce qui se situe entre deux chevrons au sein d'une
commande doit être saisie sur une seule ligne.
Exemple 1
Celles executées dans le système invité sont
représentées sur un fond foncé avec une couleur de
police blanche :
>commande invité
b) Remarques sur les commandes shell
Les commandes shell qui ne sont pas exécutées
avec les privilèges du super-utilisateur (root)
seront executées à partir de l'utilisateur courant
thegeekcorner.
Remarque: Evidemment, il vous faudra adapter les
commandes en remplaçant l'utilisateur thegeekcorner
par celui de votre choix
c) Vocabulaire
Livre blanc KVM (Kernel-based Virtual Machine)
http://thegeekcorner.free.fr
27
Le système hôte est le système d'exploitation sur
lequel KVM est installé. (dans notre cas, il s'agit de
Ubuntu 9.04)
Une fois le module noyau installé, il faut alors le
charger :
>sudo modprobe kvm-intel
Un système invité est un système d'exploitation
virtualisé.(Dans notre cas, il s'agit aussi de Debian
Lenny)
Remarque : si votre processeur est un AMD il faut
charger le module kvm-amd
Un système hôte peut héberger plusieurs systèmes
invités.
On s'assure du succès du chargement:
d) Abréviations
VM : Machine virtuelle
II - Préparation pour l'installation
Ce chapitre décrit les étapes nécessaires à
l'installation de KVM sur le système hôte Ubuntu 9.04.
a) prise en charge de la virtualisation
Avant de démarrez l'installation de KVM, il est
important de vérifier la compatibilité matérielle et
logicielle du système hôte. Pour cela, saisissez dans un
terminal:
>egrep '^flags.*(vmx|svm)' /proc/cpuinfo
Si rien ne s'affiche c'est que votre processeur
n'embarque pas d'hyperviseur matériel (VT/SVM);
dans ce cas KVM ne peut pas être installé.
Remarque 1 : Si KVM ne peut pas être installé, vous
pouvez tout de même utiliser la solution KQemu qui est
un module noyau implantant un hyperviseur logiciel. Cette
solution comporte cependant plus de restrictions que KVM
(ex: absence du support SMP dans les VM).
Remarque 2 : Il arrive quelquefois que malgrès le
succès de la commande précédente, la virtualisation soit
désactivée au niveau du BIOS, il faudra alors l'activer au
démarrage du serveur.
>lsmod | grep kvm | wc -l
Si cette commande renvoie une valeur supérieure à
0 c'est que tout c'est bien passé. Le cas contraire, il
faut consulter les journaux systèmes du serveur pour
en savoir davantage.
d) Ajout de l'utilisateur courant au
groupe kvm
Pour pouvoir exécuter KVM sans les privilèges
du super-utilisateur, il faut ajouter l'utilisateur
thegeekcorner au groupe kvm. Pour cela, saisissez
dans un terminal:
>sudo adduser thegeekcorner kvm
III - Eléments d'administration
Ce chapitre présente les commandes permettant la
création et l'installation d'une VM depuis un fichier
ISO téléchargé.
a) Création de la machine virtuelle
Pour notre étude de cas, nous allons créer une VM de
20G que l'on nommera lenny_thegeekcorner.raw. Pour
cela nous utilisons l'utilitaire qemu-img :
qemu-img create ~/lenny_thegeekcorner.raw 20G
Cette commande crée un fichier binaire au format
brut de 20G.
b) Installation de KVM et Qemu
Comme nous l'avons vu dans les généralités, KVM
se compose d' un module noyau et d'un logiciel dérivé
de Qemu.
L'installation de ces composant se fait à l'aide de la
commande:
>sudo apt-get install kvm qemu
c) Chargement du module noyau KVM
Remarque : bien que aucun système d'exploitation
ne
soit
encore
installé
dans
le
fichier
lenny_thegeekcorner.raw, celui-ci occupe tout de même
20G d'espace disque.
b) Installation de l'image virtuelle
Téléchargement
Nous allons télécharger l'image ISO de la distribution
Debian Lenny pour les architectures 64bits.
Livre blanc KVM (Kernel-based Virtual Machine)
http://thegeekcorner.free.fr
28
>cd ~>wget http://cdimage.debian.org/debian-cd/5.0.1/
amd64/iso-dvd/debian-501-amd64-DVD-1.iso
Remarque : l'URL de téléchargement peut changer,
veuillez vous référer au site http://cdimage.debian.org
Démarrage de l'installation
Une fois le fichier ISO téléchargé, nous allons nous
en servir pour démarrer l'installation de la VM. Pour
cela, saisissez dans un terminal du système hôte:
>kvm -hda ~/lenny_thegeekcorner.raw -cdrom ~/debian-501amd64-DVD-1.iso -boot d -vga std -soundhw all -smp 4 -m
1024
Quelques explications sur les paramètres:
-hda ~/lenny_thegeekcorner.raw : spécifie le
chemin absolu de la VM;
-cdrom ~/debian-501-amd64-DVD-1.iso :
spécifie l'image ISO à monter sur /dev/cdrom.
-boot -d : indique que le système doit démarrer à
partir de /dev/cdrom
-vga std : spécifie le type de carte graphique à
émuler
-soundhw all : active la prise en charge du son
-smp 4 : active le support SMP 4 cores au sein de
la VM (évidemment, il faut que le système hôte gère
le SMP)
-m 1024 : spécifie la mémoire vive allouée à la
machine virtuelle
remarque : Suivant les distributions linux hôtes, l'erreur
suivante peut se produire :
open /dev/kvm: Permission deniedCould not initialize
KVM, will disable KVM support
Si c'est le cas, redémarrez la session graphique du
système hôte et essayez à nouveau.
1er démarrage de la machine virtuelle installée
Une fois l'installation terminée et afin de s'assurer
de son succès, il faut redémarrer la VM en saisissant
la commande :
>kvm -hda ~/lenny_thegeekcorner.raw -vga std -soundhw all
-smp 4 -m 1024
Une fenêtre graphique devrait apparaître figurant le
lancement du système hôte.
Mise à jour du système invité Debian Lenny
Une fois la VM redémarrée et pour profiter des
dernières corrections d'anomalies et de mises à jour de
sécurités, il est nécessaire de mettre à jour le système :
>apt-get update
Installation du serveur SSH
Par ailleurs, nous allons voir qu'une fois la VM
déployée sur le réseau on pourra la contacter à distance
avec SSH. Pour cela, nous allons d'ores et déjà installer
un serveur SSH sur le système invité :
>apt-get install openssh-server
IV - Administration avançée
Après avoir vu dans la première partie comment
installer une machine virtuelle, nous allons durant
ce chapitre présenter les commandes nécessaires au
déploiement d'une VM sur un réseau ainsi que celles
permettant l'activation de la para-virtualisation.
a) Déploiement sur le réseau local
Par défaut le réseau d'une VM est configuré en NAT,
c'est à dire que les paquets réseaux émis par la VM
passent obligatoirement par une passerelle (dans ce cas
le système hôte) pour arriver à destination.
Cette configuration est confortable dans la majorité
des cas quand la VM n'a pas besoin d'être contactée
depuis l'extérieur, cependant quand il s'agit de
virtualiser des services (serveurs de bases de données,
serveurs d'applications, serveurs web, ...), il est
nécessaire de déployer la VM sur le réseau afin de lui
attribuer une IP.
Installation des dépendances
Le déploiement d'une VM sur le réseau passe par le
création d'une interface virtuelle au sein du système
hôte. Pour cela il faut installer le paquetage umlutilities:
>sudo apt-get install uml-utilities
Nous verrons qu'une fois l'interface virtuelle créée, il
faudra la relier à une interface physique (création d'un
bridge).
Remarque : hélas, pas toutes les cartes réseaux
permettent de réaliser des bridges, c'est le cas notamment
des cartes wifi.
La gestion des bridges nécessitent l'installation du
paquetage bridge-utils:
Livre blanc KVM (Kernel-based Virtual Machine)
http://thegeekcorner.free.fr
29
>sudo apt-get install bridge-utils
Préparation du pont réseau (bridge) et de
l'interface réseau virtuelle
Les modifications apportées à /etc/network/
interfaces s'appuient sur la configuration réseau du
système hôte dont voici les caractéristiques principales:
L'interface réseau active sur le serveur est eth0.
Ajout de l'utilisateur courant au groupe uml-net:
Pour que l'utilisateur courant (thegeekcorner)
puisse utiliser une interface réseau virtuelle il faut le
rajouter au groupe uml-net:
>sudo adduser thegeekcorner uml-net
Configuration du groupe tunusers:
Pour que l'utilisateur courant puisse effectuer des
opérations d'entrées/sorties sur l'interface virtuelle, il
est nécessaire de créer le groupe tunusers et de lui
ajouter l'utilisateur courant:
>sudo addgroup tunusers && adduser thegeekcorner tunusers
Edition du fichier 50-udev.rules
Toujours pour permettre l' usage de l'interface
virtuelle par l'utilisateur courant, udev doit être
configuré pour intégrer le groupe tunusers. Pour
cela, éditez le fichier /etc/udev/rules.d/50udev.rules en remplaçant:
KERNEL=="tun", NAME="net/%k"
par
KERNEL=="tun", NAME="net/%k", GROUP="tunusers",
MODE="0660"
Modification de /lib/udev/devices/net/tun
Les propriétés du fichier /lib/udev/devices/
net/tun doivent être modifiés comme suit:
>sudo chown :tunusers /lib/udev/devices/net/tun
>sudo chmod g+rw /lib/udev/devices/net/tun
Redémarrage du système hôte
Pour que l'ensemble des modifications précédentes
prennent effet, il faut redémarrer le système hôte:
>sudo reboot
Le fichier /etc/network/interfaces
L'interface virtuelle et le bridge sont normalement
prêts pour être configurés.
Leurs configurations nécessitent l'édition du fichier
/etc/network/interfaces.
Caractéristiques réseau du système hôte
L'adresse IP de eth0 est fixée manuellement à
192.168.0.2;
l'adresse IP de la passerelle du réseau local est
192.168.0.254;
Le masque du réseau local est 255.255.255.0;
Le nom du bridge est br0;
Le nom de l'interface virtuelle sera tap10;
Modification du fichier /
etc/network/interfaces
A partir des caractéristiques précédentes le fichier
/etc/network/interfaces doit comporter le
contenu suivant:
auto lo eth0 tap10 br0
iface lo inet loopback
iface eth0 inet manual
iface tap10 inet manual
address 192.168.0.2
netmask 255.255.255.0
gateway 192.168.0.254
up ifconfig tap10 up
down ifconfig tap10 down
down tunctl -d tap10
tunctl_user thegeekcorner
iface br0 inet static
bridge_ports eth0 tap10
bridge_maxwait 0
Remarque : Evidemment, il est de votre ressort
d'adapter ce script en fonction de votre configuration.
Redémarrage du réseau et test de la
configuration du système hôte
Pour prendre en compte la nouvelle configuration, il
est utile de redémarrer le réseau du système hôte:
>sudo /etc/init.d/networking restart
Test du bridge
Afin de s'assurer de la bonne création du bridge, la
commande suivante doit retourner 1 :
>ifconfig | grep br0 | wc -l
Test de la création de l'interface réseau virtuelle
Afin de s'assurer de la bonne création de l'interface
réseau virtuelle, la commande suivante doit aussi
retourner 1 :
Livre blanc KVM (Kernel-based Virtual Machine)
http://thegeekcorner.free.fr
30
>ifconfig -a | grep tap10 | wc -l
Test de l'association du bridge
avec l'interface réseau virtuelle
Pour vérifier que l'interface réseau virtuelle tap10 a
bien été associée au bridge br0, la commande suivante
doit renvoyer 1 :
pour connaître l'IP actuelle, if suffit de saisir:
>/sbin/ifconfig eth0
b) Para-virtualisation
L'activation de la para-virtualisation améliore
notablement les performances réseaux et disques mais
elle nécessite un système invité modifié.
>brctl show | grep tap10 | wc -l
Redémarrage de la machine virtuelle
Désormais que le système hôte est configuré, il
faut relancer la VM en passant quelques arguments
supplémentaires à kvm :
>kvm -hda ~/lenny_thegeekcorner.raw -vga
std -soundhw all -smp 4 -m 1024 -net
nic,macaddr=52:54:00:12:34:56 ,model=rtl8139 -net
tap,ifname=tap10,script=no
Quelques explications sur les nouveaux paramètres :
-net
nic,macaddr=52:54:00:12:34:56
attribue l'adresse MAC 52:54:00:12:34:56 à
l'interface réseau virtuelle;
,model=rtl8139: permet d'émuler la carte réseau
Realtek 8139;
-net tap,ifname=tap10: spécifie le nom de
l'interface virtuelle à utiliser;
,noscript: indique que le script /etc/qemuifup (ou kvm-ifup) n'est pas nécessaire pour
initialiser la configuration réseau.
Test de la configuration réseau de la machine
virtuelle
Une fois la VM démarrée, éditez son fichier /etc/
network/interfaces à partir du contenu suivant :
auto lo eth0
iface lo inet loopback
#CONFIG MANUELLE
iface eth0 inet static
address 192.168.0.2
netmask 255.255.255.0
gateway 192.168.0.254
##CONFIG DHCP
#iface eth0 inet dhcp
Redémarrez le réseau de la VM pour prendre en
compte les modifications:
>/etc/init.d/networking restart
Assurez-vous que la nouvelle IP de la VM
appartienne au réseau local (dans notre cas, entre
192.168.0.1 et 192.168.0.254).
La para-virtualisation au sein de KVM repose sur
le projet virtio. Virtio n'est pas disponible pour tous
les systèmes invités. Actuellement il n'existe que pour
les systèmes invités windows XP, windows 2000 et
les distributions linux comportant un noyau 2.6.25 ou
supérieur.
Remarque : Virtio nécessite KVM V.60 ou supérieur (ce
qui est le cas de Ubuntu 9.04).
Tests de performances avant l'activation de la
para-virtualisation
Cette partie détaille l'installation et le protocole de
test2 pour évaluer les performances induites par la
para-virtualisation.
Installation des outils de test
Afin de nous assurer du bénéfice apportée par
la para-virtualisation, nous allons mettre en place
une procédure de test de performances. Pour cela,
nous allons tester les performances réseau et disque
en utilisant les utilitaires iperf et hdparm que nous
installons à la fois dans le système hôte et le système
invité :
>sudo apt-get install iperf hdparm
>apt-get install iperf hdparm
Test sans activation de la para-virtualisation
Sur le système hôte et la VM il est désormais possible
de tester la vitesse de lecture du disque
>hdparm -t /dev/sda
Remarque : l'option -t permet de désactiver le cache du
disque
Pour tester la vitesse du réseau entre le système hôte
et la VM, il suffit de saisir sur le système hôte :
>iperf -s
Puis de saisir dans la VM :
>iperf -c 192.168.0.2
Livre blanc KVM (Kernel-based Virtual Machine)
http://thegeekcorner.free.fr
31
Le résultat est exprimé en Mbits/s.
V - Trucs et astuces
Configuration de la machine virtuelle
Une fois le nécessaire des tests installé, nous allons
détailler les opérations permettant d'activer la paravirtualisation au sein de la VM.
Edition du fichier /etc/
initramf-tools/modules
Dans la VM, éditez le fichier /etc/initramfstools/modules et ajoutez-y le contenu suivant:
a) Montage d'une image KVM sous linux
Il est possible d'accéder au système de fichier de la
VM depuis le système hôte sans avoir à exécuter KVM.
Pour cela, il suffit de monter l'image sur un répertoire
du système hôte à l'aide de l'interface Loop du noyau
Linux:
>sudo mkdir /mnt/fs_thegeekcorner
>sudo mount -o loop,offset=32256 ~/
lenny_thegeekcorner.raw /mnt/fs_thegeekcorner
Le répertoire /mnt/fs_thegeekcorner comporte
désormais l'arborescence racine de votre VM.
virtio
virtio_balloon
virtio_pci
virtio_rng
virtio_net
virtio_blk
Pour démonter ce répertoire :
>sudo umount /mnt/fs_thegeekcorner
Pour prendre
modifications:
en
compte
les
précédentes
Remarque: sur les nouvelles distributions l'interface
Loop est active par défaut.
>update-initramfs -u
Edition du fichier /boot/grub/menu.lst
l'activation de virtio remplace les labels hd[a-z]
par vd[a-z], il faut de ce fait modifier le fichier /
boot/grub/menu.lst en remplaçant les occurrences
root=/dev/hda1 par root=/dev/vda1.
Redémarrage de la VM en activant la paravirtualisation
Tout est normalement configuré pour que la paravirtualisation fonctionne: il suffit de relancer KVM
avec quelques paramètres supplémentaires:
>kvm -drive file=~/
lenny_thegeekcorner.raw,if=virtio,boot=on
-vga std -soundhw all -smp 2 -m 1024 -net
nic,macaddr=52:54:00:12:34:56,model=virtio -net
tap,ifname=tap10,script=no
b) Executer une machine virtuelle sans
affichage graphique
La console graphique qui s'affiche et qui présente
le démarrage de la machine virtuelle n'est pas
systématiquement souhaitable en l'occurrence quand il
s'agit de démarrer une VM sur un serveur hôte sans
serveur X, ou de démarrer une VM à distance via SSH
(evidemment sans tricher (sans forward X ... -Y ou X))
La solution consiste à passer en paramètres les
options -nographic et -daemonize à la commande
kvm comme le figure l'exemple suivant:
>kvm -hda ~/lenny_thegeekcorner.raw -nographic daemonize -vga std -soundhw all -smp 4 -m 1024 -net
nic,macaddr=52:54:00:12:34:56 ,model=rtl8139 -net
tap,ifname=tap10,script=no
Quelques explications:
Remarque : l'usage de -drive à la place de -hda nous
permet de spécifier l'interface virtio pour le disque.
Tests de performances après activation de la
para-virtualisation
En suivant la même procédure de tests que celle
établie avant l'activation de la para-virtualisation on
peut réaliser un tableau de comparaison :
Hôte
Réseau
Disque
1GB/s
87MB/s
VM sans
virtio
192MB/s
40MB/s
-nographic permet effectivement de ne pas lancer
la console graphique
-daemonize permet d'executer KVM en démon ce
qui nous rend immédiatement la main dans le shell et
nous permet de le fermer (sans craindre d'éteindre la
VM en cours d'execution).
VM avec
virtio
950MB/s
71MB/s
Livre blanc KVM (Kernel-based Virtual Machine)
http://thegeekcorner.free.fr
32
Les bases de la 3D sous Linux
créé le 11/04/2008 par Antoine Schellenberger .
dernière mise à jour le 11/04/2010.
Cet article présente les rouages des environnements 3D sous linux. Nous abordons d'abord
quelques généralités concernant X Window et OpenGL, puis nous détaillons précisément le
fonctionnement des architectures sous-jacentes aux bureaux 3D sous linux en les comparant à
l'implémentation X.Org traditionnelle.
I - Le système X Window ou X11
a) Généralités
Le système d'affichage sous linux est basé sur X
window system ou X11. Ce système est multiOS et a
également été porté sous Mac OS X et windows. Sous
linux, I'implémentation X11 la plus utilisée est X.Org.
X11 repose sur une architecture client / serveur
comme l'illustre la figure 1.
Ecouter sur un port logiciel les requêtes d'affichage
émanant de ses clients afin d'effectuer le rendu
correspondant via un ou plusieurs display.
Pour fonctionner un serveur X aura donc besoin d'au
moins une souris, un écran(display) et un clavier .
Un client X a les responsabilités suivantes:
Ecouter les événements utilisateurs(mouvements
souris, frappes clavier) que le serveur X lui transmet
après capture;
effectuer le traitement métier des entrées
utilisateurs qu'il vient de recevoir (ex. calculer le carré
d'un nombre qui a été tapé);
ecrire le résultat du traitement dans un contexte
graphique afin d'être rendu à l'utilisateur.
Cette dernière étape s'appuie sur la Xlib (ou
libGL dans le cas particulier d'un contexte graphique
OpenGL).
Illustration 1: Architecture X11
Dans ce contexte, le serveur X a principalement deux
responsabilités:
Détecter les entrées utilisateurs pour les rediriger
vers ses clients(X) via un protocole particulier.
Illustration 2: Diagramme d'activités des composants de
X11
La Xlib(libX11 ou libX) se charge d'encapsuler la
requête d'affichage et de la transmettre au serveur X
(via le protocole X) pour qu'il en effectue le rendu:
Les bases de la 3D sous Linux
http://thegeekcorner.free.fr
33
on dit que l'affichage est rendu indirectement (indirect
rendering ou I.R).
L'implémentation X.Org actuelle (7.1) utilise
toujours le rendu indirect pour servir les primitives
d'affichages qui lui ont été transmises par la Xlib.
Nous verrons que le serveur X peut aussi écouter
d'autres types de requêtes d'affichage via l'extension
GLX (libglx).
Les clients X se basant sur la Xlib(comme certains
gestionnaires de fenêtres (WM)) ne la manipulent
presque jamais directement: il est plutôt d'usage
d'utiliser des « toolkits » permettant d'abstraire la
Xlib. (cf. figure 3) . Les plus connus sous linux sont
Qt et GTK+.
Illustration 4: Répartition MVC au sein de X11
Cette architecture client/serveur repose sur un
protocole de communication basé sur IPV4 et IPV6, ce
qui permet la distribution des clients et du serveur à
travers un réseau.
En partant du principe que l'ensemble des clients X
encapsule le modèle (qui englobe à son tour la logique
métier), on parle de couche métier distribuée (à l'image
des web services via SOAP ou de CORBA via IIOP),
donc derrière cette architecture client / serveur se
trouve une notion forte d'interopérabilité.
Illustration 3: Les surcouches usuelles à la Xlib
Les responsabilités attribuées entre clients et serveur
X suivent une conception de type MVC (Modèle Vue
Controleur) (cf. figure 4):
Le client X a les responsabilités du modèle car c'est
lui qui encapsule la logique métier;
le serveur X a les responsabilités d'une vue car il
développe la représentation du modèle;
le serveur X a également les responsabilités d'un
contrôleur car il capture les évènements utilisateurs
pour les rediriger vers le modèle (le client X);
la Xlib intervient également en tant que contrôleur
car elle permet de synchroniser d'une part les
évènements utilisateurs entre serveur et clients, et
d'autre part les requêtes d'affichage entre clients et
serveur.
Cette distribution via un réseau soulève un problème
de sécurité car il est possible toutefois de capturer les
paquets X circulant sur le réseau et de les analyser pour
connaître par exemple toutes les opérations clavier d'un
utilisateur; c'est pourquoi il est nécessaire quelquefois
de tunneliser les paquets X11 dans un protocole plus
sécure comme celui de SSH.
Des outils de gestion de la sécurité sous X11 sont
livrés systématiquement avec le système.
b) Accélération matérielle et contexte
graphique direct
Précédemment, nous avons sommairement abordé le
concept de « rendu indirect » qui rappellons-le, est
intégré au fonctionnement classique de X.Org.
Cependant, quand client et serveur sont sur la même
machine, pourquoi le client ne transmettrait-il pas
directement les requêtes d'affichage au driver de la
carte graphique? On aurait alors un contexte graphique
direct...
Le rendu direct de l'affichage permet de n'utiliser
le serveur X que pour la capture des évènements
utilisateurs (click,etc..) et laisse le GPU (processeur de
la carte graphique) traiter les opérations graphiques.
Quand les opérations sont traitées par le GPU on parle
d' « accélération matérielle ».
Les bases de la 3D sous Linux
http://thegeekcorner.free.fr
34
Il est évident que l'accélération matérielle libère
fortement la charge du CPU.
client utilise l'interface d'un objet par polymorphisme
sans en connaître les détails d'implémentation.
On estime que l'indirection de l'affichage vers
le serveur X n'influe que très peu sur la latence
à l'affichage, par contre l'accélération matérielle est
primordiale.
On retrouve encore derrière la notion de
spécification une volonté d'interopérabilité c'est à dire
d'indépendance vis à vis du media: c'est ce qui a permis
à OpenGL d'être porté sur plusieurs plateformes et
systèmes d'exploitation.
Dans X.Org le serveur X utilise déjà l'accélération
matérielle pour son affichage 2D via ses « driver X
» (DDX, EXA/XAA) qui dialoguent avec le secteur 2D
des cartes graphiques. (cf. figure 2).
Note: le concurrent direct d'openGL sous Windows est
direct3D
Nous nous permettons d'insister sur le fait que dans
X.Org quand un client X utilise la Xlib pour son
affichage, le contexte graphique qu'il manipule est
toujours indirect mais contrairement à ce que beaucoup
pensent, il est tout de même « accéléré matériellement
» coté serveur via les drivers 2D.
De plus, il est important de rappeller que :
OpenGL est une librairie qui permet de fournir
un contexte graphique 3D à ses clients pour leur
permettre de manipuler des objets dans un univers
tridimensionnel en abstrayant les calculs de projections
et autres.
Une implémentation libre compatible OpenGL sous
linux est MESA3D. (
Tout rendu direct implique explicitement qu'il n'y
a pas de retour au serveur X mais implicitement que
l'accélération matérielle soit présente;
Attention: MESA3D n'est pas une implémentation
strictement conforme aux specifications d'OpenGL!
Comme nous venons de le voir une accélération
matérielle n'implique pas un rendu direct c'est à dire
qu'elle peut être présente coté serveur comme c'est le
cas pour X.Org qui accélère toutes ses opérations 2D.
Dans le cadre d'OpenGL, l'accélération matérielle
permet de déléguer l'ensemble des calculs (projections,
rotations, ...) au GPU ce qui nécessite :
En résumé, dans X.Org, tout contexte graphique
2D indirect fournit par la Xlib est toujours accéléré
matériellement coté serveur, mais qu'en est-il des
contextes 3D?
II - 3D et OpenGL
a) Généralités
Les drivers X de X.Org ne savent utiliser que le
secteur 2D des cartes graphiques (nous l'avons déjà
évoqué).
Des drivers qui savent discuter avec le secteur 3D
de votre carte graphique (qu'on nommera driver 3D
par la suite);
une implémentation OpenGL qui sache discuter
avec votre driver 3D;
Il se présente alors plusieurs cas de figures:
Soit le code source du driver 3D de la carte est
libre (c'est le cas des intel depuis 2006 qui sont
sous GPL) et dans ce cas le développement de
l'implémentation OpenGL est ouvert à la communauté
(souvent récupéré par MESA);
Dans un univers 3D, les coordonnées d'un objet
ont toujours 3 composantes (x,y,z), cependant un
écran restant une surface plane, il faudra pour afficher
ces objets les « plaquer » sur un espace 2D. Cette
projection 3D->2D implique évidemment des calculs
qui seront pris en charge par un processeur (CPU ou
GPU).
soit le code source n'est pas libre, auquel cas
le constructeur de la carte fournit directement
l'implémentation OpenGL,le driver 3D et le module
kernel de la plateforme et de l'OS correspondant.
(Il existe des projets libres de rétro-ingénierie pour
certains drivers propriétaires, mais rien de très
concluant à ce jour.)
La librairie 3D la plus répandue sous linux est
OpenGL.
L'accélération matérielle nécessite l'accès direct
aux ressources graphiques ce qui relate une gestion
complexe de la sécurité et de la concurrence.
OpenGL est une spécification qui permet de définir
une interface commune d'utilisation pour ses clients.
Dans le monde objet, une spécification est
représentable par le concept fort d'interface où un
Quand le rendu est traité indirectement, c'est le
serveur X qui se charge de créer des queues de
traitement (lilo) pour accéder aux routines 2D de votre
carte via ses drivers 2D, par contre quand le D.R est
Les bases de la 3D sous Linux
http://thegeekcorner.free.fr
35
actif, l'accès concurrentiel doit être géré par un système
tierce.
le projet D.R.I (direct rendering infrastructure)
implémente un protocole sécurisé d'accès direct aux
matériels graphiques.
Certaines implémentations d'OpenGL comme celles
d'intel ou d'ATI repose sur DRI pour effectuer
leur rendu direct tandis que d'autres dialoguent
directement avec le driver 3D (nvidia).
D.R.I embarque MESA3D dans ces drivers 3D, et la
libGLcore utilisé coté serveur est aussi de MESA.
Passer par D.R.I présente l'avantage de pouvoir
s'affranchir de l'implémentation OpenGL propriétaire
pour activer le D.R.
Quand l'accélération matérielle est activé (avec ou
sans D.R.I) la gestion de l'accés au matériel graphique
se fait par un module du noyau dénommé D.R.M
(Direct Rendering Manager).
Illustration 6: Répartition des 3 composants de GLX dans
X.Org
GLX est formé de 3 composants principaux (cf. figure
6):
Une interface applicative(libGL.so) qui fournit aux
clients X un contexte graphique GL leur permettant
d'utiliser les fonctions GL, et si nécessaire d'encapsuler
les requêtes d'affichage de ces fonctions dans le
protocole X pour un rendu indirect .
une extension au protocole X, qui permet
l'encapsulation des requêtes GL pour les transmettre
au serveur X. Une extension du serveur X(libglx.so)
qui recevra les appels précédents et effectuera le rendu.
Il se présente alors 2 cas de figures (cf. figure 7):
Illustration 5: Traitement du Direct Rendering sous X.Org
Sous linux l'implémentation openGL est accessible par
la libGL.so.
C'est généralement un lien symbolique qui pointe
vers un fichier en dur ce qui permet la cohabitation
de plusieurs implémentations d'openGL sur une même
machine)
b) GLX : OpenGL et X11
OpenGL étant multiplateforme, il lui faut un «
adaptateur » à X Window: c'est GLX (OpenGL
extension to the X window system).
Illustration 7: Diagramme d'activités des composants
GLX
Les bases de la 3D sous Linux
http://thegeekcorner.free.fr
36
Si le contexte GL que GLX présente au client X est
indirect alors les 3 éléments de GLX sont sollicités et
l'affichage sera traité par le serveur X (c'est le cas
classique)
Si ce contexte graphique est direct alors seul le
premier élément de GLX sera sollicité (libGL.so)
puis il passera la main à la librairie qui dialoguera
directement avec le driver 3D . Cette librairie peut être
la libdri (intel, Matrox, ATI) dans le cas de MESA3D,
sinon ce sera une implémentation OpenGL propriétaire
qui s'en chargera (nvidia).
Notez que même si le rendu direct et l'accélération
matérielle sont actifs, les clients X ne faisant pas
appel à un contexte GL(libGL.so), mais à un contexte
graphique standard (Xlib), auront toujours un rendu
2D indirect (ex. gestionnaires de fenêtres) .
ii) L'implémentation AIGLX
III - Les bureaux 3D
Il existe 3 architectures différentes de serveur X qui
traitent la 3D via GLX:
L'implémentation classique de X.Org;
l'implémentation AIGLX;
l'implémentation XGL.
a) X.Org, AIGLX et XGL
Illustration 9: Diagramme d'activités du rendu GL avec
l'extension AIGLX de X.Org 7.1
i) L'implémentation classique X.Org
AIGLX signifie Accelerated indirect GL X.
AIGLX ne modifie en rien l'architecture de Xorg.
Comme nous l'avons vu précédemment X.Org traite
coté serveur les opérations 3D, ces opérations ne
profitent pas de l'accélération matérielle car elles sont
traitées par le CPU.
AIGLX est une « extension » à X.Org permettant
justement d'activer l' accélération matérielle 3D coté
serveur (donc dans un contexte indirect). Nous verrons
par la suite quel intérêt cela présente dans le cadre des
gestionnaires de fenêtres composites comme compiz.
iii) L'implémentation XGL
Illustration 8: Diagramme d'activités du rendu GL avec
X.Org.
Si l'accélération matérielle 3D est installée alors le
client X recevra un contexte GL direct délivré par la
libGL.so, et le rendu 3D sera traité par le GPU sans
passer par le serveur X.
Si l'accélération matérielle 3D n'est pas installée alors
le client X recevra un contexte GL indirect, et le rendu
3D sera délégué au serveur X (via les composants 2 et
3 de GLX - cf figure 6) qui traitera les opérations 3D
via le CPU pour transmettre le rendu final au driver
X(2D). Seul le secteur 2D du GPU est alors sollicité.
Les bases de la 3D sous Linux
http://thegeekcorner.free.fr
37
par la suite, XGL ayant son propre GLX (alias X
GLX), il utilisera celui-ci pour servir les futurs clients
X demandeurs de contexte GL.
Ainsi quand un client demande un contexte GL à X
GLX, celui-ci lui fournit systématiquement un contexte
indirect afin que toutes les requêtes d'affichage GL
soient transmises au serveur Xglx qui à son tour les
retransmet à l' implémentation OpenGL sous-jacente
configurée avec le X.Org initial.
Eglx sera la version « propre » de XGL en
remplacement de Xglx .
Eglx suivra la même philosophie, avec en plus
le traitement des primitives d'affichage vectorielles
comme Cairo, et autres.
Contrairement à AIGLX qui n'est qu'une extension à
X.Org, XGL est un véritable serveur X.
XGL manipule une surcouche à OpenGL denommée
Glitz.
XGL étant un serveur X complet: en plus de fournir
l'accélération matérielle 3D coté serveur (comme
AIGLX), il retransmet aussi à la Glitz les requêtes
d'affichage de la Xlib. De ce fait le driver 3D traitera
indifféremment les opérations 2D et 3D ce qui permet
de n'avoir plus qu'un driver pour l'affichage.
Il existe actuellement deux implémentations de XGL:
Xglx et Eglx.
Xglx est un « hack » pour prouver la faisabilité du
concept XGL, il démarre en surcouche à X.Org (le «
hack » est là!) et intercepte l'ensemble des requêtes
provenant de la Xlib et libGL (GLX) afin de tout
retransmettre à une implémentation OpenGL sousjacente.
Il coexiste donc sur une même machine 2 versions
de GLX:
Celle de Xglx qui capture tous les appels openGL
provenant des clients X pour les transmettre au
serveur Xglx;
celle de X.Org qui permet à Xglx d'avoir un contexte
GL direct.
En bref, Xglx n'est qu'un client X OpenGL car:
Au démarrage Xglx demande au GLX de X.Org
de lui fournir un contexte GL, GLX lui fournit alors
un contexte direct si l'accélération matérielle 3D est
active;
b) Les C.W.M (Composite Window
Manager)
AIGLX et XGL sont forcés
par
de
l'I.R
à
cause
de
GLX_EXT_texture_from_pixmaps.
de passer
l'extension
L'ajout
de
fonctionnalités
à
OpenGL
se
fait
sous
forme
d'extension
et
GLX_EXT_texture_from_pixmaps est une extension
définie par le créateur de compiz (David Reveman).
Les systèmes de fenêtrages composites (composite
window manager ou CWM) sont la combinaison d'un
système de fenêtrage utilisant l'extension composite
de X.Org(qui permet d'ajouter de la transparence, de
l'ombre, etc...). Les CWM les plus connus sont compiz
et beryl (branche de compiz).
Les CWM font usage justement de l'extension
OpenGL GLX_EXT_texture_from_pixmaps, ce qui
leur permet d'effectuer des opérations 3D sur les objets
d'un bureau en transformant au préalable leur pixmaps
en texture.
Quand cette extension n'est pas embarquée dans le
driver 3D, la libGL en cours délègue le rendu et la
création de la texture au serveur X(Xorg+Aiglx ou
XGL) ce qui induit inéluctablement un rendu indirect.
Naturellement la création de la texture sollicite le
CPU tandis que le restant des requêtes GLX seront
accélérées via le GPU.
nvidia
embarque
désormais
l'extension
GLX_EXT_texture_from_pixmap
dans
leur
implémentation d'OpenGL et leur drivers 3D de la série
9xxx: les détenteurs de ce type de carte peuvent donc
utiliser compiz et beryl sans AIGLX ni XGL.
IV - Conclusion
Les bases de la 3D sous Linux
http://thegeekcorner.free.fr
38
Nous avons vu que X Window, OpenGL et
accélération matérielle sont au coeur de la technologie
des bureaux 3D. L'implémentation actuelle de X.Org
a montré ses limites dans le cadre du traitement des
primitives GL, d'où la nécessité d'étendre X.Org avec
AIGLX.
Certaines personnes pensent de ce fait que AIGLX
est « une rustine » à X.Org et que l'avenir du serveur
X sous linux est XGL.
Contrairement à AIGLX, XGL est un serveur X
complet qui n'utilise que le secteur 3D des cartes vidéos
pour rendre ses affichages 2D(Xlib) et 3D(GLX). Hélas,
XGL souffre de son jeune âge, de sa naissance obscure
et de ses développements encore incomplets.
D'une manière générale l'intéret pour les bureaux
3D a permis de remettre en cause les architectures
actuelles, mais aussi de nous questionner sur l'utilité
des drivers 2D, l'avenir des drivers 3D et leur
ouvertures possibles à la communauté.
Connaitrons-nous le moment où les cartes graphiques
ne se différencieront que par leur efficacités
matérielle?...
La révolution de l'ergonomie 3D est encore à ses
débuts et linux nous promet sûrement de belles choses
dans le domaine...
Les bases de la 3D sous Linux
http://thegeekcorner.free.fr
39
MEMO
Memento Subversion
créé le 14/10/2010 par Antoine Schellenberger .
dernière mise à jour le 19/10/2010.
Cet article est un recueil de notes au sujet de l'usage et l'administration en ligne de
commandes du gestionnaire de révision subversion (SVN) sous Linux
Ce memento a été rédigé sur la base de la distribution
Linux ubuntu server 10.04 LTS et la version 1.6.6 de
subversion qu'elle embarque.
Administration
Installer subversion
sudo apt-get install subversion
Créer le répertoire des dépôts
Sudo mkdir /usr/share/repository-svn/
Le fichier
svnserve.conf
est le fichier
de configuration central, dans notre exemple
son chemin est /usr/share/repository-svn/
thegeekcorner_project/conf/
svnserve.conf
La première chose à faire dans ce fichier est
de désactiver l'accès aux utilisateurs anonymes, en
décommentant/editant la ligne suivante :
anon-access=none
Attention : quand vous décommentez veillez à supprimer
l'espace résiduel en tout début de ligne, sans quoi le
système ne parvient pas à lire le fichier svnserve.conf
Démarrer le service subversion
svnserve -d -r /usr/share/repository-svn/
Note : Le port par défaut de subversion est le 3690
Démarrer le service subversion sur un
port spécifique
L'exemple suivant permet de démarrer subversion
en lui spécifiant le port d'écoute 3456 en utilisant
l'argument --listen-port
La seconde étape vise à activer l'authentification en
décommentant la ligne suivante:
password-db=passwd
tant qu'on y est, on peut affecter un identifiant à
notre projet grâce à l'attribut realm:
realm = thegeekcorner
Si vous souhaitez avoir une gestion encore plus fine
des droits il faut activer le système d'autorisations en
décommentant la ligne suivante:
authz-db=authz
svnserve -d -r /usr/share/repository-svn/ --listen-port=3456
Créer un dépôt subversion
La commande suivante crée un dépôt Subversion
dans le répertoire /usr/share/repository-svn/
thegeekcorner_project
svnadmin create /usr/share/repository-svn/
thegeekcorner_project
Configuration d'un dépôt
Authentification/autorisations
L'installation par défaut permet à un utilisateur
anonyme de se connecter à un dépôt et télécharger son
contenu.
Attention : si vous n'avez pas besoin du système
d'autorisations il faut laisser cette ligne commentée sans
quoi même un utilisateur authentifié ne pourra plus rien
faire
Modification du fichier passwd
C'est au niveau de ce fichier que l'on place les paires
identifiants/mots de passe.
Dans l'exemple suivant nous ajoutons dans la
section [users] du fichier passwd l'utilisateur
thegeekcorneruser et lui associons le mot de passe
tgkcu001 :
thegeekcorneruser= tgkcu001
Sauvegarde de dépôts
Modification du fichier svnserve.conf
Sauvegarde
Memento Subversion
http://thegeekcorner.free.fr
41
La sauvegarde d'un dépôt se fait à l'aide de la
commande suivante à saisir depuis le système de fichier
sur lequel le dépôt est installé :
svnadmin dump /usr/share/repository-svn/thegeekcorner_project
>~/thegeekcorner.dump
Restauration
La restauration se fait en deux étapes :
tout d'abord il faut créer un nouveau repository qui
accueillera la sauvegarde :
svnadmin create /var/repository-svn/thegeekcorner_backup
thegeekcorner_project sur le serveur. Tout ce qui
précède le nom du projet a pour racine le paramètre passé
à la commande svnserve qui a permis de lancer le service
suvbversion (voir plus haut)
Créer une copie de travail depuis un
dépôt
La commande suivante permet de créer une copie
de travail du dépôt mon_repository_SVN dans le
répertoire courant.
svn co file:///home/thegeekcorner/mon_repository_SVN
Exporter un projet sans versionnement
ensuite on procède à la restauration
svnadmin load /var/repository-svn/thegeekcorner_backup<~/
thegeekcorner.dump
Utilisation
Importer un projet dans un dépôt
Depuis un dépôt local
Si votre copie de travail est sur le même système
de fichier que le dépôt subversion alors vous pouvez
utiliser le protocole file:// pour générer votre copie
de travail.
Voici un exemple qui importe le contenu
du répertoire /home/monprojet dans le dépôt
thegeekcorner_project
svn import /home/monprojet/ file:///usr/share/repository-svn/
thegeekcorner_project
Depuis un dépôt distant
Il existe plusieurs moyens pour obtenir une copie de
travail depuis un dépôt distant, les protocoles supportés
par subversion sont http(s)://, ssh+svn:// ou
svn://
Le protocole monté par défaut est svn:// dont le
port par défaut est le 3690
voici un exemple permettant de créer un répertoire
de travail depuis un dépôt distant :
Si vous souhaitez obtenir une copie de travail d'un
projet sans ses métadonnées de versions (répertoires
.svn), il faut utiliser la commande svn export.
La commande suivante permet d'exporter notre
projet exemple thegeekcorner_project :
svn export svn://thegeekcorner.net/thegeekcorner_project
Ignorer certains fichiers et répertoires
La commande suivante permet d'ignorer le
fichier fichier_a_ignorer.csv, le répertoire
repertoire_a_ignorer, et tous les fichiers
comportant l'extension .log
svn propedit svn:ignore
Un editeur de texte apparaît dans lequel vous devez
saisir les 3 lignes suivantes :
fichier_a_ignorer.csv
repertoire_a_ignorer
*.log
Supprimer un fichier ou un répertoire
directement dans le dépôt
Quelquefois il peut s'avérer nécessaire de
supprimer directement un fichier ou un répertoire
au sein du dépôt. La commande suivante est
un exemple permettant de supprimer le fichier
fichier_a_supprimer.txt depuis le dépôt :
svn delete file:///home/thegeekcorner/mon_repository_SVN/
fichier_a_supprimer.txt
svn import /home/monprojet/ svn://thegeekcorner.net/
thegeekcorner_project
quelques explications :
thegeekcorner.net correspond au nom du
domaine ou à l'adresse IP localisant le serveur
thegeekcorner_project est le nom du dépôt
Ici
pour
le depôt
chemin
thegeekcorner_project
a
/usr/share/repository-svn/
Memento Subversion
http://thegeekcorner.free.fr
42
Memento manipulations
multimédia sous Linux
créé le 29/12/2009 .
dernière mise à jour le 29/12/2009.
Ce mémo consigne un ensemble de techniques pour manipuler des ressources multimédias tel
que l'encodage de fichiers videos, leur conversions, leur assemblages, etc.... Les commandes de
ce memo ont été testé sur une ubuntu 9.10
I - Convertir des vidéos MTS en
AVI
a) installation des pre-requis logiciels
La commande suivante permet de créer à partir de la
vidéo 00002.MTS la vidéo 00002-xvid.avi encodée
au format xvid
ffmpeg -r 29.97 -i 00002.MTS -vtag xvid -deinterlace
-acodec copy -aspect 16:9 -b 17000k -s 800x600 00002xvid.avi
en super-utilisateur saisir:
4) Les paramètres
apt-get install mplayer ffmpeg x264 faac a52dec mencoder faad
libfaad-0 libfaad2-dev subversion csh
b) Connaitre quelques informations sur la
vidéo d'origine
Afin d'optimiser l'encodage il est nécessaire de
connaitre certains paramètres de votre vidéo d'entrée.
Pour cela saisir la commande suivante:
ffmpeg -i ma_video_original.MTS
cette commande permet de connaitre notamment le
ratio d'origine(4:3 ou 16:9) et le bitrate vidéo (ex:
170000Hz)
Le paramètre -aspect
16/9e
16:9 défini une sortie
Le paramètre -s 800x600 défini une résolution de
800x600 pixels
Le paramètre vtag spécifie le codec à utiliser
-deinterlace permet de désentrelaçer la vidéo
d'origine si nécessaire
-b définit la valeur 17000 au bitrate vidéo
II - Concatener des fichiers videos
c) - Encodages AVI
1) Encodage en mp4
La commande suivante permet de créer à partir de la
vidéo 00002.MTS la vidéo 00002-mp4.avi encodée
au format mp4
ffmpeg -i 00002.MTS -vcodec mpeg4 -deinterlace -acodec
copy -aspect 16:9 -b 17000k -s 800x600 00002-mp4.avi
Il arrive assez souvent d'avoir a regrouper des petits
bouts de videos en une seule vidéo. Nous allons voir
que cette opération est vraiment simple sous linux
a) Installation des pre-requis
en super-utilisateur saisir:
apt-get install mencoder
2) Encodage en divx
b) concatenation dans la pratique
La commande suivante permet de créer à partir de la
vidéo 00002.MTS la vidéo 00002-divx.avi encodée
au format divx
mencoder -oac copy -ovc copy -o output.avi input1.avi
input2.avi
ffmpeg -r 29.97 -i 00002.MTS -vtag divx -deinterlace
-acodec copy -aspect 16:9 -b 17000k -s 800x600 00002divx.avi
La commande ci-dessus crée un fichier vidéo
output.avi à partir de la concaténation des fichiers
vidéos input1.avi et input2.avi
3) Encodage en xvid
Memento manipulations multimédia sous Linux
http://thegeekcorner.free.fr
43
Mémento XSLT
créé le 21/04/2010 .
dernière mise à jour le 22/04/2010.
Ce mémento regroupe des astuces et techniques sur XSLT pas nécessairement facile à
trouver sur internet et qui peuvent s'avérer très utiles.
I - Processeurs XSLT 2.0 sous
Linux
III - Générer plusieurs fichiers de
sortie à partir d'une seule XSL
On retrouve beaucoup d'articles sur internet basés
sur XSLT 1.0. XSLT 2.0 a augmenté considérablement
le champs des fonctionnalités possibles avec XSLT.
Avec XSLT 1.0, un feuille de style XSLT ne
permettait de générer qu'un seul fichier en sortie à
partir d'un seul fichier d'entrée.
Sous Linux, il existe plusieurs processeurs XSLT
compatible avec la norme 2.0 dont saxonb-xslt.
Désormais avec XSLT 2.0, il est possible de créer
plusieurs fichiers à partir d'un seul fichier XML
d'entrée.
a) Installation de saxonb-xslt
Sous Ubuntu 9.10, l'installation de saxonb-xslt se
fait en saisissant dans un terminal:
sudo apt-get install libsaxonb-java
b) Usage de saxonb-xslt
saxonb-xslt -ext:on -o:masortie.xml -xsl:maxsl.xsl s:monxmlatransformer
Remarque: -ext:on permet d'activer les extension
XSLT 2.0 qui sont désactivées par défaut.
II - Supprimer les espaces de noms
suite à une transformation XSL
Il peut arrivé que votre XML de sortie ait besoin
d'un espace de nommage (attribut xmlns) cependant
vous constatez qu'à la sortie cet espace de nommage
est répété sur tous vos éléments XML.
Pour
éviter
cet
artefact
il
faut
simplement définir l'attribut exclude-resultprefixes="monprefix" sur l'élement racine de
votre XSL afin que l'espace de nommage "monprefix"
ne figure qu'une fois dans votre fichier de sortie.
Voici un exemple d'entête de feuille XSL
<xsl:stylesheet version="2.0" xmlns:xsl="http://
www.w3.org/1999/XSL/Transform" xmlns:xs="http://
www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">
Pour
cela,
il
faut
utiliser
l'élément
XSLT
<xsl:result-document
href="masortie.txt">
a) Exemple
Voici un exemple complet illustrant la génération de
plusieurs fichiers XML avec une seule XSLT:
Fichier XML d'entrée
<articles>
<article>
<name>article1</name>
<description>description 1</description>
<date>2010-04-16</date>
</article>
<article>
<name>article2</name>
<description>description 2</description>
<date>2010-03-19</date>
</article>
</articles>
Fichier XSLT
<xsl:stylesheet version="2.0" xmlns:xsl="http://
www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" indent="no" encoding="utf-8"/>
<xsl:template match="/">
<xsl:for-each select="./article">
<xsl:result-document href="{./name}.xml" >
<rss version="2.0">
<channel>
<title><xsl:value-of select="./name"/></title>
<description><xsl:value-of select="./
description"/></description>
<lastBuildDate><xsl:value-of select="./date"/></
lastBuildDate>
</channel>
</rss>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Mémento XSLT
http://thegeekcorner.free.fr
44
Fichiers de sortie
article1.xml
<rss version="2.0">
<channel>
<title>article1</title>
<description>description 2</description>
<lastBuildDate>2010-04-16</lastBuildDate>
</channel>
</rss>
article2.xml
<rss version="2.0">
<channel>
<title>article2</title>
<description>description 2</description>
<lastBuildDate>2010-03-19</lastBuildDate>
</channel>
</rss>
IV - Manipulation des dates
Remarque: L'ensemble des opérations ci-dessous ne sont
compatibles que avec XSLT 2.0
a) Connaitre la date courante
Avec XSLT 1.0 il fallait ajouter a mano des
extensions permettant de connaître la date courante ou
bien passer la date en paramètres au processeur XSLT.
Désormais il est possible de connaitre simplement
la date et l'heure courante grâce à la fonction XSL
current-dateTime().
c) Convertir une chaine en date
Pour convertir une chaine en date, il suffit d'utiliser
la fonction xs:date().
Voici un exemple de feuille XSL illustrant une
conversion d'une chaine en date au format RFC 822 (le
fichier XML d'entrée est celui du $ IVa):
<xsl:stylesheet version="2.0" xmlns:xsl="http://
www.w3.org/1999/XSL/Transform" xmlns:xs="http://
www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">
<xsl:output method="xml" indent="no" encoding="utf-8"/>
<xsl:template match="/articles">
<xsl:for-each select="./article">
<xsl:result-document href="{./name}.xml" >
<rss version="2.0">
<channel>
<title><xsl:value-of select="./name"/></title>
<description><xsl:value-of select="./
description"/></description>
<lastBuildDate>
<xsl:variable name="curdate"><xsl:value-of
select="xs:date(./date)"/>T00:00:00</xsl:variable>
<pubDate><xsl:value-of select="formatdateTime($curdate,'[FNn,*-3], [D] [MNn,*-3] [Y0001] [h]:
[m01]:[s01] GMT','en',(),())"/></pubDate>
</lastBuildDate>
</channel>
</rss>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Remarque:
Notez
bien
la
présence
de
xmlns:xs="http://www.w3.org/2001/
XMLSchema"
exclude-result-prefixes="xs",
sans quoi le fichier de sortie trainerait des xmlns:xs=""
sur chaque élément.
Voici un exemple:
<root>
<date><value-of select="currentDateTime()"/></date>
</root>
b) Générer une date au format
compatible RFC 822
La spécification RFC 822 peut-être utile notamment
pour définir les dates d'un flux RSS 2.0.
Voici une date au format RFC 822:
Wed, 02 Oct 2002 13:00:00 GMT
Bien qu'il existe une fonction XSLT 2.0permettant
de formatter des dates (format-dateTime()), celleci n'a pas de patron par défaut pour la RFC 822.
Qu'à cela ne tienne nous allons en définir un qui
est [FNn,*-3], [D] [MNn,*-3] [Y0001] [h]:
[m01]:[s01] GMT.
Combiné à la fonction format-dateTime voici ce
que ça donne:
format-dateTime(current-dateTime(),'[FNn,*-3], [D] [MNn,*-3]
[Y0001] [h]:[m01]:[s01] GMT','en',(),())
V) Limiter le nombre d'éléments
dans une boucle
Pour limiter le nombre d'éléments dans une boucle
<xsl:for-each>, il suffit d'utiliser une condition sur
la position du curseur de la boucle à l'aide de la fonction
position().
Voici un exemple n'affichant que les 5 premiers
articles (XML d'entrée du $ IVa)
<xsl:for-each select="./article">
<xsl:if test="position() &lt; 5">
<item>
<xsl:value-of select="./name"/>
</item>
</xsl:if>
</xsl:for-each>
VI - Boucler sur des éléments
regroupés par une condition
Cela est réalisable avec la balise <xsl:for-eachgroup>; une illustration vaut mieux que de grands
discours:
Mémento XSLT
http://thegeekcorner.free.fr
45
Voici un exemple XSL qui permet à partir du
XML d'entrée du $ IVa d'afficher les articles en les
regroupant par date:
<xsl:stylesheet version="2.0" xmlns:xsl="http://
www.w3.org/1999/XSL/Transform" xmlns:xs="http://
www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">
<xsl:output method="xml" indent="no" encoding="utf-8"/>
<xsl:template match="/articles">
<xsl:for-each-group select="./article" group-by="./date">
<date><xsl:value-of select="current-grouping-key()"/></
date>
<xsl:for-each select="current-group()">
<article><xsl:value-of select="./name"/></article>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Remarques:
current-grouping-key() permet de connaitre la
valeur de l'élément courant permettant de faire le tri
(dans notre cas la date)
Pour chaque date on reboucle sur les articles de cette
date grâce à <xsl:for-each select="currentgroup()">
Remplacer une occurrence de
caractère
C'est simplement
replace().
réalisable
avec
la
fonction
Exemple:
<xsl:value-of select="replace('ceci_est_un_exemple,'_',' ')"/
>
Cet exemple forme la chaine de caractère "ceci est un
exemple" à partir de "ceci_est_un_exemple".
Mémento XSLT
http://thegeekcorner.free.fr
46

Documents pareils