Linux

84

description

Linux

Transcript of Linux

Page 1: Linux
Page 2: Linux
Page 3: Linux

ÉditorialAu cœur de la programmationJava et C++

www.lpmagazine.org

Et nous voilà en période de pluie et de température basse. L'automne est bien installée avec ses pluies et brumes matinales. Pour égayer vos soirées d’automne et d’hiver, nous avons préparé un dossier spécial sur la programmation.

Nous allons nous concentrer dans ce dossier sur les langages Java et C++. En effet, Java est un langage de programmation informatique qui offre de nombreuses possibilités de développement d'applications. Grâce à son efficacité, sécurité et portabilité de la plate-forme, Java est devenu le langage de prédilection des développeurs. Je vous recom- mande l'article Java, problèmes de performace qui vous présentera les stratégies à déployer lorsqu'un problème apparaît dans une application. Découvrez JavaFX, technologie qui augmente la puissance de Java ! Dans l'article de Pascal Barbier Débuter avec JavaFX, vous allez appren-dre, entre autres, à développer les interfaces utilisateur et créer des effets graphiques. À ne pas manquer l'article sur le langage C++ qui traitera essentiellement de la programmation générique.

Pour ceux qui veillent à la sécurité de leurs données, je vous conseille vivement l'article de Régis Senet Chiffrement des données avec EncFS. Vous allez apprendre comment garder la confidentialité de vos données grâce à EncFS, un gestionnaire de chiffrement des données efficace et simple d'utilisation. L'article du même auteur La mise en place d'un pot de miel avec Honeyd vous montrera comment se protéger efficacement contre les pirates informatiques. Il montrera comment tendre un piège aux hackers grâce à un projet libre et gratuit Honeyd.

Dans la section Pratique, découvrez l'article Oracle dans la cour des pingouins qui vous montrera comment installer Oracle 11g sur un système Linux et vous guidera dans la création d'une base de données.

Dans ce numéro, nous avons préparé également une rubrique dédiée aux entreprises. Découvrez les capacités et les fonctionnalités qu'offre OpenERP : gestion des stocks, gestion de la relation client ou la comptabilité ! Cet ERP (Progiciel de gestion intégré en français) deviendra le facteur clé de succès de votre entreprise. Je vous recom-mande également la lecture de l'article sur l'utilisation des logiciels libres en entreprise de Philippe Scoffoni. Vous allez sûrement appré-cier l'article plein de conseils pour la mise en place de logiciels libres en entreprise.

A l’occasion de Noël qui approche, je vous présente mes meilleurs voeux. Joyeux Noël et Bonne Année 2010 !

Bonne lecture à tous !

Au cœur de la programmation Java et C++

Aneta MazurRédactrice en chef

[email protected]

Page 4: Linux

� Linux+ 6/2009

Dans ce numéro

Actus

Actus Julien Rosal

MandrivaFabrice Facorat

DebianJulien Rosal

Dossier

Comment utiliser les logiciels libres en entreprisePhilippe Scoffoni

Les logiciels Open Source remplaceront-ils les logiciels propriétaires ? Existe-t-il des logiciles Open Source pour tous les besoins de l'entre- prise ? Cet article dédié essentiellement aux solutions Open Source en entreprise vous expliquera leurs avantages ainsi que leur mise en place. Un article plein de conseils pour ceux qui souhaitent réaliser un projet Open Source.

Développement d'application RCP Pascal Barbier

La performance de l'interface utilisateur de la plateforme Eclipse permet de développer rapidement des applications portables. Cet article vous expliquera l'architecture de la platforme Eclipse et les principes du dévelo-ppement d'une application portable basée sur RCP.

Sommaire

6

8

9

1�

Programmation

Débuter avec JavaFXPascal Barbier

Découvrez JavaFX ! Cet article vous montrera les principes de la tech-nologie JavaFX, la portabilité multiplatforme et surtout la création des interfaces utilisateur et d'effets graphiques.

Java, problèmes de performance Marcin Kalas

Rencontrez-vous souvent des problèmes liés à la performance de vos applications ? Marre de devoir rédemarrer l'application qui reste sans réponse ? Cet article vous présentera les stratégies et outils à déployer si un problème apparaît dans une application. Vous allez apprendre également comment diagnostiquer les problèmes liés à la performance et trouver la solution.

Programmation Générique C++ Robert Nowak

Le C++, langage de programmation est le 3ème langage le plus utilisé dans le monde entier. Tout le monde peut l'utiliser sans besoin de payer ou demander une autorisation. Cet article traitera essentiellement de la pro-grammation générique C++. Vous allez connaître entre autres l'utilisation des classes de traits ou apprendre à sélectionner un algorithme lors d'une compilation.

Sécurité

La mise en place d'un pot de miel avec HoneydRégis Senet

Peut-on se protéger efficacemment contre les pirates informatiques ? Le programme Honeypot vous montrera que l'on peut aller plus loin : tendre un piège aux hackers. Grâce à cet article, vous allez apprendre à installer et configurer Honeyd afin de vous en servir facilement.

ProFTPd, MySQL, TLS – la sécurité des tranfertsRégis Senet

La mise en place d'un serveur FTP stable et sécurisé relève parfois d'un exploit. L'article de Régis Senet vous montrera comment installer ProF-TPd, un serveur FTP complet. Vous allez connaître également les faibles-ses du protocole FTP et les moyens pour les palier.

18

22

3�

�0

��

�8

Page 5: Linux

�www.lpmagazine.org

Chiffrement des données avec EncFSRégis Senet

Comment assurer la confidentialité de vos données ? Vous trouve-rez la réponse dans cet article qui vous montrera comment chiffrer efficacement vos données grâce à l' EncFS. Découvrez à la simplicité d'utilisation et les nombreux avantages d'EncFS.

Programmation Java et C++Dossier

Avec SVN, ne perdez plus rien Adel Safi

La gestion des différentes versions d'un document devient un gest inévitable lorsque vous êtes un développeur. Cet article vous montrera comment utiliser SVN, un outil incontournable pour gérer les diffé-rentes verions d'un fichier.

Sommaire

Pratique

Oracle dans la cour des pingouins Jonathan Fussner

De nos jours, les bases de données sont omniprésentes que ce soit derrière des logiciels ou en application directe. Cet article présente l'installation d'Oracle 11g sur un système Linux. Apprenez à installer Oracle 11g et créer votre base de données.

Révision de code avec Eclipse et JupiterAdel Safi

Pour fournir un logiciel de qualité, il faut produire un code source de qualité. La revue de code permet d'identifier les erreurs avant la relecture du code par un développeur expérimenté. L'auteur de cet article vous présentera le processus de revue de code à travers Jupiter, plugin pour Eclipse.

Entreprise

Déployez OpenERP Jonathan Fussner

Découvrez les capacités et les functionnalités d'OpenERP ! Cette solution informatique vous aidera à gérer l'ensemble de processus opérationnels d'une entreprise. Au menu entre autres : la Gestion d'activité, Gestion des Ressources Humaines ou encore Gestion Financière.

Fiche Technique

Jeux Laurent Derosier

�6

60

6�

70

7�

79

Page 6: Linux

news Section dirigée par : Julien Rosal [email protected]

Actus

Linux+ 6/2009

NEWS

De la liberté est venue l'éléganceLinux Mint se déclare ouvertement dérivé d'Ubuntu, une distribution représen-tative d'un mouvement Linux qui tient à démontrer que son système est à même de répondre « présent » à une utilisation du PC comme outil multimédia sans connaissance informatique préalable. Mais l'utilisateur qui veut quitter Windows est habitué à voir tout fonctionner sur base du principe « click and run ». Linux Mint a décidé de faciliter la transition de Windows vers Linux en incorporant ces éléments dès l'installation. Linux Mint n'est-il qu'un Ubuntu modifié ? Non. D'abord c'est une main tendue vers les « Windoziens » en leur montrant qu'autre chose est possible même le libre. Ensuite, des outils très pratiques (Mint Install, Mint Menu...) qui apportent une aide immédiate très prisée. Enfin un soin apporté au design nous démontre que l'élégance n'est pas absente de la banquise. Site officiel http://www.linuxmint.comCommunauté francophone http://www.linuxmint-fr.org

TrahisonLa nouvelle PS3 devrait sortir début septem-bre, elle aura une taille et un poids réduit, une consommation électrique amoindrie et un prix qui devrait être revu à la baisse (enfin!). Que de bonnes nouvelles ! Enfin il y a quand même une ombre au tableau car Sony a déclaré ceci : "Le nouveau système PS3 va se concentrer sur la mise à disposi-tion de jeux et autre contenu de loisir, et les utilisateurs n'auront pas la possibilité d'y installer d'autres systèmes d'exploitation". L'aventure Linux sur PS3 devrait donc pren-dre fin avec la PS3 Slim, une triste nouvelle pour tous ceux qui s'étaient investis dans le développement de logiciels autour du pro-cesseur Cell. Il semblerait même que la mise à jour du firmware des PS3 "original" suppri-merait également la possibilité d'installation de Linux. Une véritable trahison de la part de Sony envers la communauté du libre qui supprime encore une fois un atout précieux de sa console.

Frag à donf ! Vous êtes amateur de FPS, vous aimez frager toute la journée, tirer, exploser, découper, détruire sont des mots courant pour vous... Alors soyez heureux car Quake vient enfin d'être porté sous Linux. Une bonne nouvelle qui fait suite à une promesse d'id Software, ce dernier avait promis le portage de Quake live sous MacOS et sous Linux et bien c'est chose faite. Il est rare qu'un éditeur tienne ce genre de promesse alors saluons cette initiative qui devrait faire le bonheur de bon nombre de gamers. Quake Live est totale-ment gratuit, il est composé de pas moins de 40 niveaux et se base très largement sur Quake III Arena. Le jeux est très simplement accessible via un navigateur web, donc la simplicité est de rigueur pour ce jeux et c'est tant mieux, l'important c'est le fun et le frag.

IE� dans le viseurDécidément il n'y a pas un mois où le

monde des navigateurs ne fait pas par- ler de lui. Mais non il ne s'agit pas de classi-que à la voile ou de tour du monde et encore moins de la coupe de l'America. Il s'agit de navigateur internet, vous savez c'est ce que vous utilisez tout les jours pour lire vos mails ou pour regarder des sites pas toujours très avouables. Ok je vois que l'on s'est compris.

Pendant de longues années c'est Internet Explorer qui a dominé le marché des navi-gateurs. Microsoft est assez malin et avait réussit à imposer, par le biais de FrontPage, des sites web non conformes aux normes du W3C (World Wide Web Consortium). Quel intérêt me direz vous ? Et bien, tout simple-ment, ces sites ne pouvaient être lus que par Internet Explorer 6. D'ailleurs certains sites ont encore le logo ou le label "Optimisé pour Internet Explorer".

Ce mode de fonctionnement de Microsoft a contribué à l'émergence de nouveaux navi-gateurs tels que Firefox qui respectent mieux les normes W3C. Le problème c'est que beau- coup d'utilisateurs continuent à utiliser IE6 et donc les sites doivent tenir compte des spé- cificités de ce navigateur. Ce qui veux dire inclu- re des lignes de code pour que le site ne s'affi-che pas en "vrac". Pour de petits sites, ce genre de maintenance est tout à fait jouable, mais pour des sites importants cela demande un gros effort et surtout énormément de travail en plus.

IE6 est tout de même sorti en 2001, cela fait donc 8 ans que ce navigateur est en fonc-tion, soit une éternité en informatique. IE6 est devenu le cauchemar des développeurs avec notamment un comportement plus qu'aléatoire en ce qui concerne le JavaScript et un support incomplet des CSS (voir tout les gros bugs de IE6 sur cette page : http://www.sitepoint.com/blogs/2009/04/14/10-cool-things-well-be-able-to-do-once-ie6-is-dead/).

En février 2009, un mouvement d'origine norvégienne a décidé de faire la peau à ce navigateur obsolète (http://www.wired.com/epicenter/2009/02/norwegian-websi/). Le prin- cipe est simple, il suffit de ne plus supporter IE6 mais surtout de l'afficher publiquement sur le site. Ce mouvement commence a prendre de l'ampleur et des bandeaux commencent à ap- paraître sur les sites web invitant les utilisa-teurs à mettre à jour leur navigateur ou tout simplement en les avertissant que leur navi-gateur ne permet pas un affichage correct de

la page. Le phénomène ne touche pas de petits sites, bien au contraire, des sites importants sont concernés tels que Youtube, Facebook, Twitter, Gmail, Dailymotion, Okrut... Bref, les jours de IE6 sont comptés. Un plugin Word- Press a même été créé pour avertir les utilisa- teurs d'IE6 que leur navigateur est obsolète (http://www.incerteza.org/blog/projetos/shock- inglybig-ie6-warning/).

Plus étonnant encore, la campagne norvé-gienne contre IE6 est très largement soutenue par... Microsoft... Vous savez Microsoft, la petit entreprise familiale qui a crée IE6... Tout cela bien entendu dans le but de promouvoir IE7 qui est, il faut l'avouer, un peu mieux en ce qui concerne les normes W3C.

La disparition de IE6 va tout de même prendre du temps, car bon nombre d'entrepri-ses, d'écoles ou les administrations utilisent des applications faites pour IE6 (les intranet par exemple). Cela va demander beaucoup de travail et donc d'argent pour migrer ses applica- tions vers des standards plus propres. Une en- quête a, d'ailleurs, été faite pour comprendre pourquoi les gens utilisait IE6 (http://blog. digg.com/?p=878). Il apparaît de façon éviden- te que c'est le monde du travail qui soutient grandement IE6.

Microsoft d'ailleurs ne brusque pas vrai-ment les entreprises sur ce terrain car XP SP3 est encore livré avec IE6. Une façon encore de maintenir son influence et empêcher tout basculement vers un autre système d'exploi-tation.

Il faudra certainement du temps pour éradiquer IE6, espérons seulement que les sites dédiés à IE6 disparaitront au plus vite pour que justement les linuxiens puissent pleinement profiter d'internet sans payer les "conneries" de Microsoft. Mais si vous vou- lez vous amuser à installer IE sur votre Linux, sachez que c'est possible, allez faire un petit tour a cette adresse : http://www.tatanka.com.br/

ies4linux pour faire tourner IE sous Linux

Page 7: Linux

Actusnews

www.lpmagazine.org

Section dirigée par : Julien Rosal [email protected]

NEWS

Visa pour LinuxÇa c'est la classe, imaginez-vous : vous êtes au restaurant avec votre petite amie, arrive le moment de l'addition et vous lui dites "laisse c'est pour moi, je suis infor-maticien". Une phrase qui pourrait sembler ridicule si ce n'est que votre carte visa est à l'effigie de Tux. Depuis peu, une carte Visa Platinium avec tux en logo est dispo-nible. Cette carte est clairement faite pour soutenir la fondation Linux car celle-ci recevra 50$ à l'ouverture d'un compte et touchera un pourcentage des achats effec-tués par ses clients. Une excellente nouvelle mais qui malheureusement ne concerne que les Etats Unis, mais la fondation Linux assure que ce genre de carte devrait faire son apparition prochainement dans d'autre pays. Espérons que les pingouins passeront par la France.

XtremLa solution de stockage en ligne XtremFS vient de passer en version 1.0. Cette solu-tion est européenne et permet à plusieurs utilisateurs d'utiliser un disque virtuel. Seul contrainte : avoir internet, vous avouerez que cette contrainte devient dérisoire de nos jours. XtremFS fonctionne comme un Raid 0 mais au lieu de disque, c'est plusieurs ser-veurs qui composent ce raid, autre avantage vos données sont dupliquées sur plusieurs serveurs, ce qui garantit une plus grande sécurité en cas de plantage d'un serveur. Ce projet a été commandé par la commission européenne et a été développé sous licence GPLv2, et de grands groupes tels que la Caisse des dépôts et consignations, l'Inria, EDF ou encore EADS ont participé à ce projet. La solution est séduisante et évolue très vite alors ne manquez pas le train : http://www.xtreemfs.org/.

Dangereuse PommeSuite à des incidents étranges qui se sont produits sur des iPhone, la commission européenne a demandé des comptes à Ap-ple. Rappelons tout de même qu'un iPhone a vu son écran se fissurer de toute part, tan-dis que d'autres ont tout simplement vu leur iPhone exploser suite à une surchauffe de la batterie. Apple a répondu qu'il s'agissait de cas isolés et qu'il ne considérait pas qu'il y ai un problème général. Néanmoins la firme à la pomme à décide de poursuivre les tests et surtout de trouver les causes de "ces cas isolés". Ce genre de problème pourrait vite couter cher à Apple car la com-mission européenne ne rigole pas avec ce genre de chose et si les cas d'iPhone dange-reux venaient à se multiplier et bien Apple devrait tout simplement retirer ses iPhone et ses iPod des rayons de nos supermarchés. Alors attention si on vous vend un iPhone c'est peut être un piège ;) Respectons tout de même ces pauvres produits qui se sont suicidés car ils n'avaient pas Linux comme système d'exploitation.

40 ans de succèsD ans le paysage informatique, il existe

un système d'exploitation qui a 40 ans de recul, vous voyez de qui je veux parler : Unix bien entendu. Ce papy de l'informati-que continue sa route tranquillement et con-serve une image très appréciée dans le monde de l'entreprise. 40 ans c'est un bel anniversaire et il est normal de revenir sur le système qui a inspiré Linus Torvalds.

Tout ce passe en 1969, l'homme marche sur la lune pour la première fois mais Ken Thom- pson s'en fiche royalement car il vient de développer le premier OS mono-utilisateur : le New Ken's System. C'est cet OS qui est la première version d'Unix. Ce système a été ins-tallé sur un mini ordinateur DEC PDP-7 (http:// fr.wikipedia.org/wiki/PDP-7).

En ce qui concerne le nom Unix à pro- prement dit, Wikipedia nous éclaire quelque peu : le nom Unics fut suggéré par Brian Ker- nighan suite à un jeu de mot latin avec Multics; "Multi- car Multics faisait la même chose de plusieurs façons alors qu'Unics faisait chaque chose d'une seule façon". Ce nom fut par la suite contracté en Unix (pour au final être dé-posé sous le nom UNIX par AT&T), cependant personne ne se souvient de qui est à l'origine de la modification du " cs" en "x".

Unix fut écrit à l'origine en langage d'as-semblage mais il fut réécrit en langage C en 1971. le langage C a d'ailleurs été inventé pour Unix. Deux ans plus tard, en 1973, l'entreprise AT&T qui possédait les laboratoires Bell qui avaient mis au point Unix, décida de "donner" le code source de leur OS aux universités moyennant une licence au prix dérisoire.

C'est là que les choses se compliquent... Arrivé à l'université, le succès fut immédiat et AT&T commença à voir qu'il y avait moyen de gagner beaucoup d'argent. La sortie de la version 7 interdisait aux universités d'utiliser le code source d'Unix. Ce fut donc à partir de la version 6 que les clones d'Unix ont commencé à pulluler et notamment la branche BSD (Be-

rkeley Software Distribution) qui a donné des systèmes d'exploitation assez connus comme FreeBSD, NetBSD, OpenBSD et peut être plus étonnant : MacOS...

Et oui la marque à la pomme est un dérivé d'Unix, autant dire que c'est un cousin de Li- nux. Vous avouerez qu'Unix continue à bien se porter au vu du nombre de iPod ou de iPhone qui sont vendus à travers le monde ;)

Les distribution BSD (version 6) étaient plus réservées à un monde universitaire mais ça n'est pas pour autant que la version 7 d'Unix fut tombée aux oubliettes. De grosses sociétés telles qu'IBM ou Sun par exemple ont com- mencé à customiser leur Unix pour créer des solutions serveur répondant aux attentes du monde de l'entreprise. Ainsi des systèmes tels que AIX, HP-UX ou UnixWare ont commencé à voir le jour. En 1985, un professeur améri- cain domicilié aux Pays-Bas, Andrew S. Tanen- baum, a développé un OS basé sur Unix V6 qui se voulait minimal, il fut d'ailleurs bap-tisé Minix. Pourquoi je mets l'accent sur cette distribution particulièrement ? Et bien tout sim-plement car en 1991, un petit gars du nom de Linus Torvalds s'inspira de se système pour crée un OS, ou plutôt un embryon d'OS qui de- vait devenir Linux. Attention Linux ne contient aucune ligne de code d'Unix, c'est un système qui a été totalement réécrit mais qui s'inspire grandement d'Unix.

Nous sommes en 2009 et Unix est toujours là, c'est le système d'exploitation qui a le plus de recul. C'est l'OS qui a le plus inspiré toute notre informatique moderne, même Microsoft s'est inspiré des grands principes d'Unix.

En revanche le futur d'Unix ne semble plus vraiment très rose, un sondage de Gartner Group montre qu'Unix est en déclin depuis plu-sieurs années et cela à cause de Windows et Li- nux. Néanmoins ce déclin devrait être long car beaucoup d'entreprises sont encore dépendan-tes de leur architecture Unix. Selon ce même sondage, prés de 50% des entreprises utilisant Unix ont déclaré : "Unix est une plateforme essentielle pour nous et le restera indéfiniment". Des paroles qui montrent bien qu'Unix est vraiment sans conteste le système qui bénéficie de la plus grande stabilité et le plus grand recul pour ce qui est de la montée en charge. Même si Linux est un système surprenant, il faut bien avouer qu'Unix a un passé assez glorieux et qui force le respect. Souhaitons juste que Linux souffle aussi un jour ses 40 bougies...Les héritiers d'Unix

Page 8: Linux

mandriva Section dirigée par : Fabrice Facorat [email protected]

Actus

Linux+ 6/2009

Disponibilité de la Mandriva Flash 2009 SpringSuite à la sortie de la Mandirva 2009 Spring, la Mandriva Flash 2009 Spring est aussi disponible. Cette version, basée sur la Mandriva 2009 Spring, uti-lise une clé USB de 8Go et est fournie avec des logiciels commerciaux tels que Skype.http://store.mandriva.com/product_info.php?products_id=407

Intégration de PlymouthPour la Mandriva 2010, Plymouth sera utilisé en lieu et place de Splashy pour gérer l'affichage lors du démarrage du système. Plymouth offre de nombreuses fonctionnalités telles que le support de Kernel Mode Settings, la possibilité d'utiliser des plugins pour les thèmes, etc …Frederic Crozat sur son blog en a profité pour expliquer les différents types de gestionnaires de démarrage utilisés sous Mandriva, et les possibilités offertes par Plymouth.http://blog.crozat.net/2009/08/boot-splash-evolution-in-mandriva-linux.html

MIB Live Educational 2009.1La communauté des utilisateurs de MIB (Mandriva Italia Backports) met à disposition MIB Live Educational 2009.1. Ce DVD, basé sur la Mandriva 2009.1 Spring, utilise l'environnement GNOME et contient un large échantillon de logiciels éducatifs, ainsi que toutes les mises à jour de Mandriva jusqu'au mois d'août.http://mib.pianetalinux.org/mib/fr/mib-news/31-mib/412-mib-live-educational-20091.html

Les nouveautés à venir de la Mandriva 2010.0La Mandriva 2010.0 est prévue pour No-

vembre 2009. Cette version apportera de nombreuses améliorations et de nouveaux outils Mandriva seront disponibles pour les utilisateurs. Cette version continuera de met-tre l'accent sur la sécurité. Nous allons donc voir découvrir 2 outils qui sont en cours de développement pour la Mandriva 2010.

Netprofile 2 : gestionnaire de profils réseauxDepuis pas mal de temps déjà, Mandriva Li- nux disposait d'un outil permettant de gérer les profils réseaux : draknetprofile. Cet outil permettait de sauvegarder les informations réseaux, et les services lancés au démarrage afin de pouvoir les restaurer ultérieurement. On pouvait ainsi imaginer le cas simple d'un profil réseau professionnel avec les services nécessaires et la configuration réseau lorsque l'on est dans son entreprise ( authentification réseau, pare-feu ), et celui d'un profil réseau personnel avec ses propres paramètres.

Cependant au fil du temps, cet outil ne fut plus maintenu, et il comportait de plus de nombreuses limitations. Pour la Mandriva 2010, Eugeni Dodonov a pour mission la réécriture du gestionnaire de profils réseaux, et de rendre celui-ci facilement extensible. Cette nouvelle version supporte les fonction-nalités suivantes :

• une architecture modulaire permettant d'ajouter des fonctionnalités via un sys-tème de plugins,

• un outil en ligne de commande portable sur toutes les distributions (netprofile),

• une interface graphique spécifique à Man- driva pour le gérer (draknetprofile),

• le support des profils réseaux au sein de l'applet réseau de Mandriva.

Pour ajouter un nouveau profil réseau, c'est simple. Tout d'abord il convient de lancer draknetprofile via le centre de Contrôle Man- driva dans la section « Réseau & Internet ». Une fois ceci-fait, il suffit de créer un nou-veau profil réseau et de lui donner un nom. Ensuite, il suffit de configurer vos différents paramètres réseaux. Selon les plugins que vous aurez activés, vous pourrez alors sauve- garder les paramètres des connexions réseaux,

du pare-feu, des proxies, et ainsi de suite. À chaque fois que vous allez configurer un élément, il vous sera rappeler pour quel profil réseau ces modifications seront appliquées.

Pour basculer d'un profil à l'autre, on peut utiliser l'applet réseau de Mandriva (Clic droit ->Paramètres->Profil), ou alors utiliser le menu de gestion des profils réseaux qui s'affichera au démarrage du système.

Tomoyo-GUILa Mandriva 2010 marque un tournant au ni- veau du support de solutions avancées de sé-curité, notamment avec le support du système de TOMOYO Linux. Celui-ci a été intégré au noyau 2.6.30, et pour la Mandriva 2010.0, une interface graphique sera proposée. Tomoyo est une implémentation MAC (Mandatory Access Control) pour Linux. En cela il a pour but d'of-frir les mêmes possibilités de restrictions que SELinux, mais en se basant sur les noms des fichiers, et non plus sur les attributs associés aux fichiers : cela permet de simplifier la prise en main et la gestion de TOMOYO. Cepen-dant TOMOYO Linux, bien que plus simple à prendre en main que SELinux, ne dispose toujours pas d'une interface graphique simple d'utilisation pour le configurer. Avec la Man-driva 2010.0, ce problème devrait être réglé grâce à Tomoyo GUI.

Pour tester Tomoyo GUI, il convient d'ins- taller le paquetage tomoyo-gui, puis de redé-marrer votre ordinateur afin que le support de tomoyo soit activé. Ensuite il faut générer les fichiers de configuration par défaut de TO-MOYO avec la commande suivante :

/usr/lib/ccs/init_policy.sh –file-

only-profile

Une fois ceci fait, vous pouvez alors lancer to- moyo-gui. Vous aurez alors la possibilité de définir les restrictions par domaines. Tout d'a- bord, le mieux consiste à passer en mode ap-prentissage afin de connaître la liste des accès du domaine. Ensuite, il vous suffira d'appliquer vos restrictions. Pour que ces restrictions soient respectées, vous devrez passer le domaine dans le mode contraignant ( enforcing mode ).

Vous pourrez avoir plus d'informations sur TOMOYOP et ses possibilités sur le site du projet : http://tomoyo.sourceforge.jp/

Intégration de Plymouth

Page 9: Linux

Actusdebian

www.lpmagazine.org

Section dirigée par : Julien Rosal [email protected]

Debian est une distribution Linux mais c'est surtout une énorme machine com-

posée de bénévoles réunis dans un système ex-trêmement démocratique. La moindre décision doit être débattue avec la communauté pour avoir une distribution qui reflète au mieux le visage de tous les développeurs. Une fois cela dit, vous imaginez bien qu'une décision prise en comité restreint peut vite créer une polé-mique.

La décision (ou plutôt l'idée) coupable est la suivante : Debian a décidé de réguler la sortie de ces versions. Ainsi tous les deux ans, en décembre, la version de Debian sera gelée pour permettre une sortie en début d'année sui- vante. Cela permettra aux utilisateurs de se baser sur des plannings connus à l'avance.

Une idée qui a mis le feu aux poudres et les mailings-liste de Debian ont commencé à se gonfler de posts polémiques. Selon Pierre Habouzit, membre de la "Release Team", il s'agit bien d'une idée, le débat reste ouvert et il n'est pas question de "passer en force". Ce même Pierre Habouzit explique d'ailleurs comment cette idée est arrivée dans une des réunions de la "Release Team" : "Pendant une réunion de la release team à Cambridge il y a quelques se- maines, l'équipe est arrivée à la conclusion qu'il fallait réfléchir selon deux axes : une “re- lease” basée sur une période de “freeze” à une date connue à l'avance et une éventuelle syn- chronisation avec la version LTS (Long Time Support) d'Ubuntu pour donner plus de traction. On voulait voir si les gens du projet étaient d'accord. C'est toujours discuté".

Ubuntu n'est pas étranger à la mauvaise compréhension de la communauté de Debian sur ce sujet. En effet, Mark Shuttleworth, le fondateur d'Ubuntu, a entendu l'idée de la "Release Team" et l'a publiquement révélée comme s'il s'agissait d'une décision définitive.

Debian est une communauté très parti-culière qui refuse toute forme de pouvoir, dès qu'une décision est prise sans l'avis "global" des membres de la communauté il y a forcé-ment des déchirements. Le débat reste ouvert mais la "Release Team" semble vraiment vouloir se battre pour ce projet : "Les termes de notre annonce en ricochet sont encore trop forts. Ce n'est pas un fait accompli, mais la release team va se battre pour cette idée car ce serait plus lisible pour les gens de l'exté-rieur d'avoir un planning connu à l'avance" explique Pierre Habouzit.

ia32-libsVous aviez certainement remarqué que les packages ia32-libs et ia32-libs-gtk avaient disparu des dépôts Debian et cela au profit d'un autre package : ia32-apt-get. Et bien cela est terminé, les deux packages qui avaient disparu retrouvent leur place et c'est tant mieux car ia32-apt-get avait beaucoup de défaut et bon nombre de systèmes se sont vus inutilisables après sont utilisa-tion. Les packages ia32-libs et ia32-libs-gtk permettent d'installer des applications 32 bits sur les architectures amd64, ce n'est certes pas parfait mais il faut bien avouer que ça dépanne bien. Debian ne perd pas de vue que ces packages ne sont pas une solution en soi et travaille sur un support "multiarch" qui permettra d'installer les package debain 32bits directement sur votre architecture 64bits et cela en utilisant la puissance d'apt et de ses dérivés. Une bonne nou-velle qui permettra de patienter jusqu'à ce que toutes les applications soient disponibles en 64 bits... C'est pas encore gagné.

Happy BirthdayLe temps passe vite, Debian devient cha-que jour de moins en moins jeune et le 16 août dernier Debian a soufflé sa 16ème bougie. Un anniversaire qui montre que Debian n'est pas une distribution anecdotique, elle a réussi à traverser les ages ce qui est assez impressionnant vu les moyens financiers quasi nuls dont elle disposait à l'époque. Remercions tous les bénévoles qui ont réussi à faire de Debian la distribution qu'elle est aujourd'hui. Petit détail, amusant, Debian est né 16 ans exactement après la mort du King... Elvis Presley bien entendu... Je savais bien que le King n'était pas mort, il a juste changé de métier pour devenir développeur Linux, enfin tout s'éclaire.

PureOSlightChaque jour une distribution Linux voit le jour et beaucoup sont basées sur Debian. PureOSLight n'échappe pas à la règle et sort la première version de son OS (en version béta pour le moment). Cette distribution se base sur Debian Squeeze (version testing) et intègre les dernières versions des grand noms du logiciel libre. Cela permet d'avoir une distribution en Live qui est légère et parfaitement fonctionnelle pour la plupart de vos besoins de tous les jours. Bref c'est une distribution à glisser dans sa poche, en plus c'est du Debian, que demander de plus, euh non je voulais dire "what else ?". Pour la télécharger : http://www.pureos.org/.

Ce qui a réellement choqué c'est que les membres de Debian ont appris la nouvelle par des personnes extérieures (dont Mark Shuttleworth). Sur le fond, le débat donnera certainement raison à la "Release Team" mais les formes n'y étaient pas, la procédure a été court-circuitée.

Un autre petit problème consiste à mettre en parallèle les distributions Debian et Ubuntu. Les relations entre ses deux distributions ont toujours été tendues et le simple fait d'évoquer une possible synchronisation des sorties des versions LTS (Long Time Support) et des versions Stable de Debian irrite beaucoup de développeurs.

Le débat risque d'être houleux comme l'explique Pierre Habouzit : "Il va y avoir des discussions sur les mailing-lists. Oui, des gens vont râler et il va y avoir de l'opposition. Les releases de Debian, c'est un mythe et ce chan- gement serait un gros truc. Certains sont aller- giques à la synchronisation avec Ubuntu car historiquement les relations sont difficiles. Certains ont de vrais arguments".

Il semblerait qu'un des principes de base de Debian commence à vaciller : "une nou-velle version sort quand elle est prête". Un principe qui est certes très sage mais qui ne correspond pas aux attentes des utilisateurs toujours en recherche de dernières versions de logiciels et cela même au détriment de la stabilité de leur système.

La démocratie n'est pas morte chez De-bian comme le souligne Pierre Habouzit : "Si la majorité est contre, on s'arrête là. Si on ne parvient pas à un consensus, il y aura un réfé-rendum". Une état d'esprit qui fait plaisir, les débats d'idées sont importants dans un projet comme Debian et malgré les polémiques, le projet continue à avancer sereinement. Affaire à suivre...

Democratie.deb

Squeeze devrait être la prochaine version de Debian

Page 10: Linux

10 Linux+ 6/2009

Sur le DVDDVD

Fedora (ex Fedora Core) est l'une des distributions GNU/Linux les plus po-

pulaires. Parrainée par la société nord-amé-ricaine Red Hat (qui édite une distribution GNU/Linux du même nom), Fedora utilise le système de paquetage (paquage) RPM. La distribution Red Hat se destine ouvertement aux entreprises tandis que Fedora vise clai-rement le grand public. Fedora propose donc uniquement des paquetages open-source et sans support. Toutefois, le fait qu'il n'existe aucune assistance officielle pour l'utilisateur particulier ne pose aucun problème puisqu'il existe une très forte communauté Fedora à même de vous aider (forums, Wiki, docu-mentation, etc...).

La Fedora sort avec une compatibilité pour les processeurs i386 (et supérieurs), x86_64.

Il existe 2 solutions pour installer la Fedora 11 :

• via un DVD contenant GNOME et KDE ou,• via un Live CD utilisant GNOME ou KDE.

Dans ces deux cas de figure, le mode d'instal-lation demeure quasiment identique (à peu de détails près).

Initialisation de l'installationVous devez avoir préalablement réglé le BIOS de votre machine pour pouvoir démar-rer avec le lecteur / graveur de CD / DVD. Ce paramétrage est fonction de votre BIOS ;

renseignez-vous donc auparavant sur la pro-cédure. D'autre part, restez vigilant lors de cette étape afin de ne pas déréglé le BIOS ce qui pourrait ensuite nuire au démarrage de l'ordinateur.

Démarrez sur le DVD ou le CD puis :

• si vous utilisez le DVD, choisissez la première option : Install or upgrade an existing system. Cliquez sur Next (Suivant) (Figure 1) afin de valider le test du DVD

Installer Fedora 11 Leonidas

(afin d'en vérifier l'intégrité). Un DVD à l'intégrité corrompue conduira inévi-tablement à un échec de l'installation. Cette étape de test du média peut ce-pendant être sautée si vous êtes certain de son état (test déjà effectué), d'autant qu'elle dure 2 à 3 minutes,

• si vous utilisez le Live CD cliquez sur l'icône Install to Hard Drive (ou Installer sur le disque dur) située sur le bureau.

Cliquez sur Next (Suivant) ce qui vous per-mettra de sélectionner :

• la langue puis le clavier avec une instal-lation par DVD,

• le clavier en installant via le Live CD.

Au sujet du choix du clavier, préférez le La-tin-9 qui vous donnera plus de possibilité que le Latin 1 (intégration du signe € notamment) (Figure 2).

Désormais, les deux modes d'installation sont identiques.

Activation du réseauLe périphérique réseau est paramétré auto-matiquement si vous êtes connecté en mode ethernet mais si vous êtes en mode USB, il se peut que les pilotes nécessaires ne soient pas présent sur le DVD. Vous pouvez aussi activer le réseau en mode manuel (nom du domaine, passerelle, DNS primaire et secon-daire). Cliquez ensuite sur Suivant.Figure 1. Choix du clavier

Figure 2. Choix du type de partitionnement

Page 11: Linux

11www.lpmagazine.org

Sur le DVDDVD

Fuseau horaireUn mappemonde permet de sélectionner le fuseau horaire. Il suffit de cliquer sur l'un des points jaunes. A moins que vous ne vouliez choisir dans une liste à choix (fort longue). Si l'horloge doit être mise à l'heure automatique-ment, validez l'option Horloge système en UTC mais la machine devra être alors connectée sur internet. Cliquez ensuite sur Suivant.

Mot de passe administrateurDans un système GNU/Linux, l'administrateur s'appelle root. C'est le moment d'entrer son mot de passe et de le confirmer. Pour rappel, puis-que l'administrateur a tous les droits :

• ne vous connectez jamais graphiquement en mode administrateur,

• n'utilisez le mode root que pour les opéra-tions de maintenance (pas de bureautique, d'internet...),

• ne laissez pas traîner le mot de passe administrateur et changez-le dès que quel-qu'un l'aura découvert,

• choisissez un mot de passe assez long, avec des chiffres et des lettres en proscrivant les dates de naissance et les noms de vos pro- ches (vraiment trop classique comme choix !).

Cliquez ensuite sur Suivant.

PartitionnementCliquez sur Suivant pour parvenir à l'étape du choix des partitions. Une fenêtre vous montre alors les différents disques durs utilisables (Figure 3). C'est donc ici que nous allons par-titionner (si les partitions ne sont pas encore créées). Quatre choix s'offrent dans le menu déroulant en haut de la fenêtre :

• Utiliser la totalité du disque,• Remplacement du système Linux existants,• Réduire la taille du système actuel,• Utiliser l'espace disque,• Créer un partitionnement personnalisé.

Pour les quatre premières options, vous res-terez vigilant lors de la sélection des disques durs voulu afin de ne pas perdre vos précieu-ses données. Cliquez ensuite sur Suivant.

Nous allons maintenant créer et monter nos partitions de façon personnalisée. Par mon- ter les partitions, comprenez définir leur place dans le système. Si vous avez choisi l'option du partitionnement personnalisé, c'est ici même que nous allons créer les partitions. Pour créer une partition à partir d'un espace vide, cliquez sur l'espace libre puis sur le bouton Nouveau

et vous pourrez définir, outre son point de montage et son système de fichier, sa taille en définissant le cylindre de départ et celui d'ar-rivée. Vous pouvez aussi détruire une parti-tion existante via le bouton Supprimer afin de libérer de l'espace car il est impossible de re-dimensionner une partition existante. Si vous détruisez une partition, soyez sûr de ce que vous faites ! Finalement, cet installateur Ana-conda permet de créer vos partitions avec bien peu d'ergonomie et de souplesse. Mieux vaut donc partitionner préalablement avec GParted

Live CD, GParted étant une application open source (et gratuite) qui sait gérer, outre les sys-tèmes de fichiers GNU/Linux, les systèmes de fichiers Windows Fat32 et NTFS.

