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() < 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