Pour monter une partition, cliquez sur la partition voulue puis sur le bouton Modifier et définissez le point de montage (Figure 4). Vous spécifierez aussi si vous désirez formater et dans quel système de fichier (Formater com-me) ou ne pas formater. La partition swap est détectée et montée automatiquement si elle existe déjà.

Figure 3. Sélection des partitions

Figure 4. Choix du type de partition

Page 12: Linux

12 Linux+ 6/2009

Sur le DVDDVD

Précisons que, généralement, un système GNU/Linux se décompose en plusieurs par-titions :

• Partition swap : système de fichier Linux Swap : échange de donnée en complé- ment de la mémoire RAM : obligatoire : jusqu'à 1 Go,

• Partition / (racine) : système de fichier Ext4 (sous Fedora) : contient le système : obligatoire : une installation complète du DVD prend environ 9 Go,

• Partition /home : système de fichier Ext3 ou Ext4 (sous Fedora) : contient les données utilisateurs : recommandée : se- lon vos besoins,

• Partition /usr : système de fichier Ext3 ou Ext4 (sous Fedora) : contient les ap- plications non administratives au for-mat RPM : optionnelle : 5 à 9 Go pour ne pas être à l'étroit éventuellement mais cet espace pourra alors venir en réduc-tion de la partition racine,

• Partition /usr/local : système de fichier Ext3 ou Ext4 (sous Fedora) : contient les applications non administratives compi-lées par l'utilisateur d'après les sources : optionnelle : selon les besoins mais cet espace pourra alors venir en réduction de la partition racine,

• Partition /tmp : système de fichier Ext3 ou Ext4 (sous Fedora) : contient les fi-chiers temporaires : optionnelle,

• Partition /boot : système de fichier Ext3 (sous Fedora) : contient les fichiers né-cessaires au démarrage : optionnelle sa- chant que 100 Mo devraient suffire.

C'est également dans cette fenêtre que vous pourrez monter vos partitions Windows en système de fichier Fat32. On monte ces par-titions dans /mnt/votre_partition.

Attention : si vous installez depuis un LiveCD, vous obtiendrez un message d'er-reur critique (impossible de continuer sans revenir en arrière pour corriger la cause) si la partition racine (/) n'est pas formatée en Ext4 ! Le format de fichier Ext4 est le nouveau choix par défaut de Fedora 11. Cependant, la version actuelle du chargeur GRUB n'est pas compatible avec l'Ext4 et il faut donc créer également et obligatoirement une partition /boot au format Ext3 sous peine de ne pou-voir démarrer Fedora. C'est pourquoi si vous choisissez de remplacer un système Linux existant, l'installateur proposera un nouveau partitionnement incluant une partition racine (/) en Ext4 et une partition boot (/boot) en

Ext3, outre la partition de swap. L'installa-tion par DVD ne pose pas ce problème. Par prudence, continuez à utiliser le format Ext4 pour la partition Home (/home).

Sachez cependant (et par expérience !) que vous ne pourrez installer Fedora si l'un de vos disques durs possède plus de 15 parti- tions. De même, il est possible que vous de-viez abandonner provisoirement le montage de vos partitions Windows afin de réussir votre installation.

Si vous adoptez un partitionnement par défaut, l'installateur Anaconda utilisera le schéma suivant :

• /boot,• / (racine),• swap.

Si vous avez défini vos partitions, vous pou-vez cliquez sur Suivant. Si vous avez deman-dé le formatage des partitions, une deman- de de confirmation vous sera affichée (tant mieux !). Validez par Ecrire les modificati- ons sur le disque ou abandonnez avec Reve-nir en arrière.

BOREL Thierry

Figure 5. Le choix par défaut avec la partition racine en Ext4 et la partition boot en Ext3

Figure 6. Derniers réglages post-installation

• Projet Fedora : http://fedoraproject.org

• Site Fedora Francophone : www.fedora-fr.org

• Communauté Planet Fedora Fran-cophone : http://planet.fedora-fr.org

• Documentation : http://doc.fedora-fr.org/wiki/Accueil

• GRUB : http://doc.fedora-fr.org/wiki/GRUB_:_Les_bases_pour_Fedora

• Windows XP et Fedora : http://doc.fedora-fr.org/wiki/Dual_boot_Windows_XP_-_Fedora

• Télécharger Fedora : http://doc.fedora-fr.org/wiki/Télécharger_Fedora

• Liste d'applications : http://doc.fedora-fr.org/wiki/Liste_de_logiciels

• Yum : http://doc.fedora-fr.org/wiki/YUM_:_Configuration_du_gestionnaire_de_paquets

Sur le réseau

Page 13: Linux

10 Linux+ 5/2009

Sur le DVDDVD

S’il vous est impossible de lire le DVD alors qu’il n’a pas de défaut apparent, essayez de le lire dans un autre lecteur.

6/2009

Pour tout problème concernant le DVD, écrivez-nous à l’adresse : [email protected]

Page 14: Linux

DossierLogiciels Libres

14 Linux+ 6/2009

linux

@so

ftwar

e.co

m.p

l

C ommençons par définir ce qu'est un logiciel open source. Avant cela, il est important d'évoquer les logiciels libres. Ces derniers ont été définis par Richard Stallman fonda-

teur de la Free Foundation Software et répondent à des règles au nombre de quatre :

• Liberté 0 : La liberté d'exécuter le programme – pour tous les usages ;

• Liberté 1 : La liberté d'étudier le fonctionnement du programme – ce qui suppose l'accès au code source ;

• Liberté 2 : La liberté de redistribuer des copies – ce qui comprend la liberté de vendre des copies ;

• Liberté 3 : La liberté d'améliorer le programme et de publier ses améliorations – ce qui suppose, là encore, l'accès au code source.

On voit en ces règles le caractère idéologique qui sous-tend le logiciel libre. Richard Stallman a également rédigé une licence destinée à faire respecter ces règles pour tout logiciel qui l'utiliserait : la licence publique générale GNU

connue aussi sous l’acronyme GPL. Mais bien souvent, idéologie et monde des affaires ne vont pas de pairs.

C'est alors qu'est apparu le terme open source avec la volonté de mettre en avant la méthode de développe-ment plutôt que la finalité philosophique ou politique. Il s'agissait aussi de lever l'ambiguïté du terme anglais Free qui signifie aussi Gratuit et ainsi rappeler aux utilisateurs qu'un logiciel a un coût. Un organisme a été créé : l'Open Source Initiative qui a validé un certain nombre de licen-

Comment utiliser des logiciels open source en entrepriseLes logiciels open source sont en train d'envahir les entreprises à grande vitesse. Tous les compartiments du système d'information de l'entreprise sont concernés, des services réseau aux logiciels de gestion. Mais qui sont-ils ? D'où viennent-ils et comment les met-on en place ? Autant de questions sur lesquelles nous allons nous pencher dans cet article.

Philippe Scoffoni

Le principe des logiciels open source et les avantages que l'on peut tirer de leur utilisation en entreprise.

Cet article explique...

Connaissance des bases de l'informatique et des réseaux.

Ce qu'il faut savoir...

Page 15: Linux

DossierLogiciels Libres

15www.lpmagazine.org

ces tout comme l'a fait la Free Foundation Software. Dans la pratique, un logiciel dont la licence est libre au sens de la Free Foundation Software est également open source, mais il peut arriver qu'une licence open source ne soit pas libre, mais c'est plutôt rare.

Bien qu'il existe une réelle divergence d'opinions entre les deux communautés, dans la pratique cela ne les empêche pas de colla-borer et de travailler ensemble, car elles par-tagent le même mode de fonctionnement basé sur l'ouverture du code et la collaboration.

Topologie des logiciels open sourceDans cette partie, nous allons expliquer la topologie des logiciels Open Source. Com-mençons par les logiciels communautaires.

Les logiciels communautairesIl s'agit de logiciels dont le développement, la maintenance et la documentation sont réalisés par une communauté de personnes liées entre elles par l'intérêt commun qu'elles partagent pour celui-ci. Les petits projets sont en général portés par quelques personnes qui assurent la coordination des développements et la gestion des sources de l'application sans qu'il existe de réelles structures juridiques.

Lorsque les projets prennent une ampleur un peu plus conséquente, la communauté adop- te souvent la forme d'une organisation à but non lucratif pour structurer son fonctionne-ment. Il s'agit souvent de fondations. Parmi les plus célèbres, on peut citer la fondation Apache ou encore la fondation Mozilla qui gère le dé- veloppement du navigateur web Firefox ou encore le client de messagerie Thunderbird.

Les logiciels de sociétés commercialesL'organisation classique qui sous-tend les logiciels propriétaires repose en général sur des sociétés commerciales. Certains projets de logiciels open source ont également choisi dès leur origine ou au cours de leur évolution d'adopter ce statut. L'objectif est de financer le développement du logiciel open source en vendant des prestations de services autour de celui-ci ou bien grâce à des investisseurs pri-vés. C'est un modèle qui est en passe de de-venir prédominant dans le secteur du logiciel open source pour les entreprises.

On assiste également à une vague de ra-chat de ces éditeurs open source depuis quel-ques années par les grands noms historiques de l'informatique. Ainsi, ORACLE a racheté récemment SUN et tous les logiciels open

source édités par ce dernier dont le moteur de base de données MySQL ou encore la suite bureautique Open Office.

Existe-t-il des logiciels open source pour tous les besoins de l'entreprise ?Même s'il est toujours possible de trouver un exemple de domaine logiciel ou l'open source est peu présent, il n'en demeure pas moins vrai qu'ils savent aujourd'hui répondre à la quasi-totalité des besoins d'une entreprise.

Pour l'infrastructure, les solutions pour monter un réseau local avec tous les services de base existent et sont parfaitement matures et robustes : gestion de la couche réseau (adressa-ge IP, gestion des noms de machines), partage de fichiers, d'imprimante, authentification.

On trouve bien sûr des systèmes d'exploi-tation complets pour les ordinateurs de bureau avec tous les outils classiques comme les trai-tements de textes, tableur, gestionnaire de base de données, client de messagerie, navigateur web, etc...

Viennent ensuite les logiciels métiers :

• Des ERP (Enterprise Resource Planning ou Progiciel de gestion intégré) qui prennent en charge la gestion commer-ciale, gestion des stocks, la facturation, la comptabilité, la paie.

• Des CRM (Customer Relationship Mana- gement ou Gestion de la Relation Client) souvent couplés avec les logiciels précé- dents.

• Des GED (gestion électronique de docu-ment).

• Et toute sorte de programme répondant à des besoins moins généraux...

Y-a-t-il des risques à les utiliser ?Dans une étude de novembre 2008, le Gartner Group pointe du doigt les entreprises en les ac-cusant de ne pas mesurer les risques inhérents à l’utilisation des logiciels open source en en-vironnement critique. En cause la multiplicité des licences de ces logiciels et le peu d’atten-tion que leur accorderaient les entreprises prenant le risque de se voir attaquer pour des problèmes d’utilisation illicites de brevets.

On se souviendra que Microsoft avait ac-cusé l’open source de violer 235 de ces bre-vets, ainsi que des menaces de procès suite à l'accord passé entre Novell et Microsoft. Ces affaires ont marqué les esprits.

Dans le cadre d’une utilisation pour des besoins internes y compris dans des applica-tions critiques comme la messagerie, l’open

source ne présente que peu voir pas de ris-ques juridiques. Il en va autrement lorsque l’on utilise ces mêmes logiciels dans le cadre de solutions mises à disposition de tiers. Ce sont donc principalement les éditeurs de logi-ciels ou de services utilisant des briques open source qui doivent faire preuve de vigilance. Les conseils d’un bon juriste ne sont donc pas à écarter bien au contraire.

Bien entendu, le rappel du Gartner Group de la nécessité d’une gouvernance propre aux logiciels open source est justifiée. Elle est ce-pendant tout aussi nécessaire que pour les lo-giciels propriétaires dont les licences peuvent également comporter des risques juridiques.

Quels sont les freins à l'adop-tion couramment avancés ?Le Forrester Research a publié une étude ré-vélant les deux principaux freins à l’adoption du logiciel open source :

• La sécurité, • Le support logiciel,

Il semblerait donc qu’il y ait toujours un im-portant déficit de communication auprès des entreprises sur le modèle open source et son fonctionnement. À quoi cela peut-il tenir ? L’open source ou le Logiciel Libre n’est-il vu que comme un réducteur de coût ? Probable-ment.

Il est évident que la compréhension que peut avoir une entreprise de l’open source ne peut se construire en un seul jour. L’open source est bien trop souvent évalué sur les mêmes critères que les logiciels propriétaires masquant ainsi leurs avantages.

Revenons aux points précédents. Les logiciels open source sont-ils moins sûrs que les logiciels propriétaires?

Tout d’abord, la question en elle-même n’a que peu de sens. Un logiciel reste un logi-ciel. Un développeur a tout autant de chance de faire un code peu sécurisé dans les deux modèles. La différence réside dans l’ouvertu-re du code qui permettra un audit aisé par des tiers externes. Un logiciel propriétaire devra faire appel à un prestataire pour cela.

Il serait préférable de mettre plus en avant le mode de conception et d’améliora-tion centré sur l’utilisateur ou plutôt le con-tributeur. Il s’agit comme l’explique Bernard Stiegler dans une récente interview, d’un basculement entre deux modèles économi-ques : on est passé d’un processus hiérar-chique, produit par le haut pour redescendre vers les applications, à l’« innovation ascen-

Page 16: Linux

16 Linux+ 6/2009

DossierLogiciels Libres

dante ». L’open source répond bien à cette définition.

Une autre métaphore exprimant cette dif- férence est celle d'Eric Raymond l'un des fonda- teurs du mouvement open source qui a intitulé son ouvrage phare : La cathédrale et le bazar en référence aux logiciels propriétaires et open source. N'allez cependant pas croire qu'il n'y a pas d'organisation ni de chef dans un projet open source. Il existe une organisation souvent tout aussi stricte que dans les projets tradition-nels. Cette rupture avec des logiques tradition-nelles et acceptée depuis des années pourrait être à l’origine de cette incompréhension par les entreprises du modèle de l’open source.

En ce qui concerne le support, les socié-tés de services sont capables de proposer des tierces maintenances pour toutes les solutions open source avec l’avantage pour l’entreprise de pouvoir changer de prestataire plus sim-plement.

Les arguments en faveur des logiciels open sourceVoici une rapide synthèse des arguments en faveur des logiciels open source.

Respect des standards ouvertsC’est une des forces des logiciels libres et open source. Les protocoles et formats de données qu’ils utilisent sont ouverts donc documentés. Pas d’obscurs formats qui vous empêcheront à l’avenir de changer de solutions.

InteropérabilitéCe point rejoint le précédent. Les protocoles et formats ouverts permettent aux logiciels open source de communiquer entre eux plus facilement. Vous pouvez ainsi construire des solutions en additionnant les briques tout en gardant des flux cohérents ou changer facile-ment de logiciel sans devoir convertir toutes vos données au nouveau format.

FlexibilitéL’ouverture du code permet d’envisager des modifications afin de personnaliser un logiciel open source. Cependant, il faut penser les évolutions de façon à ce qu’elles puissent être reversées dans le logiciel. L’avantage est en-suite de voir ce développement maintenu par la communauté. La participation au projet reste un point important pour les entreprises, même si au premier abord cela ne semble pas évident.

SécuritéToujours grâce à l’ouverture du code, des corrections de sécurité peuvent être propo-

sées rapidement par n’importe quel membre de la communauté associée au logiciel.

PérennitéDeux cas à distinguer : les logiciels issus de communautés et ceux des éditeurs commer-ciaux. Dans le premier cas la pérennité est liée à la diffusion du logiciel et à l’importance de sa communauté offrant le potentiel d’une relève en cas de défaillance d’un des membres actifs.

Pour les éditeurs open source la question est un peu plus délicate. Sans communauté les épaulant, la pérennité peut se poser dans les mêmes termes que les éditeurs propriétaires. De plus, la concentration des logiciels open source dans les mains de quelques gros éditeurs com-merciaux accentue encore cette problématique. En effet dans ce modèle les développeurs sont en général rémunérés par la société. Si la société décide d'arrêter les développements, il y a une rupture possible dans la continuité de service.

Cependant, c'est un aspect qu'il faut nua- ncer, car bien souvent ces grands éditeurs sont liés avec leurs clients par des contrats de main- tenance qui les obligent à fournir au moins des correctifs pour une période donnée. Enfin der-nier argument et pas des moindres, la licence open source permet potentiellement à une autre société de reprendre tout ou partie du logiciel à son compte.

Maîtrise du Système d'Informations de l’entrepriseConséquence des points énoncés précédem-ment, vous maîtrisez davantage les évolu-tions de votre SI.

Les arguments cités peuvent aussi s’appli-quer à des solutions propriétaires, mais il est plus rare de les voir cumuler tous ces avan-tages en même temps d’autant que certains comme l’ouverture du code restent spécifiques aux logiciels open source.

Comment construire son projet open sourceDans l’absolu, la conduite d’un projet open source ne diffère guère de celle d’un projet mettant en œuvre des outils propriétaires. Vous n'échapperez donc à aucune des phases classiques de recueil des besoins, d’analyse, de recherche de solutions et de vérification de l’adéquation du logiciel au besoin.

Car ne nous y trompons pas, choisir un logiciel open source juste parce qu’il est open source sans s’assurer de son adéquation aux besoins est un bon moyen de faire échouer un projet. Il peut y avoir des situations où un logiciel propriétaire sera mieux adapté.

Les aspects budgétaires et choix des prestations d'accompagnementLe volet budgétaire doit être tout particu-lièrement soigné surtout si vous êtes amené à comparer des solutions propriétaires et open source. Il faut montrer et mettre en évidence les différences qui existent dans la structure des coûts entre ces deux solutions. C’est sou-vent le chapitre qui est le plus épluché lorsque l’on en arrive au stade de la décision même s’il n’est pas le seul critère.

Pour une solution open source, le poste licence est en général nul. Je dis en général, car certaines solutions open source ont un coût de licence lorsque l’on souhaite les uti-liser à des fins commerciales ou encore dis-poser de certaines fonctions avancées. Citons par exemple la base de données MySQL.

Viennent ensuite les prestations . Si vous décidez de prendre en charge la mise en œuvre, assurez-vous d’en avoir réellement les compétences et ne vous contentez pas des tutoriels que vous pourriez avoir trouvés sur Internet pour faire baisser le coût de votre projet.

N’hésitez pas à intégrer des coûts de for- mation que ce soit pour vous ou pour les utili- sateurs surtout si vous touchez aux outils qui leur sont mis à disposition. D’autant que ces formations peuvent passer sur le budget cor-respondant dans votre société et améliorer de cette façon le coût final.

Les économies réalisées sur les licences doivent vous permettre de vous faire accom-pagner techniquement alors, faites appel à une Société de Service en Logiciel Libre (SSLL ou SS2L).

Il s'agit de Société de Services en Ingé-nierie Informatique (SSII) qui se sont spécia-lisées dans les logiciels libres ou open source. Cependant, les SSII classiques proposent de plus en plus des prestations autour des logi-ciels open source.

Finissons par les coûts de maintenance. Là encore deux solutions : vous l'assurez en interne ou vous souscrivez un contrat de sup-port auprès de l’éditeur du logiciel open sour-ce. Ils le proposent tous aujourd’hui. Dans le cas des logiciels communautaires, vous pouvez aussi faire appel à une SSLL pour cela.

En résumé, ne faites pas d’économie sur les prestations. C’est un point à mettre en avant : plus de service grâce aux économies sur les licences, pour un projet en principe mieux accompagné donc aux chances de succès optimal. Ce n’est pas une garantie, mais c’est mieux que de partir avec un dé-

Page 17: Linux

17www.lpmagazine.org

DossierLogiciels Libres

ficit en assistance parce que les licences ont dévoré tout le budget.

La présentation budgétaire doit au final montrer une comparaison des coûts sur au moins trois ans voire cinq ans, car c’est là aussi que les solutions open source se distin-guent surtout si vous prévoyez une extension du périmètre de déploiement de votre appli-cation dans les années qui suivent.

Participer au mouvement des logiciels open sourceLes entreprises peuvent aussi participer, on dit plutôt contribuer au développement d'un lo-giciel open source. Soit directement en pro- posant les modifications apportées à un logi- ciel à la communauté ou à l'éditeur qui le maintient. Soit en demandant explicitement au prestataire de faire cette opération.

Agir ainsi est se donner une possibilité de profiter de ce que l'on peut appeler une externalité positive. En effet si la commu-nauté accepte d'intégrer vos modifications dans le logiciel, vous bénéficiez de fait d'une maintenance gratuite et pérenne de votre investissement. C'est donc un point qui doit aussi être intégré dans les spécifications d'un projet open source. Comment faire en sorte que le développement que je m'apprête à réa- liser soit ensuite intégré au logiciel. Bien sûr ce n'est pas toujours possible, il peut s'agir de modifications liées à votre infrastructure informatique et qui de fait n'intéresseront personne d'autre.

La meilleure solution est toujours d'in- terroger la communauté des utilisateurs pour avoir leur avis sur la fonctionnalité que vous souhaitez développer. Ainsi en anticipant cette possibilité vous vous donnez la possi- bilité d'améliorer le retour sur investisse-ment.

Une démarche qui n'est d'ailleurs par toujours facile, car bien souvent elle peut déclencher la crainte de voir un avantage concurrentiel potentiel réutilisé par la con-currence. Dans ce cas il est possible de diffé-rer le reversement du code source développé à la communauté.

ConclusionComme nous venons de le voir la mise en pla-ce de logiciels open source répond bien sou-vent aux mêmes règles et bonnes pratiques que celles de leurs homologues propriétaires. La couverture fonctionnelle de ces derniers est extrêmement large. Ils offrent aux entre-prises une opportunité pour améliorer leur compétitivité grâce à leur très bon retour sur

investissement. Il est d'ailleurs important de noter que les grands industriels de l'économie numérique que sont Amazon ou Google uti-lisent massivement les logiciels open source. Même Microsoft, figure emblématique du logiciel propriétaire commence à reconnaître à ce modèle des vertus et publie de plus en plus de codes sous licence open source.

Les logiciels open source remplaceront-ils les logiciels propriétaires ? Probablement pas. Mais un mixte des deux modèles va continuer d'exister. Nous assistons actuelle- ment à un ré-équilibrage des parts de mar-chés qui n'est pas encore fini.

Cet article est mis à disposition sous contrat Creative Commons paternité et par- tage des conditions initiales à l’identique ver- sion 3.0 France.

• http://www.journaldunet.com/solutions/dossiers/libre/sommaire.shtml – Le Journal du Net : Dossier Logiciels Libres / Open source

• http://fr.wikipedia.org/wiki/Open_source – Wikipédia : Open source

• http://www.opensource.org/ – Open source Initiative

• http://www.fsf.org/ – Free Software Fundation

• http://www.osalt.com/ – Trouver une alternative open source à un logiciel propriétaire

• http://fr.wikipedia.org/wiki/Eric_Ste-ven_Raymond – Wikipédia : Eric Raymond

• http://seddisoft.kelio.org/cathedrale-bazar.htm – La Cathédrale et le Bazar : traduction française

Sur Internet

Philippe Scoffoni est responsable infor- matique. Son expérience d'une quinzaine d'années acquise en société de services et dans son poste actuel lui a permis de se confronter à une grande diversité d'en- vironnements techniques. Il a découvert les logiciels open source il y a maintenant plus de 6 ans et a pu à de nombreuses reprises les mettre en œuvre que ce soit à titre personnel ou dans le cadre de son activité professionnelle.

À propos de l'auteur

Page 18: Linux

ProgrammationProgrammation Java

18 Linux+ 6/2009

linux

@so

ftwar

e.co

m.p

l

Avant de commencer à développer des inter-faces avec JavaFX, il nous faut installer le Framework. Plusieurs possibilités s’offrent à l’adresse : http://javafx.com/downloads.

Cette page propose le téléchargement d’un plugin JavaFX pour NetBean, celui pour Eclipse ainsi que les add-ons pour les logiciels de dessin Illustrator et Photoshop. Pour ma part, je conseille aux débutants de télécharger le SDK qui propose l’ensemble complet d’outils pour démarrer avec la technologie. Il ne faudra qu’un JDK 1.6 pour travailler. En effet le SDK contient : les librairies et leurs sources, le compilateur et ses outils, l’exécutif pour Win-dows, un émulateur de téléphone portable, la documenta-tion et des exemples.

Pour aller plus loin, l’installation de l’environnement de développement Netbean ou d’Eclipse avec le plugin JavaFX permettront d’augmenter la productivité. Dans le cadre de cet article, je n’utiliserai que le SDK.

Plongeons maintenant dans la syntaxe de ce nouveau langage. Avec un éditeur de texte quelconque, plaçons les lignes suivantes dans un fichier dont l’extension devra

obligatoirement être .fx. Attention ; le nom du fichier deviendra le nom de la classe Java générée par le compila-teur. Si le code doit générer plusieurs classes (gestionnai-res d'événements par exemple), les autres classes seront automatiquement nommées en utilisant le nom du fichier source suivi du signe $ et d'un suffixe.

Pour créer une fenêtre d’interface utilisateur, nous utilisons un objet Stage (voir listing 1).

Pour compiler le code ainsi rédigé, nous lançons la commande :

javafxc Prog.fx

Débuter avec JavaFXLe but initial de la technologie JavaFX est de simplifier la conception d’applications avec des interfaces riches et de permettre leur distribution facile sur de nombreuses plateformes connectées : téléphones portables, PC sous Windows, Linux ou Mac-OS. Nous allons montrer dans cet article l’avantage de la simplicité pour le développeur, la portabilité multiplateforme, les capacités offertes en effets graphiques et en animations et enfin la souplesse procurée par la possibilité d’interfacer toutes les technologies Java existantes.

Pascal Barbier

• Les principes de la technologie JavaFX. • Sa mise en œuvre pour réaliser des interfaces

utilisateur.• La création d'effets graphiques et d'animations.• Le déploiement multi-plateforme.

Cet article explique...

Page 19: Linux

ProgrammationProgrammation Java

19www.lpmagazine.org

Pour lancer le programme, nous utilisons l’exécutif javafx :

javafx Prog

Allons un peu plus loin et plaçons dans cette fenêtre quelques contrôles. Pour cela, nous allons placer une scène dans la fenêtre. La scène représente l’espace utile de la fe-nêtre. Dans cette scène, nous allons utiliser un élément VBox pour disposer des éléments les uns au dessous des autres. En haut, un la-bel, au milieu un bouton et en bas un second bouton. Ajoutons une variable compteur de type entier. Cette variable est liée à l’élément label. Cette liaison permet au label d’af- ficher en permanence et automatiquement la valeur de la variable. Les deux boutons sont caractérisés par une fonction de traitement qui modifie la valeur de la variable. Voici le code, et le résultat (cf. Listing 2). Voici le code (cf Liting 2), et le résultat (cf. Figure 1).

Le principe général du langage apparaît ici clairement. J’ai décrit la disposition des éléments graphiques. Je n’ai, à aucun moment, défini les procédures et détails de la mise en œuvre de cette interface graphique. JavaFx est un langage plutôt déclaratif. Le databin-ding permet de s’affranchir également de détails répétitifs dans le traitement des inter-faces utilisateur.

Une autre caractéristique intéressante du langage est sa portabilité. En effet, nous ve-nons en quelques lignes de réaliser une petite application de type Desktop. C'est-à-dire une application qui s’exécute sur un poste de tra-vail de type PC dans une interface utilisateur graphique. Pour installer cette application dans un téléphone portable doté d’un exé-cutif JavaFX, il suffit d’utiliser la commande

javafxpackager pour créer un package de déploiement :

javafxpackager -src rep -appClass

Prog -p mobile

Attention, le répertoire rep sera entièrement exploré et tous les fichiers source d’extension fx seront compilés et intégrés dans le pac-kage. La commande génère un répertoire dist dans lequel on trouvera deux fichiers : un jar et un jad. Ces fichiers doivent être déployés sur le portable. Pour simplifier le dévelop-pement, Sun nous fournit un émulateur de portable (cf. Figure 2). Pour exécuter notre application dans cet environnement, il faut lancer la commande :

emulator

-Xdescriptor:dist/Prog.jad

Des effets sans effortsUne des caractéristiques les plus intéressantes de JavaFx est la facilité de mise en œuvre d’ef-fets graphiques plus ou moins sophistiqués. Pour exemple, un simple dégradé de couleur va donner un peu de relief à notre fenêtre à l’apparence bien plate (cf. Listing 3).

Ici l’effet est un dégradé vertical qui donne une apparence cylindrique. Les coordonnées sont données en relatif à la taille de la fenêtre grâce à des valeurs comprises entre 0 et 1. La valeur 0 est en haut ou à gauche, la valeur 1 en bas ou à droite de la fenêtre. La propriété stops fournit un tableau de deux ou plusieurs valeurs de couleur ainsi que leur position re-lative dans le dégradé. Ici j’ai choisi de placer du bleu au début et à la fin du dégradé (posi-tions 0 et 1) et le gris au milieu de ce dégradé (position 0.5). L'interpolation des couleurs est réalisée automatiquement par l'environ-nement exécutif.

Pour obtenir un autre effet, l’exemple qui suit utilise un dégradé radial qui donne un rendu sphérique (cf Figure 4).

Un autre effet de base, très prisé, est l’om- bre. Plusieurs possibilités s’offrent au desi-gner pour cela. Ici j’ai choisi l’effet DropS-hadow qui dessine une sorte de halo autour du bouton (cf. Figure 5). Cet effet est plus efficace sur un fond clair et uni.

Button {text:"Augmente" action:

function(){compteur++} effect:

DropShadow{radius:10} }

JavaFX propose en standard un grand nom- bre d'autres effets graphiques. En particulier

des traitements simples ou sophistiqués d'ima- ges tels que la rotation, l'agrandissement ou le rétrécissement, les déformations diverses... Tous ces effets sont appliqués par une simple description des opérations souhaitées, comme dans l'exemple précédent. Sur le même princi- pe, les animations vont compléter la palette d'outils mis à disposition du développeur d'interfaces utilisateur riches.

Création d'animationsJavaFX permet facilement d'ajouter des ani-mations dans les applications. Pour aborder simplement ce sujet, j'ai choisi d'afficher un petit rectangle qui va grandir et rétrécir régu-lièrement. Je commence par créer une varia-ble rect de type Rectangle et une scène qui contient ce rectangle. L'animation est cons-tituée d'une variable de type TimeLine qui comporte des KeyFrame. Chaque KeyFrame

Figure 1. Une interface simple

Figure 2. Application JavaFx dans un téléphone

Pour comprendre cet article vous devrez connaître.

• La syntaxe de Java.• Les grands principes des interfaces

homme-machine (IHM) graphiques.

Ce qu'il faut savoir...

Figure 3. Effet cylindre (gradient)

Figure 4. Effet sphérique (gradient)

Figure 5. Ombre sur un bouton

Page 20: Linux

20 Linux+ 6/2009

ProgrammationProgrammation Java

est une étape de l'animation. Elle est dé-finie par une date dans l'animation et une action appliquée à cette étape. Ici, l'action est de changer la taille du carré. L'attribut autoReverse détermine si la séquence est re-prise dans le même sens ou en sens inverse à chaque fois. L'attribut repeatCount définit le nombre de répétitions (cf. Listing 5).

Cette animation ne brille pas par sa flui-dité. Je pourrais ajouter des KeyFrame inter-

médiaires pour améliorer la situation mais le code va rapidement grossir inutilement. Heu-reusement, JavaFX a prévu un mécanisme d'interpolation. Le code qui suit reprend les deux étapes précédentes mais la notation => demande à l'exécutif de créer une interpola-tion de valeurs. J'ai également profité de cette seconde version pour montrer une notation plus concise pour définir les KeyFrames sim-ples (la notation at; cf.Listing 6).

Intégration de toutes les technologies JavaArrivé à ce stade, on pourrait imaginer que JavaFX est un tout nouveau langage : nou-velle syntaxe, nouvelle commande de com-pilation, nouvelle commande d'exécution. Pourtant, en examinant les fichiers créés par le compilateur Javafxc, on aperçoit des fi-chiers bien familiers : le compilateur génère des fichiers class, au même format que leurs ancêtres générés par notre bon vieux compi-lateur javac. Mais alors, pourquoi n'utilise-t-on pas la commande java.exe ou javaw.exe pour exécuter l'application ainsi construite ? Pour bénéficier d'un nouvel environnement exécutif qui intègre toutes ces technolo-gies graphiques. Partant de ce constat, il paraît évident que la compatibilité avec les autres librairies Java pouvait être faci-lement conservée. C'est ce qu'a prévu Sun. Heureusement d'ailleurs car en parcourant rapidement la documentation de l'API de JavaFX, on constate que la syntaxe est très limitée.

Pour utiliser une classe d'une librairie Java traditionnelle, il suffit dans le code d'en importer la classe. Par exemple, si je veux afficher un texte sur la console, je peux appeler la méthode println de l'objet out déclaré statique dans la classe System (en fait cette méthode est déconseillée car elle ne fonctionnera que sur certaines platefor-mes disposant d'une console. Un TVSet ou un téléphone portable n'offriront pas cette fonctionnalité. À ce propos, il existe une classe javafx.lang.FX qui donne accès, comme en java la classe System, au système d'ex- ploitation. Voici le code pour utiliser la mé- thode println :

import java.lang.System;

System.out.println(err_mess);

ConclusionCe bref article ne peut remplacer une for-mation complète ou les documentations de l'éditeur. Si vous voulez explorer les possi-bilités de cette nouvelle technologie, je vous conseille d'aller visiter le site Internet de Sun : http://javafx.com. En examinant de près cette nouvelle technologie d'interface utili-sateur, on s'aperçoit qu'elle a visiblement été conçue pour concurrencer les Flex et au- tres Silverlight. Le langage de script paraît plutôt vieillot dans sa conception, comparé à des langages plus modernes comme Action Script 3. Toutefois, il faut reconnaître qu'il reste assez simple et donc rapidement as-

Listing 1. Création d'une fenêtre

import javafx.stage.Stage;

Stage {

title: "Contrôles JavaFX"

}

Listing 2. Code pour une fenêtre avec quelques contrôles

import javafx.stage.Stage;

import javafx.scene.Scene;

import javafx.scene.control.*;

import javafx.scene.layout.*;

var compteur : Integer;

Stage {

title: "JavaFX"

scene: Scene { width: 100 height: 100 content:

VBox { translateX: 20 translateY: 10 spacing: 10 content: [

Label { text: bind compteur.toString() }

Button {text: "Augmente" action: function() { compteur++ } }

Button {text: "Diminue" action: function() { compteur-- } }

]}

}

}

Listing 3. Créer un effet de dégradé vertical

fill: LinearGradient { startX: 0 startY: 0 endX: 0 endY: 1

stops: [

Stop { offset: 0.0 color: Color.BLUE},

Stop { offset: 0.5 color: Color.DARKGRAY },

Stop { offset: 1.0 color: Color.BLUE},

]

}

Listing 4. Effet dégradé sphérique

fill: RadialGradient { centerX: 0.5 centerY: 0.5

stops: [

Stop { offset: 0.0 color: Color.rgb(150,150,150) },

Stop { offset: 1.0 color: Color.rgb(30,30,30)},

]

}

Page 21: Linux

21www.lpmagazine.org

ProgrammationProgrammation Java

similable, contrairement à ses concurrents. Pour le développeur Java traditionnel, il pré-sente l'énorme intérêt de faire disparaître une grande quantité de code répétitif et fastidieux lié au traitement des interfaces utilisateur très graphiques (traitement de l'image, anima-tions). Pour des actions plus procédurales et moins graphique animé, il est toutefois plus prudent de se rabattre sur le bon vieux code Java. Pour le moment, les deux mondes (Java et JavaFX) s'ignorent plutôt. Certes des progrès ont été faits dans les plugins pour NetBean et pour Eclipse mais cela reste gran-dement à améliorer. Gageons que Sun saura faire le nécessaire dans les années à venir pour rendre ce nouvel environnement de dé-veloppement d'interfaces utilisateur riches un environnement incontournable.

Listing 5. Animation

import javafx.stage.Stage;

import javafx.scene.Scene;

import javafx.scene.paint.*;

import javafx.scene.shape.*;

import javafx.animation.*;

var rect = Rectangle {x: 50,y: 50,height:50,fill: Color.GREEN};

var anim = Timeline {

repeatCount: Timeline.INDEFINITE;

autoReverse: true;

keyFrames: [

KeyFrame { time: 0s; action: function():Void { rect.width=30; } }

KeyFrame { time: 1s; action: function():Void { rect.width=50; } }

]

}

anim.playFromStart();

Stage {

title: "JavaFX"

scene: Scene { width: 150 height: 150

content: rect;

}

}

Listing 6. Animation avec interpolation

import javafx.stage.Stage;

import javafx.scene.Scene;

import javafx.scene.paint.*;

import javafx.scene.shape.*;

import javafx.animation.*;

var rect = Rectangle {x: 50,y: 50,height:30,fill: Color.GREEN};

var anim = Timeline {

repeatCount: Timeline.INDEFINITE;

autoReverse: true;

keyFrames: [

at(0s) { rect.width=>30 }

at(1s) { rect.width=>50 }

]

}

anim.playFromStart();

Stage {

title: "JavaFX"

scene: Scene { width: 150 height: 150

content: rect;

}

}

• http://javafx.com – Le site officiel de Sun

• http://java.developpez.com/faq/javafx – Quelques réponses très utiles aux premières questions qu'on se pose quand on utilise JavaFX

• http://www.sun.com/software/javafx – Une présentation (en Anglais) de JavaFX

• http://java.sun.com/javafx – Le site de ressources des développeurs JavaFX.

• http://java-javafx-iipt.blogspot.com – Un blog plein de ressources.

• http://www.javafx.fr – Un site Français qui, on l'espère, continuera à s'enrichir.

Sur le Net

L'auteur est formateur en informatique depuis plus de 25 ans. Ses principaux domaines d'intervention sont les sys-tèmes (Unix, Linux et Windows), les réseaux, les langages et les bases de données. Il forme surtout des person-nels techniques dans les grandes en-treprises françaises et étrangères. Il est également consultant sur des projets de développement et assure le support technique d'une équipe de développeurs en Roumanie.

À propos de l'auteur

Page 22: Linux

ProgrammationJava, problèmes de performance

22 Linux+ 6/2009

Garbage Collector – optimisation des paramètres de la gestion de la pileGarbage collector est responsable du processus de la ges- tion automatique de la mémoire. Parmi ses tâches se trouvent l'allocation et la libération de mémoire derrière les objets auxquels les références n'existent plus dans le code de l'application lancée (et la garantie que les objets utilisés par l'application resteront dans la mémoire). La gestion de la mé-moire est une tâche complexe et peut avoir un impact con- sidérable sur la performance de l'application. À cause d'une configuration incorrecte des paramètres du garbage col-lector, la machine virtuelle peut passer la plupart de temps à gérer la mémoire et non à exécuter le code de votre applica-tion. Heureusement, le cas contraire est également possible : grâce à une configuration correcte, il est possible d'augmen-ter considérablement la performance de votre application.

Afin d'évaluer la performance du garbage collector, il est possible d'utiliser les métriques suivantes :

• débit – relation de la durée, exprimée en pour cents, pendant laquelle la machine virtuelle exécutera le

code de l'application, par rapport à la durée totale du travail du programme. Le débit ne doit pas être inférieur à 98 % pour une application dont les- paramètres de la pile sont configurés correcte- ment ;

Java problèmes de performanceMême une application très bien écrite peut donner une mauvaise impression à un utilisateur si elle a des problèmes liés à la performance. Les longues périodes sans réponse de la part du programme ou la nécessité de redémarrer l'application au bout de quelques heures de travail peuvent décourager l'utilisateur. Cet article présente les outils et les stratégies à utiliser lorsque ce type de problème apparaît dans votre application.

Marcin Kalas

• Comment identifier les symptômes des problèmes liés à la performance dans une machine virtuelle Java ;

• Quelles données diagnostiques sont indispensa-bles pour résoudre un problème donné ;

• Comment collecter les informations diagnostiques indispensables ;

• Quels outils utiliser pour diagnostiquer un problème ;

• Comment résoudre un problème et vérifier la solution implémentée.

Cet article explique

Page 23: Linux

ProgrammationJava, problèmes de performance

23www.lpmagazine.org

• durée de la pause – durée pendant la-quelle la machine virtuelle Java n'exé-cute pas le code de l'application et est chargée de gérer la mémoire ;

• durée entre chaque cycle consécutif du garbage collector ;

• fréquence des cycles du garbage collec-tor ;

• taille de la pile.

N'oubliez pas que la performance de votre ap-plication doit toujours être évaluée du point de vue de l'utilisateur. De son point de vue, les exigences peuvent concerner une durée minimale de la pause, un débit maximal ou les deux. En ce qui concerne les applications de fenêtres, la durée de la pause constitue un paramètre critique. De longs cycles de travail du garbage collector peuvent avoir un impact désavantageux sur le confort du travail de l'utilisateur qui peut être irrité par l'absence d'une réponse rapide de la part de l'application ou par le fait qu'elle plante (dans le cas des cycles supérieurs à 1[s]). Dans les applications JEE, le débit de l'application (autrement dit le nombre maximal de tran-sactions que le système est capable de gérer en une second) constitue le facteur le plus important.

Symptômes d'un choix incorrect des paramètres du garbage collectorLes problèmes relatifs à un choix incorrect des paramètres du travail du garbage col-lector entraînent avant tout la baisse de la performance de l'application. Parmi les pa-ramètres critiques se trouvent notamment : taille maximale et minimale de la pile, stratégie du garbage collector ainsi que taille de toutes les zones de la pile dans le cas des stratégies utilisant les générations. Le travail de l'application peut se terminer par une exception OutOfMemoryError ou bien le processus de la gestion de la mémoire s'exécutera plus longtemps que

le code de l'application dans les situations extrêmes (en pratique le débit inférieur à 90 % signifie un travail incorrect du garbage collector). Parmi les symptômes les plus importants d'un choix incorrect des paramètres du garbage collector se trouvent :

• baisse de la performance de l'applica-tion après un travail prolongé (à cause d'un choix incorrect de la taille de chaque zone de la pile, dans le cas des stratégies du garbage collector qui utili- sent les générations, les piles peuvent être remplies rapidement lors du travail de l'application et les cycles du gar-bage collector seront plus longs et plus fréquents) ;

• augmentation de la performance de l'application après le redémarrage de la machine virtuelle (un redémarrage de la machine virtuelle peut par exemple supprimer la fragmentation de la pile) ;

• durée ressentie par l'utilisateur pendant laquelle l'application ne répond pas à ses commandes (potentiellement longs cy-cles du garbage collector) ;

• analyse des logs verbose:gc indique que le débit est inférieur à 90 %.

Collecter les données diagnostiquesAfin d'évaluer la performance du garbage collector, il faut collecter les logs verbose:gc. Ils fournissent toutes les informations indispensables à l'analyse.

Malheureusement, le format de ces logs n'est pas standard et ils sont différents non seulement dans les implémentations différen- tes de la machine virtuelle mais aussi dans les versions consécutives. Il est possible d'acti-ver les logs verbose:gc au moyen de l'option -verbose:gc transmise à la machine vir-tuelle Java lors du démarrage de l'applica-tion (cette option active les logs verbose:gc sur la machine virtuelle d'IBM et de Sun). À titre d'exemple, pour collecter les logs

Listing 1. Logs verbose:gc générés par la machine virtuelle IBM (stratégie par défaut du garbage collector)

<af type="tenured" id="240" timestamp="Apr 29 23:53:23 2009"

intervalms="1343.508">

<minimum requested_bytes="1016" />

<time exclusiveaccessms="0.015" meanexclusiveaccessms="0.015"

threads="0" lastthreadtid="0x39F88300" />

<refs soft="2" weak="5" phantom="1" dynamicSoftReferenceThreshold=

"10" maxSoftReferenceThreshold="32" />

<tenured freebytes="8320096" totalbytes="943718400" percent="0" >

<soa freebytes="0" totalbytes="934281216" percent="0" />

<loa freebytes="8320096" totalbytes="9437184" percent="88" />

</tenured>

<gc type="global" id="240" totalid="240" intervalms="1343.562">

<timesms mark="162.169" sweep="13.252" compact="0.000"

total="175.480" />

<tenured freebytes="312675064" totalbytes="943718400"

percent="33" >

<soa freebytes="304054920" totalbytes="934281216"

percent="32" />

<loa freebytes="8620144" totalbytes="9437184" percent="91" />

</tenured>

</gc>

<tenured freebytes="312674048" totalbytes="943718400" percent="33" >

<soa freebytes="304053904" totalbytes="934281216" percent="32" />

<loa freebytes="8620144" totalbytes="9437184" percent="91" />

</tenured>

<refs soft="2" weak="5" phantom="1" dynamicSoftReferenceThreshold=

"10" maxSoftReferenceThreshold="32" />

<time totalms="175.545" />

</af>

• Comment compiler et lancer une application Java ;

• Comment la machine virtuelle Java gère la mémoire ;

• Comment collecter les informations relatives à l'utilisation du processeur, de la mémoire, des ressources disque, de la mémoire swap.

Ce qu'il faut savoir

Page 24: Linux

24 Linux+ 6/2009

ProgrammationJava, problèmes de performance

verbose:gc, il faut lancer votre application de manière suivante :

java -verbose:gc

MyJavaApplication

L'emplacement des logs verbose:gc dépend de l'implémentation de la machine virtuelle. Java fourni par Sun redirige par défaut les logs verbose:gc à la sortie standard. Dans le cas de la machine virtuelle d'IBM, les logs verbose:gc seront redirigés au flux standard d'erreurs. Nous recommandons toutefois d'enregistrer les logs dans un fichier concret (il faut alors s'assurer que le disque contient un espace suffisant pour enregistrer les fi-chiers). Il est possible de le faire sur la machine virtuelle de Sun au moyen d'une option supplémentaire -Xloggc:gcLogFile.log. En ce qui concerne la machine IBM, vous obtiendrez le même résultat grâce à l'option -Xverbosegclog:gcLogFile.log. Il est possible de transmettre des paramètres sup-plémentaires avec l'option -verbose:gc ; ces paramètres permettent d'obtenir des infor-mations plus détaillées relatives au proces-sus de la gestion de la mémoire. Il faut tou-jours s'assurer que les logs contiennent une trace du temps de chaque cycle du garbage collector ainsi que l'information relative à l'occupation de toutes les zones de la pile (c'est particulièrement important lorsque la pile est divisée en plusieurs générations).

Interprétation des logs verbose:gcLes logs verbose:gc contiennent toutes les informations relatives au processus de la ges-tion automatique de la mémoire. Pour les ana-lyser, nous utilisons principalement les outils spécialisés (par exemple, IBM Garbage Col-lection and Memory Visualizer) qui permet-tent non seulement d'effectuer une analyse graphique mais qui contiennent aussi un rap-port général avec les conseils concernant les paramètres de la pile. Nous recommandons toutefois de faire connaissance du format de ces logs et des options supplémentaires qui peuvent faciliter l'analyse.

SUN JVMIl est nécessaire de transmettre l'option -XX:+PrintGCDetails et -XX:+PrintGCTimeS-tamps avec l'option -verbose:gc. Cette démarche vous permettra d'obtenir des infor-mations supplémentaires relatives à la taille de toutes les zones de la pile (avant et après la fin du cycle), la taille totale de la pile et la

taille des objets copiés entre les générations diverses. De plus, les logs contiennent une trace du temps du cycle et la durée de l'exécu-tion de toutes les phases.

Dans la version 5.0, la pile est divisée en trois zones : young generation, old genera- tion et permanent generation – les logs verbo-se:gc contiennent des informations liées à tou- tes ces zones. Si le cycle du garbage collector concerne une zone destinée aux objets d'une durée de vie courte (en anglais nursery), le format des logs se présentera de manière sui- vante :

[GC [<collector>:

<starting_occupancy1> ->

<ending_occupancy1>(<size1>),

<pause_time1> secs]

<starting_occupancy3> ->

<ending_occupancy3>(<size3>),

<pause_time3> secs]

Voici les significations des symboles :

• collector – nom interne du récupérateur utilisé pendant le cycle ;

• starting_occupancy1 – occupation du nursery avant le début du cycle ;

• ending_occupancy1 – occupation du nursery après le début du cycle ;

• size1 – taille de la zone destinée aux ob-jets d'une durée de vie courte ;

• pause_time1 – durée de récupération de la zone destinée aux objets d'une durée de vie courte ;

• starting_occupancy3 – utilisation totale de la pile avant le début du cycle ;

• ending_occupancy3 – utilisation totale de la pile une fois le cycle terminé ;

• size3 – taille totale de la pile ;• pause_time3 – durée totale.

Nous vous présentons ci-dessous un frag-ment des logs verbose:gc contenant les infor- mations sur deux cycles qui concernent la zone destinée aux objets d'une durée de vie courte :

0.257: [GC 0.257:

[DefNew: 3648K->448K(4096K),

0.0175056 secs]

36187K->36183K(58332K),

0.0175841 secs]

0.281: [GC 0.281:

[DefNew: 4096K->448K(4096K),

0.0061237 secs]

39831K->39829K(58332K),

0.0062072 secs]

Le premier cycle a commencé 257[ms] après le lancement de la machine virtuelle. 3,64 [Mo] de 4,1 [Mo] au total étaient utilisés dans la zone destinée aux objets d'une durée de vie courte avant le début du cycle. Suite au travail du garbage collector, 3,2[Mo] de la mémoire ont été libéré ; une fois le cycle terminé, 0,44[Mo] de cette zone était occupé. La durée de la récupération s'élève à 17[ms]. L'utilisation totale de la pile avant le début du cycle était égale à 36,187[Mo] de 58,3[Mo]

Figure 2. Utilisation de la pile par l'application test

Page 25: Linux

25www.lpmagazine.org

ProgrammationJava, problèmes de performance

disponibles. Une fois le travail du garbage collector terminé, l'utilisation totale de la pile n'a pratiquement pas diminué et s'élève à 36,183[Mo]. La question se pose alors : que s'est-il passé avec la mémoire libérée dans la zone des objets d'une durée de vie courte ? Dans ce cas-ci, ces objets n'ont pas été supprimés mais copiés dans la zone des objets d'une durée de vie plus longue (en anglais tenured).

IBM JVMLe Listing 1 présente des exemples de logs verbose:gc. La balise d'ouverture <af> vous informe de l'origine du cycle du garbage col-lector. Dans l'exemple mentionné il s'agissait d'une allocation de la mémoire échouée (en anglais allocation failure). Parmi d'autres possibilités se trouvent <con> (si le garbage collector travaille au même temps que l'ap-plication) ou <sys> (si le cycle est le résul-tat de l'appel de la méthode System.gc()). Pour contrôler l'occupation de la pile, nous utiliserons les balises <tenured>. Le log joint comprend trois balises de ce type. La première d'entre elles contient l'information sur l'occupation de la pile avant le début du cycle. La balise suivante (intégrée dans l'élé-ment <gc>) est une utilisation de la pile une fois le cycle terminé. La dernière répétition de la balise <tenured> vous parle de l'état de la pile après que l'allocation échouée de la mémoire (qui a provoqué le cycle du gar-bage collector) a réussi. La balise <minimum

requested_bytes="1016" /> constitue la taille de cette allocation.

Toutes les situations ne sont pas bien évi-demment propices au redémarrage de la ma-chine virtuelle avec l'option -verbose:gc (en particulier dans le cas d'un environnement de production). Il est possible d'activer dy-namiquement la connexion d'informations relatives à la gestion automatique de la mémoire aussi bien sur la machine virtuelle de Sun que d'IBM. Nous pouvons le faire en utilisant le Management API ou JVM Tool Interface. Un exemple d'utilisation du Management API pour suivre le travail du garbage collector se trouve dans le réper-toire suivant : $JAVA_HOME/demo/manage-ment (où $JAVA_HOME est le répertoire où JDK, l'installation de Sun, a été installé). Il est également possible d'activer les logs au moyen de l'outil fourni avec JDK (par exemple, Sun avec JDK fournissent l'outil graphique Jconsole) ou, dans le cas des ser-veurs de l'application, au moyen de la con-sole d'administration (par exemple, dans le serveur de l'application WebSphere, nous activerons les logs verbose:gc de manière suivante : Servers->ApplicationServers-> serverName->Java and Process Manage-ment->Process Definition->Java Virtual Ma-chine->Runtime->Verbose garbage collec- tion).

Le temps système de génération des logs verbose:gc dépend en grande partie de notre application. Dans le cas des systèmes

de transaction, où la transformation de la demande de l'utilisateur exige un accès à la base de données et le retard dans le réseau a aussi un impact sur la durée de la réponse, l'activation des logs verbose:gc n'aura qu'une influence minime sur la perfor-mance de l'application. Dans le cas des applications qui utilisent principalement les ressources du processeur pendant le travail, cette influence peut être plus grande. Avant d'activer les logs verbose:gc dans un envi-ronnement de production, nous recomman-dons de réaliser un test et d'évaluer un im-pact réel de la génération des logs sur la per-formance de notre application. En général, après l'activation des logs verbose:gc, la durée du cycle du garbage collector ne doit pas augmenter de plus que 2 %. À titre d'exem-ple, si la relation de wla durée passée à la ges- tion de la mémoire à la durée totale du tra-vail de l'application s'élève à 5 %, ce temps système augmentera jusqu'à 5,1 %.

Outils de diagnosticPour analyser complètement les logs ver-bose:gc, il est indispensable d'être muni des outils chargés de présenter les données collectées sous forme graphique et de créer un rapport sommaire. Nous recommandons Garbage Collection and Memory Visualizer pour analyser les logs verbose:gc. Cet outil est fourni avec le paquet IBM Support As-sistant. Mis à part la présentation graphique de différents paramètres de la gestion auto-matique de la mémoire (notamment, la taille de la pile utilisée avant la fin du cycle et le nettoyage après la fin du cycle, la durée de la pause), l'outil analysera les logs et suggérera les paramètres susceptibles d'améliorer le travail du garbage collector.

IBM Support AssistantIBM Support Assistant est un paquet d'outils permettant de diagnostiquer les problèmes relatifs au logiciel WebSphere. Si vous n'uti-lisez pas ce logiciel (par exemple WebSphere Application Server), il est possible d'opter uniquement pour les outils permettant de dia-gnostiquer les problèmes relatifs à la machine virtuelle Java. Vous pouvez télécharger IBM Support Assistant gratuitement depuis les sites Web d'IBM.

Les mises à jour automatiques des outils de diagnostic ainsi que la possibilité d'utiliser la plupart d'entre eux avec la machine virtuel-le Sun constituent une qualité supplémentaire liée à l'utilisation de ce paquet.Figure 3. Les logs verbose:gc de l'application où une fuite de la mémoire a été simulée

Page 26: Linux

26 Linux+ 6/2009

ProgrammationJava, problèmes de performance

Afin d'utiliser les outils de diagnostic de la machine virtuelle, il faut dans un pre-mier temps installer le support du produit qui utilise la machine virtuelle Java (par exemple WebSphere Application Server). Pour ce faire, sélectionnez dans le menu Update–>Find new–>Product Add-ons. En- suite, sélectionnez WebSphere Application Server (par exemple, version 7.0) dans l'ar-bre et sélectionnez les outils de diagnostic demandés à l'écran suivant.

Parmi les outils les plus intéressants se trouvent :

• Garbage Collection and Memory Visua-lizer – il permet de diagnostiquer les problèmes relatifs à la gestion automa-tique de la mémoire ;

• IBM Thread and Monitor Dump Analy-zer for Java – il permet de diagnostiquer les problèmes relatifs à l'arrêt de la ma-chine virtuelle ;

• Java Health Center – cet outil permet de se connecter à la machine virtuelle démarrée et d'obtenir des informations sur : le nettoyage (durée de la pause, débit, taille de la pile), les moniteurs uti-lisés par l'application et les statistiques de méthodes effectuées par l'application (fréquence de l'exécution du code d'une méthode donnée, fréquence de l'appari-tion d'une méthode dans la trace de la pile des threads).

Optimisation des paramètres du garbage collectorLe choix des paramètres appropriés du travail du garbage collector s'effectue en trois éta-pes. La première étape consiste à sélectionner une taille correcte de la pile : sa taille mini-male et maximale. Ensuite, en fonction des exigences par rapport à notre application (dé-bit maximal ou durée de la pause minimale), nous sélectionnons la stratégie appropriée du garbage collector.

Stratégies du Garbage CollectorLa machine virtuelle IBM, version 5.0, vous propose au choix quatre stratégies optimisées du point de vue des scénarios définis :

• optthruput – stratégie par défaut du gar-bage collector. Elle est recommandée pour les applications où le débit est plus important qu'une brève durée de la pau-se. Le nettoyage de la pile s'effectue par les threads parallèles (appelés threads

esclaves), dont le nombre est inférieur au nombre de processeurs logiques, et par le thread maître. Il est évité dans cette stratégie d'effectuer la défragmen-tation de la pile et la plupart de cycles ne comprennent que les étapes mark et sweep.

• optavgpause – l'objectif de cette stratégie consiste à minimiser la durée de la pause du garbage collector (même au prix de la dégradation du débit). Une partie du travail du garbage collector est effectué dans cette stratégie parallèlement au code de l'application. Cette stratégie se prête très bien aux programmes qui nécessi-tent des pauses minimales, provoquées par le travail du garbage collector. Il est possible d'activer la stratégie opta-vgpause en transmettant le paramètre -Xgcpolicy:optthruput lors du démarrage de la machine virtuelle.

• gencon – cette stratégie traite différem-ment les objets d'une courte durée de vie par rapport aux objets d'une durée de vie plus longue. Un autre collecteur est uti-lisé pour chacun de ces groupes d'objets (collecteur qui copie et nettoie la zone d'objets d'une courte durée de vie et col-lecteur qui travaille parallèlement avec l'apparition et qui nettoie la zone d'objets d'une durée de vie plus longue). Cette stratégie se prête parfaitement aux appli-cations de transaction (dans lesquelles la plupart d'objets ont une courte durée de vie qui correspond à la durée de l'exé-cution de la transaction). Pour activer la stratégie gencon, il faut transmettre le paramètre -Xgcpolicy:gencon lors du démarrage de la machine virtuelle.

• subpool – l'algorithme d'allocation de la mémoire a été optimisé dans cette straté-gie. Le nettoyage de la pile s'effectue de manière analogique à la stratégie optthru-put. Pour activer la stratégie subpool, il faut transmettre le paramètre -Xgc-policy:subpool lors du démarrage de la machine virtuelle.

Dans la machine virtuelle Sun, version 5.0, toutes les stratégies utilisent les générations (dans la machine virtuelle IBM, seule la stra- tégie gencon utilise les générations). La stra-tégie par défaut dépend du type de la machine où l'application sera lancée. Vous avez les types suivants de collecteurs au choix :

• Serial Collector – collecteur par défaut dans la machine client. Le collecteur se

sert d'un thread individuel pour nettoyer les zones de deux générations. Il est possible d'utiliser le collecteur dans les applications qui ne demandent pas une courte durée de pause et qui sont pour-vues d'une taille relativement petite de la pile (en dessous de 256 [Mo]).

• Parallel Collector – collecteur par défaut dans la machine serveur. Pour nettoyer la zone d'objets d'une durée de vie courte, le collecteur utiliser les threads paral-lèles, ce qui permet de bénéficier de la puissance des processeurs supplémentai-res. Grâce à cette démarche, la durée de la pause est réduite et le débit est amé-lioré. La zone d'objets d'une durée de vie plus longue est nettoyée au moyen d'un thread individuel (de manière analogi-que au Serial Collector). Le collecteur peut être utilisé dans les applications qui ne demandent pas une courte durée de la pause.

• Parallel Compacting Collector – collec-teur utilisant les threads parallèles pour nettoyer la zone de deux générations. Les threads parallèles qui nettoient la zone d'objets d'une durée de vie plus lon-gue permettent d'améliorer le débit (et de minimiser la durée pendant laquelle l'ap-parition s'arrêtera). Le collecteur se prête très bien aux applications où le débit est le plus important. Pour en bénéficier, il faut transmettre le paramètre -XX:+Use-ParallelOldGC lors du démarrage de la machine virtuelle.

• Concurrent Mark-Sweep Collector – col- lecteur le plus avancé qui exécute une partie du travail parallèlement avec l'ap- plication. Cette solution permet de mini-miser la durée pendant laquelle l'appari- tion s'arrêtera. Le collecteur est destiné aux applications nécessitant la plus courte durée de la pause possible. Pour l'utiliser, il faut transmettre le paramètre -XX:+UseConcMarkSweepGC lors du dé-marrage de la machine virtuelle.

La dernière étape consiste à sélectionner les autres paramètres de gestion de la pile tels que : taille de toutes les générations (dans le cas de la stratégie utilisant les générations) et seuil d'occupation de la pile (une fois le seuil dépassé, la pile sera réduite ou augmentée). De plus, la machine virtuelle Sun fournit des mécanismes permettant d'optimiser automatiquement les paramètres du travail du garbage collector : durée minimale de la pause (option -XX:MaxGCPauseMillis=n) ou

Page 27: Linux

27www.lpmagazine.org

ProgrammationJava, problèmes de performance

débit maximal (option -XX:GCTimeRatio=n). D'après les valeurs transmises, la machine virtuelle sélectionne automatiquement les paramètres supplémentaires afin d'atteindre l'objectif demandé.

Après toute modification des paramètres, il est indispensable d'effectuer des tests de performance et d'évaluer l'impact des para-mètres utilisés. La vérification est indispen-sable avant d'utiliser les paramètres sélection-nés dans l'environnement de production.

Afin de paramétrer la taille maximale et minimale de la pile, il est indispensable de définir la taille maximale et minimale de la zone occupée par notre application. Le gar-bage Collector tentera de choisir la taille de la pile de sorte que l'occupation de la pile (une fois le cycle terminé) ne dépasse pas le seuil où son travail optimal est possible (durée du cycle et sa fréquence). Les limites par défaut de ce seuil sont différentes pour la machine virtuelle IBM et Sun.

Dans la machine virtuelle IBM, la pé-riode d'occupation de la pile est comprise entre 40 % et 70 %. Ces limites peuvent être modifiées au moyen des paramètres -Xmaxf (quantité maximale de la zone libre qui entraîne la réduction de la pile si elle est dé-passée) et -Xminf (taille minimale de la zone libre qui entraîne l'augmentation de la pile si elle est dépassée).

Dans la machine virtuelle Sun, les li-mites par défaut de cette période (version 32-bits, système d'exploitation Solaris) sont comprises entre 30 % et 60 %. Ces limites peuvent être modifiées au moyen des para-mètres -XX:MinHeapFreeRatio (lorsque la limite supérieure de cette période est dé-passée, la taille de la pile est augmentée) et -XX:MaxHeapFreeRatio (lorsque la limite inférieure de cette période est dépassée, la taille de la pile est réduite).

La taille maximale de la pile (qu'il est possible de déterminer au moyen du para-mètre -Xmx) doit être choisie de manière à permettre le travail du garbage collector dans la période décrite ci-dessus. Si l'utilisation de la pile dépasse la limite supérieure de la pé-riode (70 %), la pile se remplira rapidement et provoquera des cycles très fréquents du garbage collector. Nous pouvons admettre la zone maximale de la mémoire, utilisée par notre application + 50 %, en tant que point de démarrage de la taille maximale de la pile. Ensuite, une fois les tests effectués, cette taille peut être augmentée.

Si l'occupation de la pile descend en-dessous de la limite inférieure de la période

(40 %), la fréquence des cycles du garbage collector se réduira (nous avons à notre dis-position une grande zone de la mémoire donc le remplissage de la pile sera plus lent). Ces cycles peuvent être en revanche plus longs en raison de la zone étendue à nettoyer. Le débit de l'application sera également dé- térioré.

La taille minimale de la pile (qu'il est possible de définir au moyen du paramètre -Xms) ne doit pas être trop grande (nous dé-conseillons de paramétrer une taille minimale et maximale de la pile avec la même valeur). Grâce à cette démarche, lors du démarrage de la machine virtuelle et de l'augmentation de la taille de la pile, la défragmentation s'effectuera sur une zone réduite. Sinon, le premier démarrage du processus du garabage collector peut prendre beaucoup de temps et être onéreux.

Application testLa suite de l'article présentera les exemples de problèmes relatifs au processus de la gestion automatique de la mémoire et les manières pour les résoudre. Pour ce faire, nous utilise-rons une application test qui simule l'utilisation de la pile.

L'application crée quatre tableaux dont la taille totale s'élève à 350 [Mo] compre-nant les tableaux d'octets de tailles diverses (l'application allouera les objets des tailles 100 [o], 1 [ko] et 64 [ko]. Les objets dans ces tableaux seront rafraîchis dans une bou-cle à une fréquence variable (30 % d'objets changera durant le travail de l'application, les 70 % restants constitueront les objets qui vivent tout au long de son fonctionnement).

L'application sera également utilisée dans la suite de l'article au moment où nous ana-lyserons la fuite mémoire et les arrêts de l'application Java.

Configuration des applications testAvant de lancer l'exemple, il faut ouvrir le fichier conf.bat pour l'édition et paramétrer les variables suivantes :

• IBM_JVM_5_ROOT,• SUN_JVM_5_ROOT.

Les variables doivent pointer sur le réper-toire d'accueil de la machine virtuelle (la première variable pointe sur la machine vir-tuelle d'IBM et la seconde – sur la machine virtuelle de Sun). Les exemples ont été tes-tés sur la machine virtuelle, version 5.0 ; nous vous encourageons toutefois à expéri-

menter avec la version 6.0 de la machine virtuelle.

Zone maximale de la pile trop petiteDans un premier temps, nous analyserons le comportement de la machine virtuelle IBM lorsque la taille maximale de la pile est trop petite et les objets placés sur la pile dépassent 70 % de sa taille maximale. Avec une telle configuration et pour répondre aux demandes de création de nouveaux objets, le garbage collector essayera :

• de supprimer la fragmentation de la pile ;• d'augmenter sa taille.

Puisque nous dépassons la période du travail optimale du garbage collector, les cycles seront fréquents, ce qui réduira la perfor-mance. De plus, la défragmentation effec-tuée par le garbage collector augmentera la durée des cycles (les tests seront effectués pour la stratégie optthruput pour laquelle la défragmentation n'est effectuée dans aucun cycle).

Nous lançons l'application au moyen du script startExample_1.bat qui se trouve dans le répertoire Example1-GarbageCollector. Les logs verbose:gc seront enregistrés dans le fichier heapTooSmall.log. L'applica-tion travaillera pendant 4 minutes. Pendant cette période, nous pouvons prendre con-naissance des paramètres transmis lors du démarrage de la machine virtuelle (il est possible d'ouvrir le fichier pour l'édition dans notre éditeur texte préféré). Pour ef-fectuer l'analyse, nous optons pour l'outil Garbage Collection and Memory Visuali-zer [GCMV] disponible dans le paquet IBM Support Assistant (avant de commencer l'exercice, il est indispensable de configurer le paquet IBM Support Assistant et d'ins-taller les outils nécessaires ; nous avons décrit la configuration dans l'encadré IBM Support Assistant).

Une fois le paquet IBM Support Assis-tant lancé, nous sélectionnons Analyze Prob- lem->Garbage Collection and Memory Visu- alizer dans l'onglet Home et indiquons le fichier généré avec les logs verbose:gc. Afin d'éva-luer l'occupation de la pile, il faut apporter sa taille ainsi que le degré de son occupation après la fin du cycle du garbage collector sur le schéma :

• VGC Heap Data–>Heap size.• VGC Heap Data–>Used heap (after

global collection).

Page 28: Linux

28 Linux+ 6/2009

ProgrammationJava, problèmes de performance

De plus, il faut apporter les points suivants sur le schéma :

• VGC Data –> Summary,• VGC Data –> Tunning recommendation,• VGC Pause Data –> Pause time.

La Figure 2 présente l'occupation de la mé-moire par l'application test. Puisque notre application utilise 83 % de la pile (il est possible de le vérifier d'après les informa-tions récapitulées dans l'onglet Report après avoir ajouté le rapport VGC Data → Sum-mary), les cycles seront très fréquents, ce qui détériorera la performance de notre ap-plication. Avec la taille maximale de la pile égale à 500 [Mo], le débit ne s'élève qu'à 91,5 % (pendant 9 % de la durée de l'exécu-tion du programme, l'application était donc arrêtée).

Il est possible d'améliorer la situation en augmentant la taille de la pile de manière à permettre le travail lorsque l'occupation de la pile est inférieure à 70 %. Nous ouvrons donc le fichier startExample_1.bat pour l'édition et modifions la taille maximale de la pile à 900 [Mo] (paramètre -Xmx). Nous lan-çons de nouveau le test et nous vérifions les résultats (à l'aide de GCMV). Grâce à l'aug-mentation de la taille maximale de la pile, la performance de l'application s'est considéra-blement améliorée : seulement 3 % de la durée ont été utilisés pour gérer automatiquement la mémoire. La Figure 2 présente la taille de la pile, la zone de la pile utilisée par l'appli-cation une fois le cycle terminé ainsi que la durée de la pause. Les points symbolisent les cycles respectifs.

Fuites de la mémoireLa gestion automatique de la mémoire permet de résoudre la plupart de problèmes qu'un programmeur rencontrera lors de l'alloca-tion et la désallocation des objets sur une pile. Il est toutefois possible (et dans les ap-plications Java cela arrive très souvent mal-heureusement) que des références à l'objet, qui ne sera plus utilisé dans la suite du pro-gramme, ne sont pas supprimées. Ces réfé-rences peuvent bloquer la possibilité de dé-sallouer cette zone. Le fait que la référence à un objet donné est supprimée uniquement dans certains cas (par exemple, lorsqu'une erreur de l'application est incorrectement traitée par un programmeur qui ne désalloue pas toutes les ressources utilisées) compli-que très souvent la situation. Le problème n'apparaît pas souvent pendant les tests mais

seulement dans l'environnement de production en provoquant l'augmentation progressive de l'utilisation de la pile. À un moment, la zone de la pile occupée est tellement grande que le garbage collector n'est plus capable de travailler de manière efficace (ce qui en-traîne des cycles longs où l'application ne ré-pond plus aux actions de l'utilisateur). Dans le cas du serveur de l'application, nous pou-vons souvent avoir l'impression que le ser-veur s'est soudainement planté (par exem-ple, au bout de quelques jours de travail). Et la machine virtuelle termine le travail avec l'exception java.lang.OutOfMemoryError.

Bien évidemment, l'exception susmen-tionnée ne doit pas forcément constituer un synonyme d'une fuite de la mémoire (il est peut être possible de résoudre le problème en augmentant la taille maximale de la pile). Tout incident de ce type dans un environne-ment de production doit toutefois être véri-fié. Augmenter la taille maximale de la pile peut s'avérer une solution temporaire ca-chant le vrai problème qui réapparaîtra plus tard.

Symptômes de la fuite de la mémoireL'augmentation progressive de l'utilisation de la pile par l'application, qui mène jusqu'à l'ex-ception java.langOutOfMemoryError (cette exception est générée lorsque la pile n'a plus suffisamment de mémoire pour y placer un nouvel objet), est un symptôme typique d'une fuite de la mémoire. De plus, le travail de l'application ne justifie pas l'augmenta-tion observée de l'utilisation de la mémoire (par exemple, cache de l'application). L'ap-parition de cette exception est très souvent précédée par un travail plus lent de l'appli-cation provoqué par les cycles fréquents du garbage collector.

Collecter les données diagnostiquesAfin de diagnostiquer la fuite de la mémoire, nous pouvons utiliser les logs verbose:gc dé-crits dans le chapitre précédent. Ils nous per-mettront de constater l'augmentation prog- ressive de l'utilisation de la mémoire par notre application. Malheureusement, il sera impossible de déterminer d'après ces logs si cette augmentation résulte du travail normal de l'application (par exemple, l'augmentation de la charge générée par les utilisateurs) ou bien s'il s'agit d'une fuite mémoire classique. Afin de confirmer une fuite de la mémoire,

il faut collecter des informations supplémen-taires. Pour ce faire, nous utiliserons des cli-chés mémoire (en anglais heap dump), con-tenant des informations relatives à tous les objets sur la pile. Le cliché mémoire généré par la machine virtuelle contient des infor-mations relatives :

• aux objets qui se trouvent sur la pile ;• aux classes ;• aux objets auxquels la machine virtuelle

a un accès direct (en anglais garbage collector roots) :

• aux variables locales (paramètres trans-mis à l'entrée de la méthode ou objets locaux présents dans la trace de la pile du thread) ;

• aux classes systèmes ;• aux variables locales dans le code natif

(défini par l'utilisateur ou la machine virtuelle) ;

• aux variables globales dans le code natif (défini par l'utilisateur ou la machine virtuelle) ;

• aux moniteurs actifs.

Il est possible de réaliser les clichés mémoire de plusieurs manières différentes : en trans-mettant des paramètres supplémentaires lors du démarrage de la machine virtuelle, en en-voyant ensuite un signal approprié ou bien en utilisant les outils de diagnostic (solution plus simple). Afin de réaliser un cliché mémoire en envoyant le signal à la machine virtuelle, il faut lancer notre application avec les paramè-tres suivants (Sun JVM 5.0) :

• -XX:+HeapDumpOnOutOfMemoryError – cette option fera générer un cliché mé-moire lors de l'apparition de l'exception java.lang.OutOfMemoryError (nous recommandons de lancer la machine virtuelle avec cette option. En cas de problèmes, nous disposerons alors des données permettant d'analyser le pro-blème).

• -XX:+HeapDumpOnCtrlBreak – cette option fera générer un cliché mémoire (ainsi que le cliché de l'état de tous threads) après l'envoi d'un signal ap-proprié à la machine virtuelle. Il s'agit du signal SIGBREAK (par exemple, la combinaison des touches [Ctrl+Brk] dans la fenêtre de notre application) dans le système d'exploitation Windows. Dans le système Linux, il faut envoyer le signal SIGQUIT (par exemple, via la commande kill -3 JVM_PID).

Page 29: Linux

29www.lpmagazine.org

ProgrammationJava, problèmes de performance

• -agentlib:hprof=heap=dump,

format=b – combinaison des paramètres ci-dessus (nous déconseillons d'utiliser cette option).

Une autre manière de réaliser un cliché mé-moire consiste également à utiliser les outils comme Jconsole et Jmap. Malheureusement, les options disponibles changent en fonction de la version de la machine virtuelle et du sys-tème d'exploitation (Jconsole peut être utilisé dans la version 6.0 de Java, Jmap ne fonc-tionnera en revanche que dans les environne-ments Linux et Solaris).

N'oublions pas que l'exécution du code de notre application s'arrêtera pendant la du-rée du cliché mémoire (dans le cas des envi-ronnements de production, il faut être parti-culièrement attentif en générant les clichés mémoire car ils peuvent déstabiliser le travail de la machine virtuelle). Le meilleur cas con-siste à répéter le problème avec un des envi-ronnements test où la génération des clichés mémoire ne présente aucun risque supplé-mentaire.

Outils de diagnosticEclipse Memory Analyzer (MAT) constitue un outil parfait pour analyser les clichés mé-moire. Il permet d'analyser les clichés mémoi-re générés aussi bien par la machine virtuelle Sun (format HPROF) que IBM (format PHD – Portable Heap Dump). Traiter les clichés générés par la machine virtuelle IBM de-mande toutefois qu'un plugin approprié soit installé (le lien à la procédure décrivant son installation se trouve dans les références). MAT nous permettra de détecter et de diagnos- tiquer les fuites de la mémoire et d'analyser une grande consommation de la mémoire par l'application. Parmi les rapports générés par MAT se trouvent également les informa-tions sur l'utilisation des collections (cartes,

listes) par notre application. De plus, il est possible d'écrire nos propres questions qui analyseront la pile à la recherche des objets qui nous intéressent.

Analyse de la fuite de la mémoireAfin d'analyser une fuite mémoire typique, nous nous servirons de l'application utilisée dans le chapitre précédent (nous utiliserons la machine virtuelle Sun à des fins de test). Le code du programme a été modifié de manière à ce que des références à une partie d'objets ne soient pas supprimées. Pour ce faire, une liste objectsNoLongerUsed a été créée. Des références aux objets inutiles y seront ajou-tées au fur et à mesure.

Avant de lancer l'exemple, assurons-nous que le fichier de configuration conf.bat a été correctement édité. Ensuite, nous lançons l'apparition. Nous exécutons le script star-tExample_2.bat depuis le répertoire Exam-ple2-MemoryLeak. Une fois l'application dé-marrée, nous réalisons des clichés mémoire : le premier après environ deux minutes et le second – après trois minutes et demi environ. Pour ce faire, nous appuyons sur la combi-naison de touches [Ctrl+Brk] dans la fenêtre de la console où est lancée notre application (dans le système d'exploitation Linux, nous envoyons le signal kill -3 JVM_PID). Le cli-ché mémoire sera enregistré dans le chemin courant (format du fichier : java_pid<pid>.hprof.<yyyymmdd>.<hhmmss>, où pid est l'id du processus de la machine virtuelle et <yyyymmdd>.<hhmmss> est une durée pendant laquelle a été généré le cliché mé-moire.

Pour analyser le fonctionnement du pro-gramme, nous commençons par les logs ver-bose:gc qui constituent une première source d'informations sur la consommation de la mémoire. Nous lançons Garbage Collector and Memory Visualizer et nous ouvrons le fi-chier memoryLeak.log contenant les logs ver-bose:gc. Il est recommandé de commencer l'analyse par la zone de la mémoire occupée par l'application après la fin du cycle du gar-bage collector (VGC Heap Data –> Used heap (after collection)). Il est également re- commandé d'illustrer sur le schéma la taille de la pile (VGC Heap Data –> heap –> Heap Size) et les informations supplémentaires telles que : nombre de cycles (VGC Data –> Summary), durée de la pause (VGC Pause Data –> Pause times), fréquence des cycles pour chaque zone de la pile (VGC Data –> GC scopes (nursery or global)). La Figure 3 présente une augmentation constante de la

consommation de la mémoire (la mémoire utilisée après la fin du cycle du garbage col-lector), ce qui résulte d'un fonctionnement incorrect de l'application. Suite à cette augmentation, la fréquence des cycles du garbage collector augmente, ce qui a un impact négatif sur la performance de l'ap-plication (l'utilisateur considère une telle situation comme un arrêt de l'application). Si nous avions lancé notre application avec une taille maximale de la pile inférieure, le programme aurait terminé son travail avec l'exception OutOfMemoryError. Le schéma (cf. Figure 3) présente la taille des objets qui se trouvent dans la zone de la génération an-cienne une fois le cycle terminé (le cycle qui supprime les objets de cette zone). L'aug-mentation constante de la consommation de la mémoire peut signifier la fuite de la mémoire. Lorsque les objets occupent plus de 600 [Mo], nous pouvons remarquer une augmentation soudaine du nombre de cycles du Garbage Collector (les cycles sont mar-qués par les cercles sur le schéma).

Lors de l'analyse des logs verbose:gc et mis à part nos propres conclusions, nous avons également la possibilité de nous servir de l'analyse effectuée par l'outil ; les résul-tats s'affichent à l'aide de l'option VGC Data –> Tuning recommendation.

Une augmentation constante de la con-sommation de la mémoire peut suggérer une fuite – il faut toutefois le vérifier. Pour ce faire, nous analyserons les clichés mémoire générés. Nous lançons Memory Analyzer et nous ouvrons ensuite les clichés mémoire générés (File –> Open Heap Dump).

L'analyse commencera par l'histogram-me (onglet Overview –> Histogram) qui présente le nombre d'instances d'une classe donnée (nous pouvons ainsi apprendre si le nombre d'objets d'une classe donnée résulte du fonctionnement correct de l'application ou bien s'il résulte d'une fuite potentielle de la mémoire). L'histogramme présente éga-lement des informations relatives à la zone occupée par les instances (ainsi que leur traille accumulée).

Après avoir ouvert l'histogramme, nous paramétrons le filtre de la taille accumulée à 30 [Mo]. Avant de réaliser le cliché mé-moire, la machine virtuelle a lancé un cycle complet de nettoyage. Le cliché ne com-prend donc que les objets qui ne pouvaient pas être supprimés de la pile. Puisque notre application simule les objets occupant 350 [Mo], il faut trouver les objets responsables de l'augmentation de la consommation de la

Figure 4. Arbre dominateur. Les bords de l'arbre ne reflètent pas toutes les références entre les objets

Page 30: Linux

30 Linux+ 6/2009

ProgrammationJava, problèmes de performance

mémoire, qui, au moment du cliché, s'élevait à 514 [Mo] (si le cliché est réalisé à un autre moment, le résultat sera différent).

Notre application simule l'utilisation de la pile au moyen des tableaux d'octets et des tableaux d'objets. La taille accumulée des objets de ce type s'élève respectivement à 503 [Mo] et 514 [Mo]. Une partie des objets alloués n'a donc pas été supprimée de la mémoire et l'application contient leurs références (en cas d'un travail correct, la taille accumulée des types susmentionnés doit s'élever à environ 350 [Mo]). La classe ArrayList, dont la taille accumulée s'élève à 123 [Mo], peut réveiller des soupçons. Cette taille résulte d'un fonctionnement in-correct de l'application.

Nous continuons notre analyse en véri- fiant les objets qui occupent la zone la plus grande de la pile. Pour ce faire, nous ouvrons le rapport présentant les objets sous forme d'un arbre dominateur (onglet Overview –> Domi- nator Tree). L'analyse commence par les ob- jets dont la taille dépasse un certain seuil qui sont considérés comme source potentielle de la fuite mémoire.

Ensuite, nous parcourons tous les som-mets sortant de chaque sommet constituant une source potentielle de la fuite mémoire afin de trouver un sommet dont la taille et dont la taille de ses sommets enfants pré-sentent une grande différence. Il s'agit d'un point d'accumulation. Pour continuer l'ana-lyse, nous utiliserons le couple de sommets ainsi localisés : source potentielle de la fuite mémoire et point d'accumulation. La Figure 4 présente un exemple d'un point d'accumula-tion dans l'application Java.

La suite de l'analyse demande de par-courir le fonctionnement de l'application (en nous basant sur les logs, le code source et la description de l'action effectuée par l'utili-sateur) et de décider s'il s'agit d'un compor-tement correct de l'application (et donc de définir si la mémoire occupée par les objets

doit être libérée). Les résultats de l'analyse peuvent démontrer une fuite mémoire évi-dente (situation d'erreur qui demande une correction du code de l'application) ou une consommation exagérée de la mémoire et donc de suggérer une modification du code de l'application.

Dans notre exemple, l'instance de la clas-se MemoryLeak (objet gcTest) est notre prin-cipal suspect. Elle occupe 96,6 % de la pile. L'étape suivante consiste à trouver les points d'accumulation. L'objet gcTest domine qua-tre objets. Trois d'entre eux sont des tableaux dont l'utilisation résulte d'un travail normal de l'application (simulation de l'utilisation de la pile). Ces tableaux occupent respectivement 45 %, 9,8 % et 6,5 % de la mémoire accu-mulée par l'objet gcTest. Le quatrième objet est une classe – source de la fuite dans notre application. Après la comparaison avec le code source, nous pouvons constater qu'elle contient des références aux objets qui ne sons plus utilisés par l'application.

Dans certaines situations, trouver la fuite mémoire peut être facilité par la comparai-son de plusieurs clichés mémoire réalisés à différents moments. D'après la comparai- son de ces clichés, nous pouvons vérifier quels objets sont responsables de l'augmenta- tion de la consommation de la mémoire. Nous ouvrons le deuxième cliché mémoire dans notre exemple. La quantité de la mé-moire bloquée par la liste a bien évidemment augmenté. Dans de nombreux cas, cette ana-lyse facilite l'identification de la fuite de la mémoire.

Termes utilisés dans Memory AnalyzerAvant de commencer l'analyse des clichés mémoire, il est recommandé de prendre con-naissance de la terminologie basique utilisée par Memory Analyzer. Voici les termes de base :

• taille de l'objet (en anglais shallow heap) – zone de la mémoire occupée par un objet donné. À titre d'exemple, l'objet aura besoin de 32 ou 64 bits pour une référence (en fonction de l'architecture), 4 bits pour le type Integer, 8 bits pour le type Long etc. ;

• ensemble d'objets accumulés par l'objet X (en anglais retained set of X) – ensem-ble d'objets qui seront supprimés de la pile si l'objet X est supprimé ;

• taille accumulée de l'objet X (en anglais retained heap of X) – taille de tous les

objets qui seront supprimés de la pile si X est supprimé (mémoire allouée par l'objet X) ;

• sommets majeurs (en anglais leading set of objects) – ensemble d'objets d'une classe donnée ou tous les objets (des classes différentes) créés par un class-loader.

Nous illustrerons les définitions de ces termes sur un simple exemple. Les objets A et B sont des racines (en anglais garbage collector roots) depuis lesquelles le garbage collector commencera à analyser la pile (il peut s'agir des paramètres de méthodes, des objets locaux, des objets utilisés pour appeler la méthode wait(), notify() ou synchronized()).

La Figure 5 présente un exemple de gra-phe d'objets présents sur la pile. Nous pouvons distinguer des objets non accumulés dans la mémoire pour chaque sommet majeur :

• sommet D : D, G ;• sommet E : E ;• sommet F : F, I ;• sommet C : C, D, E, F, G, H, I ;• sommet A et B : A, B, C, D, E, F, G, H, I.

Tous les objets présentés sur le graphe constituent l'ensemble d'objets accumulés pour les sommets majeurs A et B (suppri-mer les objets A et B fera supprimer de la mémoire tous les objets appartenant à cet ensemble).

Il est possible de faciliter l'analyse des objets sur la pile en transformant le graphe ci-dessus en arbre dominateur. Supposons que l'objet X domine l'objet Y si tous les chemins mènent au sommet Y (dont le début se trou-ve dans la racine de l'arbre) par le somme X. Dans un arbre ainsi construit, trouver les dépendances entre les objets est très simple. L'arbre dominateur d'objets aura les dépendances suivantes :

• les sommets sur lesquels domine l'objet X constituent un ensemble d'objets accu-mulés par l'objet X ;

• si le sommet X domine le sommet Y, le sommet dominant le sommet X domine automatiquement le sommet Y ;

• les bords de l'arbre dominateur ne repré-sentent pas toutes les références entre les objets.

La Figure 4 présente le graphe transformé en arbre dominateur.

Figure 5. Graphe présentant les objets sur la pile et les dépendances entre eux (références)

Page 31: Linux

31www.lpmagazine.org

ProgrammationJava, problèmes de performance

P U B L I C I T É

Arrêt de l'application JavaL'absence des réponses de la part de l'ap-plication aux demandes de l'utilisateur peut signifier un arrêt du programme. L'arrêt de l'application peut arriver dans les situations suivantes :

• une boucle infinie se trouve dans le code de notre application ;

• un interblocage de threads a lieu (en an-glais deadlock).

Afin de vérifier à laquelle de ces situations nous avons affaire, il faut utiliser les outils du système d'exploitation qui fournissent les in-formations sur l'utilisation du processeur par tous les processus. Process Explorer (à télé- charger depuis les sites Web de Microsoft) sera utile sous Windows. Sous Linux il est recommandé de faire la commande top. Si le temps du processeur utilisé par l'applica-tion Java s'élève à 100 % (dans le cas des machines équipées de plusieurs processeurs logiques, 100 % divisés par le nombre de processeurs) et l'ensemble du système travail-

le très lentement, il est fort probable que no-tre application fait une boucle infinie. Dans le cas contraire, si l'utilisation du processeur est normale, c'est la présence de l'interblo-cage qui est probable.

Nous pouvons rencontrer la seconde situation le plus souvent lorsque plusieurs threads parallèles tentent d'obtenir un accès à une ressource définie. Si une partie de ces threads est bloquée (en attendant la libération de cette ressource), cette situation mènera à une famine de threads. L'interblocage cons-titue une forme finale de la famine et arrive lorsque les threads attendent qu'une condi-tion soit remplie alors qu'elle ne peut pas être remplie.

Les deux situations décrites ci-dessus résultent d'une erreur du programmeur et nécessitent des modifications dans le code de l'application. Il est très simple de corriger la condition de la fin de la boucle. Malheu-reusement, résoudre le problème de la syn-chronisation des threads (qui restent bloqués lors de l'accès à une ressource partagée) peut être une tâche plus complexe.

Symptômes du blocage de la machine virtuelleParmi les symptômes du blocage de l'applica-tion Java se trouvent :

• absence de la réponse de l'application aux demandes de l'utilisateur ;

Figure 6. Analyse du cliché de threads. L'outil nous présentera un récapitulatif général de l'état des threads et les méthodes exécutées au moment où le cliché a été pris

Page 32: Linux

32 Linux+ 6/2009

ProgrammationJava, problèmes de performance

• absence d'une activité dans les logs de l'application et sur la sortie et l'entrée stan-dards d'erreurs de la machine virtuelle ;

• utilisation 100 % du temps processeur par l'application Java.

Collecter des données diagnostiquesAfin de diagnostiquer les problèmes relatifs au blocage de l'application, nous utiliserons le cliché de threads. Il contient des informations sur l'état de tous les threads et de sa trace de la pile. Le cliché comprendra également des informations relatives aux moniteurs uti-lisés par notre application. D'après ce cliché, nous pourrons définir quels moniteurs sont en possession d'un thread donné. Nous pour-rons constater également sur quel moniteur est bloqué un ou plusieurs threads et quel thread est doté du moniteur actuel.

Nous réalisons le cliché de threads en envoyant le signal approprié à la machine vir-tuelle. Nous envoyons le signal SIGBREAK sous Windows (par exemple, en appuyant sur la combinaison de touches [Ctrl+Brk] dans la fenêtre de la console de notre application). Sous Linux il faut envoyer le signal SIG-QUIT (par exemple, via la commande kill -3 JVM_PID).

Générer plusieurs clichés en intervalles identiques peut être utile pour analyser un problème (par exemple, il est possible de gé-nérer 5 clichés en intervalles de 10 minutes).

Outils de diagnosticAfin d'analyser le cliché de threads, nous pouvons nous servir de IBM Thread and Mo-nitor Dump Anaylyzer for Java. Cet outil est fourni avec le paquet IBM Support Assistant et permet d'analyser le cliché de threads aussi bien depuis la machine virtuelle de Sun que d'IBM.

Après avoir ouvert le cliché de threads, l'outil affichera le nombre de threads et le nom-

bre de threads qui se trouvent dans l'état don-né. Ensuite, nous pouvons passer à une ana- lyse plus détaillée de chaque thread et moni-teur utilisés par l'application.

Diagnostic de l'application Java qui planteNous effectuerons le diagnostic de l'applica-tion Java qui plante sur l'exemple d'une appli-cation utilisée dans les exemples précédents. Nous modifions toutefois le code de sorte que l'application lance dix threads parallèles. En même temps, la boucle, dans laquelle l'appli-cation effectue les opérations sur les tableaux, sera comprise dans le bloc synchronized. Avant de faire une nouvelle itération de la boucle, le thread devra obtenir un moniteur et exécuter le code qui se trouve dans le bloc synchronized. Les threads se bloqueront ainsi en attendant l'accès au moniteur. L'interblocage sera donc ici impossible mais nous pourrons observer la famine de threads.

Afin de lancer le dernier exemple du ré-pertoire Example3-Hangs, nous démarrons le script startExample3.bat. Après plusieurs di-zaines de secondes de travail, nous envoyons le signal SIGBREAK (nous appuyons sur la combinaison de touches [Ctrl+Brk] dans la fe-nêtre de la console). Cette opération générera un cliché de threads de la machine virtuelle. Ce cliché sera redirigé à la sortie standard de la machine virtuelle. Le script l'enregistrera dans le fichier hungApplication.log.

Afin d'analyser le cliché de thread, nous lançons IBM Support Assistant et ensuite, l'outil IBM Thread and Monitor Dump Ana-lyzer for Java (nous sélectionnons Analyze Problem –> IBM Thread and Monitor Dump Analyzer for Java dans l'onglet Home). Nous ouvrons le log généré par l'application et nous procédons à l'analyse. Après avoir ouvert le log, nous verrons s'afficher l'analyse du statut des threads et des méthodes effectuées par les threads. La figure 6 présente cette situation.

Pour obtenir des informations détaillées sur un thread donné, nous ouvrons la fenêtre contenant l'analyse de tous les threads (Ana-lysis->Thread Detail). Ensuite, nous pouvons parcourir tous les threads et analyser la trace de la pile du thread, les moniteurs en sa pos-session et le moniteur où le thread est bloqué. Si le thread possède un moniteur attendu par d'autres threads, nous verrons s'afficher une liste de ces threads. Si en revanche, le thread attend un moniteur, l'outil affichera le nom du thread qui le possède.

Puisque dans notre application test tous les 10 threads utilisent le même moniteur, un

thread bloquera tous les autres. D'après ces informations, nous pouvons diagnostiquer l'ori- gine du blocage de l'application. La solution consisterait à réécrire la boucle où se trouve le bloc synchronized dans l'application test de sorte à éliminer le blocage de threads.

ConclusionDiagnostiquer les problèmes relatifs à la per-formance n'est pas une simple tâche et néces-site une expérience. Les exemples présentés dans l'article peuvent être donc considérés comme une introduction et un entraînement avant de faire face et de résoudre un vrai problème. Nous recommandons aussi de tes-ter les scénarios décrits avec d'autres applica-tions. Générer des clichés dans un environ-nement test ou analyser des logs verbose:gc sera enrichissant et permettra d'économiser le temps lorsqu'un problème réel apparaîtra dans votre application. Nous espérons que cet article vous encouragera à mener ce type d'expérimentations.

• http://www.ibm.com/software/support/isa/ – IBM Support Assistant – site officiel ;

• http://eclipse.org/mat/ – Memory Analyzer Tool – site officiel du projet ;

• http://www.ibm.com/developerworks/java/jdk/tools/mat.html – plugin permettant d'utiliser l'outil Memory Analyzer Tool pour analyser les clichés mémoire générés par la machine virtuelle IBM ;

• http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html – réglage de performance de la machine vir-tuelle Sun 5.0 ;

• http://java.sun.com/j2se/ reference/whitepapers/memorymanagement_whitepaper.pdf – gestion mémoire dans la machine virtuelle Sun HotSpot 5.0 ;

• http://java.sun.com/j2se/1.5/pdf/jdk50_ts_guide.pdf – diagnostiquer les problèmes dans la machine virtuelle Sun ;

• http://www.ibm.com/developerworks/java/jdk/diagnosis/ – diagnostiquer les problèmes dans la machine virtuelle IBM.

Sur le Net

Marcin Kalas est diplômé de la faculté de l'Electronique, de la Télécommunication et de l'Informatique de l'Ecole Polytechnique de Gdansk. Il s'intéresse à Java et à son édition d'entreprise depuis plus de 5 ans. Ses centres d'intérêt : jouer de la guitare, faire du vélo tout terrain et de la plongée.Contact avec l'auteur :[email protected]

A propos de l'auteur

Page 33: Linux

33www.lpmagazine.org

Formations JavaObjis

A travers nos formations et cours du soir, nous apportons à nos clients les réflexes, méthodes et les outils contribuant à une

meilleure productivité. Vous pouvez consul-ter nos horaires dans le tableau ci-contre.

Douglas Mbiandou après 10 années d’ex-périence dans les projets systèmes d’information en France et à l’étranger (USA, Genève...), il propose, en collaboration avec la direction de votre entreprise, une stratégie de formation ré-pondant aux besoins JAVA/JEE des applications modernes.

Garant de la satisfaction de service Objis, il est l’architecte de l’approche innovante de la formation Objis.

Témoignage client : société So@tBoris Pouderous, responsable formations So@t (SSII, 220 personnes). Paris

« Depuis le début de l’année 2009, nous avons totalement revu notre stratégie du point de vue de la formation et nous nous investissons beaucoup pour qu’elle soit à la hauteur de nos attentes et ambitions. SOAT accorde une gran-de importance au suivi de ses collaborateurs, c’est pourquoi nous nous sommes tournés vers Objis qui a su nous proposer une offre corres-pondant à nos besoins, de part sa souplesse et la réactivité de Douglas MBIANDOU, formateur et co-fondateur d’Objis. Nous avons en amont pu apprécier la qualité de ses formations au cours de sessions collectives dans nos locaux : il a su remporter l’unanimité auprès des col-laborateurs formés de part son dynamisme et l’interactivité qu’il sait instaurer.

Afin de répondre aux attentes de nos col-laborateurs et clients, nous avons mis en place des sessions de formation en cours du soir dont le format a été spécialement adapté avec no-tamment 70% de pratique. Douglas intervient également 2 jours par mois chez nous en salle d’intercontrats pour coacher nos collaborateurs dans leur parcours de formation interne.

Grâce à ce partenariat, Objis met à notre disposition l’ensemble de ses supports de cours Java.

L’offre est très flexible. Nous avons par exemple mis en place en moins de 24h, une séa- nce de coaching de 2H via Skype pour l’un de nos consultants sur une nouvelle technologie. »

Témoignage client : société Océane con-sulting.

« Tutoriel Objis live » au salon Solutions linux 2010Découvrez « en live » l’expertise, la pédagogie et le sens du partage d’Objis, spécialiste de la formation JAVA. A travers nos séances ’Tuto-riel Objis live’ de 30 minutes durant le salon Solutions linux 2010, montez en compétences JAVA/J2EE et rencontrez les formateurs Objis. Choisissez le thème de votre « tutoriel live » et réservez votre fauteuil sur notre stand B14. Notez la prestation des formateurs. Obtenez enfin 10% de réduction sur votre prochaine formation JAVA/J2EE Objis !

Tutoriaux Objis Live !Exclusivité stand Objis (stand B14) : à travers des sessions de 30 minutes (15 min demo +15 min questions/réponses), l’ensemble des formateurs Objis permettront aux novices comme aux confirmés de monter en compé-tences Java/j2ee et d’améliorer leur culture générale sur les frameworks java/jee du mo-ment. Rendez-vous les 16,17,18 mars 2010 , paris portes de Versailles au salon solutions linux 2010, dont nous sommes sponsor.

Invitation à l'anniversaire Objis !Rencontrez les clients et les partenaires d'Objis lors du cocktail 5ème anniversaire Objis qui se tiendra dans le cadre du salon Solutions li- nux 2010 (15, 16 , 17 mars 2010 à Paris Porte de Versailles).

OBJIS : spécialiste en formations JavaObjis est un centre de formation informatique, spécialiste du transfert de compétences JAVA. Depuis 2005, nous améliorons la productivité de nos clients à différentes phases de leur intervention dans un projet JAVA/J2EE. Objis propose une approche innovante de la formation, basée sur 3 dimensions : l’expertise, la pédagogie et le partage. Notamment à travers la mise à disposition de plus de 100 tutoriaux JAVA/J2EE.

Douglas MBIANDOU : Porteur du projet Objis depuis 2005, Douglas Mbiandou est Ingénieur diplomé de l’INSA Lyon.

Public

• Matin : sessions initiation JAVA / J2EE (Public : développeurs 0-1 an expérience Java )

• Après-Midi : sessions frameworks et serveurs J2EE (Public : développeurs 3 ans exp+)

MATIN (débutants) :• 10h : Tutoriel JAVA (Installation

JDK) • 10h30 : cours J2EE (comprenez

J2ee en 6 points clés) • 11h : Tutoriel JAVA (Votre premier

programme JAVA) • 11h30 : Tutoriel J2EE : création

et déploiement WAR

APRES-MIDI (intermédiaires) :• 14h : Tutoriel GWT : votre pre-

mière application GWT • 14h30 : Tutoriel Spring : Injection

de dépendances • 15h : Tutoriel Hibernate : votre

première application Hibernate • 15h30 : Tutoriel JBoss : Installa-

tion Jboss 5 et analyse • 16h : Tutoriel ExtJS : votre

première application ExtJS • 16h30 : Tutoriel Wicket : votre

première application Wicket • 17h : Tutoriel Flex : votre

première application Flex

Responsable formations : Douglas Mbiandou

Ojis France425 cours Emile Zola 69100 Villeurbanne Tél : +33(0)4 78 29 37 26 Fax : +33(0)9 56 22 89 49 www.objis.com

Page 34: Linux

ProgrammationRCP

34 Linux+ 6/2009

linux

@so

ftwar

e.co

m.p

l Le projet Eclipse est né au début du siècle chez IBM qui voulait réécrire en Java son environ-nement de développement multi-langage Vi-sual Age développé en Smaltalk. Eclipse est

construit selon deux principes originaux : le logiciel Open Source est très indépendant de la plateforme sur laquelle il est exécuté (développé en Java) et il est très modulaire avec un concept avancé de plugins respectant une norme précise (OSGi). Rapidement, cet outil a gagné en notoriété pour devenir un des acteurs majeurs du monde du déve-loppement. En parallèle, sa conception ultra modulaire a permis de dépasser le cadre étroit des outils de déve-loppement et d’en faire la base de développements d’ap-plications très variées comme des IDE (environnements de développement intégré), le client de courrier Notes de Lotus, BrainBox (un outil de simulation de modèles ma-thématiques), uDig (un SIG : système d'information géo-graphique), EasyMonitoring (un logiciel de visualisation 3D temps réel) et des dizaines d’autres logiciels.

Une grande partie du succès de la plateforme tient à son architecture à la fois polyvalente, modulaire

et performante. À la base de cette architecture, le runtime est un noyau applicatif léger qui implémente le standard OSGi de plugins. Les plugins sont des modules d’ex-tension qui apportent les différentes fonctionnalités de l’application. On peut les comparer aux briques de base de l’application. Les plugins sont regroupés dans des fonctionnalités (les features). Les features sont les unités de déploiement. Elles définissent un jeu de plugins ainsi que leurs dépendances avec les autres features. Les fea-tures définissent également une méthode de mise à jour automatique ou semi automatique par l’intermédiaire de sites Internet.

Développement d'application RCPLa plateforme Eclipse était à l'origine conçue pour développer des environnements de développement. Son système modulaire de plugins et la performance de son interface utilisateur ont fait de cet environnement la base idéale pour développer rapidement des applications portables dotées de riches interfaces utilisateur. Dans cet article, nous allons décrire les principes fondamentaux du développement d'applications basées sur l'environnement RCP qui est au coeur d'Eclipse.

Pascal Barbier

• L'architecture de la plateforme Eclipse.• L'organisation d'une application RCP.• Le processus de développement d'une applica-

tion portable basée sur RCP.

Cet article explique...

Page 35: Linux

ProgrammationRCP

35www.lpmagazine.org

L’arrivée de RCP (Rich Client Plate-form) en 2004 a permis de simplifier le dé-veloppement d’applications avec interface utilisateur graphique. Les applications développées avec RCP peuvent bénéficier des avantages de la modularité de la plate- forme Eclipse et en même temps de la per-formance des librairies graphiques SWT et JFace qui ont été incorporées sous forme de plugins. À ces avantages, on doit ajou- ter également le fait que les applications RCP sont indépendantes du système cible (donc faciles à déployer) et fondées sur des bases Open Source.

Décomposition d’une application RCPEn fait, au départ, RCP n’est que la réduction de l’IDE Eclipse auquel on avait ôté les plu-gins spécifiques au développement (compila-teurs, débuggers etc.).

Les applications RCP sont constituées d’une part du framework RCP (Core runti-me, SWT et JFace) et d’autre part d’un jeu de plugins, souvent assemblés dans une ou plus- ieurs features. Chaque plugin est un module binaire (un jar) qui offre des points d’exten-sion (pour permettre à d’autres plugins de se connecter) et qui utilise les points d’ex-tension d’autres plugins (pour en utiliser les fonctionnalités). Les features, de leur côté, définissent les dépendances d’autres features nécessaires. Ceci permet d’automatiser la résolution des dépendances lors de l'instal-lation et des mises à jour.

En plus du runtime qui fournit la logis-tique de gestion des plugins, les applications

RCP utilisent la librairie SWT pour faciliter le développement des interfaces utilisateur. SWT ressemble à AWT ou Swing sans en subir les inconvénients. AWT est une librai-rie graphique totalement indépendante de la plateforme, ce qui la rend peu performante au niveau du rendu (elle est gourmande en temps CPU). La librairie Swing gère elle même de nombreuses opérations graphi-ques de base, ce qui la rend plus performan-te. Cependant, à cause de cela elle produit des interfaces qui ne sont plus fondues dans l’environnement cible. Pour faire simple, AWT demande au système de dessiner et gérer les widgets graphiques. Swing dessi-ne lui-même ces widgets graphiques. Pour résoudre ces difficultés, SWT est une librai-rie standard qui prend en charge les widgets (comme Swing) mais qui est implémentée spécifiquement sous forme d’une librairie dynamique pour chacun des systèmes cible. Elle est donc optimisée en performance et en rendu visuel. De son côté, la librairie JFace ajoute à SWT des composants graphiques de plus haut niveau comme les treeviews. Sur option, l’application RCP dispose de com- posants standard très utiles tels que le sys-tème Install (gestion du déploiement, des dépendances et des mises à jour), le sys-tème d’aide et un système de propriétés et de configuration centralisé. D’autres com-posants issus de l’IDE d’origine peuvent s’avérer très utiles (par exemple les éditeurs ou le gestionnaire de projets).

L’application sera généralement cons-tituée d’un programme principal, d’un jeu d’une ou plusieurs perspectives qui or-ganisent l’apparence d’une série de Vues (Views). Un dernier composant essentiel restera caché pour l’utilisateur : le Work-bench Advisor qui contrôle l’apparence de l’interface utilisateur : menus, barres d’ou-

tils, perspectives etc.Chaque plugin, qu’il soit fourni par le

framework ou développé pour l’application, est décrit par un fichier nommé plugin.xml. Depuis qu’Eclipse a adopté le standard OSGi, le fichier plugin.xml a été rem-placé par un nouveau format de fichier : MANIFEST.MF. L’ancien format reste tou-tefois utilisable. Pour déployer un plugin, il suffit de placer les fichiers qui le composent dans un sous-répertoire du répertoire plugin d’Eclipse ou de les regrouper dans un jar placé dans la racine de ce même répertoire. Tous les plugins présents sont énumérés au lancement d’Eclipse. Enfin, signalons qu’Eclipse fait une différence entre l’Ap-plication qui est l’ensemble logiciel exé-cutable constitué d’une fonction main et le produit qui est l’ensemble composé de l’ap- plication et des ressources associées (icônes, fichiers de configuration ou de déploiement etc.).

Mise en place de la plateforme de développementPour développer avec le framework RCP, il est indispensable d’installer conforta-blement son environnement de travail. En effet, la plateforme Eclipse sera utilisée à la fois comme cadre de base de l’outil de déve-loppement et comme cadre de l’application développée. Il est donc vivement conseillé d’installer séparément ces deux environne-ments (l’IDE et la plateforme de Test). Pour la suite de l’article, j’utiliserai comme IDE la version 3.5 (Galileo) d’Eclipse qui vient de sortir. La première étape consiste à télé- charger l’outil de développement. Sur la page d’accueil du site eclipse.org, on va dans la section download pour aller chercher l’en-vironnement Eclipse for RCP/Plugin deve-

Figure 1. Architecture de la plateforme Eclipse

Figure 2. Configuration des points d'extension pour une vue

• La syntaxe de Java.• Les grands principes des interfaces

homme-machine (IHM) graphiques.

Ce qu'il faut savoir...

Page 36: Linux

36 Linux+ 6/2009

ProgrammationRCP

loppers (le fichier fait moins de 200Mo). C’est un zip que on décompresse dans un répertoire de mon disque (par exemple à la racine). Si vous possédez déjà un IDE Eclipse (quelle que soit la version ou le langage) vous pouvez également utiliser le gestionnaire intégré de mise à jour pour ajouter le feature PDE (Plugin Develop-ment Environment) si vous ne l’avez pas déjà. Avec les versions 3.4 et 3.5 d’Eclipse, il faut au moins la version 5 de Java. Vous pouvez la télécharger sur le site java.com.

La seconde étape est donc d’installer la cible. C’est une version de la plateforme Eclipse munie des plugins qui seront utilisés par l’application. La cible et l’IDE peuvent être de deux versions différentes (par exem-ple on développe avec Galileo mais la cible reste en version Europa : 3.2 pour être com-patible avec Java 1.4).

Le plus simple est de télécharger le projet Eclipse RCP-SDK et de le décompresser dans un répertoire spécifique (par exemple c:\cible). Il sera également utile de télécharger le Delta pack de la même version d’Eclipse. Ce package permet de gérer le déploiement mul-tiplateforme (Windows, Linux, Mac, etc.). Le delta pack doit être installé dans le répertoire de la cible. Le site Eclipse.org change assez régulièrement. J’éviterai donc de donner des adresses qui risquent de devenir rapidement obsolètes. On préconise plutôt de faire une re-cherche avec le moteur de recherche du site. Lorsque vous cherchez, indiquez le nom du

package ainsi que le numéro de version.Une fois chargés ces trois projets, on

peut se lancer pour une première applica-tion. Démarrez Eclipse, créez un nouveau projet Plugin project. Pour le nom, il est de coutume d’utiliser la convention de nom-mage des plugins Eclipse. Cette convention fonctionne comme le nommage DNS, mais en sens inverse. Si par exemple, la société utilise le nom de domaine DNS lpmagazine. org, le nom du projet peut être org.lpmagazine.tutoriel.appli1. Ainsi, le plugin sera facile à retrouver parmi ses nombreux con-frères. Dans l’assistant de création de nou-veau projet, pensez à bien choisir la version d’Eclipse cible ainsi que de cocher la case Yes à la question Would you like to create a rich client application. Pour le moment, les autres paramètres ont peu d’importance. À la dernière étape, on peut choisir un mo-dèle d’application. Cela fournit un point de départ pour les débutants. Choisissez l’ap-plication Hello. Enfin, cochez la case Add

Listing 1. Code événement quitter l'application

package org.lpmagazine.tutorial.commands;

import org.eclipse.core.commands.AbstractHandler;

import org.eclipse.core.commands.ExecutionEvent;

import org.eclipse.core.commands.ExecutionException;

import org.eclipse.core.commands.IHandler;

import org.eclipse.ui.handlers.HandlerUtil;

public class ExitHandler extends AbstractHandler implements IHandler {

@Override

public Object execute(ExecutionEvent event) throws

ExecutionException {

HandlerUtil.getActiveWorkbenchWindow(event).close();

return null;

}

}

Listing 2. Code création d'une vue

package org.lpmagazine.tutorial.views;

import org.eclipse.swt.SWT;

import org.eclipse.swt.widgets.Composite;

import org.eclipse.swt.widgets.Text;

import org.eclipse.ui.part.ViewPart;

public class MaVue extends ViewPart {

@Override

public void createPartControl(Composite parent) {

Text text = new Text(parent, SWT.BORDER);

text.setText("Bonjour tout le monde !");

}

}

Figure 3. Configuration du point d'extension d'une commande

Figure 4. Configuration du point d'extension pour associer une commande à un menu

Page 37: Linux

37www.lpmagazine.org

ProgrammationRCP

branding. Cette option ajoute l’affichage d’une image au démarrage qu’on appelle un splash screen. Si tout va bien, l’éditeur du manifeste a été ouvert sur l’onglet overview. Le manifeste est un fichier texte situé à la racine du plugin et qui le décrit.

Avant de démarrer cette application, nous allons ajouter deux éléments : une comman- de et un menu. Une commande est un objet de traitement qui peut être associé à un élé- ment de l’interface utilisateur (un menu, une barre d’outils par exemple). Pour créer la commande, nous devons utiliser le point d’extension org.eclipse.ui.commands. Allons dans l’onglet Extensions du manifeste. Dans la liste, le point d’extension voulu n’appa-raît pas car il n’a pas été encore utilisé. Nous l’ajoutons avec le bouton add. Pour créer une commande, il nous suffit maintenant d’éten-dre ce point d’extension. Sur l’extension, appelez le menu contextuel avec un clic droit et utilisez le menu New/Command pour créer votre extension. Changez l’ID de votre commande. Dans une application réelle, il y aura beaucoup de commandes. Il est donc nécessaire d’utiliser une règle de nommage consistante. On préfère classer les ID d’objet par catégorie d’abord, par objet ensuite dans chaque catégorie. On choisit donc le nom org.lpmagazine.tutorial.commands. Exit pour ma commande. Il faut également définir le nom de la classe associée. J’utilise la même convention de nommage. Ma classe s’appelle donc org.lpmagazine.tutorial.commands.Exi-tHandler. En cliquant sur le lien à côté du nom de la classe, l’assistant crée la classe. Pour cette classe, on remplace la classe de base par org.eclipse.core.commands. AbstractHand- ler pour simplifier. Il ne reste plus qu’à la compléter (voir listing 1).

La ligne close() que j’ai ajoutée demande à fermer l’application (ou plus exactement le Workbench qui sert de support aux plugins de l’application). Créons maintenant un menu pour exécuter cette commande. La démarche est la même : nous allons étendre le point d’extension org.eclipse.ui.menus et attacher la commande au menu ainsi créé.

Dans l’onglet extension du manifeste, utilisez le bouton add pour ajouter le point d’extension des menus. En utilisant le clic droit sur ce point d’extension, ajoutez une nouvelle contribution de menu (new/menu contribution). L’URL de cet objet doit être menu:org.eclipse.ui.main.menu. C’est l’en-droit dans lequel notre menu va s’insérer. Sur cette contribution, ajoutez (toujours avec le menu contextuel) un menu (new/menu) et

changez son texte et son identité (par exem-ple label : Fichier, Id : menuFichier).

Enfin, sur ce menu, encore avec le menu contextuel, ajoutons une commande (new/command). Changeons l’identité de la com-mande associée pour y mettre l’Id précé-demment attribuée à la commande Exit (on peut la chercher dans la liste avec le bouton browse). Vous pouvez également choisir lib- rement le texte (label) et le message d’aide (tool-tip). Voilà, notre application est prête à faire le grand saut. Dans l’onglet overview de l’édi- teur de manifeste, cliquez le lien launch an

eclipse application pour démarrer votre pre-mière application.

Créer une vueLes applications RCP sont constituées de vues qui sont disposées dans l’interface utilisateur. La disposition est mémorisée dans une pers-pective. L’application peut comporter une ou plusieurs perspectives. Par exemple, Eclipse IDE propose une perspective Java, une pers-pective debug, une perspective resource etc.

Notre application, dans sa première ver- sion, dispose d’une seule perspective mais pas

Listing 3. Code exemple d'une application SWT

import org.eclipse.swt.widgets.*;

import org.eclipse.swt.*;

public class TestSWT {

public static void main(String[] args) {

Display display = new Display();

Shell shell = new Shell(display);

Text text = new Text(shell, SWT.CENTER);

text.setText("Bonjour tout le monde");

text.pack();

shell.pack();

shell.open();

while( !shell.isDisposed() )

if( !display.readAndDispatch() )

display.sleep();

display.dispose();

text.dispose();

}

}

Listing 4. Code appel de la dialog standard ouvrir un fichier

package com.iristechnologies.rcp.app1.commands;

import org.eclipse.core.commands.*;

import org.eclipse.swt.widgets.*;

import org.eclipse.ui.handlers.HandlerUtil;

public class FileOpen extends AbstractHandler implements IHandler {

@Override

public Object execute(ExecutionEvent event) throws

ExecutionException {

Shell shell = HandlerUtil.

getActiveWorkbenchWindow(event).getShell();

FileDialog fileDialog = new FileDialog(shell);

fileDialog.setText("Choisir un fichier");

fileDialog.setFilterExtensions(new String[] { "*.txt" });

fileDialog.setFilterNames(new String[] { "Fichiers texte

(*.txt)" });

String selected = fileDialog.open();

System.out.println(selected);

return null;

}

}

Page 38: Linux

38 Linux+ 6/2009

ProgrammationRCP

de vue. Nous allons en créer une. Pour cela, le principe est toujours le même : créer une extension du point d’extension org.eclipse. ui.views. Ajoutez le point d’extension avec le bouton add, puis, avec le menu contextuel, ajoutez une vue. Pour l’Id on se réfère à ma convention de nommage : org.lpmagazine. tutorial.views.MaVue. Même nom pour la classe associée. On utilise le lien à côté du nom de la classe pour créer le code. On me dé- barrasse du constructeur, ici inutile, et ajoute un composant Text (nous parlerons des wid-gets SWT plus loin). Le résultat est dans le listing 2.

Si le texte ne s’affiche pas, ce n'est pas gra- ve. Effectivement, nous avons créé une vue mais nous n’avons nullement indiqué quand et comment l’utiliser. Il nous faut donc main-tenant ajouter cette vue à la perspective. Pour cela, nous allons étendre le point d’extension org.eclipse.ui.perspectiveExtensions. Nous ne vous donnons pas de détails, nous l’avons déjà fait plusieurs fois. Avec le menu contextuel, ajoutons une nouvelle vue à cette extension de perspective. Sélectionnez l’ID de votre vue, choisissez une position top par rapport aux éditeurs (org.eclipse.ui.editorss) et un ratio de 0.95f (voir la figure 2 pour les détails).

Utiliser SWTLa librairie SWT est une alternative aux li-brairies AWT et Swing. En deux mots et sans entrer dans les détails, la librairie AWT est historiquement la première à proposer

des objets d’interface utilisateur graphique pour Java. Elle est née avec Java. Le princi-pal reproche que l’on fait à cette librairie est son manque de richesse et de performance (vitesse d’exécution et rendu utilisateur). En revanche, comme elle est basée sur les composants de base du système, elle repro-duit fidèlement l’apparence du système. La librairie Swing, née avec Java 2, se propose d’améliorer la richesse et performance. Pour cela, la librairie prend en charge tout le design de l’interface et réduit donc la quan-tité d’échanges avec le système. Le résultat est donc plus efficace et surtout beaucoup plus riche. Toutefois, le rendu de l’interface n'évolue pas avec le système et impose donc de redévelopper un nouveau Look and Feel pour chaque nouvelle version de système. Pour Eclipse, IBM a développé une librairie graphique à la fois efficace et adaptée au système d’exploitation : SWT. La librairie utilise, à chaque fois qu’ils existent, les composants graphiques du système. Les autres, sont gérés dans une librairie binaire dynamique, écrite en C et compilée. Il existe une librairie binaire dynamique pour chaque version d’OS (Windows, MacOS, GTK etc.). Toutes ses librairies dynamiques s’interfa- cent avec une librairie statique Java swt.jar) qui harmonise l’interface avec les applica-tions. Attention, un des défauts de SWT est de ne pas gérer la destruction des objets (car ils sont gérés dans une librairie native). Il faudra donc penser à utiliser la méthode dispose() pour libérer les objets.

Dans SWT, deux objets ont un rôle cen-tral : Display et Shell. L’objet Display traite l’interface avec le système d’exploitation sous-jacent. L’objet Shell, de son côté repré-sente une fenêtre de l’interface. Le listing 3 propose un petit exemple simple d’applica-tion basée sur SWT.

Dans cet exemple, l’objet display réalise l’interface avec l’OS au niveau de la boucle de messages (readAnDispatch), l’objet shell représente la fenêtre et sert de parent à l’objet text qui est une zone de saisie.

Les autres classes qui constituent la lib- rairie SWT sont essentiellement des gestion- naires de Widgets (Label, Button, List, Combo, Menu, MenuItem, ToolBar, ToolItem, CollBar, CoolItem, ProgressBar, Scale, Slider, TabFol- der, TabItem, Table, TableColumn, TableItem, Tree, TreeItem et Canvas). Des outils per- mettent des opérations de base (classes GC, Image, Color et Font). Enfin les classes Com-posite et Group permettent de gérer des en-sembles. La gestion des événements de l’in-

terface utilisateur (souris, clavier) est calquée sur la gestion commune à AWT et Swing. Des objets Listener sont déclarés à l’interface et reçoivent des Event. Pour finir, SWT propose quelques boîtes de dialogue standard prédé-finies (ouvrir un fichier ou confirmation par exemple).

Pour la mise en œuvre dans une appli- cation RCP prenons un exemple simple. Ajou- tons une seconde commande dans l’applica- tion en définissant une nouvelle extension du point d’extensionorg.eclipse.ui.commands. Attention de bien respecter la convention de nommage pour l’Id et la classe. Créons la classe (dérivée de org.eclipse.core.com- mands.AbstractHandler suffit). Complétons la classe comme indiqué dans le listing 4. Les figures 3 et 4 montrent les détails de la configuration des points d'extension.

Ajoutons maintenant un item dans le menu Fichier. Cet item est associé (par l’ID) à la commande que nous venons de créer.

ConclusionComme vous avez pu le constater, la réalisa-tion de ce type d’applications nécessite une connaissance précise de l’outil et des inter-faces de programmation des plugins. Cette connaissance demande un important investis-sement initial d’apprentissage. Passé ce cap, il devient aisé de réaliser des applications plus ou moins complexes dotées d’une architecture robuste et modulaire. Du côté de l’interface utilisateur, RCP permet d’obtenir un rendu visuel performant, élégant et très homogène. En cela, il se démarque des outils traditionnels Java basés sur Swing. Enfin, la conformité au standard de plugins et de features permettent au développeur de minimiser son travail en ce qui concerne le cycle de vie du produit (déploiement, mise à jour, gestion des dépen-dances).

• http://eclipse.org/articles/Article-RCP-1/tutorial1.html – Un tutoriel Eclipse-RCP assez complet mais relativement ancien (basé sur eclipse 3.1)

• http://www.vogella.de/articles/RichClientPlatform – Un tutoriel plus récent, basé sur la version 3.5

• http://www.jmdoudoux.fr/java/dej – Un ouvrage très complet sur Java, qui aborde l’utilisation de SWT et JFace

• http://mbaron.developpez.com – Un site où trouver de bons tutoriels Java et Eclipse

A lire également sur le sujet, le livre de McAffer et Lemieux Eclipse Rich Client Platform chez Addison-Wesley (ISBN : 0-321-33461-2).

Ressources sur Internet

L'auteur est formateur en informatique depuis plus de 25 ans. Ses principaux domaines d'intervention sont les systè-mes (Unix, Linux et Windows), les ré- seaux, les langages et les bases de données. Il forme surtout des person- nels techniques dans les grandes en- treprises françaises et étrangères. Il est également consultant sur des projets de développement et assure le support technique d'une équipe de développeurs en Roumanie.

À propos de l'auteur

Page 39: Linux
Page 40: Linux

ProgrammationProgrammation C++

40 Linux+ 6/2009

linux

@so

ftwar

e.co

m.p

l Les modèles (templates) disponibles dans le langage C++ permettent d'implémenter les traits génériques, autrement dit, indépendants des types, des algorithmes et des structures

de données. Un exemple de modèle swap, présenté ci-dessous, remplace la valeur de deux objets. Il est possible de l'appeler pour n'importe quel objet du même type si ces objets fournissent un constructeur de copie et un opérateur d'affectation.

template<typename T> void swap(T& a, T& b) {

T tmp = a;

a = b;

b = tmp;

}

Lors de la compilation, le modèle est concrétisé, autre-ment dit, le code est généré pour les types appropriés. Le code généré d'après les modèles est identique au code écrit à la main, il est également dépourvu des clichés

mémoire et temps ; le seul inconvénient est que la com-pilation dure plus longtemps mais cela ne pose pas de problème en général.

La spécialisation est une version de modèle utilisée pour la génération du code à la place de la version gé-nérale lorsque des types appropriés se trouveront dans les paramètres. Le modèle swap<Foo>, présenté ci-dessous, est un exemple de spécialisation. Puisque le seul composant du type Foo est un pointeur de l'objet contenant les composants (la classe Foo cache l'implé-mentation), il suffit de modifier ces pointeurs si nous voulons modifier la valeur des objets. Cette démarche est plus performante que le remplacement par un objet temporaire.

Programmation générique C++ Nous utilisons les modèles ou les structures de données dans le langage C++ pour créer des algorithmes génériques. Cet article présente des techniques correspondantes aux instructions conditionnelles réalisées pendant la compilation.

Robert Nowak

• Comment sélectionner un algorithme ou une valeur pendant la compilation ;

• Le terme des classes de traits.

Cet article explique...

Page 41: Linux

ProgrammationProgrammation C++

41www.lpmagazine.org

struct Foo { //exemple de classe

qui cache l'implémentation

struct Impl; //classe

interne stocke les composants

Impl* pImpl_; //le pointeur

est un composant public pour

simplifier le modèle

};

template<> void swap<Foo>(Foo&

a, Foo& b) { //spécialisation

du modèle swap

Foo::Impl* tmp = a.pImpl_;

//il modifie les pointeurs

et non les objets entiers

a.pImpl_ = b.pImpl_;

b.pImpl_ = tmp;

}

Démarrage rapideAfin de lancer les solutions présentées, il faut disposer d'un accès à n'importe quel compila-teur C++ et éditeur texte. Certains exemples supposent un accès aux bibliothèques boost. Pour les lancer, il faut installer ces bibliothè-ques (version 1.36 ou supérieure) et utiliser le compilateur supporté officiellement, autre-ment dit, msvc 7.1 ou supérieur, gcc g++ 3.4 ou supérieur, Intell C++ 8.1 ou supérieur, Sun Studio 12 ou bien Darvin/GNU C++ 4.x. Les Listings présentés n'incluent pas d'ajout des en-têtes appropriés et de partage des es-paces de noms. Les sources complètes sont jointes au magazine.

La programmation générique en C++ utilise un sous-ensemble de structures de langage car les êtres que nous manipulons doivent avoir une valeur définie, connue lors de la compilation. Il est impossible d'utiliser les variables, d'effectuer des itérations (de créer des boucles) ni d'utiliser les instructions conditionnelles. À la place, nous utilisons les techniques qui donnent des résultats équiva-lents. La suite de l'article présente la solution permettant de sélectionner un algorithme, un type ou une constante, en fonction des paramètres du modèle, ce qui correspond aux instructions conditionnelles dans la program-mation générique.

La technique présentée pour sélection-ner un algorithme ou une valeur appropriés

utilise les classes supplémentaires de traits. Le Listing 1 présente les classes numeric_ traits qui sont des classes de traits. Elles four- nissent une constante min_value, dont la va- leur dépend du paramètre du modèle, à l'aide de la spécialisation. La fonction find_max trouve la valeur maximale dans le tableau. Elle initie la variable current_max à l'aide des classes de traits et donc des valeurs différen-tes pour les types différents.

Les classes de traits sont des types dont la tâche principale consiste à stocker des informations sur d'autres types. Ce méca-nisme permet d'ordonner l'accès aux cons-tantes dont la signification est similaire. La bibliothèque standard fournit les classes de traits std::numeric_limits qui définissent les valeurs limites pour les types numériques in-tégrés. Afin de charger la valeur d'une telle constante, nous écrivons numeric_limits <double>::min() au lieu de __DBL_MIN__ et numeric_limits<int>::min() au lieu de INT_MIN et numeric_limits<int>::max() au lieu de INT_MAX, etc.

Choix d'un algorithme lors de la com-pilation

La bibliothèque standard propose plusie- urs autres classes de traits et le nouveau stan- dard C++200x comprendra plusieurs dizai nes d'autres classes proposées actuellement

par les bibliothèques boost (type_traits, call_ traits, function_types).

La fonction fastCopy est un exemple d'utilisation de la classe de traits has_trivial_ assign, disponible dans l'ensemble analysé. Le Listing 2 présente cette fonction qui co- pie les tableaux à l'aide de std::memcpy (copie des octets) si le type des éléments du tableau permet d'effectuer l'opération de co-pie ou bien à l'aide de l'algorithme std::copy s'il faut appeler l'opérateur d'affectation pour chaque objet. La classe de traits has_ trivial_assign analyse si le type possède un opérateur trivial d'affectation, autrement dit, si l'affectation pour le type T est équiva-lente à la copie de la mémoire occupée par l'objet, si le type de has_trivial_assign<T> c'est true_type et si la valeur de has_tri-vial_assign<T>::value est true. Dans le cas contraire, la classe de traits hérite de fal-se_type et la valeur du composant value est false.

La fonction fastCopy utilise un quatriè- me argument, créé lors de la compilation d'après les informations sur le type. Sa va-leur n'est pas importante. Le type permet en revanche de sélectionner une fonction de copie appropriée.

Le modèle getId est un autre exemple d'utilisation des classes de traits. Il fournit

Listing 1. Initiation d'une variable à l'aide des classes de traits

template <typename T> struct number_traits {

static const int min_value = 0;

//pour n'importe quel type,

//la valeur de la constante s'élève à zéro

};

template<> struct number_traits<int> {

//spécialisation pour le type int

static const int min_value = INT_MIN;

//ildéfinituneconstanteappropriée

};

template<> struct number_traits<long> {

// spécialisation pour le type long

static const long min_value = LONG_MIN;

};

/ /il trouve la valeur maximale dans le tableau

template<typename T> find_max(const T* first, const T* last) {

T current_max = number_traits<T>::min_value;

//il utilise les classes de traits

for( ;first != last; ++first)

if( current_max < *first )

current_max = *first;

return current_max;

}

• Comment écrire de simples programmes en C++ ;

• Qu'est-ce que des modèles (templates).

Ce qu'il faut savoir...

Page 42: Linux

42 Linux+ 6/2009

Programmation C++Programmation

l'identifiant de l'objet. Cette fonction retourne l'identifiant stocké dans l'objet pour les objets du type dérivé de HasId ou l'adresse pour les autres objets. Afin de choisir la méthode appropriée, nous utilisons la classe de traits is_base_of, cf. le Listing 3.

La solution utilise la classe de traits is_base_of, dépendante de deux paramètres et fournissant des informations sur le fait si le premier type est une classe de base pour le second. Lorsque Base est une classe de base Derived, le type de is_base_of<Base, Deri-ved> est true_type, sinon, le type de is_base_ of<Base, Derived> est false_type. Cette clas-se de traits est employée pour créer un objet auxiliaire qui est transmis comme un paramè-tre supplémentaire. Il permet de sélectionner une des plusieurs fonctions surchargées lors de la compilation. La fonction getId peut être employée pour n'importe quel objet afin d'ob-tenir soit l'adresse soit le résultat de l'appel de la méthode getId.

struct ClassWithId : public HasId {

//le type avec son propre identifiant

ClassWithId(long id) : HasId(id)

{ }

};

struct ClassWithoutId { };

//le type sans identifiant

ClassWithId c1(1);

//l'objet avec l'identifiant égal

à 1

ClassWithoutId c2;

//l'objet sans identifiant

getId(c1);

// il retourne la valeur 1

getId(c2);

// il retourne l'adresse de l'objet c2

Optimisation à l'aide des classes de traits. Les classes de traits peuvent être emplo- yées pour optimiser la transmission des argu- ments. Les arguments doivent être transmis par une référence constante pour les types d'utilisateurs car nous évitons ainsi de faire des copies. En revanche, pour les types intégrés et les pointeurs, nous transmettons les arguments via la valeur car créer les co-pies est peu onéreux alors que la référence ajoute un cliché au moment où nous nous référons à l'objet.

La classe de traits boost::call_traits, four- nie par les bibliothèques boost [1], définit notamment la manière optimale pour trans-mettre les arguments à l'objet du type donné.

Listing 2. Utilisation des classes de traits pour sélectionner l'algorithme de copie

template<typename T> //copier à l'aide de memcpy

void doFastCopy(const T* first, const T* last, T* result, true_type) {

memcpy(result, first, (last - first)*sizeof(T) );

}

template<typename T> //copier à l'aide de std::copy

void doFastCopy(const T* first, const T* last, T* result, false_type) {

std::copy( first, last, result );

}

template<class T> //l'algorithme utilise les classes de traits

void fastCopy(const T* first, const T* last, T* result) {

doFastCopy(first, last, result, has_trivial_assign<T>() );

//il crée un nouvel argument

}

Listing 3. Modèle fournissant l'identifiant aux objets de la classe

class HasId {//laclassequifournitl'identifiant

public:

HasId(long id) : id_(id) { }

virtual ~HasId() { }

long getId() const { return id_; }

private:

long id_;

};

template<typename T> long doGetId(const T& t, true_type) {

return t.getId();

//ilretournel'identifiantinterne

}

template<typename T> long doGetId(const T& t, false_type) {

return reinterpret\_cast<long>(&t);

// il retourne l'adresse comme valeur long

}

template<typename T> long getId(const T& t) {

//il utilise les classes de traits

return getIdInternal(t, is_base_of<HasId,T>() );

}

Listing 4. Fragment des classes de traits boost::call_traits

template <typename T> call_traits {

//le modèle pour les types de l'utilisateur

typedef const T& param_type;

//la manière de transmettre les paramètres du type donné

};

template <typename T> call_traits<T*> {

//spécialisation pour les pointeurs

typedef T param_type;

//il est recommandé de transmettre les pointeurs via la valeur

};

Page 43: Linux

43www.lpmagazine.org

Programmation C++Programmation

Cette classe de traits définit, mis à part les constantes, des types auxiliaires (le Lis- ting 4 présente cette situation), en permet- tant de transmettre les paramètres de ma- nière optimale. Si int est un paramètre de ce modèle, le composant param_type défi-nira le type int (car les types intégrés sont transmis via la valeur), si Foo est un para- mètre de ce modèle (exemple du type de l'utilisateur), param_type fournira le type const Foo&.

Il est possible de définir l'en-tête de notre fonction de manière suivante :

template<typename T>

void f(typename call_traits<T>::

param_type value) {}

l'argument sera alors transmis via la valeur aux types intégrés (ainsi qu'aux pointeurs et aux références) ou via la référence cons-tante pour les types d'utilisateur.

Les classes de traits peuvent être utili-sées pour réduire la taille du code résultant ou bien pour optimiser la durée de son exécution. Un code est généré pour chaque type pour lequel le modèle a été utilisé. Ce code est compilé et ajouté à la version binaire de l'application ou de la bibliothè-que créée. Afin de réduire la taille du code résultant, les mêmes solutions de modèles sont employées pour les types différents s'il est autorisé d'effectuer des conversions entre ces types. Un autre avantage de cette solution se trouve dans la possibilité de

choisir le type pour lequel les opérations sur une plate-forme donnée se dérouleront le plus rapidement. L'exemple du Listing 5 présente les classes de traits pour pro-mouvoir les nombres réels proposés par les bibliothèques boost.

Le même code de la fonction complica-teCalculationImpl sera utilisé pour les types représentant les nombres réels qu'il est pos- sible de convertir en double, car le type qui est un paramètre de ce modèle, sera obtenu au moyen de la classe de traits promote. Si nous utilisons le modèle pour les types dif-férents dans la solution présentée, le même code binaire sera utilisé. Il se servira des objets du type qui est le mieux supporté par la plate-forme donnée.

ConclusionLes techniques employées dans la program-mation générique sont différentes de celles employées dans la programmation orientée objets et structurelle. Leur connaissance per- met de réduire la taille du code source et aug- menter ainsi sa lisibilité sans impact négatif sur la performance. Les modèles permettent de créer des solutions générales. Pour cette raison, cette technique domine parmi les bib- liothèques.

Listing 5. Utilisation des classes de traits promote proposées par boost::type_traits

template<typename T> T complicateCalculation( T input ) { //il appelle

seulement une autre fonction

return complicateCalculationImpl(typename promote<T>::type(input) );

}

template<typename T> T complicateCalculationImpl( T input ) {

//le code qui calcule la valeur

//lemêmecodebinaireserautilisépourlestypesfloatetdouble

Club .PRO

Clu

b .P

RO

BINARYSEC SASBinarySEC édite un logiciel de protection intelligente des applica-tions et sites Web. Ce module Apache s’installe en 15 minutes et blo-que 99,9% du trafic malicieux. Il est le garde du corps des sites Web. BinarySEC a déposé 2 brevets pour valoriser ses innovations.http://www.binarysec.com.

NeowebNeoweb est une société de service spécialisée en Logiciel Libre et exper-te sur le Framework Joomla ! Nous proposons des solutions aux PME et Grands comptes dans le domaine des sites Internet, extranet et e-com-merce.http://www.neoweb.fr

ObladyOblady est une société de service en logiciel libre proposant des services d’ingénierie internet spécialisée dans les solution de gestion de contenu – CMS Ingénierie autour du logiciel libre, création de sites Internet, formation Typo 3.www.oblady.com

KerniXKerniX est une société française spécialisée dans la conception d’applications web sur mesure. L’offre KerniX inclut a la fois le développement, l’hébergement, et le référencement. KerniX intervient notamment dans les domaines de l’e-commerce, des plateformes de marché, et des réseaux sociaux.

Cresitt IndustrieCentre de Ressources Technologiques en électronique situé a Orléans. Plateau technique et laboratoire de R&D sur les systemes et OS embarqués, RFID et commu- nication Wireless, informatique industrielle. Expertises, conseil, formations, montage de projets et actions collaboratives.http://www.cresitt.com et http://www.doc-en-ligne.fr

Page 44: Linux

SécuritéSécurité avec Honeypot

44 Linux+ 6/2009

linux

@so

ftwar

e.co

m.p

l

Un honeypot (en français pot de miel) est un ordinateur ou un programme volontaire-ment vulnérable mis en place afin d’attirer et piéger les pirates informatiques ainsi que

les logiciels malveillants.Le but de ce subterfuge est donc de faire croire à

l'intrus, qu’il s’agisse d’une personne physique ou d’un logiciel malveillant, qu'il peut prendre le contrôle d'une véritable machine de production pour observer les moyens de compromission et ainsi donner la possibilité aux admi-nistrateurs réseau de l’entreprise de se prémunir contre de nouvelles attaques et leur laisser ainsi un laps de temps supplémentaire pour réagir avant que les vrais serveurs de production ne soient touchés.

L’utilisation d’un honeypot s'appuie donc sur trois problématique différentes, à savoir :

la surveillance,la collecte d'informations,l'analyse des informations.La surveillance va permettre d’anticiper d'éventuelles

futures attaques car les pirates informatiques tentent, en

règle générale, d'entrer de la même manière dans l’ensem-ble des systèmes. Pour ce qui est de la collecte d’informa-tion et des analyses, cette étape voit régulièrement le jour lorsqu’il s’agit d’analyse d’outils malveillants tels que des malwares ou autre virus.

Qu’est ce qu’HoneydHoneyd est un projet libre et gratuit permettant la mise en place d’un système d’honeypot de manière simple et rapide sur un serveur de pré-production ou de produc-

Mise en place d’un pot de miel avec Honeyd Comment se protéger efficacement contre les attaques malveillantes ? Peut-on tendre un piège aux pirates informatiques ? Un honeypot est un programme ou machine mis en place pour attirer et piéger les pirates informatiques. Une fois la machine mise en réseau et équipée d'un honeypot, elle peut détecter les hackers.

Régis Senet

L’utilisation d’honeypot dans un environnement de production.

Cet article explique...

Connaissances en système d’exploitation UNIX/Linux.

Ce qu'il faut savoir...

Page 45: Linux

SécuritéSécurité avec Honeypot

45www.lpmagazine.org

tion. Bien qu’Honeyd soit nettement plus jeune que certains de ses concurrents, il a su rattraper son retard en proposant un logiciel compilable qui se lance sur l’ensemble des systèmes de type BSD (FreeBSD, OpenBSD et NetBSD)et de type GNU/Linux et Solaris.

Origine du projetAprès plusieurs années de développement, la première version d’Honeyd a vu le jour en fin d’année 2005 grâce à la contribution de Niels Provos qui n’est autre que le développeur de l’application. Actuellement à sa version 1.5.c depuis le 27 mai 2007, Honeyd a la chance d'êt- re sous licence GNU/GPL lui permettant une évolution très rapide. Cette dernière s’explique également grâce aux nombreux utilisateurs renvoyant régulièrement aux développeurs de nouveaux bugs dans l’application elle-même. Honeyd fut conçu uniquement sur le temps libre de son éditeur principal sans apport financier alors qu’à l’heure actuelle, il existe de nom-breuses entreprises l’utilisant à des fins com-merciales en particulier pour tout ce qui est en rapport avec l’analyse d’outils malveillants tels que les malwares/virus.

Installation et configuration d’HoneydLes exemples illustrant cet article s'appuient sur :

• Pour la distribution : une Debian 5.0 (Len-ny) entièrement mise à jour. Attention, il est possible que certaines commandes ne soient pas tout à fait identiques sur une autre distribution. L’ensemble des instal-lations est réalisé grâce au gestionnaire de paquets propre à un système Debian : APT (Advanced Package Tool).

• Pour les interfaces réseau : – lo :127.0.0.1– eth0 : 192.168.1.147

• Il est nécessaire, selon les configurations sur lesquelles vous travaillez, d’adapter les interfaces réseau.

Mise à jour du systèmeIl est possible à tout moment qu’une faille de sécurité soit découverte dans l’un des modules composant votre système que ce soit Apache ou quoi que ce soit d’autre. Certaines de ces failles sont parfois critiques d’un point de vue sécurité pour l’entreprise. Afin de contrer ce risque potentiel, il est nécessaire de réguliè-rement mettre à jour l’ensemble du système grâce à divers patches de sécurité.

L’ensemble du système est actualisé grâce à cette commande: nocrash:~# apt-get up-date && apt-get upgrade.

Le système d’exploitation est maintenant complètement à jour, mettre en place honeyd se fera dans de bonnes conditions.

Il est possible de ne pas passer par cette étape mais elle est fortement conseillée pour la sécurité et la stabilité de votre système d’exploitation.

Installation d’HoneydL’installation d’Honeyd ne demande aucune installation préalable, il est donc possible de directement passer à la phase d’installation via le gestionnaire de paquets Debian : nocrash:~# apt-get install honeyd.

L’installation d’Honeyd va également installer les dépendances suivantes :

• libpcap0.8• rrdtool• librrd4• libdumbnetl• farpd• honeyd-common

La libpcap est une bibliothèque de fonctions servant d'interface à la capture de paquets et est indépendante du système. RRDtool est un outil de gestion de base de données RRD permettant la sauvegarde haute performance et le tracé de graphiques, de données chronologiques. libdumbnet est une bibliothèque réseau porta-tive qui fournit une interface simplifiée pour

plusieurs routines réseau. farpd est un démon ARP répondant à n'importe quelle demande d'ARP d'un ensemble d'adresses IP

Les principaux fichiers installés sont :

• /etc/init.d/honeyd• /etc/logrotate.d/honeyd• /etc/default/honeyd• /usr/lib/honeyd• /usr/share/honeyd• /usr/share/doc/honeyd• /usr/include/honeyd• /usr/bin/honeyd

À noter également que lors de son installation, Honeyd a créé un utilisateur honeyd ainsi qu’un groupe du même nom : ainsi, le pot de miel sera lancé avec des droits limités et non pas en tant que superadministrateur (root), ce qui pourrait être dangereux :

nocrash:~# grep honeyd

/etc/passwd /etc/group

/etc/passwd :honeyd :x:108:116:Honeyd

daemon,,,:

/var/log/honeypot:/bin/false

/etc/group :honeyd:x:116:

Configuration d’HoneydUne fois l’installation terminée, il convient de passer à la phase de configuration. Celle-ci se réalise grâce au fichier /etc/honeypot/honeyd. conf qui permet de décrire l’ensemble des services virtuels.

Avant de modifier les configurations, il est nécessaire d'autoriser l’utilisateur honeyd à lire et écrire dans les fichiers concernés :nocrash:~# chown -R honeyd:honeyd /

etc/honeypot/.

Vous constatez ici que les modifications de propriétaire et de groupe ont été réalisées avec succès.

Reprenons le fichier de configuration ini-tial (/etc/honeypot/honeyd.conf) afin de partir d’une base existante et expliquer les étapes nécessaires à la création de service virtuel. Les lignes suivantes permettent de déclarer le réseau virtuel utilisé en exemple :

route entry 10.0.0.1

route 10.0.0.1 link 10.2.0.0/24

route 10.0.0.1 add net 10.3.0.0/16

10.3.0.1 latency 8ms bandwidth 10Mbps

route 10.3.0.1 link 10.3.0.0/24

route 10.3.0.1 add net 10.3.1.0/24

10.3.1.1 latency 7ms loss 0.5

route 10.3.1.1 link 10.3.1.0/24

Figure 1. Vérification des droits utilisateurs

Page 46: Linux

46 Linux+ 6/2009

SécuritéSécurité avec Honeypot

Le réseau virtuel précédemment créé fonc-tionnera après qu'ait été déclarée, dans la table de routage, une route pour l'atteindre. La passerelle utilisée pour cette route est l'interface loopback afin de ne pas perturber le réseau existant (voir Figure 2).

nocrash:~# route add -net 10.0.0.0

netmask 255.0.0.0 gw localhost

Simulation de serviceEntrons maintenant dans le vif du sujet avec la simulation de service, c'est-à-dire le but premier d’Honeyd.

# Création d'un profil template

create template

set template personality

"Microsoft Windows XP Professional SP1"

# For a complex IIS server

add template tcp port 21

"/usr/share/honeyd/scripts/ftp.sh"

add template tcp port 22

"/usr/share/honeyd/scripts/

test.sh $ipsrc $dport"

add template tcp port 23 proxy

$ipsrc:23add template udp port 53

proxy 141.211.92.141:53

add template tcp port 80

"sh /usr/share/honeyd/scripts/

win32/web.sh"

set template default tcp action reset

# More parameters

set template uptime 1728650

set template maxfds 35

bind 10.3.1.12 template

Décomposons un peu ces lignes.

La directive Create sert à spécifier le type de machine à émuler. Dans notre cas, il s’agit d’un template qu’il sera possible de réutiliser plus tard.

Ensuite, il faut assigner une identité à notre service virtuel. Pour cela, nous utilisons ces directives :

set <Type de machine> personality

<Description>

set <Adresse IP Honeypot personality

<Description>

set <Type de machine> personality

<Description>

Permet de renseigner la signature du service émulé. Dans notre exemple, nous allons émuler un système d’exploitation Microsoft XP SP1 : bind <Adresse IP> <Type de machine>.

Permet de définir une adresse IP à notre honeypot. Pour résumer, nous avons créé des services, leur avons donné des descriptions ainsi qu’une identité. Cela suffit-il pour leur-rer les possibles attaquants de votre système ? La réponse est NON.

En effet, il est à présent nécessaire de si-muler le fonctionnement du service prétendu- ment existant. Les services sont de plusieurs types. Le fichier de configuration précédem-ment édité montre la mise en place de plu-sieurs services : un serveur web, un serveur SSH ainsi qu’un service Telnet.

add template tcp port 21 "/usr/

share/honeyd/scripts/ftp.sh "

add template tcp port 22 "/usr/

share/honeyd/scripts/test.sh

$ipsrc $dport"

add template tcp port 23 proxy

$ipsrc:23add template udp port

53 proxy 141.211.92.141:53

add template tcp port 80

"sh /usr/share/honeyd/scripts/

win32/web.sh"

Analysons simplement la première ligne puis-que les autres ont le même fonctionnement

mais pour un service distinct. La première ligne émulera un service de type serveur FTP (Port 21), la deuxième un serveur SSH (Port 22), la troisième, quant à elle, émulera un ser-vice Telnet (Port 23) ainsi qu’un serveur web (Port 80).

Afin de leurrer l’attaquant, HoneyD émule le service en question grâce à des scripts. Dans notre cas, pour le serveur FTP, le script en question se trouve sur le système d’exploita-tion à cet emplacement : /usr/share/hon-eyd/scripts/ftp.sh.

Voici une partie du code du fichier /usr/share/honeyd/scripts/ftp.sh. Vous constatez que ce dernier gère une fausse authentification d’un serveur FTP ne renvoyant que des lignes de texte et aucune au serveur en lui-même ; ainsi, il n'est pas dangereux (voir Figure 3).

L’attaquant potentiel pensera donc s’être connecté avec succès au serveur FTP. Beau- coup de scripts permettant d’émuler de nom-breux services sont disponibles sur le site of-ficiel : http://www.honeyd.org/contrib.php.

Lorsque vous téléchargez de nouveaux scripts, il est important de ne pas oublier de leur donner les droits d’exécution.

nocrash:~# chmod 755 /usr/share/

honeyd/scripts/ftp.sh

Les autres lignes permettent de donner encore plus de faux détails à l’attaquant potentiel :

# Définit l’uptime de la machine

set template uptime 1728650

# Définit la description des fichiers

set template maxfds 35

Afin de pouvoir gérer les logs du système d’HoneyPot, il est nécessaire de créer le répertoire et d’y ajouter les droits :

nocrash:~# mkdir /var/log/honeyd

nocrash:~# chown -R honeyd:honeyd

/var/log/honeydFigure 2. Réseau internet/externe

Figure 3. Code du serveur FTP

Page 47: Linux

47www.lpmagazine.org

SécuritéSécurité avec Honeypot

Pour fonctionner correctement, Honeyd uti- lise l’outil Arpd installé précédemment. Honeyd permet d’associer à ses machines virtuelles des adresses IP qui ne sont pas attribuées dans le réseau. Arpd répond aux requêtes ARP en renvoyant l’adresse MAC de la machine hé-bergeant Honeyd. Une fois l’adresse MAC renvoyée, la communication entre Honeyd et l’autre machine démarre :

nocrash:~# farpd 192.168.1.0/24

arpd[3014]: listening on eth0: arp

and (dst net 192.168.1.0/24) and not

ether src 00:22:15:cb:aa:5e

Si vous avez plusieurs interfaces réseau, vous pouvez spécifier celle que vous voulez utiliser : ocrash:~# farpd -i eth0 192.168.1.0/24.

Démarrage d’HoneydÀ présent que la configuration d’Honeyd est entièrement terminée et nos faux services para-métrés, il est nécessaire de démarrer Honeyd.

La commande de contrôle de notre honey-pot « Honeyd » comporte plusieurs options :

• Option –d : lance en mode interactif• Option –f : précise le fichier de

configuration à utiliser • Option –p : fichier contenant les

empreintes d’OS • Option –l : indique le chemin complet

vers les logs de paquet • Option –i : indique l’interface

à utiliser si vous en possédez plusieurs nocrash:~# honeyd -p /etc/

honeypot/nmap.prints -l /var/

log/honeypot/honeyd.log

-f /etc/honeypot/honeyd.conf -

i lo 10.0.0.0/8 -d

La commande suivante permet donc de lan- cer Honeyd en mode interactif (option -d), en spécifiant le fichier de log /var/log/honeypot/honeyd.log (option -l), en utilisant le fichier de configuration par défaut /etc/honeypot/honeyd.conf (option -f), en utilisant les em- preintes d’OS présentes dans le fichier /etc/honeypot/nmap.prints (option -p) et avec l’ad- resse IP 10.0.0.0/8 (option -i) comme interface lo.

nocrash:~# honeyd

-p /etc/honeypot/nmap.prints

-l /var/log/honeypot/honeypot.log

-f /etc/honeypot/honeyd.conf

-i lo 10.0.0.0/8 -d

Honeyd V1.5c Copyright (c) 2002-2007

Niels Provos

honeyd[3544]: started with

-p /etc/honeypot/nmap.prints

-l /var/log/honeypot/honeypot.log

-f /etc/honeypot/honeyd.conf

-i lo

-d 10.0.0.0/8

honeyd[3544]: listening on lo:

ip and (dst net 10.0.0.0/8)

honeyd[3544]: Demoting process

privileges to uid 65534, gid 65534

L’un des problèmes récurrents lors du lance-ment d’Honeyd est la gestion des privilèges sur les fichiers et sur les dossiers. Il est donc essentiel de donner l’ensemble des droits aux fichiers/dossiers à l’utilisateur honeyd ainsi qu’au groupe honeyd (Pensez à la commande chown et chmod). Dans le cas contraire, cette erreur est susceptible de survenir :

honeyd[3536]: honeyd_logstart:

fopen("/var/log/honeypot/

honeyd.log"): Permission denied

Relançons maintenant honeyd sans l’option -d permettant de le lancer en tant que démon.

Vérifiez éventuellement que le démon honeyd est effectivement présent en listant les processus actifs.

nocrash:~# ps aux | grep honeyd

nobody 3684 0.0 0.1 4636 2616 ?

Ss 19:17 0:00 /usr/bin/honeyd

-f /etc/honeypot/honeyd.conf

-l /var/log/honeypot/honeyd.log

-p /etc/honeypot/nmap.prints

-a /etc/honeypot/nmap.assoc

-0 /etc/honeypot/pf.os

-x /etc/honeypot/xprobe2.conf

-u 108 -g 116 --disable-webserver

-i eth0 10.0.0.0/8

debian:/var/log#

Dans le fichier de configuration, il y a cette ligne :

bind 10.3.1.12 template

Nos faux services répondront donc à l’adres- se 10.3.1.12. Pour vérifier le bon fonctionne- ment d’Honeyd, lançons un nmap sur l’adres-se 10.3.1.12.

nocrash:~# nmap 10.3.0.12

Starting Nmap 4.62

(http://nmap.org )

at 2009-06-01 20:16 CEST

Interesting ports on 10.3.0.12:

Not shown: 1711 closed ports

PORT STATE SERVICE

21/tcp open ftp

22/tcp open ssh

23/tcp open telnet

80/tcp open http

Nmap done: 1 IP address (1 host up)

scanned in 0.587 seconds

Éventuellement, testons le bon fonctionne-ment de nos services.

nocrash:~# ftp

ftp> open 10.3.0.12

Connected to 10.3.0.12.

220 debian. FTP server

(Version wu-2.6.0(5) lundi

1 juin 2009, 20:27:25 (UTC+0200))

ready.

Name (10.3.0.12:nocrash): anonymous

Honeyd est donc entièrement mis en place, il est alors possible de leurrer des attaquants potentiels.

ConclusionD’importants honeypots sont réalisables grâ-ce à Honeyd car il est à faible interaction et est très complet bien qu’assez jeune par rap-port à ses concurrents. Il a l’avantage d’être particulièrement souple grâce à son système de scripts. Il n’est pas forcément conseillé d’utiliser Honeyd sur un serveur en produc-tion ayant d’autres tâches à accomplir. En ef-fet, il est préférable de placer votre honeypot sur un serveur distinct qui lui est uniquement dédié pour ainsi réaliser le maximum d’ana-lyses sur les résultats récupérables.

• http://www.honeyd.org/ • http://www.honeyd.org/contrib.php

Sur le réseau

Régis SENET, actuellement stagiaire chez JA-PSI est étudiant en quatrième année à l’école Supérieur d’informatique Supinfo. Passionné par les tests d’intrusion et les vulnérabilités Web, il tente de découvrir la sécurité informatique d’un point de vue entreprise. Il s'oriente actuellement vers le cursus CEH, LPT et Offensive Security.Contact : [email protected] Site internet : http://www.regis-senet.fr

A propos de l'auteur...

Page 48: Linux

SécuritéProFTPd, MySQL, TLS

48 Linux+ 6/2009

linux

@so

ftwar

e.co

m.p

l B ien que de nos jours, plus de 90% du trafic utilisé sur Internet corresponde au proto-cole HTTP (HyperText Transfer Protocol), il existe d’autres protocoles tels que FTP (File

Transfer Protocol) qui ont leur part dans l’immensité du trafic. Le protocole FTP est un protocole relativement an-cien du fait qu’il est apparu en 1971 entre les machines du MIT. Le petit bémol à cette technologie est que par défaut, le protocole FTP laisse transiter en clair l’ensemble des données, que ce soit les données en elles-même mais aussi les identifiants de connexion, à savoir noms d’utilisateur et mots de passe.

Pour cela, nous allons présenter la mise en place d’un serveur FTP alliant simplicité, facilité de configuration et sécurité.

Mise à jour du systèmeAu cours de cet article, la distribution utilisée fut une Debian 5.0 (Lenny) entièrement mise à jour. Attention, il est possible que certaines commandes ne soient pas tout à fait identiques sur une autre distribution. L’ensemble

des installations va se réaliser grâce au gestionnaire de paquets propre à un système Debian : APT (Advanced Package Tool).

Il est possible à tout moment qu’une faille de sécurité soit découverte dans l’un des modules composant votre système que ce soit Apache ou quoi que ce soit d’autre. Certaines de ces failles peuvent être critiques d’un point de vue sécurité pour l’entreprise. Afin de combler ce risque potentiel, il est nécessaire de régulièrement mettre à jour l’ensemble du système grâce à divers patches de sécurité.

Il est possible de mettre à jour l’ensemble du système via la commande suivante :

ProFTPd, MySQL, TLSla sécurité des tranfertsLe transfert des données via le grand réseau qu'est Internet est, à l’heure actuelle, une notion tout à fait indispensable ainsi que tout à fait normale. En effet, chaque jour le nombre de transferts transitant via Internet augmente de manière vertigineuse.

Régis SENET

• Le fonctionnement d’un serveur FTP classique,• Les faiblesses du protocole FTP,• Les moyens pour palier les faiblesses de ce pro-

tocole.

Cet article explique...

Page 49: Linux

SécuritéProFTPd, MySQL, TLS

49www.lpmagazine.org

nocrash:~# apt-get update && apt-get

upgrade

Le système d’exploitation est maintenant complètement à jour, il est donc possible de mettre en place un serveur FTP dans de bonnes conditions. Il est possible de ne pas passer par cette étape mais elle est fortement conseillée pour la sécurité ainsi que la stabilité de votre système d’exploitation.

ProFTPd, MySQL et TLSProFTPd a grandi du désir d'avoir un serveur FTP sécurisé et facilement configurable. Quand le Projet a vu le jour à la fin de l’année 2001, le serveur le plus utilisé était wu-ftpd. Néan-moins, bien que wu-ftpd fut le serveur le plus utilisé pour ses performances, il lui manque de nombreuses caractéristiques pour concurren-cer les nouveaux serveurs FTP sous Windows.

Les futurs développeurs de ProFTPd ont donc décidé de créer un nouveau serveur FTP, sécurisé, facilement configurable à la manière d’Apache et contenant les dernières nouveau-tés disponibles. De très nombreuses personnes ont participé à la création du projet ProFTPd comme Jesse Sipprell, le créateur du logiciel, John Morrissey, l’un des principaux déve-loppeurs des modules s’ajoutant à ProFTPd ou bien encore Andrew Houghton, créateur du module permettant à ProFTPd de communi-quer avec les bases de données MySQL.

Actuellement à sa version stable depuis le 30 juin 2009, la version 1.3.2a, ProFTPd dis-pose également d’une version avancée la ver-sion 1.3.3.rc1. Son architecture est modulaire, ce qui a permis d'écrire des extensions pour le support de la cryptographie SSL/TLS (proto-cole FTPS) et l'extension de l'authentification via des bases RADIUS, LDAP ou SQL.

MySQL est un gestionnaire de base de do- nnées que nous ne présentons même plus du fait de sa grande notoriété. Même si MySQL a été adopté par de nombreuses entreprises, les développeurs sont toujours aussi actifs avec la sortie d’une nouvelle version stable, la ver- sion 5.1.36 le 1er Juillet 2009 alors qu’une aut- re version avec de nombreux changements est en développement : la version 6.0.11.

TLS ou Transport Layer Security, ancien-nement nommé Secure Socket Layer (SSL), est un protocole de sécurisation des échanges

sur Internet. (Cf. Wikipédia). Nous allons nous servir de cette sécurisation supplémentaire lors du transfert de nos données

Mise en place de la base de données MySQLComme nous avons pu le dire précédemment, la base de données MySQL va permettre de stoc-ker l’ensemble des comptes utilisateurs pouvant se connecter au serveur FTP. Nous allons donc installer la base de données, la sécuriser ainsi que créer les tables nécessaires.

Installation de MySQLAvant de parler de configuration de la base de données ainsi que des politiques de sécurité à mettre en place, il est bien évidemment né-cessaire d’installer la base de données.

nocrash:~# apt-get install mysql-

server

Nous ne rentrerons pas en détail dans la sécu-risation de la base de données MySQL, mais vous devez garder à l’idée que celle-ci est extrêmement importante pour la stabilité du système. Il vous est possible de regarder le lien suivant pour ce qui est de la sécurisation de vos bases de données : http://www.regis-senet.fr/blog/article.php?id_article=40.

Création des tablesIl est à présent nécessaire de créer la base de données en rapport avec le serveur FTP ainsi que deux tables contenant les utilisateurs et les groupes. Pour cela, nous allons utiliser les commandes suivantes :

CREATE DATABASE `proftpd`;

USE proftpd;

Création de la base de données proftpd (cf. Lisitng 1).

Figure 1. Configuration de ProFTPd

Figure 2. Connexion avec Filezilla

Connaissance en système d’exploitation UNIX/Linux et des bases de données.

Ce qu'il faut savoir...

Page 50: Linux

50 Linux+ 6/2009

SécuritéProFTPd, MySQL, TLS

Création de la table ftpuser (cf. Lisitng 2).Afin d’intégrer l’ensemble des tables

sans avoir à les réécrire, il est possible d’utili-ser la technique suivante :

• Créer un fichier nommé database.sql dans votre /home et y mettre l’ensemble des ordres SQL précédemment vus.

• Insérer l’ensemble des commandes grâce à la commande suivante :

nocrash:~# mysql -u root -p < /

home/nocrash/database.sql

Enter password

• Vérifier la présence des tables en vous connectant à la base de données :

nocrash:~# mysql -u root -p

Enter password:

[…]

mysql > use proftpd;

mysql > show tables;

Il est à présent normalement possible de voir nos deux table: ftpgroup et ftpuser.

Par la suite, il est nécessaire de créer un utilisateur (proftpd) avec un mot de passe (password) qui a seulement les droits de lire les données de la base proftpd.

GRANT USAGE ON proftpd.* TO

proftpd@'localhost'

IDENTIFIED BY ‘password’ WITH GRANT

OPTION;

ProFTPdL’installation de ProFTPd va simplement se réaliser grâce au gestionnaire de paquets pro-pre à Debian, le gestionnaire APT.

nocrash:~# apt-get install proftpd

openssl

nocrash:~# wget http://

ftp.de.debian.org/debian/pool/main/

p/proftpd-dfsg/proftpd-mod-

mysql_1.3.1-17lenny2_i386.deb

nocrash:~# dpkg -i proftpd-

mod-mysql_1.3.1-17lenny2_i386.deb

L’installation d’OpenSSL est nécessaire pour l’utilisation de TLS par la suite pour chiffrer les communications.

L’installation du paquet proftpd-mod-mys-ql permet de pouvoir faire interagir le serveur FTP avec la base de données MySQL pour la gestion des utilisateurs

Lors de l’installation de proftpd, il est nécessaire de choisir Indépendamment lors du choix du lancement de ProFTPd (cf. Figure 1).

Configuration de base de ProFTPdNous allons commencer dans un premier temps par réaliser les configurations basiques du serveur FTP. L’ensemble des configura- tions se réalise dans un même et unique fi-chier, le fichier /etc/proftpd/proftpd.conf.

nocrash:~# vi /etc/proftpd/

proftpd.conf

L’IPV6 n’étant pas pleinement utilisé à l’heu-re actuelle, il est possible de désactiver son utilisation grâce à la directive suivante :

UseIPv6 off

L’ensemble des directives suivantes permet de donner (ou non) des informations sur le ser-veur FTP

ServerName "Mon serveur FTP"

ServerType standalone

ServerIdent on "Bienvenue sur mon

ftp. Veuillez-vous identifier"

DeferWelcome on

La directive DeferWelcome à on permet de ne pas donner d’information précise sur le serveur.

ServerType quant à elle permet de spéci-fier le type de lancement de ProFTPd.

Port 21

Umask 022 022

MaxInstances 30

La directive Port permet de spécifier le port d’écoute du serveur FTP qui est 21 par défaut. MaxInstance permet quand à elle de spécifier le nombre de processus fils maximum que va gérer proftpd.

Lisitng 1. Création de la table ftpgroup intégrant l’ensemble des groupes d’utilisateurs du serveur FTP.

--

-- Structure de la table `ftpgroup`

--

CREATE TABLE `ftpgroup` (

`groupname` varchar(16) NOT NULL default '',

`gid` smallint(6) NOT NULL default '5500',

`members` varchar(16) NOT NULL default '',

KEY `groupname` (`groupname`)) TYPE=MyISAM COMMENT='Table des groupes ProFTPd';

Lisitng 2. Création de la table ftpuser intégrant l’ensemble des utilisateurs du serveur FTP.

--

-- Structure de la table `ftpuser`

--

CREATE TABLE IF NOT EXISTS `ftpuser` (

`id` int(10) unsigned NOT NULL auto_increment,

`userid` varchar(32) NOT NULL default '',

`passwd` varchar(32) NOT NULL default '',

`uid` smallint(6) NOT NULL default '5500',

`gid` smallint(6) NOT NULL default '5500',

`email` varchar(255) NOT NULL,

`homedir` varchar(255) NOT NULL default '',

`shell` varchar(16) NOT NULL default '/bin/false',

`count` int(11) NOT NULL default '0',

`accessed` datetime NOT NULL default '0000-00-00 00:00:00',

`dl_bytes` bigint(20) NOT NULL,

`dl_count` bigint(20) NOT NULL,

`ul_bytes` bigint(20) NOT NULL,

`ul_count` bigint(20) NOT NULL,

`modified` datetime NOT NULL default '0000-00-00 00:00:00',

`LoginAllowed` enum('true','false') NOT NULL default 'true',

PRIMARY KEY (`id`)

) ENGINE=MyISAM COMMENT='Table des utilisateurs ProFTPd' ;

Page 51: Linux

51www.lpmagazine.org

SécuritéProFTPd, MySQL, TLS

NB : Au delà de 30, il y a un risque de Dos.Afin d’éviter les attaques de type Bru-

teforce ou de type dictionnaire à l’encontre de ProFTPd, il est nécessaire de définir la directive MaxLoginAttempts.

MaxLoginAttemps 3

La directive DefaultRoot est l’une des direc-tives les plus importantes du fichier de con-figuration. Elle limite le user à son home di-rectory, si son home directory est par exemple /home/nocrash, il ne pourra se balader qu’à l’intérieur de celui-ci et ne pourra remonter plus haut. Lors de sa connexion, le user verra comme path dans son client FTP le chemin /

DefaultRoot

Il est possible de pousser la configuration grâce à l’utilisation de balise VirtualHost, Anonymous, Directory et Limit.

Les balises <VirtualHost></VirtualHost> permettent comme leur nom l’indique de créer des hôtes virtuels permettant des con-figurations différentes en fonction de l’hôte recherché.

Les balises <Anonymous></Anony- mous> comme leur nom le laisse comprendre

servent à configurer un accès anonyme au service FTP. De cette manière, les utilisateurs anonymes se retrouveront dans un dossier spécialement prévu à cet effet.

<Anonymous /home/ftp>

MaxClients 5 "Nombre de clients

maximum atteints: 5"

User ftp

Group ftp

</Anonymous>

Les balises <Directory></Directory>, permet- tent quant à elle d’avoir une configuration dif- férente en fonction des répertoires.

Les dernières balises, les balises <LIMIT> </LIMIT> quant à elles sont très libres d’uti-lisation. En effet, il est possible de limiter la connexion, l’écriture des données, la lecture des données etc. (cf. Lising 3).

La directive UserAlias est obligatoire dans le contexte des connexions anonymes permettant aux clients de se connecter avec le compte anonymous sans que celui-ci n'existe réellement sur le système

Configuration de ProFTPd en rapport avec la base de donnéesLes configurations de toutes les options en rapport avec la base de données vont se réaliser dans le fichier /etc/proftpd/sql.conf qui est inclus dans le fichier de configura-tion principal grâce à la directive: include /etc/proftpd/sql.conf.

Veillez à ce que cette ligne ne soit pas commentée dans le fichier /etc/proftpd/proftpd.conf

cat /etc/proftpd/proftpd.conf | grep

«include /etc/proftpd/sql.conf»

include /etc/proftpd/sql.conf

Il n’y a pas de # devant la ligne, c’est parfait, la ligne n’est donc pas commentée.

Voici donc les modifications à apporter dans le fichier /etc/proftpd/sql.conf:

<IfModule mod_sql.c>

SQLBackend mysql

</IfModule>

Pour plus de sécurité au niveau des mots de passe, nous allons nous assurer que ceux-ci vont être cryptés dans la base de données grâce à la fonction MySQL ENCRYPT.

SQLAuthTypes Crypt

SQLAuthenticate users* groups*

Il est possible de coupler plusieurs métho-des d’authentification. Par exemple, si nous souhaitons avoir des mots de passe cryptés et des mots de passe en clair dans la base de données :

SQLAuthTypes Crypt plaintext

Il est à présent nécessaire de spécifier la base de données dans le fichier de configuration. Pour cela, il est nécessaire d’utiliser la direc-tive suivante:

SQLConnectInfo proftpd@localhost

root votre_mot_de_passe

Lisitng 3. Restriction des accès aux utilisa-teurs anonymes

<Anonymous /home/nocrash/files/

primary/html/download>

Group public

User public

UserAlias anonymous public

UserAlias ftp public

AnonRequirePassword off

MaxClients 10

<Limit WRITE>

DenyAll

</Limit>

<Directory uploads/*

<Limit READ>

DenyAll

</Limit>

<Limit STOR>

AllowAll

</Limit>

</Directory>

</Anonymous>

Figure 3. Acceptation du certificat

Figure 4. Connexion réussi

Page 52: Linux

52 Linux+ 6/2009

SécuritéProFTPd, MySQL, TLS

Il faut également donner à ProFTPd le nom des colonnes pour les tables usertable et grouptable :

SQLUserInfo ftpuser userid passwd

uid gid homedir shell

SQLUserWhereClause

"LoginAllowed = 'true'"

SQLGroupInfo ftpgroup groupname

gid members

Il est également possible de gérer l’ensemble des logs de la base de données (cf. Listing 4).

Les commandes suivantes vont permettre la mise à jour de l’ensemble des compteurs (cf. Listing 5).

Pour la dernière étape concernant la base de données, il est nécessaire de créer un utilisateur afin de pouvoir se logguer avec ce dernier.

INSERT INTO `ftpuser`

( `id`, `userid`, `passwd`,

`uid`, `gid`, `homedir`,

`shell`, `count`, `accessed` ,

`modified`, `LoginAllowed`,

email` )

VALUES ('', 'NoCrash',

ENCRYPT('passwd'), '5500',

'5500', '/home/nocrash', '/bin/

false', '', '', '', 'true',

'[email protected]' );

Configuration du TLSNous avons dit précédemment que l’ensem-ble des données seraient cryptées via TLS afin d’empêcher qu’une personne écoutant

sur le réseau ne puisse voir nos données en clair. Pour réaliser cela, il est donc nécessaire de créer les certificats pour le mode TLS :

nocrash:~# mkdir

/etc/proftpd/ssl

nocrash:~# openssl req -new -x509 -

days 365 -nodes -out

/etc/proftpd/ssl/proftpd.cert.pem

-keyout /etc/proftpd/ssl/

proftpd.key.pem

Figure 5. Page d'accueil de ProFTPd Admin

Figure 6. Liste des utilisateurs

Lisitng 4. Gestion des logs

# Enregistre les reques SQL dans /var/log/proftpd/mysql.log

SQLLogFile /var/log/proftpd/mysql.log

# Enregistre les authentifications

LogFormat auth "%v [%P] %h %t \"%r\" %s"

ExtendedLog /var/log/proftpd/auth.log AUTH auth

# Enregistre les accès aux fichiers

LogFormat write "%h %l %u %t \"%r\" %s %b"

ExtendedLog /var/log/proftpd/access.log WRITE,READ write

# Récupère le nom partir de l'IP de la machine de

l'utilisateur ( résolution DNS )IdentLookups on

Lisintg 5. Gestion des compteurs

# Met jour les compteurs chaque connexion d'un utilisateur

SQLLog PASS updatecount

SQLNamedQuery updatecount UPDATE "count=count+1,

accessed=now()

WHERE userid='%u'" ftpuser

# Met jour les compteurs chaque upload ou download

d'un utilisateur

SQLLog STOR,DELE modified

SQLNamedQuery modified UPDATE "modified=now()

WHERE userid='%u'" ftpuser

# Met à jour le nombre de bytes downloadés

SQLLog RETR dlbytescount

SQLNamedQuery dlbytescount UPDATE

"dl_bytes=dl_bytes+%b

WHERE userid='%u'" ftpuser

# Met à jour le nombre de téléchargements

SQLLog RETR dlcount

SQLNamedQuery dlcount UPDATE "dl_count=dl_count+1

WHERE userid='%u'" ftpuser

# Met à jour le nombre de bytes uploadés

SQLLog STOR ulbytescount

SQLNamedQuery ulbytescount UPDATE

"ul_bytes=ul_bytes+%b WHERE userid='%u'" ftpuser

# Met à jour le nombre d'uploads

SQLLog STOR ulcount

SQLNamedQuery ulcount UPDATE "ul_count=ul_count+1

WHERE userid='%u'" ftpuser

Page 53: Linux

53www.lpmagazine.org

SécuritéProFTPd, MySQL, TLS

Une fois le certificat créé, il est nécessaire d’apporter des modi- fications au fichier de configuration. Tout comme pour la base de données, les configurations de toutes les options en rapport avec l’encryptage des données vont se réaliser dans le fichier /etc/proftpd/tls.conf qui est inclus dans le fichier de configu- ration principal grâce à la directive : include /etc/proftpd/tls.conf.

Veillez à ce que cette ligne ne soit pas commentée dans le fichier /etc/proftpd/proftpd.conf :

cat /etc/proftpd/proftpd.conf | grep

«include /etc/proftpd/tls.conf»

include /etc/proftpd/tls.conf

Il n’y a pas de # devant la ligne, c’est à nouveau parfait, la ligne n’est pas commentée.

Les lignes suivantes :

<IfModule mod_tls.c>

TLSEngine off

</IfModule>

sont donc à remplacer par :

<IfModule mod_tls.c>

TLSEngine on

TLSLog /var/log/proftpd/tls.log

TLSProtocol

SSLv23

TLSOptions

NoCertRequest

TLSRSACertificateFile /etc/proftpd/ssl/

proftpd.cert.pem

TLSRSACertificateKeyFile

/etc/proftpd/ssl/proftpd.key.pem

TLSVerifyClient off

TLSRequired on

</IfModule>

Les directives TLSRSACertificateFile et TLSRSACertificate- KeyFile permettent de spécifier l’emplacement de la clé ainsi que du certificat précédemment créés sur votre système d’ex-ploitation.

La directive TLSRequired portée à on permet d’obliger d’utilisation du TLS pour les connexions alors qu’un attribut à off laisse le choix de l’utilisation ou non de TLS par le client. En cas de problème avec TLS, des logs sont disponibles dans /var/log/proftpd/tls.log

Configuration généraleUne fois l’ensemble des configurations faites, l’ensemble des lignes à décommenter faite, il est nécessaire de charger les mo-dules en rapport avec MySQL manuellement.

Pour cela, éditez le fichier /etc/modules.conf :

nocrash:~# vi

/etc/modules.conf

Page 54: Linux

54 Linux+ 6/2009

SécuritéProFTPd, MySQL, TLS

Veillez à ce que les lignes suivantes ne soient pas commentées :

LoadModule mod_sql.c

LoadModule mod_sql_mysql.c

Démarrage de ProFTPdAvant de démarrer ProFTPd, il est néces-saire de redémarrer la base de données My- SQL afin que les changements soient pris en compte puis lancer ProFTPd sereine- ment.

nocrash:~# /etc/init.d/

mysql stop

Starting MySQL database server :

mysqld

nocrash:~# /etc/init.d/

mysql start

Starting MySQL database server :

mysqld

nocrash:~# /etc/init.d/

proftpd start

Starting ftp server : proftpd.

ConnexionAfin de nous connecter à notre serveur FTP (cf. Figure 2) à distance, nous allons utiliser l’un des clients le plus connu actuellement : FileZilla

Au niveau de la configuration, il est nécessaire de choisir FTPES dans le type de serveur afin qu’il corresponde à un serveur FTP avec encryptage des données via TLS.

Lors de la première connexion, il vous sera demandé d’accepter le certificat avant la connexion (cf. Figure 3). Et voici le ré-

sultat d’une connexion réussie (cf. Fi- gure 4).

Il est possible de voir que l’utilisateur NoCrash ayant comme home /home/no- crash, comme défini dans l’insertion de cet utilisateur dans la base de données, a pour dossier racine son propre dossier home l’empêchant ainsi de remonter plus haut. (Petit clin d’œil à la directive Default- Root ~)

Administration des utilisateursAfin de gérer l’ensemble des utilisateurs ainsi que des groupes liés a ProFTPd, il est possible d’utiliser une interface administra- tive.

Pour cela, il est nécessaire d’être en pos-session d’un serveur Apache. Dans le cas ou vous n’auriez pas de serveur Apache :

nocrash:~# apt-get

install apache2

Une fois le serveur Apache présent sur votre machine, il est nécessaire de télécharger l’in-terface d’administration :

nocrash:~# cd /var/www/

nocrash:~# wget http://www.rt74.eu/

public/dl/proftpdadmin.tar.gz

nocrash:~# tar xzf

proftpdadmin.tar.gz

nocrash:~# rm -rf

proftpdadmin.tar.gz

Avant de vous connecter à l’interface d’ad-ministration de ProFTPd, il est nécessaire

d’éditer le fichier de configuration afin que ce dernier renseigne les bons renseignements de la base de données :

nocrash:~# vi

/var/www/proftpdadmin/configs/

config.php

$cfg->db_host = «localhost»

$cfg->db_name = «proftpd»

$cfg->db_user = mon_utilisateur

$cfg->db_pass = mon_mot_de_passe

Une fois le fichier modifié et enregistré, il est maintenant possible de vous connecter à l’interface d’administration des utilisa-teurs ainsi que des groupes sous ProFTPd (cf Figure 5). L’écran donnant toutes les informations sur les utilisateurs, vous pou-vez consulter en Figure 6. Pour voir l’inter- face permettant la création des utilisateurs (cf. Figure 7).

ConclusionLa mise en place d’un serveur FTP convena-blement sécurisé et stable ne se fait pas en quelques clics, il est réellement nécessaire de prendre son temps afin d’avoir une confi-guration optimale.

La suivi de ce petit article vous permet-tra donc d’avoir un bon début en matière de serveur FTP sécurisé et stable. Il ne vous res-te plus qu’à définir les utilisateurs, les droits de ces derniers ainsi que d’autres options sui- vant vos besoins.

ProFTPd est un serveur FTP complet, les seules limites sont celles de votre ima-gination.

Figure 7. Ajout d'un utilisateur

Régis SENET, actuellement stagiaire chez JA-PSI est étudiant en quatrième année à l’école Supérieure d’informatique Su-pinfo. Passionné par les tests d’intrusion et les vulnérabilités Web, il tente de découvrir la sécurité informatique d’un point de vue entreprise. Il s'oriente actuellement vers le cursus CEH, LPT et Offensive Security.Contact : [email protected] internet : http://www.regis-senet.fr

A propos de l'auteur

Pour plus d’informations, allez directement voir le site officiel : http://www.proftpd.org/

Sur le web

Page 55: Linux
Page 56: Linux

SécuritéChiffrement avec EncFS

56 Linux+ 6/2009

linux

@so

ftwar

e.co

m.p

l Le terme chiffrement est un anglicisme, tiré de l'anglais encryption. L'académie française précise bien que le mot « chiffrement » est à bannir même s’il se retrouve assez réguliè-

rement dans des usuels.Il est à noter également qu’il y a une importante dif-

férence entre les définitions des mots chiffrer/déchiffrer et chiffrer/déchiffrer. Déchiffrer désigne le fait de retrouver le message en clair correspondant à un message chiffré sans posséder la clé de déchiffrement alors que le fait de déchiffrer un message permet de retrouver le message en ayant la clé en sa possession.t

À l’heure actuelle, il est possible de chiffrer, ou pour les plus pointilleux, chiffrer, à peu près l’ensemble des données, qu’il s’agisse des données présentes sur le disque dur de nos serveurs ou de nos ordinateurs portables, que ce soit les données transitant sur le réseau, la VOIP etc.

Le chiffrement de certaines données peut être très fa-cilement compréhensible du fait que l’on peut comprendre que ces données sont importantes voire vitales pour une entreprise.

En effet, depuis l’avènement des ordinateurs porta-bles, de plus en plus de données extrêmement confiden-tielles se promènent sur les disques durs des techniciens, des commerciaux ou encore des dirigeants ainsi que des secrétaires.

Le transport étant l’un des meilleurs atouts des ordina-teurs portables peut maintenant être l’un de leurs plus gros inconvénients. En effet, il est possible de voir une nette augmentation des vols d’ordinateur dans les locaux même des entreprises.

Il s’est avéré que dans plus de 90% des cas, un vol d’ordinateur ne possédant pas un moyen de chiffrement des données acceptable s’est soldé par des pertes finan-cières ou alors des tentatives d’attaque à l’encontre de l’entreprise.

Chiffrement des données avec EncFSLe chiffrement est en cryptographie le procédé grâce auquel on souhaite rendre la compréhension d’un document impossible à toute personne qui n’a pas la clé de (dé)chiffrement. Cet article vous montrera comment assurer la confidentialité de vos données avec EncFS.

Régis Senet

• L’intérêt du chiffrement des données d’entreprise,• Le chiffrement des données avec EncFS.

Cet article explique...

Page 57: Linux

SécuritéChiffrement avec EncFS

57www.lpmagazine.org

Les données d’une entreprise sont réellement la clef de voûte de celle-ci, il est absolument nécessaire de les protéger de toutes menaces.

Nous allons donc nous rapprocher d’un moyen de chiffrement/déchiffrement des données sur un système d’exploitation de type GNU/Linux.

EncFS peut s’utiliser tout aussi bien sur un serveur d’entreprise que sur un poste uti-lisateur, il convient donc quasiment à l’en- semble des utilisateurs.

Qu’est ce qu’EncFSLe projet EncFS a vu le jour pour sa première apparition dans le courant de l’année 2004. Après plusieurs années de développement, EncFS se trouve être actuellement à sa version 1.5.0 depuis le 7 Septembre 2008. Le numéro de version n'est pas constam-ment mis à jour alors que de nouvelles mi- ses à jour, bien que minimes, apparaissent. La toute dernière en date du 16 mars 2009 fixe un mini bug dans l’application elle- même.

EncFS a la chance d'être sous licence GPL lui permettant une évolution très rapi- de. Cette rapide évolution s’explique égale-ment grâce aux nombreux utilisateurs ren- voyant régulièrement aux développeurs de nouveaux bugs de l’application.

EncFS arrive à se différencier des autres gestionnaires de chiffrement des données grâce à sa simplicité d’utilisation ainsi que grâce aux nombreuses options qu’il possè-de. En effet, il est possible de choisir entre plusieurs algorithmes de chiffrement des données.

Installation et configuration d’EncFSAu cours de cet article, la distribution utilisée fut une Debian 5.0 (Lenny) entièrement mise à jour. Attention, il est possible que certaines commandes ne soient pas tout à fait identi-ques sur une autre distribution.

L’ensemble des installations va se réali-ser grâce au gestionnaire de paquets propre à un système Debian : APT (Advanced Pac-kage Tool).

Mise à jour du systèmeIl est possible à tout moment qu’une faille de sécurité soit découverte dans l’un des mo-dules composant votre système que ce soit Apache ou quoi que ce soit d’autre. Certai-nes de ces failles peuvent être critiques d’un point de vue sécurité pour l’entreprise. Afin de combler ce risque potentiel, il est néces-saire de régulièrement mettre à jour l’en-semble du système grâce à divers patches de sécurité.

Il est possible de mettre à jour l’ensemble du système via la commande suivante :

nocrash:~# apt-get

update && apt-get upgrade

Le système d’exploitation est maintenant complètement à jour, il est donc possible de mettre en place EncFS dans de bonnes conditions.

Il est possible de ne pas passer par cette étape mais elle est fortement conseillée pour la sécurité ainsi que la stabilité de votre sys-tème d’exploitation.

Installation de FuseFuse ou encore Filesystem in UserSpacE est un logiciel libre permettant à un utilisa-teur sans privilèges d’accéder à un système de fichiers sans qu’il soit nécessaire de mo-difier le noyau Linux. Fuse est particuliè-rement utilisé pour les systèmes de fichiers virtuels ce qui est exactement ce que nous allons mettre en place par la suite. En effet, EncFS est un système de chiffrement de ré-pertoire utilisant la bibliothèque FUSE ainsi qu’un module du noyau Linux. Procédons à l’installation :

nocrash:~# apt-get

install fuse-utils

nocrash:~# apt-get

install libfuse2

Il est important de noter qu’un groupe fuse vient de se créer sur le système :

nocrash:~# cat /etc/group | grep

fuse

fuse:x:118:

Listing 1. Ajout d'un utilisateur

nocrash:~# adduser nocrash fuse

Ajout de l’utilisateur « nocrash » au groupe « fuse » …

Ajout de l’utilisateur nocrash au groupe fuse

Terminé.

nocrash:~# adduser nocrash fuse

Ajout de l’utilisateur « nocrash » au groupe « fuse » …

Ajout de l’utilisateur nocrash au groupe fuse

Terminé.

Listing 2. Chiffrer nos fichiers plus ou moins confidentiels

nocrash:~# encfs /home/nocrash/.protected/

/home/nocrash/data/

Le répertoire "/home/nocrash/.protected/"

n'existe pas. Faut-il le créer ? (y/n) y

Le répertoire "/home/nocrash/data/"

n'existe pas. Faut-il le créer ? (y/n) y

Création du nouveau volume encrypté.

Veuillez choisir l'une des options suivantes :

entrez "x" pour le mode de configuration expert

entrez "p" pour le mode paranoïaque préconfiguré,

toute autre entrée ou une ligne vide sélectionnera

le mode normal.

?> xConnaissance en système d’exploitation UNIX/Linux.

Ce qu'il faut savoir...

Page 58: Linux

58 Linux+ 6/2009

SécuritéChiffrement avec EncFS

Voici les commandes à utiliser pour l’installa-tion via les sources :

nocrash:~# tar zxvf fuse-

2.4.1.tar.gz

nocrash:~# cd fuse-2.4.1

nocrash:~# ./configure

nocrash:~# make && make ins

Configuration pour les versions Debian non récentePour les versions de Debian assez anciennes, il est nécessaire de rajouter FUSE dans les éléments au démarrage du système.

nocrash:~#

echo fuse >> /etc/modules

Afin de charger le module directement sans avoir à redémarrer le PC, il est nécessaire de passer par la commande suivante :

nocrash:~# modprobe fuse

Une fois le module FUSE chargé grâce à un redémarrage ou bien grâce à l’utilisation de modprobe, le module se matérialise par /dev/fuse. Par défaut, /dev/fuse n’est pas correc- tement configuré et il est nécessaire de mo-difier le propriétaire grâce à la commande suivante :

nocrash:~# chgrp fuse /dev/fuse

Quelques vérificationsIl est, en premier lieu, important d’ajouter les utilisateurs pouvant utiliser FUSE au groupe récemment créé (cf. Listing 1).

Exemple va ajouter l’utilisateur nocrash dans le groupe fuse.

Il est possible de vérifier que notre uti-lisateur est bien présent dans le groupe fuse grâce à la commande groups :

nocrash:~# groups

nocrash dialout cdrom floppy audio

video plugdev fuse

Notre utilisateur est bien présent dans le groupe fuse, il est à présent possible de passer aux étapes suivantes.

Mise en place d’EncFSIl est maintenant nécessaire d’installer et de configurer EncFS afin de pouvoir chiffrer nos fichiers/dossiers plus ou moins confi-

dentiels. Pour cela, nous allons installer le programme EncFS. Encore une fois, nous al-lons réaliser cela grâce au gestionnaire de pa- quets APT.

nocrash:~# apt-get install encfs

Afin d’avoir un exemple pratique, nous allons chiffrer l’ensemble de nos données présentes dans l’un de nos dossiers. Le ré- pertoire de stockage des données chif- frées sera /home/nocrash/.protected/ et le répertoire de travail (présentant l’ensem-ble des données en clair après authentifi-cation) sera /home/nocrash/data/. (cf. Lis- ting 2).

NB : Il est important de donner des chemins complets à EncFS et non pas des chemins relatifs tels que ~/.data/ qu’il fau-dra remplacer par /home/nocrash/data/.

Il n’est pas nécessaire de se soucier de la création des répertoires, en effet, lors de la première utilisation de la commande encfs les dossiers contenant les données chiffrées et les données en clair seront automatiquement créés.

Nous allons utiliser le mode de configu-ration expert afin d’être entièrement mai-tre de nos actions et afin d’avoir un cryp-tage qui correspond réellement à nos be- soins.

NB: Il est fortement conseillé lorsqu’il s’agit d'un dossier très sensible d’utiliser le mode paranoïaque, ce mode étant beaucoup plus restrictif. Néanmoins, il est conseillé de ne pas utiliser ce mode au cas où le répertoire que l’on souhaite chiffrer aurait des interac-

tions avec une partie du système. Ce mode étant tellement restrictif qu’il empêcherait le système de fonctionner dans de bonnes conditions.

Mode de configuration manuelle sélec-tionné.

Les algorithmes suivants sont disponi-bles :

AES : 16 byte block cipher

-- supporte des tailles

de clé de 128 à 256 bits

-- supporte des blocs

de 64 à 4096 octets

2. Blowfish : Cryptage

en bloc de 8 octets

-- supporte des tailles

de clé de 128 à 256 bits

-- supporte des blocs

de 64 à 4096 octets

Entrez le numéro correspondant

à votre choix : 1

L’écran suivant nous donne la possibilité de choisir l’algorithme de chiffrement que nous allons utiliser pour protéger nos données. L’algorithme AES fut choisi du fait de sa robustesse.

Algorithme sélection "AES"

Veuillez choisir une taille

de clé en bit.

L'algorithme que vous avez

sélectionné supporte

des clés de 128 à 256 bits par

paliers de 64 bits.

Par exemple :

Listing 3. La configuration d’AES

Veuillez choisir une taille de bloc en octets.

L'algorithme que vous avez sélectionné supporte

des blocs de 64 à 4096 octets par paliers de 16 octets.

Ou appuyez sur entrée pour la valeur par défaut (1024 octets).

taille du bloc de système de fichiers : 1024

Les algorithmes d'encodage de noms de fichiers suivants

sont disponibles :

Block : E

2. Null : No encryption of filenames

3. Stream : Encodage de flux, garder les noms de fichiers,

aussi courts que possible.

Entrez le numéro correspondant à votre choix : 1

Page 59: Linux

59www.lpmagazine.org

SécuritéChiffrement avec EncFS

128, 192, 256

Taille de clé sélectionnée : 192

L’écran suivant nous propose la configura-tiont d’AES. Bien évidement, dans le cas où vous auriez choisi un autre algorithme précédemment, la configuration n’aurait pas été la même. Dans ce cas ci, il est sim-plement nécessaire de spécifier la taille de la clé en bit. Une taille de 192 bits est am-plement nécessaire dans ce cas de figure. La taille de la clé grandira proportionnelle-ment à l’importance des données à chiffré (cf. Listing 3).

Les deux écrans suivant vont toujours être en rapport avec la manière dont nous voulons chiffrer nos données.

Il vous est possible devalider l’ensem-ble des écrans suivant avec les options par défaut. Une fois l’ensemble des questions répondues, le mot de passe ainsi qu’une con- firmation de mot de passe vous seront de- mandés. Ce mot de passe servira pour le chif- frement ainsi que le déchiffrement du dos-sier chiffré :

Vous devez entrer un mot

de passe pour votre système

de fichiers.

Vous devez vous en souvenir,

car il n'existe aucun mécanisme

de récupération.

Toutefois, le mot de passe

peut être changé plus tard

à l'aide d'encfsctl.

Nouveau mot de passe :

Vérifier le mot de passe :

nocrash:~#

Afin de vérifier que nous avons réalisé l’en-semble des étapes dans de bonnes conditions, il est possible de vérifier le montage dans le fichier prévu à cet effet :

nocrash:~# cat /proc/mounts

encfs /home/nocrash/

data fuse.encfs

rw,nosuid,nodev,

user_id=1000,

group_id=1000,

default_permissions 0 0

UtilisationUne fois l’ensemble des installations faites ainsi que toutes les configurations effec-tuées, il est possible d’utiliser notre dossier chiffré grâce à EncFS. À présent, afin d’ac-

céder à nos données en clair, il va falloir réutiliser la commande que nous avions utilisée précédemment, à savoir :

nocrash:~# encfs /home/nocrash/

.protected/ /home/nocrash/data/

Mot de passe :

Comparativement à la première fois, cette fois ci, EncFS va détecter qu’une initiali-sation a déjà été faite sur ces répertoires et va donc se contenter de demander le mot de passe fourni plus tôt afin de déver-rouiller l’accès à notre répertoire de « tra- vail ».

L’ensemble des données crées / copiées / déplacées en clair dans le répertoire de « travail » (/home/nocrash/data/ dans notre cas) sera automatiquement stocké sous forme chiffrée dans le répertoire (/home/nocrash/.protected/)

Afin de vous déconnecter, c'est-à-dire ne plus avoir accès aux données en clair, il est nécessaire d’utiliser simplement la commande suivante :

nocrash:~# fusermount -u /home/

nocrash/data

Automatisons tous celaIl existe de nombreuses manières d’auto-matiser le lancement ainsi que l’arrêt d’EncFS. Dans notre exemple, nous al-lons simplement utiliser la méthode sim-ple se réalisant via la ligne de commande. Il est donc possible de créer deux com-mandes permettant d’ouvrir ou de fermer rapidement l’accès au(x) répertoire(s) de travail :

nocrash:~# vi /usr/bin/decrypt

#!/bin/bash

encfs /home/home/.protected/ /home/

home/data/

Ce script permet de rapidement lancer le dé-chiffrement du dossier chiffré :

nocrash:~# vi /usr/bin/encrypt

#!/bin/bash

fusermount -u /home/nocrash/data

Ce script quant à lui permet de rapidement fermer le point de montage et donc le dos-sier en clair repassant en chiffré de cette manière.

Il est bien évidemment indispensable de configurer les droits d’accès à ces deux

fichiers ainsi que leur donner la possibilité de s’exécuter. Pour cela, nous allons utili-ser les commandes suivantes :

nocrash:~# chown nocrash /usr/bin/

encrypt /usr/bin/decrypt

nocrash:~# chmod 700 /usr/bin/

encrypt /usr/bin/decrypt

Il est donc à présent possible de lancer le chiffrement et le déchiffrement d’un dossier simplement grâce aux nouvelles comman-des : ./encrypt et ./decrypt.

nocrash:~# ./encrypt

et

nocrash:~# ./decrypt

ConclusionVoila, à présent, il est possible d’être serein avec l’ensemble de vos données confiden-tielles grâce à EncFS. Bien qu’il existe de nombreuses méthodes de chiffrement sous les systèmes UNIX/Linux, EncFS possède de nombreux avantages se démarquant des ses concurrents. Comparativement à True-Crypt par exemple, il n’est aucunement né-cessaire de créer un fichier/répertoire d’une taille fixe.

EncFS dispose donc de nombreuses fonctionnalités qu’il est possible de met-tre en place après avoir fait le tour du logi- ciel.

Régis SENET, actuellement stagiaire chez JA-PSI est étudiant en quatrième année à l’école Supérieure d’informa-tique Supinfo. Passionné par les tests d’intrusion et les vulnérabilités Web, il tente de découvrir la sécurité infor-matique d’un point de vue entreprise. Il s'oriente actuellement vers le cursus CEH, LPT et Offensive Security.

Contact : [email protected] internet : http://www.regis-senet.fr

A propos de l'auteur

Page d’accueil : http://www.arg0.net/encfs.

Sur le Net

Page 60: Linux

PratiqueOracle

60 Linux+ 6/2009

linux

@so

ftwar

e.co

m.p

l

Depuis des années, dans le monde informati-que, les bases de données ont représenté un enjeu majeur en termes de pérennité de l’in- formation et de mise en relation avec des

logiciels. Dans le monde de l’entreprise, cette réalité est d’autant plus forte, que l’information constitue une part importante de l’activité de cette dernière et représente un atout majeur de pérennisation de l’activité. Nous sommes depuis déjà plusieurs années maintenant, entrés dans un monde de communication et d'échange d’informations de masse. La rencontre entre l’information (sous toutes ses ormes) et l’informatique, a bousculé nos mode de ges- tion et a permis le développement de bases de données, c'est-à-dire un regroupement des informations traitées en données, de manière logique, structurelle et relationnel- le, selon des modèles de données.

Cette apparition dans les années 60 des bases de don-nées permettra par la suite de développer un ensemble de logiciels ainsi qu’un langage permettant de manipuler ces bases. Ces logiciels, c’est-à-dire un moteur de base de données (le logiciel principal), un interpréteur de lan-

gage, une interface de programmation et une interface utilisateur, se regroupent maintenant autour d’un Systè-me de Gestion de Base de Données, plus communément désigné sous le sigle SGBD. Enfin lorsque nous parlons d’interpréteur, le langage qui se cache derrière est le SQL (Structured Query Language), un langage inventé dans les années 70 par IBM et qui permet d’interroger et mani-puler (insérer des données, supprimer, gérer des droits,….) les bases de données.

De nos jours, les bases de données sont omniprésentes, que ce soit derrière des logiciels ou en application direc-te. Toute personne qui s’intéresse quelque peu au domai-ne informatique, connait la société Oracle Corporation,

Oracle dans la cour des pingouinsDans le monde des bases de données, il est un produit incontournable. Depuis des années Oracle est devenu le SGBDR de référence, notamment dans des environnements à forte valeur ajoutée. Cet article présente l’installation de cette solution sur un système Linux.

Jonathan FUSSNER

• Administrer une distribution GNU/Linux,• Un minimum de connaissances sur le langage

SQL, le fonctionnement des bases de données,• Connaitre les besoins de l’entreprise.

Ce qu’il faut savoir...

Page 61: Linux

PratiqueOracle

61www.lpmagazine.org

et son Système de Gestion de Base de Don-nées Relationnelle du même nom. Ce SGB-DR déployé dans différents environnements de production a largement fait ses preuves depuis de longues années. Il s’agit d’une solution propriétaire et multiplateforme, ce qui va nous permettre de pouvoir le dé-ployer sur un système Linux et de créer une base exploitable ! Voilà une idée qu’elle est bonne !

Alors avant de commencer, il convient d’éclaircir les choses sur deux petits points :

Premièrement vous allez vous demander pourquoi un magazine orienté Linux parle d’une solution sous licence propriétaire, relativement chère, alors que d’autres sont disponibles gratuitement comme MySQL ou PostgreSQL.

Je ne peux pas vous donner tort, mais il faut bien comprendre, que certes MySQL et PostgreSQL sont très biens, mais dans cer-tains environnements très demandeurs en per-formance et très critiques en terme de services et de stockage d’informations (généralement en grand nombre et dont l’accès doit être op-timal), Oracle s’impose comme la référence

en terme de fiabilité et de performance. Je vous rappelle, que ce SGBD est téléchargeable et utilisable dans un environnement de test, ou non personnel. Si vos souhaitez l’utiliser en environnement de production entreprise, vous devrez vous acquitter de la licence d’exploita-tion logicielle.

Deuxièmement, il a souvent été mis en avant l’aspect multiplateforme des solutions Oracle. Ainsi cette version 11g est installab- le dans des environnements Unix/Linux. Oui mais voilà, Oracle certifie ses solutions compatibles pour les Systèmes d’Exploita-tion, et sous notre environnement, Oracle est

certifiée compatible avec Red Hat. Sachez qu’il existe des solutions alternatives tout à fait logiques au logiciel propriétaire. La première est de déployer cette solution sur l’OS clone de la RedHat, il s’agit de CentOS. Pour ceux qui ne connaissent pas CentOS, il s’agit de la copie conforme de la solution propriétaire, mais avec un support communautaire, donc gratuite.

Alors certes sur un serveur de produc-tion, avoir un OS support est tout-à-fait re- commandable, mais gardez à l’esprit cette solution.

Enfin sachez qu’il est aussi tout à fait pos-sible de l’installer sur une autre distribution GNU/Linux, ainsi amis Debianistes et aut- res Ubuntistes, ne perdez pas espoir, le dé- ploiement est envisageable, mais avec quel- ques adaptations supplémentaires.

Attention malgré ceci, Oracle ne re-commande absolument pas l’installation de son produit sur une plateforme non sup- portée. Ainsi selon ses dires, mieux vaut avoir une RedHat sous la main ou passer son chemin vers un autre type de système d’ex- ploitation. Je vous propose ici d’utiliser une CentOS dans sa dernière version à l’heure de cet article, c’est-à-dire la 5.3.

A l’heure où cet article est rédigé, la ver- sion en cours est la 11G (G signifie support du Grid Computing) sortie en septembre 2007. Mais attention, la sortie de la version 11G R2 est prévue courant de ce deuxième semestre 2009. Quoi qu’il en soit, la procédure de déploiement ne variera pas.

Pour l’instant, seul une poignée de chanceux béta-testeurs ont eux entre les

Figure 1. Installez Oracle 11g !

Figure 2. Continuez le paramétrage de l’installation !

• L’introduction au monde des bases de données,

• L’installation d’Oracle 11g,• La création d’une base de données,• L’introduction à l’administration.

Cet article explique…

Page 62: Linux

62 Linux+ 6/2009

PratiqueOracle

mains cette nouvelle mouture, très attendue. Ainsi dès sa sortie, je vous conseille de la télécharger et de l’installer, mais attention uniquement dans le cadre de test, et non dans un environnement de production ! La migration d’une telle infrastructure doit faire suite à une batterie complète de tests préalablement organisés, car une telle application est souvent déployée dans des environnements critiques, donc vous devez être sûr de vous et de la stabilité de la version.

Prérequis au déploiementVous vous doutez bien, qu’avant d’en venir au fait, nous devons satisfaire quelques prés requis indispensables à la suite des opéra-tions. Mais vous allez voir que prérequis est un mot large.

Configuration minimaleAutant vous annoncer la couleur tout de suite : Oracle est une véritable usine à gaz ! Et les pre-miers prés requis sont bien évidement d’ordre physique ! Alors pour satisfaire aux exigences voici un petit aperçu d’une configuration mini- male !

Espace Disque : sans détailler le tout prévoyez au minimum 16 Go d’espace libre sur votre partition / si vous avez un serveur partitionné de manière classique (une par-tition / une partition /home et la swap). Si vous avez plusieurs partitions (/ /opt /tmp …) prévoyez environ 10 Go sur /opt et en- viron 5Go sur la partition racine (/). Plus

environ 300 à 400 Mo pour la partition temporaire (/tmp) :

• Swap : Minimum 1,5 Go• RAM : 1,5 Go

Bien entendu, prévoyez également sauvegar-des et redondance !

Quelques paquetages nécessairesVoici maintenant une petite liste de dépen-dances à satisfaire, si cela n’est pas encore le cas sur votre système, un petit yum install

s’impose. Ainsi les paquets non satisfaits seront téléchargés et installés, les paquets à mettre à jour le seront :

yum install binutils

compat-libstdc++-33

elfutils-libelf

elfutils-libelf-devel glibc

glibc-common glibc-devel

glibc-headers gcc gcc-c++

libaio libaio-devel libgcc

libxcp libstdc++

libstdc++-devel make sysstat

unixODBC

unixODBC-devel

Groupes et utilisateurs dédiés OracleAfin de réaliser ce déploiement dans les rè-gles de l’art, nous devons maintenant créer groupe et utilisateur dédiés Oracle :

En ligne de commande (avec root) :

/usr/sbin/groupadd oinstall

/usr/sbin/groupadd dba

/usr/sbin/useradd

-g oinstall

-G dba oracle

Ces deux groupes vont nous servir plus tard lors de l’installation. Nous y reviendrons donc…

Enfin assignons un mot de passe à l’uti-lisateur Oracle :

passwd oracle

Figure 3. Check-in des pré requis indispensables

Figure 4. Installation en cours ! Prenez donc un petit café !

Page 63: Linux

63www.lpmagazine.org

PratiqueOracle

Préparation de l’environnement de productionVoici, très certainement, une des parties les plus pénibles dans ce processus pré-ins- tallation d’Oracle. En effet, nous devons maintenant mettre les mains dans le cam-bouis et modifier un certain nombre de fi- chiers système afin de préparer au mieux ce dernier.

/etc/sysctl.conf

Nous devons dans un premier temps éditer le fichier /etc/sysctl.conf et ajouter ou modifier selon le cas les lignes suivantes afin de modi-fier les paramètres système :

kernel.shmall = 2097152

kernel.shmmax = 2147483648

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

fs.file-max = 6553600

net.ipv4.ip_local_port_range = 1024

65000

net.core.rmem_default = 4194304

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 262144

Par la suite, enregistrez vos modifications, et exécutez dans un terminal root, la com-mande /sbin/sysctl –p qui permettra d’appli-quer les changements :

/etc/security/limits.conf

Nous devons maintenant augmenter les li-mites du Shell pour l’utilisateur Oracle, afin d’obtenir de meilleures performances systè-me. Ceci se passe dans le fichier /etc/security/ limits.conf.

Ajoutez ces lignes :

oracle soft nproc 2047

oracle hard nproc 16384

oracle soft nofile 1024

oracle hard nofile 65536

Enregistrez les modifications !

Profil de l’utilisateur OracleNe vous inquiétez pas ! Nous ne sommes pas encore au bout de nos peines ! Pour ne pas changer, continuons à modifier des fichiers de configuration, le dernier pour cette fois-ci. Modifiez le profil de l’utilisateur Oracle que nous venons de créer, c’est-à-dire /home/oracle/.bash_profile.

Et ajoutez les lignes suivantes :

ulimit -u 16384 -n 65536

umask 022

Enregistrez les modifications !

Installation d’Oracle 11gNous y voilà enfin ! Après moultes prépara-tions l’heure est enfin venue de passer à l’ins- tallation à proprement parler de notre SGBD. C’est parti !

Avant toute chose, vous devez vous rendre sur le site d’oracle. Si vous n’en avez pas, créez un compte (https://profile.oracle.com /jsp/reg/createUser.jsp?src=135736&act=74). C’est indispensable pour pouvoir par la suite télécharger l’archive d’Oracle 11g à l’adresse http://www.oracle.com/technology/software/ products/database/index.html, choisissez la version Linux x86 ou x86-64 en fonction de votre architecture. Attention vous devez ac-cepter un contrat de licence.

Une fois l’archive téléchargée et dé-compressé (attention archive de 1,8Go), ouvrez un terminal et connectez-vous avec l’utilisateur oracle que nous avons créé tout à l’heure, à l’aide de la commande su – oracle.

Positionnez-vous dans le répertoire data-base et exécutez la commande :

./runInstaller

Cette commande va vous lancer l’installateur Oracle. Alors nouvelle petite mise en garde ! L’installateur d’Oracle est graphique, ce qui suppose soit de l’installer sur un serveur

faisant tourner un environnement graphi-que (bof bof sur un serveur de production), soit de vous connecter sur votre serveur à distance en SSH (donc n’oubliez pas le petit yum install ssh-server), et donc établir une connexion depuis un poste (votre poste bureautique par exemple) avec le support du protocole X11, ce qui permettra de gérer une installation graphique. Ainsi au cas où utilisez la commande :

ssh –YX –C oracle@IP_DE_VOTRE_

SERVEUR

L’option –C permet de compresser tandis que l’option –YX permet justement le support X11.

Voici les différentes étapes suivies avec l’installateur graphique d’Oracle.

Première Etape :

• Voilà à partir d’ici, vous avez lancé l’installateur, et une fenêtre apparait ! Cette dernière vous informe de l’em-placement des répertoires de stockage. Je vous conseille de laisser le chemin par défaut c'est-à-dire dans le réper-toire home de votre utilisateur Oracle (cf. Figure 1).

• Cette fenêtre décidément très chargée vous demande également de choisir le type d’installation que vous souhaitez. Par défaut, j’ai choisi l’Edition Standard, mais vous pouvez très bien installer la version Enterprise ou alors personnali- ser votre installation. À vous de choisir !

• Dans le champ UNIX DBA Group, il est temps de sélectionner le group dba (sou-

Figure 5. Créons votre nouvelle base de données !

Page 64: Linux

64 Linux+ 6/2009

PratiqueOracle

venez-vous, un des groupes que nous avons créés juste avant).

• Dans les options de configuration, nous ne créerons pas de base de données tout de suite, décochez donc Create Starter Database.

• Vous pouvez maintenant passer à l’étape suivante en cliquant sur le bouton Sui-vant.

Deuxième Etape :

• Cette deuxième étape est relativement rapide, vous avez déjà fait le plus gros (voir Figure 2). L’installateur vous de-mande premièrement le chemin pour l’Inventory Directory. Je vous conseille tout simplement de continuer sur la mê-me racine arborescente que tout à l’heure (/home/oracle/) et donc de laisser le che-min par défaut !

• Puis vous devez sélectionner le groupe qui aura les droits en écriture sur ce répertoire, il s’agit du deuxième groupe que nous avons créé en début d’article : oinstall (pour OracleINSTALL).

• Vous pouvez maintenant passer à l’étape suivante en cliquant sur le bouton Suivant.

Troisième Etape :

• Passez le test des pré-requis indispensa-bles à l’installation !

• Puis cliquez sur le bouton Suivant et Installer. Si un message d’avertissement apparait ignorez-le !

• Vous pouvez maintenant prendre tranquil-lement une petite pause car vous l’avez bien mérité, de plus le processus d’instal-lation va prendre quelques minutes, donc pas de panique. Illustration en Figure 3.

Je vous rassure tout de suite, à la fin du pro-cessus, vous avez encore un petit travail.

Quatrième Etape :À la fin du processus d’installation, et pour fi-naliser cette dernière, l’assistant vous demande d’exécuter en tant que super-user (root), les commandes suivantes dans un terminal :

/opt/oracle/app/oraInventory/

orainstRoot.sh

Puis :

/opt/oracle/app/oracle/product/

11.1.0/db_1/root.sh

Voila vous avez installé Oracle. Passons maintenant au paramétrage si vous le voulez bien !

Paramétrage d’Oracle 11gNous pouvons maintenant passer aux phases post-installation, c’est-à-dire créa-tion de base de données, communication du SGBDR sur le réseau. Je pense qu’il est inutile de vous préciser, que l’adminis- tration d’Oracle, surtout en ligne de com-mande, nécessite la connaissance préalable du langage SQL, ce qui sera utile notam-ment en termes d’administration d’une base (GRANT, REVOKE, ALTER, DROP, …). Vous trouverez dans l’encart Sur le Réseau, un lien sur le SQL. À noter également qu’Oracle possède son propre langage pro-cédural nommé PL/SQL.

Paramétrage du ListenerNous voila maintenant avec Oracle propre-ment installé. Mais à ce moment de la par-tie, si vous souhaitez créer tout de suite une base de données, cette derniere ne pourra etre accessible sur le réseau. Et pour cause, il nous manque un élément essentiel : Le listener. Il s’agit de l’outil indispensable qui permet d’établir une connexion réseau a la base de données, et ceci via le proto-

cole TCPC’est ainsi que je vous propose maintenant de configurer cet outil.

Encore et toujours, dans votre terminal connecté root utilisez la commande sui- vante :

/home/oracle/app/oracle/product/

11.1.0/db_1/bin/netca

Cette commande permet le lancement d’un assistant de paramétrage. L’assistant est re- lativement bien fait, et vous devez suivre les étapes en adaptant à votre contexte les paramètres.

Dans cette première étape, nous voulons établir une procédure d’écoute. Ainsi sélec-tionnez cette option dans la liste, puis Suivant (Représenté en Figure 4).

Sélectionnez l’option Ajouter, puis Sui- vant.

Indiquez cette fois-ci un nom pour le pro-cessus d’écoute (par exemple FUSSNER), vous trouverez en Figure 6. un exemple de ma Configuration.

La prochaine étape consiste à paramé-trer les protocoles de communication auto-risés. Personnellement j’ai sélectionné TCP car ce dernier gère le contrôle des commu-nications (Mode Connecté). Cliquez sur Sui- vant.

Sélectionnez le numéro de port standard pour les communications, puis suivant.

L’assistant est terminé, Voulez-vous confi- gurer un autre processus d’écoute ? Sélec-tionnez NON.

Voilà le processus d’écoute est actif, et votre base de données est accessible sur le réseau !

Figure 6. Nommez votre base !

• Le livre : Oracle 11g Administration – Aux éditions ENI

• Le livre : Oracle 11g SQL, PL/SQL, SQL*Plus – Aux éditions ENI

Pour aller plus loin...

Page 65: Linux

65www.lpmagazine.org

PratiqueOracle

Si vous désirez relancer ce processus, uti- lisez la commande :

/home/oracle/app/oracle/

product/11.1.0/db_1/bin/

lsnrctl start NOM_PROCESSUS

Ou NOM_PROCESSUS est le nom que vous avez donné à votre processus, dans mon cas d’exemple FUSSNER.

Assistant de création de base de donnéesPour ce faire, nous pouvons, soit passer par les commandes, soit par un assistant. Comme tout à l’heure, je vous propose l’assistant relativement bien fait, dans ce cas de figure, il se nomme DBCA pour Oracle Database Configuration Assistant.

Donc, toujours dans votre terminal con-necté root utilisez la commande suivante :

/home/oracle/app/oracle/product/

11.1.0/db_1/bin/dbca

Cette commande va lancer l’assistant de créa-tion de base de données. À l’écran d’accueil cliquez sur le bouton Suivant.

• Sur l’écran suivant, sélectionnez l’Option Créer une base de données puis cliquez sur le bouton Suivant. Représentation en Figure 5.

• Choisissez le type de base de données que vous souhaitez mettre en place.

• Cette fenêtre représentée en Figure 6 vous demande d’indiquer le nom que vous souhaitez attribuer à votre base de données. Saisissez donc un nom, ainsi qu’un SID, un identifiant unique pour chaque instance Oracle.

• Cette prochaine étape consiste a indiquer si vous le souhaitez une adresse mail de contact en cas de probleme ainsi que de configurer une sauvegarde périodique.

• Par la suite vous devez attribuer un mot de passe à chaque utilisateur système afin de contrôler les accès à la base. Vous pouvez utilisateur par utilisateur leur at- tribuer un mot de passe différent, ou alors utiliser la deuxième option et spéci- fier un mot de passe global pour l’en-semble des ces derniers.

• À partir de là, vous avez deux possibili- tés. La première est de cliquer sur le bou- ton Terminer, cela aura pour effet de créer votre base de données, soit vous pouvez poursuivre l’assistant afin d’aller plus loin dans le paramétrage, et ainsi pour affiner les options liées à votre base. À vous de choisir. Pour les débutants, il est conseillé d’utiliser les paramètres par défaut et de terminer l’assistant à cette étape.

• Validez ces options. L’installateur vous indiquera la fin de la configuration et la création avec succès de votre nou-velle base de données.

• N’oubliez jamais que cet utilitaire DBCA est l’outil indispensable, non seulement pour créer des bases de don- nées, mais aussi et surtout pour réali- ser des opérations d’administration ! Il vous sera donc très utile.

Connexion à votre baseVous pouvez maintenant vous connecter à votre nouvelle base de données, pour l’ad-ministrer.

Pour ce faire, dans un terminal la com-mande :

sqlplus SYSMAN@FUSSNER

Remplacez FUSSNER par le nom de votre base. Attention, il est temps de vous souvenir du mot de passe que vous avez attribué tout à l’heure à l’utilisateur système SYSMAN.

Vous voilà enfin entré dans le mode d’ad-ministration. Après tant d’efforts.

À partir d’ici, vous pouvez effectuer des requêtes SQL, afin d’administrer votre base. Souvenez-vous de vos cours sur le lan-gage SQL ! À vos CREATE TABLE, DROP TABLE, INSERT INTO, SELECT FROM, GRANT, REVOKE, ….

Par exemple, admettons que vous souhai-tez ajouter un utilisateur :

Ajout de l’utilisateur toto :

CREATE USER toto

IDENTIFIED BY

‘LE_MOT_DE_PASSE_DE_TOTO’ ;

À vous par la suite de créer une requête permettant de lui assigner à ce brave toto, des droits en fonction de votre politique de sécurité !

ConclusionVoici terminée cette légère entrée en ma-tière, dans le monde impitoyable d’Ora-cle. Comme je vous l’ai signalé en début d’article, il s’agit d’une usine à gaz, qui ne s’apprivoise pas du jour au lendemain. Il vous faut donc compléter vos connaissan-ces, par le langage SQL, et le mode com-plet d’administration d’Oracle en passant par la connaissance de l’architecture d’un serveur Oracle ou l’utilitaire de Sauvegar-de RMAN. La plupart des bouquins sur le sujet comportent en moyenne pas moins de 500 pages. Bonne continuation sous le soleil linuxien…

Site d’Oracle : http://www.oracle.com/global/fr/index.html

Sur le réseau

Jonathan FUSSNER est étudiant à l’éco-le Supérieure d’Informatique SUPINFO, et spécialisé dans le domaine de l’admi-nistration de Systèmes et Réseaux.

Vous pouvez le contacter au travers de son site Internet : www.fussner.net

A propos de l’auteur...

Figure 7. Website http://www.oracle.com/global/fr/index.html

Page 66: Linux

PratiqueJupiter pour Eclipse

66 Linux+ 6/2009

linux

@so

ftwar

e.co

m.p

l Durant les dernières décennies, le focus ne cesse d’être mis sur la détection des ano- malies dans des phases qui précédent même la mise du logiciel aux scénarios de test.

En effet plus l’anomalie est détectée tôt au niveau du cycle de développement moins important est le coût de sa correction.

Les Experts du monde de l’assurance qualité dans le domaine du développement logiciel ont plutôt mis le focus sur l’assurance qualité du logiciel en s’atta-quant aux failles possibles au niveau de la définition du besoin, de la spécification, de la conception puis au niveau du test avec ses différents niveaux selon la mé-thodologie adoptée. Des paradigmes et méthodologies quasi-formalisées comme UML, les tests unitaires auto-matisés, les tests croisés ont permis d’avancer sur cet axe. L’une des phases qui ne cesse d’avoir de l’impor-tance dans l’assurance qualité est la phase de codage. L’idée préliminaire était que le codage doit respecter des règles strictes au niveau du nommage et des prati-ques courantes, et ce pour donner au code plus de qua-

lité en termes de maintenabilité et de la minimisation d’anomalie.

Cependant, ces formalismes, d’une part requièrent certainement un contrôle du travail de l’ingénieur co- deur ; d’autre part, ils ne sont que des « guidelines » pour un codage lisible : les aspects performance du code, par exemple, ne pourraient pas souvent être assurés dans le code seulement en se fiant à ces formalismes.

Révision de code avec Eclipse et JupiterDans le monde du Génie Logiciel, plusieurs outils et méthodologies ne cessent d’être inventés et créés afin d’améliorer la qualité des produits logiciels. Ils sont de suite mis à la disposition du monde informatique afin d’évaluer leur efficacité notamment dans la mise en œuvre de processus systématiques garantissant une qualité meilleure du code avant même la phase de test.

Adel SAFI

Cet article présente Jupiter, un plugin pour Eclipse qui permet de faire de la revue de code

Cet article explique...

Bien que cet article s’adresse à tout type de déve-loppeurs, il prend un intérêt particulier pour ceux qui développent en équipe.

Ce qu'il faut savoir...

Page 67: Linux

PratiqueJupiter pour Eclipse

67www.lpmagazine.org

Malgré ces formalismes et règles de codage, il n'est souvent possible de détec-ter si la solution implémentée est optimale que dans une phase très avancée du cycle de développement : la phase de tests de perfor-mances qui vient souvent après une phase de test fonctionnel. À ce stade, l’Entreprise sera obligée de nommer un développeur Se-nior ou Expert pour optimiser le code. Le coût sera souvent lourd puisque tout le fonc-tionnel doit être testé de nouveau par risque de régression introduite par le code d’opti-misation.

L’idée est de prendre l’avis de ses Ex- perts/Seniors avant la phase de test : une re-vue de code doit être planifiée avant chaque livraison au moins pour le code où il y a le plus de métier (business logique) et le plus d’optimisation. Le principe est simple : identifier le code important (d'un point de vue logique métier) ou à risque (algorithme compliqué ou interfaçage multiple avec des systèmes externes…etc.), nommer des gens qualifiés pour en faire la revue à une date spécifique bien identifiée au niveau du cycle de réalisation. Les anomalies ou opportu-nités d’amélioration du code doivent être clairement décrites, analysées puis traitées avant la livraison du code pour test.

Cette idée prend plus d’importance dans le monde de la sous-traitance logicielle très prospère et à la mode ces dernières années. Le processus serait le même mais l’objectif est autre. En effet, pour les sociétés Editeurs de logiciels, la sous-traitance est risquée pour la maintenabilité du code qui pourrait devenir dépendant du sous-traitant ce qui implique la dépendance de l’Editeur de son sous-traitant. Il ne suffit pas de se fier à la qualité de la livraison exécutable : il faudrait s’assurer de la qualité du code et de son apti-tude d’être maintenue par une société tierce et d’autant plus par l’Editeur même avec le moindre coût de passation (handover).

Pour cet objectif, il faudrait tout d’abord respecter la règle d’or de vérifier le code avant même la phase de test. En plus, il fau-drait revoir le code avant de payer le sous-traitant qui prétend terminer son travail et demande d’être payé sur un test d’acceptance

réussi. D’où la nécessité d’instaurer une revue de code par l’Editeur dans une phase avancée de la réalisation.

Ainsi, la revue de code devient de plus en plus une étape à part entière dans tout pro-cessus de développement logiciel en parti- culier dans les méthodes dites agiles comme l'Extrême Programming. Il devient donc indispensable de disposer d’un outil qui permet d’effectuer la revue de code.

Processus de revue de codePour fournir un logiciel de qualité, il est nécessaire de produire un code source de qualité. Il existe des outils pour mesurer des indicateurs de qualité du code source et pour vérifier le respect des conventions de codage. Cependant, ces outils ont leurs li-mites. Ils tendent à améliorer le code source en contrôlant le respect des normes de co- dage ou en identifiant les défauts de con-ception. Par contre, ils ne permettent pas d’identifier les anomalies fonctionnelles. La revue de code permet d’identifier des bugs avant de les rencontrer au moyen d’une re-lecture du code source par un développeur expérimenté.

La mise en place d’une revue de code systématique pendant la phase de dévelop-pement et de correction responsabilise enco-re plus les développeurs, car ils savent que leur travail sera automatiquement évalué. Ce système permet d’améliorer la qualité du code source écrit. De plus, le relecteur pourra identifier des bugs ou des axes d’amélioration.

Trois processus de revue de code exis-tent :

• Revue de code bloquante : tout dévelop-pement doit être relu avant d’être com-mité dans le référentiel du code source. Ce mode est un frein au développement car certains développements peuvent se retrouver en attente d’une relecture de développement dont ils dépendent.

• Revue de code non-bloquante : tout code source commité dans le référentiel du source doit être relu. Cette méthode per- met au développeur de continuer son tra- vail sans attendre la relecture. De même, le relecteur n’est pas obligé de se préci-piter pour relire le code.

• Revue de code avec le développement par binôme : c’est une conséquence de l’ex- trême programming. Cependant le tra-vail en binôme influence le jugement du relecteur direct.

Le plugin Jupiter Jupiter est un plugin pour Eclipse nécessitant SVN développé à l’université d’Hawaii par Takuya Yamashita et entretenu par Julie Ann Sakuda. Jupiter est Open Source et est encore en phase de développement actif. Jupiter se base sur quatre phases :

Phase de configuration : Cette phase concerne le chef du projet (où bien le chef d’équipe), selon ’organisation du projet, où ce dernier va prendre la dé-cision pour le déclenchement de la revue. Cette étape consiste à paramétrer le proces-sus de revue de code. Pour cela il va créer un nouveau reviewId en cliquant avec le bouton de la souris sur le projet qui va subir l’action de revue. Ensuite il choisit l’option proper-ties puis l’option review, la fenêtre illustrée dans la figure 1 va alors être affichée.

Dans le premier champ texte l’utilisateur donne un nom pour le reviewID, puis une description qui donne une idée sur la raison de la revue. En cliquant sur next la fenêtre de

Figure 1. Identification d’un reviewId

Figure 2. Choix des fichiers à réviser

Figure 3. Liste des réviseurs

Figure 4. Ajout d'un réviseur

Page 68: Linux

68 Linux+ 6/2009

PratiqueJupiter pour Eclipse

la figure 2 s’ouvrira qui permet de choisir les classes à réviser

En cliquant sur le bouton next la fenêtre (figure 3) qui permet d’ajouter des réviseurs s’affichera.

Le bouton Add de la figure 3 permet d’ajouter un réviseur

Phase de révision individuelleDans cette phase (comme le montre la figure 5), chaque réviseur va relire le code d’une manière individuelle et va commenter les éventuelles anomalies qu’il pourrait détecter.

Le réviseur peut même marquer les li-gnes qui contiennent les anomalies comme nous le montre cette fenêtre (figure 6).

Phase de révision collective :C’est une phase (comme le montre la figure 7) de décision. Après que chaque réviseur ait révisé les fichiers d’une manière individuelle, les réviseurs se réunissent pour décider quels sont les bugs ou les anomalies à traiter.

Phase de reprise de travail Cette phase concerne l’auteur qui va faire la mise à jour du code selon les anomalies dé-tectées et acceptées (figure 8). Pour de petits projets, c’est généralement le chef de projet ou le chef d’équipe qui sera l’auteur de la co- rrection.

Ce cycle va se répéter jusqu’à l’obtention d’un code source de bonne qualité.

Avantages de Jupiter : Jupiter a plusieurs avantages :

• Faire un cycle de revue de code complet,

• Plugin qui s’intègre parfaitement à Eclipse,

• Utilise SVN pour le suivi des phases de revue de code,

• Offre des fonctionnalités optionnelles et intéressantes comme la possibilité d’indiquer la sévérité d’une erreur, son type …,

• Facile à utiliser.

Limites de Jupiter :Comme le plugin Jupiter a des avantages, il a aussi des inconvénients dont nous citons :

Pas de notification : un réviseur ne sait pas qu’il s’est fait assigné des fichiers à ré- viser.

La phase de travail collaboratif : norma-lement ce travail ne se fait pas par les révi-seurs mais par un autre comité.

L’application ne peut pas être divisée sur plusieurs réviseurs, dans l’état actuel, on ne peut pas envoyer les fichiers à réviser vers plusieurs réviseurs.

La fixation des dates de revue n’est pas possible.

ConclusionCet article a été dédié à présenter le processus de revue de code à travers Jupiter (plugin pour Eclipse). Ce processus prend tout son intérêt dans les milieux industriels où le développement se fait en équipe et où plu-sieurs niveaux de compétences intervien- nent.

Pour que ce processus soit efficace, il faut disposer d’un outil simple et pratique offrant les fonctionnalités souhaitées. Dans ce contexte, Jupiter est un plugin qui s’in-tègre à Eclipse et qui permet d’effectuer un cycle complet de revue de code. Ce proces-sus est basé sur quatre phases que Jupiter implémente efficacement.

Enfin, notons que plusieurs améliora-tions peuvent être effectuées pour que Jupiter atteigne la maturité. À titre d’exemple, nous pouvons envisager une gestion plus avan- cée des utilisateurs et des dates de revue de code.

Figure 5. Révision individuelle

Figure 6. Marquer la ligne qui contient des anomalies

Figure 7. Révision collectiveective

Figure 8. Reprise de travail

• Guide d’utilisateur de Jupiter: http://csdl.ics.hawaii.edu/techreports/03-11/03-11.html

• Revue de code : http://fr.wikipedia.org/wiki/Revue_de_code

Sur le net

Adel Safi est in ingénieur en informatique passionné de linux depuis 2002. L'admi-nistration système et la programmation C/C++ sont ses domaines favoris.

A propos de l'auteur

Page 69: Linux
Page 70: Linux

PratiqueSVN

70 Linux+ 6/2009

PratiqueSVN

71www.lpmagazine.org

linux

@so

ftwar

e.co

m.p

l Si vous écrivez un document (article scientifi-que, rapport...) vos chefs hiérarchiques don-neront leurs avis et peuvent même éditer le document. La gestion des différentes ver-

sions d’un document devient alors très vite une tâche très compliquée. Heureusement, avec les logiciels de suivi de version, la tâche devient plus facile à faire. Cet article est dédié à l’étude de probablement l’un des logi-ciels le plus utilisé à savoir subversion (SVN). Nous al-lons commencer par une présentation de l’outil subver-sion. Nous décrirons ensuite les différentes opérations que fournit l’outil SVN. La dernière section sera consa-crée à la présentation d’un client SVN graphique pour Linux.

Subversion (SVN)Il existe un grand nombre de logiciels du même type. Le plus connu d'entre eux et le plus répandu actuelle-ment dans le monde des logiciels libres est sans doute SVN, mais on peut aussi citer GNU Arch, Bitkeeper, Git, Superversion, etc.

Dans les milieux de production, le choix de SVN se fait entre autre car :

• SVN est multiplateforme,• SVN est un logiciel libre,• SVN fonctionne de manière centralisée,• L’utilisation de SVN plus facile que son prédécesseur

CVS,• SVN supporte plusieurs modes d’accès distant, dont

SSH et WebDAV via Apache.

La fonction principale de Subversion est la gestion de sources et de contrôle de versions. Ce type de programmes a plusieurs fonctions, notamment :

Avec SVN, ne perdez plus rienL’édition de documents est un processus délicat qui nécessite généralement l’intervention de plusieurs personnes et de multiples corrections. Si vous êtes un développeur, votre chef d’équipe va certainement vous demander d’optimiser le code que vous avez écrit. Cet article est dédié à l’étude de probablement l’un des logiciels le plus utilisé SVN.

Adel Essafi

• Comment utiliser SVN pour gérer les différentes versions d'un fichier,

• Un outils graphique pour SVN.

Cet article explique...

Page 71: Linux

PratiqueSVN

70 Linux+ 6/2009

PratiqueSVN

71www.lpmagazine.org

• garder un historique des différentes ver-sions des fichiers d'un projet,

• permettre le retour à une version anté-rieure quelconque,

• garder un historique des modifications avec leur nature, leur date, leur auteur,

• permettre un accès souple à ces fichiers, en local ou via un réseau,

• permettre à des utilisateurs distincts et sou-vent distants de travailler ensemble sur les mêmes fichiers.

Avant de passer aux détails de l’utilisation de SVN, il faut se familiariser avec la termino-logie liée à subversion.

Dépôt (repository)Un dépôt Subversion est l'emplacement cen-tral où sont stockées toutes les données relati-ves aux projets gérés. Le dépôt est accédé via une URL locale ou distante. Le dépôt contient l'historique des versions des fichiers stockés, les logs enregistrés lors des modifications, les dates et auteurs de ces modifications, etc.Un dépôt apparaît de l'extérieur comme un système de fichiers composé de répertoires au sein desquels on peut naviguer, lire et écrire selon les permissions accordées.

ProjetsAu sein d'un dépôt se trouvent un ou plu-sieurs projets. À chaque projet correspond en général un répertoire situé à la racine du dé-pôt et qui contient lui-même les fichiers et dossiers du projet proprement dit.

Copie de travail (working copy)La copie de travail est un répertoire situé en local sur le poste de l'utilisateur et qui contient une copie d'une révision donnée des fichiers du dépôt. C'est cette copie qui sert de base de travail et qui est modifiée en local avant d'être importée (sauvegardée) vers le dépôt.

RévisionsChaque modification faite au dépôt constitue une révision. Le numéro de révision commen-ce à 1 et augmente de 1 à chaque opération. Sa valeur n'a aucune importance, mais c'est un indicateur qui permet de revenir à une ver-

sion donnée d'un ou plusieurs fichiers. Après avoir vu l’essentiel des notions à connaitre, nous pouvons passer maintenant à la descrip-tion du fonctionnement de SVN.

Création d'un nouveau projetLa première chose à faire lors de la première utilisation est de créer un nouveau projet. Deux cas de figure peuvent se présenter : ou bien le projet existe déjà au sein d'un dépôt et il s'agit de récupérer ce projet en local pour en faire une copie de travail, ou bien ce projet existe en local et doit être importé au sein du dépôt.

Si le projet existe déjà au sein du dépôt, une seule commande suffit pour effectuer un checkout et récupérer la dernière version des fichiers : il s'agit de la commande svn co.

$ svn co https://SERVEUR/svnrep/

project .

A page.html

A index.htm

Checked out revision 36.

La commande précédente a effectué un chec-kout du projet project (situé dans un réper-toire racine du même nom) dans le répertoire courant. Le résultat de la commande indique que deux fichiers ont été récupérés et que la dernière révision est la révision numéro 36.

Si par contre le projet n'existe pas dans le dépôt et qu'il faut le créer à partir de fichiers locaux, la commande à utiliser est svn import. Cette opération n'est en théorie effectuée que par la personne chargée de l'administration du dépôt.

Récupération de la dernière version du projetAvant de travailler sur les fichiers du projet, il faut s'assurer que l'on est bien synchronisé avec le dépôt, c'est à dire que la copie de tra-vail correspond bien à la dernière révision en

cours. Pour cela, il faut effectuer un update à l'aide de la commande svn update :

$ svn update

U index.htm

Updated to revision 37.

La commande indique qu'un fichier du réper-toire, vraisemblablement modifié par quel-qu'un d'autre depuis notre dernier update, a étémis à jour dans notre copie de travail.

Mise à jour des modifications dans le dépôtUne fois qu'on a modifié des fichiers, il faut basculer ces modifications au sein du dépôt pour qu'elles soient accessibles aux autres utilisateurs. Cette opération s'effectue à l'aide de la commande svn commit :

$ svn commit -m "modification de

page.html"

Sending page.html

Transmitting file data .

Committed revision 38.

Toute opération de commit s'effectue en indi-quant un message décrivant les modifications effectuées (ici directement dans la ligne de commande). Il est possible d'effectuer cette opération sur un répertoire entier, ou sur seu-lement un ou plusieurs fichiers.

Si des modifications ont eu lieu par un autre utilisateur du dépôt depuis le dernier update, un message d'erreur le signale. Il faut alors effec-tuer un nouvel update et résoudre d'éventuels conflits avant de relancer le commit.

Récupération d'une version antérieure d'un fichierLorsqu'on travaille sur un fichier, il peut arri-ver que les modifications effectuées ne soient

Figure 1. KDESVN: une interface simple pour parcourir les dépôt svn

Cet article est adressé à tout informati-cien qui ne connaît pas SVN . Aucun pré-requis n'est nécessaire pour une bonne compréhension.

Ce qu'il faut savoir...

Page 72: Linux

72 Linux+ 6/2009

PratiqueSVN

73www.lpmagazine.org

PratiqueSVN

pas bonnes et qu'on souhaite retourner au fichier tel qu'il était lors du dernier update. La commande svn revert est faite pour ça : $ svn revert page.html

Reverted 'page.html'

Cette commande annule les modifications effectuées depuis le dernier update. À noter que tout est effectué en local, et qu'un accès au dépôt n'est pas nécessaire.

On peut aussi souhaiter revenir à une ver-sion antérieure d'un fichier situé dans le dépôt. Il faut alors utiliser svn update en précisant le numéro de la révision et le ou les fichiers :

$ svn update -r 36 page.html

U page.html

Updated to revision 36.

Gestion des fichiers du dépôtSubversion propose un ensemble de com-mandes pour ajouter, supprimer ou renommer des fichiers du dépôt.

Ajout d'un fichierIl faut utiliser svn add. À noter que l'ajout n'est effectif qu'au prochain commit :

$ svn add liens.htm

A liens.htm

$ svn commit -m

"Ajout du fichier de liens"

Adding liens.htm

Transmitting file data .

Committed revision 39.

Suppression d'un fichierIl faut utiliser svn delete :

$ svn delete liens.htm

D liens.htm

$ svn commit -m

"Suppression d'un fichier"

Deleting liens.htm

Committed revision 40.

Là aussi, la suppression n'est effective qu'au commit suivant.

Renommer un fichierIl faut utiliser svn move :

$ svn move page.html test.html

A test.html

D page.html

$ svn commit -m

"Renommage d'un fichier"

Deleting page.html

Adding test.html

Committed revision 41.

Afficher les différences entre la copie locale et le dépôtIl faut lancer la commande svn diff depuis votre copie de travail:

$svn diff

Index: taskSet

====================================

--- taskSet (révision 141)

+++ taskSet (copie de travail)

@@ -1,8 +1,11 @@

-0 65

-1 10

-2 60

Afficher les le numéro de version de votre copie locale depuis la copie locale du projet on exécute la commande :

$svnversion

137:142M

Afficher l'historique d'un fichier

$svn blame

http://SERVEUR/index.html

138 adel 3 3

78 adel 65 90 1

78 adel 60 85 1

77 adel 51 76 1

Afficher l'arborescence du dépôtOn utilise la commande list de svn : svn list http://SERVEUR/mon_projet/

Afficher le contenu d'un fichier du dépôtPour afficher le contenu d'un fichier qui se trou-ve dans le dépôt, on utilise la commande cat : svn cat http://SERVEUR/mon_projet/

index.html

Résolution des conflitsLes conflits peuvent intervenir au moment d'unupdate, lorsque des modifications ont été faites à la fois dans la copie de travail et dans le dépôt. Par exemple, si vous éditez en local un fichier pour lui rajouter une ligne, et qu'un autre utili-sateur du dépôt a commité entre temps une mo-dification différente sur le même fichier, votre commit va générer l'erreur suivante :

$ svn commit

Sending test.html

svn: Commit failed (details follow):

svn: Your file or directory

'test.html' is probably out-of-date

svn:

The version resource does not

correspond to the resource

within the transaction.

Either the requested version

resource is out of date

(needs to be updated),

or the requested version

resource is newer than the

transaction root (restart

the commit).

Il vous faut alors effectuer un update, ce qui va mettre en concurrence les deux versions du ou des fichiers concernés. Deux cas de figure peuvent alors se présenter.

Dans le premier cas, le conflit peut être ré-solu automatiquement par subversion car les modifications ne concernent pas les mêmes parties du fichier. Dans ce cas vous obtiendrez le message suivant :

$ svn update

G test.html

Updated to revision 42.

Il est quand même conseillé de vérifier manuel-lement le résultat de cette résolution automa-tique.

Dans le deuxième cas, les modifications ne peuvent être fusionnées automatiquement car Figure 2. Récupérer la révision la plus récente

Page 73: Linux

72 Linux+ 6/2009

PratiqueSVN

73www.lpmagazine.org

PratiqueSVN

elles concernent les mêmes parties d'un fichier. Dans ce cas un conflit est signalé lors de l'update :

$ svn update

C test.html

Updated to revision 43.

Dans ce cas, deux nouveaux fichiers font leur apparition dans votre copie de travail. Dans l'exemple précédent, on se retrouve avec :

• test.html.mine : copie du fichier tel qu'il se trouvait dans votre copie de travail, en local, avant de faire l'update. C'est la ver-sion que vous souhaitiez commiter avant de détecter un conflit ;

• test.html.r42 : version du fichier pour la révision 42, c'est à dire lors de votre dernier update. C'est la version qui a servi de base pour les deux utilisateurs du dépôt qui ont travaillé en parallèle ;

• test.html.r43 : version du fichier pour la revision 43, c'est à dire la version actuel-lement dans le dépôt. Il s'agit de la version modifiée par un autre utilisateur, commitée avant votre update, et dont le contenu est à l'origine du conflit.

• test.html : il s'agit d'une version qui, en quelque sorte résume les trois autres en faisant apparaître les différences entre versions au sein d'un seul fichier.

Dès lors, le travail consiste à éditer le fichier test.html jusqu'à ce que le conflit soit résolu. Une fois ce travail terminé, on signale que le conflit est résolu à l'aide de la commande svn resolved :

$ svn resolved test.html

Resolved conflicted state of

'test.html'

On peut alors effectuer

le commit final.

Le dépôt contient l'historique des versions des fichiers stockés, les logs enregistrés lors des modifications, les dates et auteurs de ces modifications, etc.

Un dépôt apparaît de l'extérieur comme un système de fichiers composé de répertoires au sein desquels on peut naviguer, lire et écrire selon les permissions accordées.

KDESVN: une interfacegraphique pour svnBien que l'utilisation en mode ligne de comman-de soit triviale, certains utilisateurs préfèrent

toujours disposer d'une interface graphique. KDESVN est un projet qui vise à rendre l'uti-lisation de svn encore plus facile à travers une interface graphique conviviale et intuitive. Néanmoins, il faut quand même avoir déjà compris le fonctionnement de svn pour pouvoir utiliser cette interface.

Comme son nom laisse entendre, KDES-VN est une application développée au sein du projet KDE et qui hérite donc de toutes les qua-lités de ce projet et est distribuée sous la licence GNU General Public License Version 2. Cette application est disponible par défaut avec la plupart des distributions Linux. Nous allons détailler, dans le reste de cette section, deux cas d'utilisation de KDESVN et nous allons nous limiter à présenter brièvement le reste des fonc-tionnalités vu que leur utilisation est triviale après une bonne compréhension de svn.

InstallationGrâce aux dépôts des différentes distributions de Linux, l'installation de KDESVN peut se faire en une seule ligne de commande. Avec la distribution Fedora, l'installation se fait avec la commande : #yum -y install kdesvn en tant que root. Vous pouvez aussi utiliser les interfaces d'administration graphique pour réa-liser l'installation.

UtilisationComme le montre la Figure 1, KDESVN offre une interface simple et conviviale pour parcou-rir et travailler avec les dépôts svn.

À travers la barre de menu, nous pouvons accéder à toutes les fonctionnalités disponibles dans KDESVN. Les options les plus utilisées sont regroupées dans la barre d’outils. Le reste de la fenêtre est divisé en quatre zones qui per-mettent respectivement d'afficher l'arborescen-ce du projet, les fichiers du répertoire courant, les traces et les propriétés d'un fichier.

Créer une copie de travailD'abord, signalons que la copie de travail doit être accessible dans le système de fichiers local puisque svn ne supporte pas les protocoles comme smb ou fish.

Pour récupérer un (ou une partie d'un) pro-jet il faut aller dans Subversion->Général->ré-cupérer un dépôt. Vous devez indiquer l'adresse du projet sur le dépôt svn et le répertoire local dans lequel votre projet sera récupéré. Vous pouvez aussi indiquer la révision à récupérer. Dans la majorité des cas, c'est la dernière révi-sion que vous allez devoir récupérer. Choisissez alors l'option HEAD qui permet de récupérer la révision la plus récente (voir Figure 2).

Mise à jour des modifications dans le dépôt (commit).Pour mettre à jour les modifications dans le dépôt, on sélectionne l'option subversion->copie de travail->propager.

Comme nous l'avons signalé précédem-ment, KDESVN est en fait une interface graphique pour svn et offre par conséquent toutes les opérations offertes par svn. L'en-semble de ces opérations est regroupé dans le menu subversion et organisé comme suit:

• général: contient les opération générales de svn (historique, récupération d'une re-vision, différences entre copie de travail et copie sur le dépôt .....)

• copie de travail: contient toutes les opérations relatives à la copie de travail comme la propagation de la dernière version, la résolution de conflit ainsi quedes options plus avancées comme le changement de dépôt ou d'emplacement dans le dépôt.

• Dépôt: permet de récupérer les informa-tions sur le dépôt de la copie de travail courante.

Enfin, notons que KDESVN, comme tout lo-giciel qui se respecte, offre un ensemble de fonc-tions utiles et qui facilitent la vie aux utilisateurs comme le menu préférences, les favoris (book-marks) et les raccourcis claviers ...

ConclusionNous avons appris à travers cet article à tra-vailler avec un outil moderne et d'un apport pratique qui est sSVN. Cet outil permet en effet de garder les traces des différentes ver-sions des fichiers d'un projet et de contrôler toutes les modifications qui ont été faites. Il est aussi largement répandu au sein des groupes de travail (entreprises, laboratoires ...) puisqu'il rend le travail collaboratif plus pratique et plus efficace.

Dans la seconde section nous avons pré-senté un outil graphique, KDESVN, qui est une interface graphique pour SVN. Cet outil peut rapprocher svn de certains utilisateurs qui ont du mal avec le mode commande.

Adel Safi est un ingénieur en informatique passionné de linux depuis 2002. L'admi-nistration système et la programmation C/C++ sont ses domaines favoris.

A propos de l'auteur

Page 74: Linux

EnterpriseOpenERP

74 Linux+ 6/2009

EnterpriseOpenERP

75www.lpmagazine.org

linux

@so

ftwar

e.co

m.p

l

Comme David et Goliath, Oracle vs MySql, OpenERP est l'un de ces ERP (Enterprise Res-source Planning ou PGI, Progiciel de Ges-tion Intégré en français), qui se positionnant

sur le marché des PME, affiche des arguments non négli-geables. Alors il est vrai que des ERP libres, il en existe une bonne dizaine, mais ce dernier se positionne en tête de ces solutions.

Alors, avant de rentrer dans le vif du sujet, il est bon de rappeler, ce qu’est un ERP, ou PGI, pour utiliser le ter-me français. Il s’agit tout simplement d’une solution (lo-gicielle) informatique qui a pour but de gérer l’ensemble des processus opérationnels d’une entreprise, en couvrant l’intégralité des besoins de l’activité de cette dernière, que ce soit de la gestion des salariés ou du stock, à la gestion de la production et des ventes.

Cette solution se veut être modulaire et flexible, afin de s’adapter au mieux à l’activité de l’entreprise. Ainsi un ERP est un ensemble coordonné de modules (comptabi-lité, gestion de stocks, GRH, pôle production, achats, ven-tes, gestion de projets, voir le Tableau 1), qui liés les uns

aux autres permettent de structurer et faciliter la gestion de l’activité, notamment en ayant un meilleur contrôle de cette dernière et surtout une certaine cohérence et intégrité du système d’information.

Aujourd'hui, je vous propose, non pas un cours ex-haustif sur l'utilisation d'OpenERP, mais de commencer

Déployez OpenERP !Depuis quelques années, les Progiciels de Gestion Intégrés fleurissent de plus en plus pour gérer l'ensemble des processus d'activité au sein d'une entreprise. Mais, lorsque nous évoquons le terme ERP, il nous vient souvent à parler de la solution propriétaire. Alors certes cette solution est souvent décrite comme une ultime, mais une poignée d'irréductibles logiciels libres performants se positionnent sur ce marché, OpenERP est un de ceux là.

Jonathan Fussner

• Utiliser une distribution GNU/Linux et installer des logiciels,

• Connaitre les besoins de l’entreprise et son activité.

Ce qu’il faut savoir...

• L’introduction au monde des ERP libres,• L’installation d’OpenERP,• Le premier démarrage de cette solution et les

possibilités offertes.

Cet article explique…

Page 75: Linux

EnterpriseOpenERP

74 Linux+ 6/2009

EnterpriseOpenERP

75www.lpmagazine.org

par le commencement : l'installation et le pa-ramétrage du serveur et l'installation du client web. Il s'agit d'une bonne entrée en matière avant de vous laisser aller plus loin.

En effet, comme chaque entreprise est différente, chacune possède ses propres ty-pes de production, de style de management, c'est d'ailleurs le but de chaque de entreprise, être unique, développer des facteurs clés de succès qui lui permettent d'être pérenne, et de gagner des parts de marché.

Ainsi toute l'adaptation de l'ERP est pro-pre à chaque structure. La phase d'installa-tion est commune, mais la phase d'adapta-tion du système est unique et doit être ré-fléchie.

C'est dans un cas de figure comme celui-ci que l'on reconnaît les qualités d'un bon ad-ministrateur système, car il doit posséder des capacités d'écoute, de compréhension, afinde pourvoir travailler avec les différents acte-urs de l'entreprise (Responsables de produc-tion, financier, DRH, Stocks, Achats, Ventes, Management....) et pouvoir adapter au mieuxsa solution ERP.

Au sein d'une entité, l'informatique et plus généralement le Système d'Information, est une fonction transversale qui touche l'en-semble des pôles d'activité de cette dernière, et l'ERP est le parfait exemple de solution transversale.

Ainsi dans ce type de projet, l'homme ne doit plus être un geek enfermé dans son bureau à dépanner les salariés via un logiciel de contrôle à distance (bien que je n'ai rien contre les logiciels de type VNC !), mais doitprendre appui sur chaque pôle pour compren-dre les enjeux du déploiement d'une telle so-lution, les attentes et les besoins des acteurs de l'entreprise.

Un ERP peut devenir une force pour une entreprise, par rapport à un concurrent (meilleur contrôle de la production, rapidi-té, ….).

OpenERP est le plus connu et le plus puissant des ERP du monde libre. Il inclut près de 350 modules différents et spécifiques afin de permettre à une entreprise de gérer tous les pôles et process de production. Je vous propose rapidement une liste des princi-pales fonctionnalités certes non exhaustive,

mais relativement complète, offertes par celogiciel. Vous la trouverez au travers du Tab-leau 1.

Installation du serveurEntrons maintenant dans le vif du sujet, je vous propose d'installer la partie serveur de notre ERP, qui vous allez le voir n'est pas de tout repos !

Avant de continuer, je vous propose de déployer notre solution côté serveur, sur un OS GNU/Linux évidemment, et pourquoi pas sur une Debian Lenny à jour. Du côté d'Ope-nERP, il s'agira de la version web qui à mon sens est plus intéressante en terme d'adminis-tration que le client lourd.

PrérequisVous vous doutez bien que ce serait trop simple s'il suffisait d'installer un paquetage «serveur ». Avant tout nous devons installer quelques paquetages afin d'apporter sur notre système le support du langage python, utilisé par OpenERP. Nous rentrons donc mainte-nant dans une partie « ligne de commande », donc dans un terminal connecté root :

aptitude install python python2.5 python-psycopg2 python-egenix-mxdatetime python-xml pythontz python-pychart python-vobject python-pydot python-lxml python-libxslt1 python-reportlab python-profiler.

Installation de PostgreSQLQui dit ERP dit données et donc base de don-nées. OpenERP utilise le célèbre SGBRO

PostgreSQL. Nous allons l’installer, tou-jours par la ligne de commande :

aptitude install postgresql

postgresql-client gcc gs-gpl

Après avoir installé ceci, vous devez mettre quelque peu les mains dans le cambouis et modifier un fichier de configuration. Je vous rassure, rien de méchant, juste une petite li-gne à remplacer :

• Editez le fichier /etc/postgresql/8.3/main/pg_hba.conf,

• Puis remplacez la ligne local all all ident sameuser,

• Par local all all trust,• Enregistrez vos modifications et redé-

marrez le service PostgreSQL, à l'aide de la commande :

/etc/init.d/postgresql-8.3 res-

tart

Configuration de PostgreSQLNous allons maintenant avant de passer à l'installation à proprement parler d'OpenERP, configurer notre base de données et l'utilisa-teur correspondant. Les modifications suivantes

Figure 1. OpenERP via votre Navigateur

Figure 2. Gestion de la base de données

Le livre : Tiny ERP, Open ERP Pour une gestion d'entreprise efficace et intégrée -- Aux éditions Eyrolles

Pour aller plus loin….

Page 76: Linux

76 Linux+ 6/2009

EnterpriseOpenERP

77www.lpmagazine.org

EnterpriseOpenERP

seront comme à notre habitude passées en ligne de commande.

Si vous souhaitez avoir un outil graphique vous permettant d'administrer PostgreSQL, je vous conseille PhpPgAdmin, une interface web écrite en langage PHP et qui vous per-mettra de la même manière que PhpMyAd-min pour MySQL, d'administrer plus intuitive-ment votre SGBD. Attention, car cette appli-cation nécessitera un serveur web pour fonc-tionner, donc un service de plus qui tournera sur votre serveur.

Dans un premier temps, nous allons créer un utilisateur propre qui aura des droits sur notre future base de données. Pour se faire, entrons d'abord avec la console, dans le mode d'administration de PostgreSQL :

su - postgres

Puis créons un nouvel utilisateur nommé OPENERP :

createuser --createdb --no-

createrole --pwprompt openerp

Bien entendu, un mot de passe vous sera demandé, saisissez-en un ! Lorsque l'assistant vous demande si l'utilisateur doit être un "su-per utilisateur" saisissez O pour Oui.

La commande exit permet maintenant de quitter le mode d'administration de Pos-tgreSQL.

Je vous rassure, nous n'avons pas oublié de créer la base de données, cela se fera plus tard, via l'interface d'OpenERP !

Installation du serveurNous y voilà ! Maintenant nous allons ins-taller le serveur à proprement parler. Pour ce faire, commençons par aller sur le site d'Ope-nERP télécharger l'archive de la dernière version (la version 5.0.2 à l'heure où j'écris ces lignes) ceci se passe à l'adresse http://openerp.com/en/downloads.html

Je vous fait confiance pour extraire l'ar-chive et vous positionner dessus à l'aide de la commande :

cd

Puis installons à l'aide de la commande :

python setup.py install

L'installation se déroule correctement, et la partie serveur est maintenant installée. Voyez que le plus lourd dans cette procédure est bien l'installation de toutes les dépen-dances, nécessaires à l'installation et au bon fonctionnement du serveur.

Installation du client WebIl est l'heure chers lecteurs, de passer à la deuxième partie de cet article, l'installation du client. Mais attention, pas n'importe quel client, le client web ! Alors comme je vous l'ai spécifié plus tôt, je ne vais pas rentrer dans des débats qui tourneraient en rond, mais à mon sens, le client web possède plus d'avantages en terme d'administration (cen-tralisation des ressources). Mais ne perdez pas de vue, que cela demande néanmoins un serveur relativement correct en terme de performance, car il devra supporter un nom-

bre important de connexions réseau et d'ac-cès disque.

PrérequisComme tout à l’heure résolvons quelques petits soucis de dépendances et pré requis tels que python-setuptools ou TurboGears (un web framework). Cela se passe à nouveau en ligne de commande :

aptitude install python-setuptools

Puis :

easy_install TurboGears

Installation du client webIl est grand temps de passer à la dernière par-tie des phases d'installation : le client web !

Pour ce faire, je vous propose de changer un peut de méthode de travail, et d'utiliser easy_install (attention avec précaution !!) pour la gestion du client web :

easy_install -U openerp-web

Voila, une fois cette opération (relative-ment longue) complétée avec succès, la phase d'installation est terminée. Je vous rassure tout de suite, il nous reste encore du travail, car après l'installation, place au pa-ramétrage.

Démarrage des servicesJe vous propose maintenant d'ouvrir deux ter-minaux, afin de lancer deux commandes :

lancement du serveur

Via la commande :

openerp-server

lancement du client web

Figure 3. À propos de votre société

Figure 4. Gérez vos partenaires !

Page 77: Linux

76 Linux+ 6/2009

EnterpriseOpenERP

77www.lpmagazine.org

EnterpriseOpenERP

Via la commande :

openerp-web

Voila, à partir de maintenant vous pouvez atteindre l'application via votre navigateur, en saisissant dans la barre d'adresse, soit, l'adresse IP de votre serveur, soit son nom de machine, suivi du numéro de port, ici 8080.

Donc par exemple : http://localhost:8080 ou http://10.68.1.100:8080

Vous trouverez en Figure 1, la représen-tation de la page d'accueil d'OpenERP.

Base de données et paramétragesAttendez une minute, nous avons oublié quelque chose de très important ! Les infor-mations doivent êtres contenues et organisées dans une base données, il faut donc gérer maintenant ceci.

Cela tombe bien, car c'est justement la prochaine étape, que nous allons réaliser via notre navigateur. Sous vos yeux l'interface d'OpenERP. Afin de créer une nouvelle base de données, veuillez cliquer sur le bouton Base de données.

Nous allons maintenant renseigner un cer-tain nombre de variables, qui pour certainesd'entre elles sont par défaut (mot de passesuper administrateur), d'autres sont à adapterà votre contexte : Représentation d'exemple en Figure 2.

• Mot de passe super administrateur: admin,

• Nom de la nouvelle base de données: fussner,

• Installer les données de démonstration: décochez cette case, si vous souhaitez partir sur une base vierge afin de para-métrer l'ERP en fonction de vos paramèt-res et besoins. Si cette case est cochée, la base nouvellement créée sera enrichie

de données indicatives à titre d'exem-ple, afin de vous montrer les possibili-tés du produit.

• Langue par défaut : French (Langue Française, à moins que vous souhaitiez utiliser le produit dans une autre langue, l'anglais par exemple),

• Mot de passe administrateur: Le_Mot_De_Passe_d'Admin (Il s'agit du mot de passe de l'administrateur de la base de données. Vous pourrez toujours par la suite changer ce dernier ainsi que le login administrateur, en fonction de vos stratégies de sécurité).

La première partie est terminée, cliquez sur le bouton OK, la base de données est à ce moment en cours de création.

Vous voilà maintenant de retour sur la page d'accueil, veuillez vous authentifier avec l'utilisateur par défaut c'est-à-dire admin

et son mot de passe que vous avez rensei-gné juste avant. Dans les parties suivantes, il s'agit de paramétrer la solution au profil de votre entreprise, notamment en sélec-tionnant le profil le plus approprié afin de commencer le paramétrage.

Une fois cette opération terminée, cliquez sur le bouton suivant situé en haut à gauche de votre écran.

Saisissez maintenant les informations relatives à votre société, telles que sa Rai-son Sociale, l’adresse postale, etc...Un petit aperçu en Figure 3 !

Lorsque le résumé apparaît en page sui-vante, cliquez sur le bouton installer, pour compléter la base de données. Puis sur le bou-ton Commencer la configuration, afin de sé-lectionner dans un premier temps, le type de vue de votre interface. Par défaut je vous re-commande le mode simplifié.

Utilisateurs et modulesDans la continuité du paramétrage d'Ope-nERP, passons maintenant à la gestion de votre premier client (ou utilisateur !), rensei-gnez son nom, login et mot de passe. Je vous rappelle que dans cette phase, la création d'un utilisateur est vivement conseillée, vous pourrez gérer par la suite une liste complète d'utilisateurs et de droits d'accès.

Ainsi, par exemple :

Nom d'utilisateur: Jonathan FUSSNER

Login: jonathan.fussner

Mot de passe: *******

Figure 5. Vos salariés !

Tableau 1. Principales fonctionnalités offertes par OpenERP

Gestion d’activité Gestion Logistique Gestion FinancièreVentesAchatsFacturationGestion de points de vente

Gestion de produits, services…Gestion de stocksGestion de la qualité

Gestion de comptes (comptabilité)Analyse de comptesGestion de budgets et paiements

Gestion des Ressources Humaines

Gestion de la Relation Client Gestion de projets

PaieAbsencesVacancesRecrutement….

Relation clientèleMarketingGestion des Contacts

Gestion d’opérationsGestion du tempsPlanningsDiagrammes (Gantt…)Gestion des fluxCalendriers

ECommerce Business Management Optimisation de l’activité et de la communication

Gestion de l’EDI (Echange de données Informatisées)

Gestion de flux de travail (Workflows)

Tableaux de bordPossibilité de mise en place d’un WebMailGestion d’Alertes

Pour plus d’informations et de détails : http://openerp.com/en/discover/features.html

Page 78: Linux

78 Linux+ 6/2009

EnterpriseOpenERP

Cliquez maintenant sur Ajouter un utilisateur puis sur Passer si vous voulez continuer avec cet unique utilisateur pour l'instant. Puis sur Continuer.

L'heure est maintenant venue de ce sou-venir de ce que j'ai dit à propos de l'administra-teur qui doit sortir de sa salle de brassage, quit-ter quelques temps ses serveurs. Il est temps de passer faire un petit coucou au gentil Chef comptable, car vous devez pour la suite des opérations être en possession des informa-tions fiscales (aie !).

Pour le Type de plan de compte, pour une entreprise française, vous devrez en toute lo-gique choisir le PCG (Plan Comptable Géné-ral). Par la suite, rédigez un message qui sera lié au paiement des factures et configurez la gestion des commandes (un petit tour chez le responsable des ventes ou des expéditions ?).

Décidément, c'est dans ces moments là que je suis content d'avoir fait deux ans d'étu-des en comptabilité.

Une fois récoltées et saisies, il ne vous reste plus qu'à passer à l'étape suivante et à sé-lectionner les modules que vous souhaitez uti-liser au sein d'OpenERP. Souvenez-vous en début d'article, je parlais de plus de 350 modu-les différents, il est temps de connaitre claire-ment les objectifs du déploiement de cette solution pour sélectionner les modules qui seront utiles à l'exploitation.

Voilà après ceci, vous pourrez enfin com-mencer à utiliser OpenERP, continuer de ma-nière plus fine le paramétrage, notamment en terme de gestion des utilisateurs et droits d'accès.

N'oubliez pas que vous gérez en plus de l'ERP, une base de données, donc pen-sez aux sauvegardes, préparez un plan. Gar-dez à l'esprit que cette base contiendra des informations essentielles de l'entreprise (en-registrements comptables, facturation, ges-tion commerciale, gestion du personnel, pro-duction .....) soyez donc extrêmement pru-dent, afin d'être sûr d'avoir une garantie de

relance en cas de défaillance de la base ou du serveur.

Pensez également qu'il s'agit d'une appli-cation critique, donc inutile de rappeler aux administrateurs systèmes que l'utilisation de technique de redondance notamment RAID sur votre machine est indispensable en cas de crash disque ou autres. Après, il est évident que les solutions de sauvegarde et de sécurité ne manquent pas, mais c'est à vous de trouver la meilleure pour votre infrastructure.

Prévoyez également de démarrer Ope-nERP, en tant que service (démon) ! Vous trou-verez dans l'encart "Sur le réseau" un lien vers une procédure relativement bien expliquée.

Quelques exemples pour embrayer le pas !Vous pouvez d’ores et déjà vous connecter pour utiliser OpenERP. Voici après connexion,quelques premiers petits exemples d'utilisa-tion (attention légers exemples !)

Configurer des partenaires et des catégoriesLorsque nous parlons de partenaires dans une entreprise, cela englobe plusieurs personnes, telles que des clients, des fournisseurs ou encore des prospects. Vous allez ici pouvoir gérer vos partenaires, saisir des informations les concernant, .... Pour ce faire, lorsque vous vous êtes connectés à OpenERP, le menu situé à gauche de l'écran vous propose un certain nombre de modules.

Dans cette situation, cliquez sur "Parte-naires".

Maintenant avant de saisir des partenai-res, vous devez créer des catégories afin de les classer. Ainsi, pour une nouvelle catégorie : Cliquez sur nouveau.

Saisissez le nom de votre nouvelle catégorie : vous pouvez bien entendu gérer une arborescence avec des catégories pa-rents et enfants.

Cliquez sur sauvegarder ! Voilà votre catégorie est créée.

Vous pouvez maintenant en gérer pour tous vos types de partenaires.... Situation présentée en Figure 4.

Créons par exemple, la fiche d'un client :

• Cliquez sur partenaires puis partenaires,• Cliquez sur Nouveau,• Saisissez les informations telles que la

raison sociale, les adresses...,• Vous pouvez saisir les champs d'infor-

mation contact...,• Cliquez sur enregistrer.

Ajoutez vos salariésDernier exemple pour la route. Comme tout ERP qui se respecte, OpenERP inclue la ges-tion de vos salariés. Vous pouvez ainsi en sai-sir, cela est intéressant dans la mesure où vous pourrez non seulement faire de la GRH (Ges-tion des Ressources Humaines) mais surtoutgérer des projets, affecter des tâches à vos sa-lariés enregistrés, gérer des plannings... bref les possibilités deviennent nombreuses.

Ainsi, pour ajouter un salarié : représen-tation en Figure 5.

• Cliquez sur Ressources humaines,• Cliquez sur Employés et déroulez la liste,• Cliquez sur Nouvel Employé,• Saisissez les informations le concernant

ainsi que la société et éventuellement l'uti-lisateur OpenERP qui lui est associé !

• Enregistrez !

Voilà votre salarié est fiché dans votre liste. Vous pouvez également gérer des catégories d'employés, également dans le menu Res-sources Humaines.

À noter que les utilisateurs de l'ERP s'administrent via le menu Administration -> utilisateurs.

Dans cette partie vous pourrez gérer les accès et les rôles (donc pouvoirs) de chacun de vos utilisateurs, ainsi que dans le menu sécurité pour gérer vos listes de contrôles d'accès.

ConclusionEvidemment, nous avons omis de vous parler de la gestion des factures, des comman-des, du stock, des WorkFlows... mais les possibilités et les capacités d'OpenERP sont tellement importantes qu'elles sont im-possibles à détailler dans cet article. Néan-moins, vous avez maintenant un serveur avec un ERP disponible, à vous de l'exploi-ter au maximum afin que cela devienne un véritable facteur clé de succès pour votre en-treprise ! À bientôt sous le soleil du monde libre...

Jonathan FUSSNER est étudiant à l’éco-le Supérieure d’Informatique SUPINFO, et spécialisé dans le domaine de l’admi-nistration de Systèmes et Réseaux.

Vous pouvez le contacter au travers de son site Internet : www.fussner.net

A propos de l’Auteur...

• Site d’OpenERP : http://openerp.com/

• Demo OpenERP http://www.openerp.com/forum/topic9773.html?sid=9e21a94397447ad5021150ddb92b9097

• Site de démonstration d’OpenERP : http://openerp.com/en/discover/demonstration.html

Sur le réseau

Page 79: Linux

79

Fiche techniquejeux

www.lpmagazine.org

Section dirigée par Laurent DEROSIER

L’institut Cap Sciences de Bordeaux lance un jeu en ligne de simu-lation pour sensibiliser le public au réchauffement climatique. Vous allez donc prendre en main une ville de 115.000 habitants durant une période de 50 ans. Vous ne disposez seulement que de ce temps pour réduire de 75% l’émission de gaz à effet de serre, de 40% la dépense en énergie et passer à 60% d’énergies renouvelables ! Bref, un vrai travail qui ne sera pas de tout repos ! Il ne suffira pas d'ap-pliquer les actions proposées bêtement mais il faudra trouver une véritable tactique de jeu. Fermer les industries les plus polluantes sans penser à une solution de substitution ne servira donc à rien ! Il vous faudra aussi par exemple prévoir une future pénurie de pétrole ou la disparition des poissons.

Le jeu se déroule en étape d'une année. A la fin de celle-ci, vous gagnez un certain nombre de points qui vous permettront d'effectuer un certain nombre d'actions. Attention aux catastrophes que vous n’auriez pas prévues, elles vous feraient perdre des points ! Vous allez vite comprendre que la situation est complexe et qu'il est impossible de gagner du premier coup...la planète est-elle déses-pérément perdue ?

CLIM CITY

Après quelques parties de CLIM CITY où vous n'arrivez décidément pas à sauver la planète, voici un petit jeu 3D et multijoueurs complète-ment loufoque destiné à vous détendre les neurones ou à occuper vos petits bouts de chou. PONEY TRON reprend donc le principe bien connu du jeu TRON. La moto est ici remplacée par un poney qui court dans les plaines verdoyantes ! Vous devrez donc, comme dans le jeu original, couper la route à votre adversaire, éviter votre propre trace et éviter les décors. Ce jeu est simple mais amusant et vous offre une bonne liberté au niveau de vos déplacements. La prise en main est des plus aisées même pour les plus petits. Votre parcours ne se matérialise pas par un rayon lumineux mais par un nuage de cœurs ! C'est mignon tout plein et laisse bien loin les histoires d'énergie et de gaz carbonique de CLIM CITY ! Le tout est agrémenté de la célèbre musique des petits poneys... à la longue un peu agaçante ???

PONEY TRON

Là, stop, vous n'en pouvez plus ! Entre CLIM CITY et PONEY TRON, vous frisez la crise de nerfs ! Ce n'est pas grave, il reste LEMMINGBALL Z pour évacuer tout votre stress ! Bien évidem-ment, vous l'aurez compris, il s'agit d'un jeu de baston comme vous les aimez ! Il reprend l'atmosphère de la série Dragon Ball Z et y mélange un peu le graphisme des Lemmings ! Détonnant ! 4 modes de jeu sont possibles : deathmatch, team deathmatch, one vs all et lemming ball. Le jeu offre aussi la possibilité de jouer en réseau jusqu'à 4 joueurs. Du pur bonheur ! Pourtant les graphismes ne sont pas transcendants mais suffisent à apprécier un bon « kaméaméa » et autres attaques démoniaques ! Le zoom de la caméra s'adapte automatiquement à la distance séparant les combattants. Les coups spéciaux ne sont pas forcément simples à mettre en œuvre. N'hési-tez à pas jeter un coup d'œil au site donné ci-dessous pour de plus amples explications.

LEMMINGBALL Z 3D

Vous pouvez jouer de suite ou créer un compte qui vous permet-tra de sauver votre partie et donc de jouer de temps en temps. Le jeu développé en flash est très bien réalisé. Le site comporte une énorme partie pédagogique avec de nombreuses explications sur les enjeux climatiques. Du très bon travail !

Site du jeu : http://climcity.cap-sciences.net/

Pink Poney est Open Source et utilise le moteur 3D Ogre, pour fonctionner. Il vous faudra donc OpenGL 2.0.

Site du jeu : http://code.google.com/p/pink-pony/

Tous les coups et les astuces :http://www.gamerzonline.fr/forums/jeux-multi-joueurs-en-ligne/2038-lemming-ball-z-dbz-online.htmlSite du jeu : http://www.lbz3d.com/

Page 80: Linux

Pour le recevoir :envoyez-nous le bulletin d’abonnement avec information sur le choix de cadeau joint(voir site web)ou bienabonnez-vous directement sur le site du magazine http://www.lpmagazine.org/fr

Ne tardez pas !La collection unique vous attend !

Archives Linux+DVD 2008sont déjà arrivés !

Votre collection de Linux+DVD 2008 n’est pas complète ?

Vous avez raté un numéro particulièrement intéressant ?

Rien de plus simple!

Nous vous proposons en PDF tous les numéros de Linux+DVD parus en 2008

Abonnez-vous à Linux+DVD et choissez en cadeau les

ARCHIVES 2008 !

Page 81: Linux

Archives Linux+DVD 2008sont déjà arrivés !

Merci de remplir ce bon de commande et de nousle retourner par fax : (+48) 22 244 24 59ou par courrier :Software-Wydawnictwo Sp. z o.o., Bokserska 1, 02-682 Varsovie, PologneTél. (0033) 09.75.18.03.58E-mail : [email protected] Messenger : software_abonnement

Prénom et Nom ........................................................................................

Société .............................................................................................

Adresse .................................................................................................

................................................................................................................

Code postal ..........................................................................................

Ville ........................................................................................................

Téléphone .............................................................................................

Fax .........................................................................................................

Je souhaite recevoir l'abonnement à partir du numéro ....................

................................................................................................................

En cadeau, je souhaite recevoir* .....................................................

................................................................................................................

E-mail (indispensable pour envoyer la facture) ................................

................................................................................................................

Je règle par :¨ Carte bancaire n° CB

¨¨¨¨ ¨¨¨¨ ¨¨¨¨ ¨¨¨¨ code CVC/CVV ¨¨¨¨ expiration _______________ date et signature obligatoires

type de carte (MasterCard/Visa/Diners Club/Polcard/ICB)

¨ Chèque À l‘ordre de : Software-Wydawnictwo Sp z o.o. Bokserska 1, 02-682 Varsovie Pologne¨ Virement bancaire : Nom banque : Société Générale Chasse/Rhône banque guichet numéro de compte clé Rib 30003 01353 00028010183 90 IBAN : FR76 30003 01353 00028010183 90 Adresse Swift (Code BIC) : SOGEFRPP

BULLETIN D’ABONNEMENT

À l‘ordre de : Pologne

Abonnez-vouset recevez

un cadeau !

PRIX D’ABONNEMENT À LiNUX+ DVD : 38 €

* P

our v

oir l

’offr

e ac

tuel

le d

es c

adea

ux, v

isite

z no

tre s

ite h

ttp:

//lpm

agaz

ine.

org/

prt/

view

/abo

nnem

ent.h

tml

Page 82: Linux

Sur le DVDLa meilleure distribution pour les débutants

Ubuntu 9.10 Karmic Koala

Autres articles :• Bash dans l’administration• Nagios en entreprise • Programmation Java

La rédaction se réserve le droit de modifier le contenu du magazine

Le dossier spécialSugarCRM

Dans le prochain numéro

Linux+ DVD est publié par Software Press Sp. z o.o. SKBokserska 1, 02- 682 Varsovie, Polognetél. : +33 170 610 717 fax : +48 22 244 24 59http://www.lpmagazine.org

Président deSoftware Press Sp. z o.o. SK :Paweł Marciniak

Directrice de la publication Ewa Łozowicka

Tirage : 10 000

Imprimerie, photogravureArtDruk www.artdruk.comImprimé en Pologne/Printed in Poland

Abonnement (pour la France métropolitaine et le monde entier) 1 an (soit 6 numéros) – 38 €[email protected]

Dépôt légal : à la parutionISSN : 1732-4327Distribution : MLPParc d’activités de Chesnes, 55 bd de la Noirée -BP 59 F - 38291 SAINT-QUENTIN-FALLAVIER CEDEX

(c) 2009 Software Press Sp. z o.o. SK, tous droits réservés

Rédactrice en chef Aneta Mazur, [email protected]

DTPGraphics & Design Studiohttp://www.gdstudio.pl

Préparation DVD Andrzej Kuca

Couverture Agnieszka Marchocka

Graphisme de la couverture Łukasz Pabian - insane

Correction Clément Quinton

Bêta-tests Wajih LETAIEF, Nadia Baltimore,Thierry Borel, Olivier Olejniczak,Christophe Martel, Alexandre Alberic,

Fabrication Andrzej Kuca [email protected]

Diffusion Ilona Lepieszka [email protected]

Publicité [email protected]

Les personnes désireuses de coopérer peuvent nouscontacter à l’adresse : [email protected]

La rédaction a fait tout son possible pour s’assurerque les logiciels sont à jour, pourtant, elle déclinetoute responsabilité concernant leur utilisation.Elle ne fournit pas de support technique lié à l’installation ou à l’utilisation des logiciels enregistrés sur le DVD.Tous les logos et marques déposées sont la propriété de leurs propriétaires respectifs.

Le DVD joint au magazine ont été testé avec AntiVirenKit de la société G Data Software Sp. z o.o.

Linux ® est une marque déposée par Linus Torvalds.

La rédaction décline toute responsabilité concernant le contenu des publicités.

Page 83: Linux
Page 84: Linux