Linux

May 29, 2016 | Author: fialamboly | Category: Types, Books - Non-fiction
Share Embed Donate


Short Description

Linux...

Description

Éditorial Au cœur de la programmationJava et C++

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

E Aneta Mazur Rédactrice en chef [email protected]

t 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 recommande 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 apprendre, 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 recommande é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 !

www.lpmagazine.org



Sommaire

Dans ce numéro

34

Actus

6 8 9

Actus

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éveloppement d'une application portable basée sur RCP.

Julien Rosal

Mandriva Fabrice Facorat

Debian Julien Rosal

Dossier

14

Comment utiliser les logiciels libres en entreprise Philippe Scoffoni

Les logiciels Open Source remplaceront-ils les logiciels propriétaires ? Existe-t-il des logiciles Open Source pour tous les besoins de l'entreprise ? 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.

40

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 programmation 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é Programmation

18

44

Débuter avec JavaFX

Régis Senet

Pascal Barbier

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

22

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.

48

Java, problèmes de performance Marcin Kalas

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

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.



La mise en place d'un pot de miel avec Honeyd

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 ProFTPd, un serveur FTP complet. Vous allez connaître également les faiblesses du protocole FTP et les moyens pour les palier.

Linux+ 6/2009

Sommaire

Dossier

6

Programmation Java et C++

70

Chiffrement des données avec EncFS Régis Senet

Comment assurer la confidentialité de vos données ? Vous trouverez 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.

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.

Pratique

60

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.

Entreprise

7

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.

6

Révision de code avec Eclipse et Jupiter Adel 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.

Fiche Technique

79

Jeux Laurent Derosier

www.lpmagazine.org



NE WS

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

De la liberté est venue l'élégance

Linux Mint se déclare ouvertement dérivé d'Ubuntu, une distribution représentative 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.com Communauté francophone http:// www.linuxmint-fr.org Trahison

La nouvelle PS3 devrait sortir début septembre, 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 à disposition 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 prendre fin avec la PS3 Slim, une triste nouvelle pour tous ceux qui s'étaient investis dans le développement de logiciels autour du processeur Cell. Il semblerait même que la mise à jour du firmware des PS3 "original" supprimerait é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 totalement 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 viseur

D

écidément il n'y a pas un mois où le monde des navigateurs ne fait pas parler de lui. Mais non il ne s'agit pas de classique à 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 navigateurs. 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 simplement, 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 navigateurs tels que Firefox qui respectent mieux les normes W3C. Le problème c'est que beaucoup d'utilisateurs continuent à utiliser IE6 et donc les sites doivent tenir compte des spécificités de ce navigateur. Ce qui veux dire inclure des lignes de code pour que le site ne s'affiche 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 fonction, 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-beable-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/).Leprincipe 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 à apparaître sur les sites web invitant les utilisateurs à mettre à jour leur navigateur ou tout simplement en les avertissant que leur navigateur ne permet pas un affichage correct de

Linux+ 6/2009

ies4linux pour faire tourner IE sous Linux

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 WordPress a même été créé pour avertir les utilisateurs d'IE6 que leur navigateur est obsolète (http://www.incerteza.org/blog/projetos/shockinglybig-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'entreprises, 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 applications vers des standards plus propres. Une enquê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 évidente que c'est le monde du travail qui soutient grandement IE6. Microsoft d'ailleurs ne brusque pas vraiment 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'exploitation. 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 voulez 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/

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

40 ans de succès

D

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'informatique continue sa route tranquillement et conserve 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 Thompson 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é installé sur un mini ordinateur DEC PDP-7 (http:// fr.wikipedia.org/wiki/PDP-7). En ce qui concerne le nom Unix à proprement dit, Wikipedia nous éclaire quelque peu : le nom Unics fut suggéré par Brian Kernighan 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'assemblage 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-

Les héritiers d'Unix

NE WS

Visa pour Linux

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 Linux. 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 commencé à 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éricain domicilié aux Pays-Bas, Andrew S. Tanenbaum, a développé un OS basé sur Unix V6 qui se voulait minimal, il fut d'ailleurs baptisé Minix. Pourquoi je mets l'accent sur cette distribution particulièrement ? Et bien tout simplement 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 devait 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 plusieurs années et cela à cause de Windows et Linux. Néanmoins ce déclin devrait être long car beaucoup d'entreprises sont encore dépendantes 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...

www.lpmagazine.org

Ç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 informaticien". 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 disponible. 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 effectué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. Xtrem

La solution de stockage en ligne XtremFS vient de passer en version 1.0. Cette solution 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 serveurs 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 Pomme

Suite à des incidents étranges qui se sont produits sur des iPhone, la commission européenne a demandé des comptes à Apple. Rappelons tout de même qu'un iPhone a vu son écran se fissurer de toute part, tandis 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 commission européenne ne rigole pas avec ce genre de chose et si les cas d'iPhone dangereux 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.



Actus mandriva

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

Disponibilité de la Mandriva Flash 2009 Spring

Suite à la sortie de la Mandirva 2009 Spring, la Mandriva Flash 2009 Spring est aussi disponible. Cette version, basée sur la Mandriva 2009 Spring, utilise 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

Les nouveautés à venir de la Mandriva 2010.0

L

a Mandriva 2010.0 est prévue pour Novembre 2009. Cette version apportera de nombreuses améliorations et de nouveaux outils Mandriva seront disponibles pour les utilisateurs. Cette version continuera de mettre 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éseaux

Intégration de Plymouth

Pour 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-splashevolution-in-mandriva-linux.html

MIB Live Educational 2009.1

La 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/mibnews/31-mib/412-mib-live-educational20091.html



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-GUI

La Mandriva 2010 marque un tournant au niveau 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'offrir 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. Cependant 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 Mandriva 2010.0, ce problème devrait être réglé grâce à Tomoyo GUI. Pour tester Tomoyo GUI, il convient d'installer le paquetage tomoyo-gui, puis de redé• une architecture modulaire permettant marrer votre ordinateur afin que le support de d'ajouter des fonctionnalités via un sys- tomoyo soit activé. Ensuite il faut générer les tème de plugins, fichiers de configuration par défaut de TO• un outil en ligne de commande portable MOYO avec la commande suivante : sur toutes les distributions (netprofile), • une interface graphique spécifique à Man- /usr/lib/ccs/init_policy.sh –fileonly-profile driva pour le gérer (draknetprofile), • le support des profils réseaux au sein de Une fois ceci fait, vous pouvez alors lancer tol'applet réseau de Mandriva. moyo-gui. Vous aurez alors la possibilité de Pour ajouter un nouveau profil réseau, c'est définir les restrictions par domaines. Tout d'asimple. Tout d'abord il convient de lancer bord, le mieux consiste à passer en mode apdraknetprofile via le centre de Contrôle Man- prentissage afin de connaître la liste des accès driva dans la section « Réseau & Internet ». du domaine. Ensuite, il vous suffira d'appliquer Une fois ceci-fait, il suffit de créer un nou- vos restrictions. Pour que ces restrictions soient veau profil réseau et de lui donner un nom. respectées, vous devrez passer le domaine dans Ensuite, il suffit de configurer vos différents le mode contraignant ( enforcing mode ). paramètres réseaux. Selon les plugins que Vous pourrez avoir plus d'informations vous aurez activés, vous pourrez alors sauve- sur TOMOYOP et ses possibilités sur le site garder les paramètres des connexions réseaux, du projet : http://tomoyo.sourceforge.jp/ Depuis pas mal de temps déjà, Mandriva Linux 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 fonctionnalités suivantes :

Linux+ 6/2009

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

Democratie.deb

ia32-libs

D

ebian est une distribution Linux mais c'est surtout une énorme machine composée de bénévoles réunis dans un système extrê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 suivante. 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 semaines, l'équipe est arrivée à la conclusion qu'il fallait réfléchir selon deux axes : une “release” basée sur une période de “freeze” à une date connue à l'avance et une éventuelle synchronisation 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 particuliè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.

Actus debian

Squeeze devrait être la prochaine version de Debian

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 changement serait un gros truc. Certains sont allergiques à 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 nouvelle 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 Debian 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...

www.lpmagazine.org

Vous 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 utilisation. Les packages ia32-libs et ia32-libsgtk 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 nouvelle qui permettra de patienter jusqu'à ce que toutes les applications soient disponibles en 64 bits... C'est pas encore gagné. Happy Birthday

Le temps passe vite, Debian devient chaque 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. PureOSlight

Chaque 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/.



Sur le DVD DVD

Installer Fedora 11 Leonidas

F

edora (ex Fedora Core) est l'une des distributions GNU/Linux les plus populaires. 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 clairement 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, documentation, 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 : Figure 2. Choix du type de partitionnement

• via un DVD contenant GNOME et KDE ou, • via un Live CD utilisant GNOME ou KDE. renseignez-vous donc auparavant sur la procédure. D'autre part, restez vigilant lors de Dans ces deux cas de figure, le mode d'instal- cette étape afin de ne pas déréglé le BIOS lation demeure quasiment identique (à peu de ce qui pourrait ensuite nuire au démarrage détails près). de l'ordinateur. Démarrez sur le DVD ou le CD puis :

Initialisation de l'installation

Vous devez avoir préalablement réglé le BIOS de votre machine pour pouvoir démarrer avec le lecteur / graveur de CD / DVD. Ce paramétrage est fonction de votre BIOS ;

(afin d'en vérifier l'intégrité). Un DVD à l'intégrité corrompue conduira inévitablement à un échec de l'installation. Cette étape de test du média peut cependant ê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 DVD, choisissez la • si vous utilisez le Live CD cliquez sur l'icône Install to Hard Drive (ou Installer première option : Install or upgrade an sur le disque dur) située sur le bureau. existing system. Cliquez sur Next (Suivant) (Figure 1) afin de valider le test du DVD Cliquez sur Next (Suivant) ce qui vous permettra de sélectionner : • la langue puis le clavier avec une installation par DVD, • le clavier en installant via le Live CD. Au sujet du choix du clavier, préférez le Latin-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éseau

Le périphérique réseau est paramétré automatiquement 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 secondaire). Cliquez ensuite sur Suivant.

Figure 1. Choix du clavier

10

Linux+ 6/2009

Sur le DVD DVD

Fuseau horaire

Un 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 automatiquement, 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 administrateur

Dans 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, puisque l'administrateur a tous les droits : • ne vous connectez jamais graphiquement en mode administrateur, • n'utilisez le mode root que pour les opérations de maintenance (pas de bureautique, d'internet...), • ne laissez pas traîner le mot de passe administrateur et changez-le dès que quelqu'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 proches (vraiment trop classique comme choix !).

Figure 3. Sélection des partitions

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'arrivée. Vous pouvez aussi détruire une partition existante via le bouton Supprimer afin de libérer de l'espace car il est impossible de reCliquez ensuite sur Suivant. dimensionner une partition existante. Si vous détruisez une partition, soyez sûr de ce que Partitionnement vous faites ! Finalement, cet installateur AnaCliquez sur Suivant pour parvenir à l'étape du conda permet de créer vos partitions avec bien choix des partitions. Une fenêtre vous montre peu d'ergonomie et de souplesse. Mieux vaut alors les différents disques durs utilisables donc partitionner préalablement avec GParted (Figure 3). C'est donc ici que nous allons partitionner (si les partitions ne sont pas encore créées). Quatre choix s'offrent dans le menu déroulant en haut de la fenêtre : • • • • •

Live CD, GParted étant une application open source (et gratuite) qui sait gérer, outre les systè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 comme) ou ne pas formater. La partition swap est détectée et montée automatiquement si elle existe déjà.

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 resterez vigilant lors de la sélection des disques durs voulu afin de ne pas perdre vos précieuses données. Cliquez ensuite sur Suivant. Nous allons maintenant créer et monter nos partitions de façon personnalisée. Par monter 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 Figure 4. Choix du type de partition

www.lpmagazine.org

11

Sur le DVD DVD

Ext3, outre la partition de swap. L'installation 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 partitions. De même, il est possible que vous deviez 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.

• • •

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

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







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 : selon vos besoins, Partition /usr : système de fichier Ext3 ou Ext4 (sous Fedora) : contient les applications non administratives au format RPM : optionnelle : 5 à 9 Go pour ne pas être à l'étroit éventuellement mais cet espace pourra alors venir en réduction de la partition racine,

Figure 6. Derniers réglages post-installation

12





Partition /usr/local : système de fichier Ext3 ou Ext4 (sous Fedora) : contient les applications non administratives compilé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 fichiers temporaires : optionnelle, Partition /boot : système de fichier Ext3 (sous Fedora) : contient les fichiers nécessaires au démarrage : optionnelle sachant 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 partitions dans /mnt/votre_partition. Attention : si vous installez depuis un LiveCD, vous obtiendrez un message d'erreur 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 pouvoir 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

Linux+ 6/2009

Si vous avez défini vos partitions, vous pouvez cliquez sur Suivant. Si vous avez demandé le formatage des partitions, une demande de confirmation vous sera affichée (tant mieux !). Validez par Ecrire les modifications sur le disque ou abandonnez avec Revenir en arrière. BOREL Thierry

Sur le réseau • • •

• •









Projet Fedora : http://fedoraproject.org Site Fedora Francophone : www.fedora-fr.org Communauté Planet Fedora Francophone : 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 DVD DVD

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]

10

Linux+ 5/2009

Dossier Logiciels Libres

Comment utiliser

des logiciels open source en entreprise Philippe Scoffoni

[email protected]

Les 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.

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 fondateur 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 soustend 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

14

Linux+ 6/2009

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

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éveloppement 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-

Ce qu'il faut savoir... Connaissance des bases de l'informatique et des réseaux.

Dossier Logiciels Libres

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 collaborer et de travailler ensemble, car elles partagent le même mode de fonctionnement basé sur l'ouverture du code et la collaboration.

Topologie des logiciels open source

Dans cette partie, nous allons expliquer la topologie des logiciels Open Source. Commençons par les logiciels communautaires.

Les logiciels communautaires Il 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é adopte souvent la forme d'une organisation à but non lucratif pour structurer son fonctionnement. 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 commerciales L'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 privés. C'est un modèle qui est en passe de devenir prédominant dans le secteur du logiciel open source pour les entreprises. On assiste également à une vague de rachat de ces éditeurs open source depuis quelques 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 source ne présente que peu voir pas de risbase de données MySQL ou encore la suite ques juridiques. Il en va autrement lorsque bureautique Open Office. l’on utilise ces mêmes logiciels dans le cadre de solutions mises à disposition de tiers. Ce Existe-t-il des logiciels open sont donc principalement les éditeurs de logisource pour tous les besoins ciels ou de services utilisant des briques open de l'entreprise ? source qui doivent faire preuve de vigilance. Même s'il est toujours possible de trouver un Les conseils d’un bon juriste ne sont donc pas exemple de domaine logiciel ou l'open source à écarter bien au contraire. est peu présent, il n'en demeure pas moins vrai Bien entendu, le rappel du Gartner Group qu'ils savent aujourd'hui répondre à la quasi- de la nécessité d’une gouvernance propre aux totalité des besoins d'une entreprise. logiciels open source est justifiée. Elle est cePour l'infrastructure, les solutions pour pendant tout aussi nécessaire que pour les lomonter un réseau local avec tous les services giciels propriétaires dont les licences peuvent de base existent et sont parfaitement matures et également comporter des risques juridiques. robustes : gestion de la couche réseau (adressage IP, gestion des noms de machines), partage Quels sont les freins à l'adoption couramment avancés ? de fichiers, d'imprimante, authentification. On trouve bien sûr des systèmes d'exploi- Le Forrester Research a publié une étude rétation complets pour les ordinateurs de bureau vélant les deux principaux freins à l’adoption avec tous les outils classiques comme les trai- du logiciel open source : tements de textes, tableur, gestionnaire de base de données, client de messagerie, navigateur • La sécurité, • Le support logiciel, web, etc... Viennent ensuite les logiciels métiers : Il semblerait donc qu’il y ait toujours un im• Des ERP (Enterprise Resource Planning portant déficit de communication auprès des ou Progiciel de gestion intégré) qui entreprises sur le modèle open source et son prennent en charge la gestion commer- fonctionnement. À quoi cela peut-il tenir ? ciale, gestion des stocks, la facturation, L’open source ou le Logiciel Libre n’est-il vu la comptabilité, la paie. que comme un réducteur de coût ? Probable• Des CRM (Customer Relationship Mana- ment. gement ou Gestion de la Relation Client) Il est évident que la compréhension que souvent couplés avec les logiciels précé- peut avoir une entreprise de l’open source dents. ne peut se construire en un seul jour. L’open • Des GED (gestion électronique de docu- source est bien trop souvent évalué sur les ment). mêmes critères que les logiciels propriétaires • Et toute sorte de programme répondant masquant ainsi leurs avantages. à des besoins moins généraux... Revenons aux points précédents. Les logiciels open source sont-ils moins sûrs que Y-a-t-il des risques à les utiliser ? les logiciels propriétaires? Dans une étude de novembre 2008, le Gartner Tout d’abord, la question en elle-même Group pointe du doigt les entreprises en les ac- n’a que peu de sens. Un logiciel reste un logicusant de ne pas mesurer les risques inhérents ciel. Un développeur a tout autant de chance à l’utilisation des logiciels open source en en- de faire un code peu sécurisé dans les deux vironnement critique. En cause la multiplicité modèles. La différence réside dans l’ouvertudes licences de ces logiciels et le peu d’atten- re du code qui permettra un audit aisé par des tion que leur accorderaient les entreprises tiers externes. Un logiciel propriétaire devra prenant le risque de se voir attaquer pour des faire appel à un prestataire pour cela. problèmes d’utilisation illicites de brevets. Il serait préférable de mettre plus en On se souviendra que Microsoft avait ac- avant le mode de conception et d’amélioracusé l’open source de violer 235 de ces bre- tion centré sur l’utilisateur ou plutôt le convets, ainsi que des menaces de procès suite tributeur. Il s’agit comme l’explique Bernard à l'accord passé entre Novell et Microsoft. Stiegler dans une récente interview, d’un Ces affaires ont marqué les esprits. basculement entre deux modèles économiDans le cadre d’une utilisation pour des ques : on est passé d’un processus hiérarbesoins internes y compris dans des applica- chique, produit par le haut pour redescendre tions critiques comme la messagerie, l’open vers les applications, à l’« innovation ascen-

www.lpmagazine.org

15

Dossier Logiciels Libres

dante ». L’open source répond bien à cette définition. Une autre métaphore exprimant cette différence est celle d'Eric Raymond l'un des fondateurs 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 traditionnels. Cette rupture avec des logiques traditionnelles 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 simplement.

Les arguments en faveur des logiciels open source

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

Respect des standards ouverts C’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 facilement 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 ensuite 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-

16

sées rapidement par n’importe quel membre Les aspects budgétaires et choix des prestations d'accompagnement de la communauté associée au logiciel. Le volet budgétaire doit être tout particuPérennité lièrement soigné surtout si vous êtes amené Deux cas à distinguer : les logiciels issus de à comparer des solutions propriétaires et open communautés et ceux des éditeurs commer- source. Il faut montrer et mettre en évidence ciaux. Dans le premier cas la pérennité est liée les différences qui existent dans la structure à la diffusion du logiciel et à l’importance de sa des coûts entre ces deux solutions. C’est soucommunauté offrant le potentiel d’une relève vent le chapitre qui est le plus épluché lorsque en cas de défaillance d’un des membres actifs. l’on en arrive au stade de la décision même Pour les éditeurs open source la question s’il n’est pas le seul critère. est un peu plus délicate. Sans communauté Pour une solution open source, le poste les épaulant, la pérennité peut se poser dans les licence est en général nul. Je dis en général, mêmes termes que les éditeurs propriétaires. De car certaines solutions open source ont un plus, la concentration des logiciels open source coût de licence lorsque l’on souhaite les utidans les mains de quelques gros éditeurs com- liser à des fins commerciales ou encore dismerciaux accentue encore cette problématique. poser de certaines fonctions avancées. Citons En effet dans ce modèle les développeurs sont par exemple la base de données MySQL. en général rémunérés par la société. Si la société Viennent ensuite les prestations . Si vous décide d'arrêter les développements, il y a une décidez de prendre en charge la mise en rupture possible dans la continuité de service. œuvre, assurez-vous d’en avoir réellement Cependant, c'est un aspect qu'il faut nua- les compétences et ne vous contentez pas ncer, car bien souvent ces grands éditeurs sont des tutoriels que vous pourriez avoir trouvés liés avec leurs clients par des contrats de main- sur Internet pour faire baisser le coût de votre tenance qui les obligent à fournir au moins des projet. correctifs pour une période donnée. Enfin derN’hésitez pas à intégrer des coûts de fornier argument et pas des moindres, la licence mation que ce soit pour vous ou pour les utiliopen source permet potentiellement à une sateurs surtout si vous touchez aux outils qui autre société de reprendre tout ou partie du leur sont mis à disposition. D’autant que ces logiciel à son compte. formations peuvent passer sur le budget correspondant dans votre société et améliorer de Maîtrise du Système d'Informations de cette façon le coût final. l’entreprise Les économies réalisées sur les licences Conséquence des points énoncés précédem- doivent vous permettre de vous faire accomment, vous maîtrisez davantage les évolu- pagner techniquement alors, faites appel à une tions de votre SI. Société de Service en Logiciel Libre (SSLL Les arguments cités peuvent aussi s’appli- ou SS2L). quer à des solutions propriétaires, mais il est Il s'agit de Société de Services en Ingéplus rare de les voir cumuler tous ces avan- nierie Informatique (SSII) qui se sont spéciatages en même temps d’autant que certains lisées dans les logiciels libres ou open source. comme l’ouverture du code restent spécifiques Cependant, les SSII classiques proposent de aux logiciels open source. plus en plus des prestations autour des logiciels open source. Comment construire son projet Finissons par les coûts de maintenance. open source Là encore deux solutions : vous l'assurez en Dans l’absolu, la conduite d’un projet open interne ou vous souscrivez un contrat de supsource ne diffère guère de celle d’un projet port auprès de l’éditeur du logiciel open sourmettant en œuvre des outils propriétaires. ce. Ils le proposent tous aujourd’hui. Dans Vous n'échapperez donc à aucune des phases le cas des logiciels communautaires, vous classiques de recueil des besoins, d’analyse, pouvez aussi faire appel à une SSLL pour de recherche de solutions et de vérification cela. de l’adéquation du logiciel au besoin. En résumé, ne faites pas d’économie sur Car ne nous y trompons pas, choisir un les prestations. C’est un point à mettre en logiciel open source juste parce qu’il est open avant : plus de service grâce aux économies source sans s’assurer de son adéquation aux sur les licences, pour un projet en principe besoins est un bon moyen de faire échouer mieux accompagné donc aux chances de un projet. Il peut y avoir des situations où un succès optimal. Ce n’est pas une garantie, logiciel propriétaire sera mieux adapté. mais c’est mieux que de partir avec un dé-

Linux+ 6/2009

Dossier Logiciels 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 distinguent surtout si vous prévoyez une extension du périmètre de déploiement de votre application dans les années qui suivent.

Participer au mouvement des logiciels open source Les entreprises peuvent aussi participer, on dit plutôt contribuer au développement d'un logiciel open source. Soit directement en proposant les modifications apportées à un logiciel à 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 communauté 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éaliser 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'interroger 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 possibilité d'améliorer le retour sur investissement. 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 concurrence. Dans ce cas il est possible de différer le reversement du code source développé à la communauté.

Conclusion

Comme nous venons de le voir la mise en place de logiciels open source répond bien souvent 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 entreprises une opportunité pour améliorer leur compétitivité grâce à leur très bon retour sur

Sur Internet •

• • • •





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_Steven_Raymond – Wikipédia : Eric Raymond http://seddisoft.kelio.org/cathedralebazar.htm – La Cathédrale et le Bazar : traduction française

investissement. Il est d'ailleurs important de noter que les grands industriels de l'économie numérique que sont Amazon ou Google utilisent 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 remplacerontils les logiciels propriétaires ? Probablement pas. Mais un mixte des deux modèles va continuer d'exister. Nous assistons actuellement à un ré-équilibrage des parts de marchés qui n'est pas encore fini. Cet article est mis à disposition sous contrat Creative Commons paternité et partage des conditions initiales à l’identique version 3.0 France.

À propos de l'auteur Philippe Scoffoni est responsable informatique. 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'environnements 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.

www.lpmagazine.org

17

Programmation Programmation Java

Débuter avec JavaFX Pascal Barbier

[email protected]

Le 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.

18

A

vant de commencer à développer des interfaces 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 Windows, un émulateur de téléphone portable, la documentation 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

Linux+ 6/2009

obligatoirement être .fx. Attention ; le nom du fichier deviendra le nom de la classe Java générée par le compilateur. Si le code doit générer plusieurs classes (gestionnaires 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

Cet article explique... • • • •

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.

Programmation Programmation Java

javafxpackager pour créer un package de déploiement : javafxpackager -src rep -appClass Prog -p mobile

Figure 1. Une interface simple

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 fenê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 label, 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’afficher 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 databinding permet de s’affranchir également de détails répétitifs dans le traitement des interfaces utilisateur. Une autre caractéristique intéressante du langage est sa portabilité. En effet, nous venons 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 travail 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

Ce qu'il faut savoir... Pour comprendre cet article vous devrez connaître. • •

La syntaxe de Java. Les grands principes des interfaces homme-machine (IHM) graphiques.

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 package. 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éveloppement, 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 efforts

Une des caractéristiques les plus intéressantes de JavaFx est la facilité de mise en œuvre d’effets 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 relative dans le dégradé. Ici j’ai choisi de placer du bleu au début et à la fin du dégradé (positions 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'environnement 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’ombre. Plusieurs possibilités s’offrent au designer pour cela. Ici j’ai choisi l’effet DropShadow qui dessine une sorte de halo autour du bouton (cf. Figure 5). Cet effet est plus efficace sur un fond clair et uni.

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

des traitements simples ou sophistiqués d'images 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 principe, les animations vont compléter la palette d'outils mis à disposition du développeur d'interfaces utilisateur riches.

Création d'animations

JavaFX permet facilement d'ajouter des animations dans les applications. Pour aborder simplement ce sujet, j'ai choisi d'afficher un petit rectangle qui va grandir et rétrécir régulièrement. Je commence par créer une variable rect de type Rectangle et une scène qui contient ce rectangle. L'animation est constituée d'une variable de type TimeLine qui comporte des KeyFrame. Chaque KeyFrame

Button {text:"Augmente" action: function(){compteur++} effect: DropShadow{radius:10} }

Figure 3.

JavaFX propose en standard un grand nom- Effet cylindre bre d'autres effets graphiques. En particulier (gradient)

www.lpmagazine.org

Figure 5. Figure 4. Effet sphérique Ombre sur un bouton (gradient)

19

Programmation Programmation Java

Intégration de toutes les technologies Java

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

Listing 4. Effet dégradé sphérique

Arrivé à ce stade, on pourrait imaginer que JavaFX est un tout nouveau langage : nouvelle syntaxe, nouvelle commande de compilation, nouvelle commande d'exécution. Pourtant, en examinant les fichiers créés par le compilateur Javafxc, on aperçoit des fichiers 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 compilateur javac. Mais alors, pourquoi n'utiliset-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 technologies graphiques. Partant de ce constat, il paraît évident que la compatibilité avec les autres librairies Java pouvait être facilement 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 plateformes 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'exploitation. Voici le code pour utiliser la méthode println :

fill: RadialGradient { centerX: 0.5 centerY: 0.5

import java.lang.System;

   stops: [

System.out.println(err_mess);

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},     ] }

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

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 reprise 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 fluidité. Je pourrais ajouter des KeyFrame inter-

20

médiaires pour améliorer la situation mais le code va rapidement grossir inutilement. Heureusement, 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 interpolation de valeurs. J'ai également profité de cette seconde version pour montrer une notation plus concise pour définir les KeyFrames simples (la notation at; cf.Listing 6).

Linux+ 6/2009

Conclusion

Ce bref article ne peut remplacer une formation complète ou les documentations de l'éditeur. Si vous voulez explorer les possibilité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 utilisateur, on s'aperçoit qu'elle a visiblement été conçue pour concurrencer les Flex et autres 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-

Programmation Programmation Java

Listing 5. Animation

Sur le Net •

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 {

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.

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, animations). 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 grandement à 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.

repeatCount: Timeline.INDEFINITE; autoReverse: true; keyFrames: [

À propos de l'auteur

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

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 personnels techniques dans les grandes entreprises 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.

] } anim.playFromStart(); Stage { title: "JavaFX" scene: Scene { width: 150 height: 150 content: rect; } }

www.lpmagazine.org

21

Programmation Java, problèmes de performance

Java

problèmes de performance Marcin Kalas

Mê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.

Garbage Collector – optimisation des paramètres de la gestion de la pile

Garbage collector est responsable du processus de la gestion 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 considérable sur la performance de l'application. À cause d'une configuration incorrecte des paramètres du garbage collector, la machine virtuelle peut passer la plupart de temps à gérer la mémoire et non à exécuter le code de votre application. Heureusement, le cas contraire est également possible : grâce à une configuration correcte, il est possible d'augmenter considérablement la performance de votre application. Afin d'évaluer la performance du garbage collector, il est possible d'utiliser les métriques suivantes :

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 lesparamètres de la pile sont configurés correctement ;

Cet article explique •

• • • •



22

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

Linux+ 6/2009

Comment identifier les symptômes des problèmes liés à la performance dans une machine virtuelle Java ; Quelles données diagnostiques sont indispensables 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.

Programmation Java, problèmes de performance



durée de la pause – durée pendant laquelle 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 collector ; taille de la pile.

• • •

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



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 :

Collecter les données diagnostiques



Ce qu'il faut savoir • • •

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.

durée ressentie par l'utilisateur pendant laquelle l'application ne répond pas à ses commandes (potentiellement longs cycles du garbage collector) ; analyse des logs verbose:gc indique que le débit est inférieur à 90 %.



baisse de la performance de l'application 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 utilisent les générations, les piles peuvent être remplies rapidement lors du travail de l'application et les cycles du garbage 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) ;

www.lpmagazine.org

Afin 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érentes de la machine virtuelle mais aussi dans les versions consécutives. Il est possible d'activer les logs verbose:gc au moyen de l'option -verbose:gc transmise à la machine virtuelle Java lors du démarrage de l'application (cette option active les logs verbose:gc sur la machine virtuelle d'IBM et de Sun). À titre d'exemple, pour collecter les logs

23

Programmation Java, problèmes de performance

verbose:gc, il faut lancer votre application de taille des objets copiés entre les générations manière suivante : diverses. De plus, les logs contiennent une trace du temps du cycle et la durée de l'exécujava -verbose:gc tion de toutes les phases. MyJavaApplication Dans la version 5.0, la pile est divisée en trois zones : young generation, old generaL'emplacement des logs verbose:gc dépend tion et permanent generation – les logs verbode l'implémentation de la machine virtuelle. se:gc contiennent des informations liées à touJava fourni par Sun redirige par défaut les tes ces zones. Si le cycle du garbage collector logs verbose:gc à la sortie standard. Dans le concerne une zone destinée aux objets d'une cas de la machine virtuelle d'IBM, les logs durée de vie courte (en anglais nursery), le verbose:gc seront redirigés au flux standard format des logs se présentera de manière suid'erreurs. Nous recommandons toutefois vante : d'enregistrer les logs dans un fichier concret (il faut alors s'assurer que le disque contient [GC [: 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 secs] supplémentaire -Xloggc:gcLogFile.log. -> En ce qui concerne la machine IBM, vous (), obtiendrez le même résultat grâce à l'option secs] -Xverbosegclog:gcLogFile.log. Il est possible de transmettre des paramètres sup- Voici les significations des symboles : plémentaires avec l'option -verbose:gc ; ces paramètres permettent d'obtenir des infor- • collector – nom interne du récupérateur mations plus détaillées relatives au procesutilisé pendant le cycle ; sus de la gestion de la mémoire. Il faut tou- • starting_occupancy1 – occupation du jours s'assurer que les logs contiennent une nursery avant le début du cycle ; trace du temps de chaque cycle du garbage • ending_occupancy1 – occupation du collector ainsi que l'information relative nursery après le début du cycle ; à l'occupation de toutes les zones de la pile • size1 – taille de la zone destinée aux objets d'une durée de vie courte ; (c'est particulièrement important lorsque la • pause_time1 – durée de récupération de pile est divisée en plusieurs générations). la zone destinée aux objets d'une durée de vie courte ; Interprétation

des logs verbose:gc

Les logs verbose:gc contiennent toutes les informations relatives au processus de la gestion automatique de la mémoire. Pour les analyser, nous utilisons principalement les outils spécialisés (par exemple, IBM Garbage Collection and Memory Visualizer) qui permettent non seulement d'effectuer une analyse graphique mais qui contiennent aussi un rapport 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 JVM Il est nécessaire de transmettre l'option -XX: et -XX:+PrintGCTimeStamps avec l'option -verbose:gc. Cette démarche vous permettra d'obtenir des informations 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 Figure 2. Utilisation de la pile par l'application test +PrintGCDetails

24

Linux+ 6/2009

• 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 fragment des logs verbose:gc contenant les informations 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]

Programmation Java, 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 JVM Le Listing 1 présente des exemples de logs verbose:gc. La balise d'ouverture vous informe de l'origine du cycle du garbage collector. 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 (si le garbage collector travaille au même temps que l'application) ou (si le cycle est le résultat de l'appel de la méthode System.gc()). Pour contrôler l'occupation de la pile, nous utiliserons les balises . 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 ) est une utilisation de la pile une fois le cycle terminé. La dernière répétition de la balise 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 garbage collector) a réussi. La balise ApplicationServers-> des outils chargés de présenter les données serverName->Java and Process Manage- collectées sous forme graphique et de créer ment->Process Definition->Java Virtual Ma- un rapport sommaire. Nous recommandons chine->Runtime->Verbose garbage collec- Garbage Collection and Memory Visualizer tion). pour analyser les logs verbose:gc. Cet outil Le temps système de génération des est fourni avec le paquet IBM Support Aslogs verbose:gc dépend en grande partie de sistant. Mis à part la présentation graphique notre application. Dans le cas des systèmes de différents paramètres de la gestion automatique 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. requested_bytes="1016" />

IBM Support Assistant

Figure 3. Les logs verbose:gc de l'application où une fuite de la mémoire a été simulée

www.lpmagazine.org

IBM Support Assistant est un paquet d'outils permettant de diagnostiquer les problèmes relatifs au logiciel WebSphere. Si vous n'utilisez pas ce logiciel (par exemple WebSphere Application Server), il est possible d'opter uniquement pour les outils permettant de diagnostiquer 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 virtuelle Sun constituent une qualité supplémentaire liée à l'utilisation de ce paquet.

25

Programmation Java, problèmes de performance

sert d'un thread individuel pour nettoyer esclaves), dont le nombre est inférieur les zones de deux générations. Il est au nombre de processeurs logiques, possible d'utiliser le collecteur dans les et par le thread maître. Il est évité dans applications qui ne demandent pas une cette stratégie d'effectuer la défragmencourte durée de pause et qui sont pourtation de la pile et la plupart de cycles vues d'une taille relativement petite de la ne comprennent que les étapes mark pile (en dessous de 256 [Mo]). et sweep. optavgpause – l'objectif de cette stratégie • Parallel Collector – collecteur par défaut consiste à minimiser la durée de la pause dans la machine serveur. Pour nettoyer la du garbage collector (même au prix de zone d'objets d'une durée de vie courte, la dégradation du débit). Une partie du le collecteur utiliser les threads paraltravail du garbage collector est effectué lèles, ce qui permet de bénéficier de la dans cette stratégie parallèlement au code puissance des processeurs supplémentaide l'application. Cette stratégie se prête res. Grâce à cette démarche, la durée de • Garbage Collection and Memory Visuatrès bien aux programmes qui nécessila pause est réduite et le débit est amélizer – il permet de diagnostiquer les tent des pauses minimales, provoquées lioré. La zone d'objets d'une durée de vie problèmes relatifs à la gestion automapar le travail du garbage collector. Il plus longue est nettoyée au moyen d'un tique de la mémoire ; est possible d'activer la stratégie optathread individuel (de manière analogi• IBM Thread and Monitor Dump Analyvgpause en transmettant le paramètre que au Serial Collector). Le collecteur zer for Java – il permet de diagnostiquer Xgcpolicy:optthruput lors du démarrage peut être utilisé dans les applications les problèmes relatifs à l'arrêt de la made la machine virtuelle. qui ne demandent pas une courte durée chine virtuelle ; • gencon – cette stratégie traite différemde la pause. ment les objets d'une courte durée de vie • Parallel Compacting Collector – collec• Java Health Center – cet outil permet de se connecter à la machine virtuelle teur utilisant les threads parallèles pour par rapport aux objets d'une durée de vie démarrée et d'obtenir des informations nettoyer la zone de deux générations. plus longue. Un autre collecteur est utisur : le nettoyage (durée de la pause, Les threads parallèles qui nettoient la lisé pour chacun de ces groupes d'objets débit, taille de la pile), les moniteurs utizone d'objets d'une durée de vie plus lon(collecteur qui copie et nettoie la zone lisés par l'application et les statistiques gue permettent d'améliorer le débit (et de d'objets d'une courte durée de vie et colde méthodes effectuées par l'application minimiser la durée pendant laquelle l'aplecteur qui travaille parallèlement avec (fréquence de l'exécution du code d'une parition s'arrêtera). Le collecteur se prête l'apparition et qui nettoie la zone d'objets méthode donnée, fréquence de l'apparitrès bien aux applications où le débit est d'une durée de vie plus longue). Cette tion d'une méthode dans la trace de la le plus important. Pour en bénéficier, il stratégie se prête parfaitement aux applipile des threads). faut transmettre le paramètre -XX:+Usecations de transaction (dans lesquelles la ParallelOldGC lors du démarrage de la plupart d'objets ont une courte durée de Optimisation des paramètres machine virtuelle. vie qui correspond à la durée de l'exédu garbage collector cution de la transaction). Pour activer • Concurrent Mark-Sweep Collector – colLe choix des paramètres appropriés du travail lecteur le plus avancé qui exécute une la stratégie gencon, il faut transmettre du garbage collector s'effectue en trois étapartie du travail parallèlement avec l'aple paramètre -Xgcpolicy:gencon lors du pes. La première étape consiste à sélectionner plication. Cette solution permet de minidémarrage de la machine virtuelle. une taille correcte de la pile : sa taille mini- • subpool – l'algorithme d'allocation de la miser la durée pendant laquelle l'apparimémoire a été optimisé dans cette stratémale et maximale. Ensuite, en fonction des tion s'arrêtera. Le collecteur est destiné gie. Le nettoyage de la pile s'effectue de exigences par rapport à notre application (déaux applications nécessitant la plus courte manière analogique à la stratégie optthrubit maximal ou durée de la pause minimale), durée de la pause possible. Pour l'utiliser, put. Pour activer la stratégie subpool, nous sélectionnons la stratégie appropriée du il faut transmettre le paramètre -XX: il faut transmettre le paramètre -Xgcgarbage collector. +UseConcMarkSweepGC lors du dépolicy:subpool lors du démarrage de la marrage de la machine virtuelle. Stratégies du Garbage machine virtuelle. Collector La dernière étape consiste à sélectionner les La machine virtuelle IBM, version 5.0, vous Dans la machine virtuelle Sun, version 5.0, autres paramètres de gestion de la pile tels propose au choix quatre stratégies optimisées toutes les stratégies utilisent les générations que : taille de toutes les générations (dans le du point de vue des scénarios définis : (dans la machine virtuelle IBM, seule la stra- cas de la stratégie utilisant les générations) et tégie gencon utilise les générations). La stra- seuil d'occupation de la pile (une fois le seuil • optthruput – stratégie par défaut du gar- tégie par défaut dépend du type de la machine dépassé, la pile sera réduite ou augmentée). bage collector. Elle est recommandée où l'application sera lancée. Vous avez les De plus, la machine virtuelle Sun fournit pour les applications où le débit est plus types suivants de collecteurs au choix : des mécanismes permettant d'optimiser important qu'une brève durée de la pauautomatiquement les paramètres du travail se. Le nettoyage de la pile s'effectue par • Serial Collector – collecteur par défaut du garbage collector : durée minimale de la dans la machine client. Le collecteur se pause (option -XX:MaxGCPauseMillis=n) ou les threads parallèles (appelés threads Afin d'utiliser les outils de diagnostic de la machine virtuelle, il faut dans un premier 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. Ensuite, sélectionnez WebSphere Application • Server (par exemple, version 7.0) dans l'arbre et sélectionnez les outils de diagnostic demandés à l'écran suivant. Parmi les outils les plus intéressants se trouvent :

26

Linux+ 6/2009

Programmation Java, 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 paramètres utilisés. La vérification est indispensable avant d'utiliser les paramètres sélectionné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 garbage 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 limites 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 paramè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 paramè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 endessous de la limite inférieure de la période

(40 %), la fréquence des cycles du garbage collector se réduira (nous avons à notre disposition 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 test La 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 utiliserons 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] comprenant 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 boucle à 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 analyserons la fuite mémoire et les arrêts de l'application Java.

Configuration des applications test Avant 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.

menter avec la version 6.0 de la machine virtuelle.

Zone maximale de la pile trop petite Dans 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 performance. De plus, la défragmentation effectué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'application travaillera pendant 4 minutes. Pendant cette période, nous pouvons prendre connaissance 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 effectuer l'analyse, nous optons pour l'outil Garbage Collection and Memory Visualizer [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'installer les outils nécessaires ; nous avons décrit la configuration dans l'encadré IBM Support Assistant). Une fois le paquet IBM Support Assistant lancé, nous sélectionnons Analyze Problem->Garbage Collection and Memory Visualizer dans l'onglet Home et indiquons le fichier généré avec les logs verbose:gc. Afin d'évaluer 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 :

Les variables doivent pointer sur le répertoire d'accueil de la machine virtuelle (la première variable pointe sur la machine virtuelle d'IBM et la seconde – sur la machine virtuelle de Sun). Les exemples ont été tes- • VGC Heap Data–>Heap size. tés sur la machine virtuelle, version 5.0 ; • VGC Heap Data–>Used heap (after nous vous encourageons toutefois à expériglobal collection).

www.lpmagazine.org

27

Programmation Java, problèmes de performance

De plus, il faut apporter les points suivants seulement dans l'environnement de production sur le schéma : en provoquant l'augmentation progressive de l'utilisation de la pile. À un moment, la • VGC Data –> Summary, zone de la pile occupée est tellement grande • VGC Data –> Tunning recommendation, que le garbage collector n'est plus capable • VGC Pause Data –> Pause time. de travailler de manière efficace (ce qui entraîne des cycles longs où l'application ne réLa Figure 2 présente l'occupation de la mé- pond plus aux actions de l'utilisateur). Dans moire par l'application test. Puisque notre le cas du serveur de l'application, nous pouapplication utilise 83 % de la pile (il est vons souvent avoir l'impression que le serpossible de le vérifier d'après les informa- veur s'est soudainement planté (par exemtions récapitulées dans l'onglet Report après ple, au bout de quelques jours de travail). avoir ajouté le rapport VGC Data → Sum- Et la machine virtuelle termine le travail mary), les cycles seront très fréquents, ce avec l'exception java.lang.OutOfMemory qui détériorera la performance de notre ap- Error. plication. Avec la taille maximale de la pile Bien évidemment, l'exception susmenégale à 500 [Mo], le débit ne s'élève qu'à tionnée ne doit pas forcément constituer un 91,5 % (pendant 9 % de la durée de l'exécu- synonyme d'une fuite de la mémoire (il est tion du programme, l'application était donc peut être possible de résoudre le problème arrêtée). en augmentant la taille maximale de la pile). Il est possible d'améliorer la situation Tout incident de ce type dans un environneen augmentant la taille de la pile de manière ment de production doit toutefois être vérià permettre le travail lorsque l'occupation de fié. Augmenter la taille maximale de la pile la pile est inférieure à 70 %. Nous ouvrons peut s'avérer une solution temporaire cadonc le fichier startExample_1.bat pour chant le vrai problème qui réapparaîtra plus l'édition et modifions la taille maximale de la tard. pile à 900 [Mo] (paramètre -Xmx). Nous lançons de nouveau le test et nous vérifions les Symptômes de la fuite résultats (à l'aide de GCMV). Grâce à l'aug- de la mémoire mentation de la taille maximale de la pile, la L'augmentation progressive de l'utilisation de performance de l'application s'est considéra- la pile par l'application, qui mène jusqu'à l'exblement améliorée : seulement 3 % de la durée ception java.langOutOfMemoryError (cette ont été utilisés pour gérer automatiquement exception est générée lorsque la pile n'a plus la mémoire. La Figure 2 présente la taille de suffisamment de mémoire pour y placer un la pile, la zone de la pile utilisée par l'appli- nouvel objet), est un symptôme typique cation une fois le cycle terminé ainsi que la d'une fuite de la mémoire. De plus, le travail durée de la pause. Les points symbolisent les de l'application ne justifie pas l'augmentacycles respectifs. tion observée de l'utilisation de la mémoire (par exemple, cache de l'application). L'apFuites de la mémoire parition de cette exception est très souvent La gestion automatique de la mémoire permet précédée par un travail plus lent de l'applide résoudre la plupart de problèmes qu'un cation provoqué par les cycles fréquents du programmeur rencontrera lors de l'alloca- garbage collector. tion et la désallocation des objets sur une pile. Il est toutefois possible (et dans les ap- Collecter les données plications Java cela arrive très souvent mal- diagnostiques heureusement) que des références à l'objet, Afin de diagnostiquer la fuite de la mémoire, qui ne sera plus utilisé dans la suite du pro- nous pouvons utiliser les logs verbose:gc dégramme, ne sont pas supprimées. Ces réfé- crits dans le chapitre précédent. Ils nous perrences peuvent bloquer la possibilité de dé- mettront de constater l'augmentation progsallouer cette zone. Le fait que la référence ressive de l'utilisation de la mémoire par à un objet donné est supprimée uniquement notre application. Malheureusement, il sera dans certains cas (par exemple, lorsqu'une impossible de déterminer d'après ces logs si erreur de l'application est incorrectement cette augmentation résulte du travail normal traitée par un programmeur qui ne désalloue de l'application (par exemple, l'augmentation pas toutes les ressources utilisées) compli- de la charge générée par les utilisateurs) ou que très souvent la situation. Le problème bien s'il s'agit d'une fuite mémoire classique. n'apparaît pas souvent pendant les tests mais Afin de confirmer une fuite de la mémoire,

28

Linux+ 6/2009

il faut collecter des informations supplémentaires. Pour ce faire, nous utiliserons des clichés mémoire (en anglais heap dump), contenant des informations relatives à tous les objets sur la pile. Le cliché mémoire généré par la machine virtuelle contient des informations 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 transmis à 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 transmettant des paramètres supplémentaires lors du démarrage de la machine virtuelle, en envoyant 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 problè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 approprié à 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).

Programmation Java, problèmes de performance



listes) par notre application. De plus, il est – combinaison des paramètres possible d'écrire nos propres questions qui ci-dessus (nous déconseillons d'utiliser analyseront la pile à la recherche des objets cette option). qui nous intéressent. -agentlib:hprof=heap=dump, format=b

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 système d'exploitation (Jconsole peut être utilisé dans la version 6.0 de Java, Jmap ne fonctionnera en revanche que dans les environnements Linux et Solaris). N'oublions pas que l'exécution du code de notre application s'arrêtera pendant la durée du cliché mémoire (dans le cas des environnements de production, il faut être particuliè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 consiste à répéter le problème avec un des environnements test où la génération des clichés mémoire ne présente aucun risque supplémentaire.

Outils de diagnostic Eclipse Memory Analyzer (MAT) constitue un outil parfait pour analyser les clichés mémoire. Il permet d'analyser les clichés mémoire 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 demande 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 diagnostiquer 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 informations sur l'utilisation des collections (cartes,

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

Analyse de la fuite de la mémoire Afin 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 ajouté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 startExample_2.bat depuis le répertoire Example2-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 combinaison 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 cliché mémoire sera enregistré dans le chemin courant (format du fichier : java_pid. hprof.., où pid est l'id du processus de la machine virtuelle et . est une durée pendant laquelle a été généré le cliché mémoire. Pour analyser le fonctionnement du programme, nous commençons par les logs verbose: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 fichier memoryLeak.log contenant les logs verbose: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 garbage collector (VGC Heap Data –> Used heap (after collection)). Il est également recommandé 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

www.lpmagazine.org

consommation de la mémoire (la mémoire utilisée après la fin du cycle du garbage collector), 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'application (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 ancienne une fois le cycle terminé (le cycle qui supprime les objets de cette zone). L'augmentation 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 marqué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ésultats s'affichent à l'aide de l'option VGC Data –> Tuning recommendation. Une augmentation constante de la consommation 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'histogramme (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 également 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 comprend 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

29

Programmation Java, 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 incorrect de l'application. Nous continuons notre analyse en vérifiant 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 –> Dominator Tree). L'analyse commence par les objets 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 sommets 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'analyse, 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'accumulation dans l'application Java. La suite de l'analyse demande de parcourir le fonctionnement de l'application (en nous basant sur les logs, le code source et la description de l'action effectuée par l'utilisateur) et de décider s'il s'agit d'un comportement correct de l'application (et donc de définir si la mémoire occupée par les objets

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

30

doit être libérée). Les résultats de l'analyse peuvent démontrer une fuite mémoire évidente (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 classe MemoryLeak (objet gcTest) est notre principal suspect. Elle occupe 96,6 % de la pile. L'étape suivante consiste à trouver les points d'accumulation. L'objet gcTest domine quatre 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 accumulé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 comparaison de plusieurs clichés mémoire réalisés à différents moments. D'après la comparaison de ces clichés, nous pouvons vérifier quels objets sont responsables de l'augmentation 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 analyse facilite l'identification de la fuite de la mémoire.

Termes utilisés dans Memory Analyzer

Avant de commencer l'analyse des clichés mémoire, il est recommandé de prendre connaissance 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) – ensemble 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

Linux+ 6/2009

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 classloader. 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 graphe 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 (supprimer 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 cidessus 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 trouve 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 accumulé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.

Programmation Java, problèmes de performance

Arrêt de l'application Java

L'absence des réponses de la part de l'application 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 anglais 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 informations 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'application 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 notre application fait une boucle infinie. Dans le cas contraire, si l'utilisation du processeur est normale, c'est la présence de l'interblocage 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 constitue une forme finale de la famine et arrive lorsque les threads attendent qu'une condition 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. Malheureusement, résoudre le problème de la synchronisation des threads (qui restent bloqués lors de l'accès à une ressource partagée) peut être une tâche plus complexe.

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

Symptômes du blocage de la machine virtuelle Parmi les symptômes du blocage de l'application Java se trouvent : • absence de la réponse de l'application aux demandes de l'utilisateur ;

PUBLICITÉ

www.lpmagazine.org

31

Programmation Java, problèmes de performance





absence d'une activité dans les logs de l'application et sur la sortie et l'entrée standards d'erreurs de la machine virtuelle ; utilisation 100 % du temps processeur par l'application Java.

Collecter des données diagnostiques Afin 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 utilisés par notre application. D'après ce cliché, nous pourrons définir quels moniteurs sont en possession d'un thread donné. Nous pourrons 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 virtuelle. 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 SIGQUIT (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 diagnostic

Afin d'analyser le cliché de threads, nous pouvons nous servir de IBM Thread and Monitor 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-

A propos de l'auteur 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]

32

bre de threads qui se trouvent dans l'état donné. Ensuite, nous pouvons passer à une analyse plus détaillée de chaque thread et moniteur utilisés par l'application.

Diagnostic de l'application Java qui plante Nous effectuerons le diagnostic de l'application Java qui plante sur l'exemple d'une application 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'application 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 dizaines de secondes de travail, nous envoyons le signal SIGBREAK (nous appuyons sur la combinaison de touches [Ctrl+Brk] dans la fenê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 Analyzer 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 (Analysis->Thread Detail). Ensuite, nous pouvons parcourir tous les threads et analyser la trace de la pile du thread, les moniteurs en sa possession 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

Linux+ 6/2009

thread bloquera tous les autres. D'après ces informations, nous pouvons diagnostiquer l'origine 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.

Conclusion Diagnostiquer les problèmes relatifs à la performance n'est pas une simple tâche et nécessite 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 tester les scénarios décrits avec d'autres applications. Générer des clichés dans un environnement 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.

Sur le Net •













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 virtuelle 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.

Formations Java Objis

OBJIS :

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

Objis 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.

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 consulter nos horaires dans le tableau ci-contre. Douglas Mbiandou après 10 années d’expé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.

L’offre est très flexible. Nous avons par exemple mis en place en moins de 24h, une séance de coaching de 2H via Skype pour l’un de nos consultants sur une nouvelle technologie. » Témoignage client : société Océane consulting.

« Tutoriel Objis live » au salon Solutions linux 2010

Dé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 ’Tutoriel 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. Témoignage client : société [email protected] Notez la prestation des formateurs. Obtenez Boris Pouderous, responsable formations [email protected] enfin 10% de réduction sur votre prochaine formation JAVA/J2EE Objis ! (SSII, 220 personnes). Paris « Depuis le début de l’année 2009, nous avons totalement revu notre stratégie du point Tutoriaux Objis Live ! de vue de la formation et nous nous investissons Exclusivité stand Objis (stand B14) : à travers beaucoup pour qu’elle soit à la hauteur de nos des sessions de 30 minutes (15 min demo attentes et ambitions. SOAT accorde une gran- +15 min questions/réponses), l’ensemble des de importance au suivi de ses collaborateurs, formateurs Objis permettront aux novices c’est pourquoi nous nous sommes tournés vers comme aux confirmés de monter en compéObjis qui a su nous proposer une offre corres- tences Java/j2ee et d’améliorer leur culture pondant à nos besoins, de part sa souplesse et la générale sur les frameworks java/jee du moréactivité de Douglas MBIANDOU, formateur ment. Rendez-vous les 16,17,18 mars 2010 , et co-fondateur d’Objis. Nous avons en amont paris portes de Versailles au salon solutions pu apprécier la qualité de ses formations au linux 2010, dont nous sommes sponsor.

cours de sessions collectives dans nos locaux : il a su remporter l’unanimité auprès des collaborateurs formés de part son dynamisme et l’interactivité qu’il sait instaurer. Afin de répondre aux attentes de nos collaborateurs et clients, nous avons mis en place des sessions de formation en cours du soir dont le format a été spécialement adapté avec notamment 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.

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 linux 2010 (15, 16 , 17 mars 2010 à Paris Porte de Versailles). Ojis France 425 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

www.lpmagazine.org

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 première application GWT • 14h30 : Tutoriel Spring : Injection de dépendances • 15h : Tutoriel Hibernate : votre première application Hibernate • 15h30 : Tutoriel JBoss : Installation 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

33

Programmation RCP

Développement d'application RCP Pascal Barbier

[email protected]

La 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.

34

L

e projet Eclipse est né au début du siècle chez IBM qui voulait réécrire en Java son environnement de développement multi-langage Visual 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éveloppement. En parallèle, sa conception ultra modulaire a permis de dépasser le cadre étroit des outils de développement et d’en faire la base de développements d’applications 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 mathématiques), uDig (un SIG : système d'information géographique), 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

Linux+ 6/2009

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’extension 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 features définissent également une méthode de mise à jour automatique ou semi automatique par l’intermédiaire de sites Internet.

Cet article explique... • • •

L'architecture de la plateforme Eclipse. L'organisation d'une application RCP. Le processus de développement d'une application portable basée sur RCP.

Programmation RCP

Figure 1. Architecture de la plateforme Eclipse

L’arrivée de RCP (Rich Client Plateform) 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 plateforme Eclipse et en même temps de la performance des librairies graphiques SWT et JFace qui ont été incorporées sous forme de plugins. À ces avantages, on doit ajouter é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 RCP

En fait, au départ, RCP n’est que la réduction de l’IDE Eclipse auquel on avait ôté les plugins spécifiques au développement (compilateurs, débuggers etc.). Les applications RCP sont constituées d’une part du framework RCP (Core runtime, SWT et JFace) et d’autre part d’un jeu de plugins, souvent assemblés dans une ou plusieurs features. Chaque plugin est un module binaire (un jar) qui offre des points d’extension (pour permettre à d’autres plugins de se connecter) et qui utilise les points d’extension 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'installation et des mises à jour. En plus du runtime qui fournit la logistique 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 librairie 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 graphiques de base, ce qui la rend plus performante. 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 dessine lui-même ces widgets graphiques. Pour résoudre ces difficultés, SWT est une librairie 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 composants standard très utiles tels que le système Install (gestion du déploiement, des dépendances et des mises à jour), le système d’aide et un système de propriétés et de configuration centralisé. D’autres composants 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 constituée d’un programme principal, d’un jeu d’une ou plusieurs perspectives qui organisent l’apparence d’une série de Vues (Views). Un dernier composant essentiel restera caché pour l’utilisateur : le Workbench 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é remplacé par un nouveau format de fichier : MANIFEST.MF. L’ancien format reste toutefois 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’Application qui est l’ensemble logiciel exécutable constitué d’une fonction main et le produit qui est l’ensemble composé de l’application et des ressources associées (icônes, fichiers de configuration ou de déploiement etc.).

Mise en place de la plateforme de développement

Pour développer avec le framework RCP, il est indispensable d’installer confortablement son environnement de travail. En effet, la plateforme Eclipse sera utilisée à la fois comme cadre de base de l’outil de développement et comme cadre de l’application développée. Il est donc vivement conseillé d’installer séparément ces deux environnements (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’environnement Eclipse for RCP/Plugin deve-

Ce qu'il faut savoir... • •

La syntaxe de Java. Les grands principes des interfaces homme-machine (IHM) graphiques.

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

www.lpmagazine.org

35

Programmation RCP

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 Development 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 exemple on développe avec Galileo mais la cible reste en version Europa : 3.2 pour être compatible 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 multiplateforme (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 recherche avec le moteur de recherche du site. Lorsque vous cherchez, indiquez le nom du

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

36

Linux+ 6/2009

package ainsi que le numéro de version. Une fois chargés ces trois projets, on peut se lancer pour une première application. Démarrez Eclipse, créez un nouveau projet Plugin project. Pour le nom, il est de coutume d’utiliser la convention de nommage 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.lpmag azine.tutoriel.appli1. Ainsi, le plugin sera facile à retrouver parmi ses nombreux confrères. Dans l’assistant de création de nouveau 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 modèle d’application. Cela fournit un point de départ pour les débutants. Choisissez l’application Hello. Enfin, cochez la case Add

Programmation RCP

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 commande 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’apparaî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’étendre 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.ExitHandler. 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. AbstractHandler 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’endroit 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 exemple label : Fichier, Id : menuFichier). Enfin, sur ce menu, encore avec le menu contextuel, ajoutons une commande (new/ command). Changeons l’identité de la commande 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 librement le texte (label) et le message d’aide (tooltip). Voilà, notre application est prête à faire le grand saut. Dans l’onglet overview de l’éditeur de manifeste, cliquez le lien launch an

eclipse application pour démarrer votre première application.

Créer une vue

Les applications RCP sont constituées de vues qui sont disposées dans l’interface utilisateur. La disposition est mémorisée dans une perspective. L’application peut comporter une ou plusieurs perspectives. Par exemple, Eclipse IDE propose une perspective Java, une perspective debug, une perspective resource etc. Notre application, dans sa première version, 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;       } }

www.lpmagazine.org

37

Programmation RCP

Ressources sur Internet •







http://eclipse.org/articles/ArticleRCP-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).

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 widgets SWT plus loin). Le résultat est dans le listing 2. Si le texte ne s’affiche pas, ce n'est pas grave. Effectivement, nous avons créé une vue mais nous n’avons nullement indiqué quand et comment l’utiliser. Il nous faut donc maintenant 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 SWT

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

38

des objets d’interface utilisateur graphique pour Java. Elle est née avec Java. Le principal 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 reproduit 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 quantité 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’interfacent avec une librairie statique Java swt.jar) qui harmonise l’interface avec les applications. 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 central : 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’application 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 librairie SWT sont essentiellement des gestionnaires de Widgets (Label, Button, List, Combo, Menu, MenuItem, ToolBar, ToolItem, CollBar, CoolItem, ProgressBar, Scale, Slider, TabFolder, TabItem, Table, TableColumn, TableItem, Tree, TreeItem et Canvas). Des outils permettent des opérations de base (classes GC, Image, Color et Font). Enfin les classes Composite et Group permettent de gérer des ensembles. La gestion des événements de l’in-

Linux+ 6/2009

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 application RCP prenons un exemple simple. Ajoutons une seconde commande dans l’application en définissant une nouvelle extension du point d’extensionorg.eclipse.ui.comman ds. 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.commands.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.

Conclusion

Comme vous avez pu le constater, la réalisation de ce type d’applications nécessite une connaissance précise de l’outil et des interfaces de programmation des plugins. Cette connaissance demande un important investissement 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épendances).

À propos de l'auteur 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 personnels techniques dans les grandes entreprises 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.

Programmation Programmation C++

Programmation générique C++ Robert Nowak

[email protected]

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.

40

L

es modèles (templates) disponibles dans le langage C++ permettent d'implémenter les Cet article explique... traits génériques, autrement dit, indépendants des types, des algorithmes et des structures • Comment sélectionner un algorithme ou une valeur pendant la compilation ; de données. Un exemple de modèle swap, présenté ci• Le terme des classes de traits. 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 mémoire et temps ; le seul inconvénient est que la compilation dure plus longtemps mais cela ne pose pas de d'affectation. problème en général. La spécialisation est une version de modèle utilisée template void swap(T& a, T& b) { pour la génération du code à la place de la version géT tmp = a; nérale lorsque des types appropriés se trouveront dans a = b; les paramètres. Le modèle swap, présenté cib = tmp; 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éLors de la compilation, le modèle est concrétisé, autre- mentation), il suffit de modifier ces pointeurs si nous ment dit, le code est généré pour les types appropriés. voulons modifier la valeur des objets. Cette démarche Le code généré d'après les modèles est identique au code est plus performante que le remplacement par un objet écrit à la main, il est également dépourvu des clichés temporaire.

Linux+ 6/2009

Programmation Programmation C++

utilise les classes supplémentaires de traits. par les bibliothèques boost (type_traits, call_ Le Listing 1 présente les classes numeric_ traits, function_types). traits qui sont des classes de traits. Elles fourLa fonction fastCopy est un exemple nissent une constante min_value, dont la va- d'utilisation de la classe de traits has_trivial_ • Comment écrire de simples leur dépend du paramètre du modèle, à l'aide assign, disponible dans l'ensemble analysé. programmes en C++ ; de la spécialisation. La fonction find_max Le Listing 2 présente cette fonction qui co• Qu'est-ce que des modèles trouve la valeur maximale dans le tableau. pie les tableaux à l'aide de std::memcpy (templates). Elle initie la variable current_max à l'aide des (copie des octets) si le type des éléments du struct Foo { //exemple de classe classes de traits et donc des valeurs différen- tableau permet d'effectuer l'opération de coqui cache l'implémentation tes pour les types différents. pie ou bien à l'aide de l'algorithme std::copy struct Impl; //classe Les classes de traits sont des types dont s'il faut appeler l'opérateur d'affectation interne stocke les composants la tâche principale consiste à stocker des pour chaque objet. La classe de traits has_ Impl* pImpl_; //le pointeur informations sur d'autres types. Ce méca- trivial_assign analyse si le type possède un est un composant public pour nisme permet d'ordonner l'accès aux cons- opérateur trivial d'affectation, autrement simplifier le modèle tantes dont la signification est similaire. La dit, si l'affectation pour le type T est équiva}; bibliothèque standard fournit les classes de lente à la copie de la mémoire occupée par template void swap(Foo& traits std::numeric_limits qui définissent les l'objet, si le type de has_trivial_assign a, Foo& b) { //spécialisation valeurs limites pour les types numériques in- c'est true_type et si la valeur de has_tridu modèle swap tégrés. Afin de charger la valeur d'une telle vial_assign::value est true. Dans le Foo::Impl* tmp = a.pImpl_; constante, nous écrivons numeric_limits cas contraire, la classe de traits hérite de fal//il modifie les pointeurs ::min() au lieu de __DBL_MIN__ se_type et la valeur du composant value est et non les objets entiers et numeric_limits::min() au lieu de false. a.pImpl_ = b.pImpl_; INT_MIN et numeric_limits::max() au La fonction fastCopy utilise un quatrièb.pImpl_ = tmp; lieu de INT_MAX, etc. me argument, créé lors de la compilation } Choix d'un algorithme lors de la com- d'après les informations sur le type. Sa vapilation leur n'est pas importante. Le type permet en Démarrage rapide La bibliothèque standard propose plusie- revanche de sélectionner une fonction de Afin de lancer les solutions présentées, il faut urs autres classes de traits et le nouveau stan- copie appropriée. disposer d'un accès à n'importe quel compila- dard C++200x comprendra plusieurs dizai Le modèle getId est un autre exemple teur C++ et éditeur texte. Certains exemples nes d'autres classes proposées actuellement d'utilisation des classes de traits. Il fournit supposent un accès aux bibliothèques boost. Listing 1. Initiation d'une variable à l'aide des classes de traits Pour les lancer, il faut installer ces bibliothèques (version 1.36 ou supérieure) et utiliser le compilateur supporté officiellement, autretemplate struct number_traits { ment dit, msvc 7.1 ou supérieur, gcc g++ 3.4 static const int min_value = 0; ou supérieur, Intell C++ 8.1 ou supérieur, //pour n'importe quel type, Sun Studio 12 ou bien Darvin/GNU C++ 4.x. //la valeur de la constante s'élève à zéro Les Listings présentés n'incluent pas d'ajout }; des en-têtes appropriés et de partage des estemplate struct number_traits { paces de noms. Les sources complètes sont //spécialisation pour le type int jointes au magazine. static const int min_value = INT_MIN; La programmation générique en C++ //il définit une constante appropriée utilise un sous-ensemble de structures de }; langage car les êtres que nous manipulons template struct number_traits { doivent avoir une valeur définie, connue lors // spécialisation pour le type long de la compilation. Il est impossible d'utiliser static const long min_value = LONG_MIN; les variables, d'effectuer des itérations (de }; créer des boucles) ni d'utiliser les instructions / /il trouve la valeur maximale dans le tableau conditionnelles. À la place, nous utilisons les template find_max(const T* first, const T* last) { techniques qui donnent des résultats équivaT current_max = number_traits::min_value; lents. La suite de l'article présente la solution //il utilise les classes de traits permettant de sélectionner un algorithme, for( ;first != last; ++first) un type ou une constante, en fonction des if( current_max < *first ) paramètres du modèle, ce qui correspond aux current_max = *first; instructions conditionnelles dans la programreturn current_max; mation générique. } La technique présentée pour sélectionner un algorithme ou une valeur appropriés

Ce qu'il faut savoir...

www.lpmagazine.org

41

Programmation Programmation C++

Listing 2. Utilisation des classes de traits pour sélectionner l'algorithme de copie template //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 //copier à l'aide de std::copy

void doFastCopy(const T* first, const T* last, T* result, false_type) { std::copy( first, last, result );

}

template //l'algorithme utilise les classes de traits

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

doFastCopy(first, last, result, has_trivial_assign() );

//il crée un nouvel argument }

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

class HasId { //la classe qui fournit l'identifiant public:

HasId(long id) : id_(id)

virtual ~HasId() { }

struct ClassWithId : public HasId

{ }

ClassWithId(long id) : HasId(id)

long getId() const { return id_; }

{ }

long id_;

struct ClassWithoutId { };

};

template long doGetId(const T& t, true_type) return t.getId();

//le type sans identifiant {

}

template long doGetId(const T& t, false_type) { return reinterpret\_cast(&t);

à 1 ClassWithoutId c2; //l'objet sans identifiant

// il retourne l'adresse comme valeur long

getId(c1);

}

template long getId(const T& t) {

// il retourne la valeur 1

//il utilise les classes de traits return getIdInternal(t, is_base_of() );

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

template 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 call_traits { //spécialisation pour les pointeurs typedef T param_type; //il est recommandé de transmettre les pointeurs via la valeur };

42

ClassWithId c1(1); //l'objet avec l'identifiant égal

//il retourne l'identifiant interne

}

{

//le type avec son propre identifiant

private: };

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 est true_type, sinon, le type de is_base_ of est false_type. Cette classe 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'obtenir soit l'adresse soit le résultat de l'appel de la méthode getId.

Linux+ 6/2009

getId(c2); // il retourne l'adresse de l'objet c2

Optimisation à l'aide des classes de traits. Les classes de traits peuvent être employées pour optimiser la transmission des arguments. 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 copies 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, fournie par les bibliothèques boost [1], définit notamment la manière optimale pour transmettre les arguments à l'objet du type donné.

Programmation Programmation C++

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 protemplate T complicateCalculation( T input ) { //il appelle mouvoir les nombres réels proposés par les seulement une autre fonction bibliothèques boost. return complicateCalculationImpl(typename promote::type(input) ); Le même code de la fonction complica} teCalculationImpl sera utilisé pour les types template T complicateCalculationImpl( T input ) { représentant les nombres réels qu'il est pos//le code qui calcule la valeur sible de convertir en double, car le type qui // le même code binaire sera utilisé pour les types float et double 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 difCette classe de traits définit, mis à part les l'argument sera alors transmis via la valeur férents dans la solution présentée, le même constantes, des types auxiliaires (le Lis- aux types intégrés (ainsi qu'aux pointeurs code binaire sera utilisé. Il se servira des ting 4 présente cette situation), en permet- et aux références) ou via la référence cons- objets du type qui est le mieux supporté par tant de transmettre les paramètres de ma- tante pour les types d'utilisateur. la plate-forme donnée. nière optimale. Si int est un paramètre de ce Les classes de traits peuvent être utilimodèle, le composant param_type défi- sées pour réduire la taille du code résultant Conclusion nira le type int (car les types intégrés sont ou bien pour optimiser la durée de son Les techniques employées dans la programtransmis via la valeur), si Foo est un para- exécution. Un code est généré pour chaque mation générique sont différentes de celles mètre de ce modèle (exemple du type de type pour lequel le modèle a été utilisé. employées dans la programmation orientée l'utilisateur), param_type fournira le type Ce code est compilé et ajouté à la version objets et structurelle. Leur connaissance perconst Foo&. binaire de l'application ou de la bibliothè- met de réduire la taille du code source et augIl est possible de définir l'en-tête de notre que créée. Afin de réduire la taille du code menter ainsi sa lisibilité sans impact négatif fonction de manière suivante : résultant, les mêmes solutions de modèles sur la performance. Les modèles permettent sont employées pour les types différents de créer des solutions générales. Pour cette template s'il est autorisé d'effectuer des conversions raison, cette technique domine parmi les bibvoid f(typename call_traits:: entre ces types. Un autre avantage de cette liothèques. param_type value) {} solution se trouve dans la possibilité de Listing 5. Utilisation des classes de traits promote proposées par boost::type_traits

Club .PRO Neoweb

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

Club .PRO

Oblady

Oblady 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

KerniX

KerniX 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 Industrie BINARYSEC SAS

BinarySEC édite un logiciel de protection intelligente des applications et sites Web. Ce module Apache s’installe en 15 minutes et bloque 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. www.lpmagazine.org

Centre 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 communication Wireless, informatique industrielle. Expertises, conseil, formations, montage de projets et actions collaboratives. http://www.cresitt.com et http://www.doc-en-ligne.fr

43

Sécurité Sécurité avec Honeypot

Mise en place d’un pot de miel avec Honeyd Régis Senet

[email protected]

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.

44

U

n honeypot (en français pot de miel) est un ordinateur ou un programme volontairement 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 administrateurs 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

Linux+ 6/2009

Cet article explique... L’utilisation d’honeypot dans un environnement de production.

règle générale, d'entrer de la même manière dans l’ensemble des systèmes. Pour ce qui est de la collecte d’information 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’Honeyd

Honeyd 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-

Ce qu'il faut savoir... Connaissances en système d’exploitation UNIX/Linux.

Sécurité Sécurité avec Honeypot

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 :

Figure 1. Vérification des droits utilisateurs

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 projet

Aprè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'être 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 nombreuses entreprises l’utilisant à des fins commerciales en particulier pour tout ce qui est en rapport avec l’analyse d’outils malveillants tels que les malwares/virus.

Installation et configuration d’Honeyd

Les exemples illustrant cet article s'appuient sur : •





Pour la distribution : 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 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ème

• • • • • • • •

/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

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

À 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 :

date && apt-get upgrade.

/var/log/honeypot:/bin/false

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.

nocrash:~# grep honeyd /etc/passwd /etc/group /etc/passwd :honeyd :x:108:116:Honeyd daemon,,,: /etc/group :honeyd:x:116:

Configuration d’Honeyd

Une 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. Installation d’Honeyd Avant de modifier les configurations, il L’installation d’Honeyd ne demande aucune est nécessaire d'autoriser l’utilisateur honeyd installation préalable, il est donc possible de à lire et écrire dans les fichiers concernés : directement passer à la phase d’installation via nocrash:~# chown -R honeyd:honeyd / le gestionnaire de paquets Debian : nocrash: etc/honeypot/. ~# apt-get install honeyd. Vous constatez ici que les modifications L’installation d’Honeyd va également de propriétaire et de groupe ont été réalisées installer les dépendances suivantes : avec succès. Reprenons le fichier de configuration ini• libpcap0.8 tial (/etc/honeypot/honeyd.conf) afin de partir • rrdtool d’une base existante et expliquer les étapes • librrd4 nécessaires à la création de service virtuel. • libdumbnetl Les lignes suivantes permettent de déclarer le • farpd réseau virtuel utilisé en exemple : • 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 portative qui fournit une interface simplifiée pour

www.lpmagazine.org

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

45

Sécurité Sécurité avec Honeypot

Le réseau virtuel précédemment créé fonctionnera 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 service

Entrons maintenant dans le vif du sujet avec Figure 3. Code du serveur FTP la simulation de service, c'est-à-dire le but premier d’Honeyd. set personality

# Création d'un profil template create template

# For a complex IIS server

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

add template tcp port 21

bind

set template personality "Microsoft Windows XP Professional SP1"

.

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 leurrer les possibles attaquants de votre système ? 53 La réponse est NON. En effet, il est à présent nécessaire de simuler le fonctionnement du service prétendument existant. Les services sont de plusieurs types. Le fichier de configuration précédemreset ment édité montre la mise en place de plusieurs services : un serveur web, un serveur SSH ainsi qu’un service Telnet.

"/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 proxy 141.211.92.141:53 add template tcp port 80 "sh /usr/share/honeyd/scripts/ win32/web.sh" set template default tcp action # 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 :

add template tcp port 21 "/usr/ share/honeyd/scripts/ftp.sh " add template tcp port 22 "/usr/ share/honeyd/scripts/test.sh

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 service 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’exploitation à cet emplacement : /usr/share/honeyd/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. Beaucoup de scripts permettant d’émuler de nombreux services sont disponibles sur le site officiel : 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.

$ipsrc $dport" add template tcp port 23 proxy

nocrash:~# chmod 755 /usr/share/

$ipsrc:23add template udp port

honeyd/scripts/ftp.sh

53 proxy 141.211.92.141:53 add template tcp port 80 "sh /usr/share/honeyd/scripts/

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

win32/web.sh" set personality set open 10.3.0.12 Connected to 10.3.0.12.

fopen("/var/log/honeypot/

220 debian. FTP server

honeyd.log"): Permission denied

(Version wu-2.6.0(5) lundi

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.

nobody 3684

0.0

Ss

0:00 /usr/bin/honeyd

0.1

4636

2616 ?

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.

Conclusion

D’importants honeypots sont réalisables grâce à Honeyd car il est à faible interaction et -l /var/log/honeypot/honeyd.log est très complet bien qu’assez jeune par rap-p /etc/honeypot/nmap.prints port à ses concurrents. Il a l’avantage d’être -a /etc/honeypot/nmap.assoc particulièrement souple grâce à son système -0 /etc/honeypot/pf.os de scripts. Il n’est pas forcément conseillé -x /etc/honeypot/xprobe2.conf d’utiliser Honeyd sur un serveur en produc-u 108 -g 116 --disable-webserver tion ayant d’autres tâches à accomplir. En ef-i eth0 10.0.0.0/8 fet, il est préférable de placer votre honeypot debian:/var/log# sur un serveur distinct qui lui est uniquement dédié pour ainsi réaliser le maximum d’anaDans le fichier de configuration, il y a cette lyses sur les résultats récupérables. ligne : 19:17

-f /etc/honeypot/honeyd.conf

-l /var/

log/honeypot/honeyd.log -f /etc/honeypot/honeyd.conf

• •

honeyd[3536]: honeyd_logstart:

nocrash:~# ps aux | grep honeyd

-p /etc/

honeypot/nmap.prints

Sur le réseau

-

-d

La commande suivante permet donc de lancer 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- bind 10.3.1.12 template preintes d’OS présentes dans le fichier /etc/ honeypot/nmap.prints (option -p) et avec l’ad- Nos faux services répondront donc à l’adresresse IP 10.0.0.0/8 (option -i) comme interface lo. se 10.3.1.12. Pour vérifier le bon fonctionnement d’Honeyd, lançons un nmap sur l’adresnocrash:~# honeyd se 10.3.1.12. -p /etc/honeypot/nmap.prints -l /var/log/honeypot/honeypot.log

nocrash:~# nmap 10.3.0.12

-f /etc/honeypot/honeyd.conf

Starting Nmap 4.62

-i lo 10.0.0.0/8

(http://nmap.org )

-d

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

at 2009-06-01 20:16 CEST

Niels Provos

Interesting ports on 10.3.0.12:

www.lpmagazine.org

A propos de l'auteur... 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

47

Sécurité ProFTPd, MySQL, TLS

ProFTPd, MySQL, TLS la sécurité des tranferts Régis SENET

[email protected]

Le 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.

B

ien que de nos jours, plus de 90% du trafic utilisé sur Internet corresponde au protocole 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 ancien 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ème

Au 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

48

Linux+ 6/2009

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 :

Cet article explique... • • •

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

Sécurité ProFTPd, MySQL, TLS

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 TLS

ProFTPd 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éanmoins, bien que wu-ftpd fut le serveur le plus utilisé pour ses performances, il lui manque de nombreuses caractéristiques pour concurrencer 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 nouveauté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éveloppeurs des modules s’ajoutant à ProFTPd ou bien encore Andrew Houghton, créateur du module permettant à ProFTPd de communiquer avec les bases de données MySQL. Actuellement à sa version stable depuis le 30 juin 2009, la version 1.3.2a, ProFTPd dispose également d’une version avancée la version 1.3.3.rc1. Son architecture est modulaire, ce qui a permis d'écrire des extensions pour le support de la cryptographie SSL/TLS (protocole FTPS) et l'extension de l'authentification via des bases RADIUS, LDAP ou SQL. MySQL est un gestionnaire de base de donné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 version 5.1.36 le 1er Juillet 2009 alors qu’une autre version avec de nombreux changements est en développement : la version 6.0.11. TLS ou Transport Layer Security, anciennement nommé Secure Socket Layer (SSL), est un protocole de sécurisation des échanges

Figure 1. Configuration de ProFTPd

sur Internet. (Cf. Wikipédia). Nous allons nous Nous ne rentrerons pas en détail dans la sécuservir de cette sécurisation supplémentaire lors risation de la base de données MySQL, mais vous devez garder à l’idée que celle-ci est du transfert de nos données extrêmement importante pour la stabilité du Mise en place de la base de système. Il vous est possible de regarder le données MySQL lien suivant pour ce qui est de la sécurisation Comme nous avons pu le dire précédemment, la de vos bases de données : http://www.regisbase de données MySQL va permettre de stoc- senet.fr/blog/article.php?id_article=40. ker l’ensemble des comptes utilisateurs pouvant se connecter au serveur FTP. Nous allons donc Création des tables installer la base de données, la sécuriser ainsi Il est à présent nécessaire de créer la base de données en rapport avec le serveur FTP ainsi que créer les tables nécessaires. que deux tables contenant les utilisateurs et Installation de MySQL les groupes. Pour cela, nous allons utiliser les Avant de parler de configuration de la base de commandes suivantes : données ainsi que des politiques de sécurité à mettre en place, il est bien évidemment né- CREATE DATABASE `proftpd`; USE proftpd; cessaire d’installer la base de données. nocrash:~# apt-get install mysqlserver

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

Ce qu'il faut savoir... Connaissance en système d’exploitation UNIX/Linux et des bases de données.

Figure 2. Connexion avec Filezilla

www.lpmagazine.org

49

Sécurité ProFTPd, MySQL, TLS

Création de la table ftpuser (cf. Lisitng 2). Il est à présent normalement possible de voir Afin d’intégrer l’ensemble des tables nos deux table: ftpgroup et ftpuser. sans avoir à les réécrire, il est possible d’utiliPar la suite, il est nécessaire de créer un ser la technique suivante : utilisateur (proftpd) avec un mot de passe (password) qui a seulement les droits de lire • Créer un fichier nommé database.sql les données de la base proftpd. dans votre /home et y mettre l’ensemble des ordres SQL précédemment vus. GRANT USAGE ON proftpd.* TO • Insérer l’ensemble des commandes grâce [email protected]'localhost' IDENTIFIED BY ‘password’ WITH GRANT à la commande suivante :

ftp.de.debian.org/debian/pool/main/ p/proftpd-dfsg/proftpd-modmysql_1.3.1-17lenny2_i386.deb nocrash:~# dpkg -i proftpdmod-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 nocrash:~# mysql -u root -p < / OPTION; ql permet de pouvoir faire interagir le serveur home/nocrash/database.sql FTP avec la base de données MySQL pour la Enter password ProFTPd gestion des utilisateurs • Vérifier la présence des tables en vous L’installation de ProFTPd va simplement se Lors de l’installation de proftpd, il est connectant à la base de données : réaliser grâce au gestionnaire de paquets pro- nécessaire de choisir Indépendamment lors du nocrash:~# mysql -u root -p pre à Debian, le gestionnaire APT. choix du lancement de ProFTPd (cf. Figure 1).

Enter password:



[…]

nocrash:~# apt-get install proftpd



mysql > use proftpd;

openssl



mysql > show tables;

nocrash:~# wget http://

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

Configuration de base de ProFTPd

Nous allons commencer dans un premier temps par réaliser les configurations basiques du serveur FTP. L’ensemble des configurations se réalise dans un même et unique fichier, le fichier /etc/proftpd/proftpd.conf.

-- Structure de la table `ftpgroup` --

nocrash:~# vi /etc/proftpd/

CREATE TABLE `ftpgroup` (

proftpd.conf

`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';

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

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

off

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

-CREATE TABLE IF NOT EXISTS `ftpuser` (

ServerName "Mon serveur FTP"

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

ServerType standalone

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

ServerIdent on "Bienvenue sur mon

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

ftp. Veuillez-vous identifier"

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

DeferWelcome on

`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',

La directive DeferWelcome à on permet de ne pas donner d’information précise sur le serveur. ServerType quant à elle permet de spécifier le type de lancement de ProFTPd.

`accessed` datetime NOT NULL default '0000-00-00 00:00:00', `dl_bytes` bigint(20) NOT NULL,

Port 21

`dl_count` bigint(20) NOT NULL,

Umask 022

`ul_bytes` bigint(20) NOT NULL,

MaxInstances 30

`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

50

COMMENT='Table des utilisateurs ProFTPd' ;

Linux+ 6/2009

022

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.

Sécurité ProFTPd, MySQL, TLS

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.

Lisitng 3. Restriction des accès aux utilisateurs anonymes



Les balises , permettent quant à elle d’avoir une configuration différente en fonction des répertoires. Les dernières balises, les balises quant à elles sont très libres d’utilisation. 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

MaxClients 10 DenyAll 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 mysqld à l’interface d’administration des utilisanocrash:~# /etc/init.d/ nocrash:~# apt-get teurs ainsi que des groupes sous ProFTPd proftpd start install apache2 (cf Figure 5). L’écran donnant toutes les Starting ftp server : proftpd. informations sur les utilisateurs, vous pouUne fois le serveur Apache présent sur votre vez consulter en Figure 6. Pour voir l’interConnexion machine, il est nécessaire de télécharger l’in- face permettant la création des utilisateurs Afin de nous connecter à notre serveur FTP terface d’administration : (cf. Figure 7). (cf. Figure 2) à distance, nous allons utiliser Conclusion l’un des clients le plus connu actuellement : nocrash:~# cd /var/www/ nocrash:~# wget http://www.rt74.eu/ La mise en place d’un serveur FTP convenaFileZilla public/dl/proftpdadmin.tar.gz blement sécurisé et stable ne se fait pas en Au niveau de la configuration, il est quelques clics, il est réellement nécessaire nécessaire de choisir FTPES dans le type nocrash:~# tar xzf de prendre son temps afin d’avoir une confide serveur afin qu’il corresponde à un proftpdadmin.tar.gz guration optimale. serveur FTP avec encryptage des données nocrash:~# rm -rf proftpdadmin.tar.gz La suivi de ce petit article vous permetvia TLS. tra donc d’avoir un bon début en matière de Lors de la première connexion, il vous sera demandé d’accepter le certificat avant Avant de vous connecter à l’interface d’ad- serveur FTP sécurisé et stable. Il ne vous resla connexion (cf. Figure 3). Et voici le ré- ministration de ProFTPd, il est nécessaire te plus qu’à définir les utilisateurs, les droits de ces derniers ainsi que d’autres options suivant vos besoins. ProFTPd est un serveur FTP complet, les seules limites sont celles de votre imagination. mysql start

Starting MySQL database server :

A propos de l'auteur Régis SENET, actuellement stagiaire chez JA-PSI est étudiant en quatrième année à l’école Supérieure 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

Figure 7. Ajout d'un utilisateur

54

Linux+ 6/2009

Sécurité Chiffrement avec EncFS

Chiffrement

des données avec EncFS Régis Senet

[email protected]

Le 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.

56

L

e 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 diffé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 facilement compréhensible du fait que l’on peut comprendre que ces données sont importantes voire vitales pour une entreprise.

Linux+ 6/2009

En effet, depuis l’avènement des ordinateurs portables, de plus en plus de données extrêmement confidentielles 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 ordinateurs 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 financières ou alors des tentatives d’attaque à l’encontre de l’entreprise.

Cet article explique... • •

L’intérêt du chiffrement des données d’entreprise, Le chiffrement des données avec EncFS.

Sécurité Chiffrement avec EncFS

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 utilisateur, il convient donc quasiment à l’ensemble des utilisateurs.

Qu’est ce qu’EncFS

Le 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 constamment mis à jour alors que de nouvelles mises à jour, bien que minimes, apparaissent. La toute dernière en date du 16 mars 2009 fixe un mini bug dans l’application ellemême. EncFS a la chance d'être sous licence GPL lui permettant une évolution très rapide. Cette rapide évolution s’explique également grâce aux nombreux utilisateurs renvoyant 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’EncFS

Au 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).

Mise à jour du système

Installation de Fuse

nocrash:~# apt-get

nocrash:~# apt-get

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 :

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 système d’exploitation.

Fuse ou encore Filesystem in UserSpacE est un logiciel libre permettant à un utilisateur sans privilèges d’accéder à un système de fichiers sans qu’il soit nécessaire de modifier 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 :

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

Ce qu'il faut savoir... Connaissance en système d’exploitation UNIX/Linux.

entrez "p" pour le mode paranoïaque préconfiguré, toute autre entrée ou une ligne vide sélectionnera le mode normal. ?> x

www.lpmagazine.org

57

Sécurité Chiffrement avec EncFS

Voici les commandes à utiliser pour l’installa- dentiels. Pour cela, nous allons installer le tion via les sources : programme EncFS. Encore une fois, nous allons réaliser cela grâce au gestionnaire de panocrash:~# tar zxvf fusequets APT. 2.4.1.tar.gz nocrash:~# cd fuse-2.4.1 nocrash:~# ./configure nocrash:~# make && make ins

Configuration pour les versions Debian non récente

Pour 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 correctement configuré et il est nécessaire de modifier le propriétaire grâce à la commande suivante : nocrash:~# chgrp fuse /dev/fuse

Quelques vérifications

Il 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 utilisateur est bien présent dans le groupe fuse grâce à la commande groups :

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élecnocrash:~# apt-get install encfs tionné. Les algorithmes suivants sont disponiAfin d’avoir un exemple pratique, nous bles : allons chiffrer l’ensemble de nos données présentes dans l’un de nos dossiers. Le ré- AES : 16 byte block cipher pertoire de stockage des données chif- -- supporte des tailles de clé de 128 à 256 bits frées sera /home/nocrash/.protected/ et le -supporte des blocs répertoire de travail (présentant l’ensemde 64 à 4096 octets ble des données en clair après authentifi2. Blowfish : Cryptage cation) sera /home/nocrash/data/. (cf. Lisen bloc de 8 octets ting 2). -supporte des tailles NB : Il est important de donner des de clé de 128 à 256 bits chemins complets à EncFS et non pas des -supporte des blocs chemins relatifs tels que ~/.data/ qu’il faude 64 à 4096 octets dra remplacer par /home/nocrash/data/. Entrez le numéro correspondant Il n’est pas nécessaire de se soucier de à votre choix : 1 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 L’écran suivant nous donne la possibilité de les données en clair seront automatiquement choisir l’algorithme de chiffrement que nous allons utiliser pour protéger nos données. créés. Nous allons utiliser le mode de configu- L’algorithme AES fut choisi du fait de sa ration expert afin d’être entièrement mai- robustesse. tre de nos actions et afin d’avoir un cryptage qui correspond réellement à nos be- Algorithme sélection "AES" Veuillez choisir une taille soins. NB: Il est fortement conseillé lorsqu’il de clé en bit. s’agit d'un dossier très sensible d’utiliser le L'algorithme que vous avez mode paranoïaque, ce mode étant beaucoup sélectionné supporte plus restrictif. Néanmoins, il est conseillé de des clés de 128 à 256 bits par ne pas utiliser ce mode au cas où le répertoire paliers de 64 bits. que l’on souhaite chiffrer aurait des interac- 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.

nocrash:~# groups

Ou appuyez sur entrée pour la valeur par défaut (1024 octets).

nocrash dialout cdrom floppy audio

taille du bloc de système de fichiers : 1024

video plugdev fuse

Notre utilisateur est bien présent dans le groupe fuse, il est à présent possible de passer aux étapes suivantes.

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,

Mise en place d’EncFS

Il est maintenant nécessaire d’installer et de configurer EncFS afin de pouvoir chiffrer nos fichiers/dossiers plus ou moins confi-

58

aussi courts que possible. Entrez le numéro correspondant à votre choix : 1

Linux+ 6/2009

Sécurité Chiffrement avec EncFS

128, 192, 256 Taille de clé sélectionnée : 192

céder à nos données en clair, il va falloir réutiliser la commande que nous avions utilisée précédemment, à savoir :

Sur le Net Page d’accueil : http://www.arg0.net/ encfs.

L’écran suivant nous propose la configurationt 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 simplement nécessaire de spécifier la taille de la clé en bit. Une taille de 192 bits est amplement nécessaire dans ce cas de figure. La taille de la clé grandira proportionnellement à 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’ensemble des écrans suivant avec les options par défaut. Une fois l’ensemble des questions répondues, le mot de passe ainsi qu’une confirmation de mot de passe vous seront demandés. Ce mot de passe servira pour le chiffrement ainsi que le déchiffrement du dossier chiffré :

fichiers ainsi que leur donner la possibilité de s’exécuter. Pour cela, nous allons utiliComparativement à la première fois, cette ser les commandes suivantes : fois ci, EncFS va détecter qu’une initialisation a déjà été faite sur ces répertoires nocrash:~# chown nocrash /usr/bin/ et va donc se contenter de demander le encrypt /usr/bin/decrypt mot de passe fourni plus tôt afin de déver- nocrash:~# chmod 700 /usr/bin/ rouiller l’accès à notre répertoire de « tra- encrypt /usr/bin/decrypt vail ». L’ensemble des données crées / copiées Il est donc à présent possible de lancer le / déplacées en clair dans le répertoire de chiffrement et le déchiffrement d’un dossier « travail » (/home/nocrash/data/ dans notre simplement grâce aux nouvelles commancas) sera automatiquement stocké sous forme des : ./encrypt et ./decrypt. chiffrée dans le répertoire (/home/nocrash/ nocrash:~# ./encrypt .protected/) Afin de vous déconnecter, c'est-à-dire ne plus avoir accès aux données en clair, et il est nécessaire d’utiliser simplement la nocrash:~# ./decrypt commande suivante :

Vous devez entrer un mot

nocrash:~# fusermount -u /home/

de passe pour votre système

nocrash/data

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:~#

nocrash:~# encfs /home/nocrash/ .protected/ /home/nocrash/data/ Mot de passe :

Automatisons tous cela

Il existe de nombreuses manières d’automatiser le lancement ainsi que l’arrêt d’EncFS. Dans notre exemple, nous allons simplement utiliser la méthode simple se réalisant via la ligne de commande. Il est donc possible de créer deux commandes permettant d’ouvrir ou de fermer rapidement l’accès au(x) répertoire(s) de travail :

Conclusion

Voila, à présent, il est possible d’être serein avec l’ensemble de vos données confidentielles 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 à TrueCrypt 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 mettre en place après avoir fait le tour du logiciel.

Afin de vérifier que nous avons réalisé l’ensemble des étapes dans de bonnes conditions, il est possible de vérifier le montage dans le fichier prévu à cet effet :

nocrash:~# vi /usr/bin/decrypt

home/data/

A propos de l'auteur

nocrash:~# cat /proc/mounts

Ce script permet de rapidement lancer le déchiffrement du dossier chiffré :

Régis SENET, actuellement stagiaire chez JA-PSI est étudiant en quatrième année à l’école Supérieure 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.

encfs /home/nocrash/

#!/bin/bash encfs /home/home/.protected/ /home/

data fuse.encfs rw,nosuid,nodev,

nocrash:~# vi /usr/bin/encrypt

user_id=1000,

#!/bin/bash

group_id=1000,

fusermount -u /home/nocrash/data

default_permissions 0 0

Utilisation

Une fois l’ensemble des installations faites ainsi que toutes les configurations effectuées, il est possible d’utiliser notre dossier chiffré grâce à EncFS. À présent, afin d’ac-

Ce script quant à lui permet de rapidement fermer le point de montage et donc le dossier en clair repassant en chiffré de cette manière. Il est bien évidemment indispensable de configurer les droits d’accès à ces deux

www.lpmagazine.org

Contact : [email protected] Site internet : http://www.regis-senet.fr

59

Pratique Oracle

Oracle dans la cour des pingouins Jonathan FUSSNER

[email protected]

Dans 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.

60

D

epuis des années, dans le monde informatique, les bases de données ont représenté un enjeu majeur en termes de pérennité de l’information 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 gestion 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 relationnelle, selon des modèles de données. Cette apparition dans les années 60 des bases de donné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-

Linux+ 6/2009

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 manipuler (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 directe. Toute personne qui s’intéresse quelque peu au domaine informatique, connait la société Oracle Corporation,

Ce qu’il faut savoir... • • •

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.

Pratique Oracle

Figure 1. Installez Oracle 11g !

et son Système de Gestion de Base de Données Relationnelle du même nom. Ce SGBDR 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 certains environnements très demandeurs en performance 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 optimal), 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’exploitation logicielle. Deuxièmement, il a souvent été mis en avant l’aspect multiplateforme des solutions Oracle. Ainsi cette version 11g est installable dans des environnements Unix/Linux. Oui mais voilà, Oracle certifie ses solutions compatibles pour les Systèmes d’Exploitation, 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 production, avoir un OS support est tout-à-fait recommandable, mais gardez à l’esprit cette solution. Enfin sachez qu’il est aussi tout à fait possible de l’installer sur une autre distribution GNU/Linux, ainsi amis Debianistes et autres Ubuntistes, ne perdez pas espoir, le déploiement est envisageable, mais avec quelques adaptations supplémentaires. Attention malgré ceci, Oracle ne recommande absolument pas l’installation de son produit sur une plateforme non supporté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’exploitation. 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 version 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

Cet article explique… • • • •

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.

Figure 2. Continuez le paramétrage de l’installation !

www.lpmagazine.org

61

Pratique Oracle

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 Oracle

Afin 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) :

Figure 3. Check-in des pré requis indispensables

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éploiement

environ 300 à 400 Mo pour la partition /usr/sbin/groupadd oinstall temporaire (/tmp) : • Swap : Minimum 1,5 Go • RAM : 1,5 Go

/usr/sbin/groupadd dba /usr/sbin/useradd -g oinstall -G dba oracle

Bien entendu, prévoyez également sauvegarCes deux groupes vont nous servir plus tard des et redondance ! lors de l’installation. Nous y reviendrons Quelques paquetages donc… nécessaires Enfin assignons un mot de passe à l’utiVoici maintenant une petite liste de dépen- lisateur Oracle : dances à satisfaire, si cela n’est pas encore le cas sur votre système, un petit yum install passwd oracle

Vous vous doutez bien, qu’avant d’en venir au fait, nous devons satisfaire quelques prés requis indispensables à la suite des opérations. Mais vous allez voir que prérequis est un mot large.

Configuration minimale

Autant vous annoncer la couleur tout de suite : Oracle est une véritable usine à gaz ! Et les premiers prés requis sont bien évidement d’ordre physique ! Alors pour satisfaire aux exigences voici un petit aperçu d’une configuration minimale ! 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 partition / une partition /home et la swap). Si vous avez plusieurs partitions (/ /opt /tmp …) prévoyez environ 10 Go sur /opt et environ 5Go sur la partition racine (/). Plus Figure 4. Installation en cours ! Prenez donc un petit café !

62

Linux+ 6/2009

Pratique Oracle

Préparation de l’environnement de production

Voici, très certainement, une des parties les plus pénibles dans ce processus pré-installation d’Oracle. En effet, nous devons maintenant mettre les mains dans le cambouis et modifier un certain nombre de fichiers 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 modifier 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 commande /sbin/sysctl –p qui permettra d’appliquer les changements : /etc/security/limits.conf

Nous devons maintenant augmenter les limites 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 :

Et ajoutez les lignes suivantes :

faisant tourner un environnement graphique (bof bof sur un serveur de production), ulimit -u 16384 -n 65536 soit de vous connecter sur votre serveur umask 022 à distance en SSH (donc n’oubliez pas le petit yum install ssh-server), et donc établir Enregistrez les modifications ! une connexion depuis un poste (votre poste bureautique par exemple) avec le support Installation d’Oracle 11g du protocole X11, ce qui permettra de gérer Nous y voilà enfin ! Après moultes prépara- une installation graphique. Ainsi au cas où tions l’heure est enfin venue de passer à l’ins- utilisez la commande : tallation à proprement parler de notre SGBD. ssh –YX –C [email protected]_DE_VOTRE_ C’est parti ! Avant toute chose, vous devez vous rendre SERVEUR sur le site d’oracle. Si vous n’en avez pas, créez un compte (https://profile.oracle.com L’option –C permet de compresser tandis que /jsp/reg/createUser.jsp?src=135736&act=74). l’option –YX permet justement le support X11. Voici les différentes étapes suivies avec C’est indispensable pour pouvoir par la suite télécharger l’archive d’Oracle 11g à l’adresse l’installateur graphique d’Oracle. http://www.oracle.com/technology/software/ products/database/index.html, choisissez la Première Etape : version Linux x86 ou x86-64 en fonction de votre architecture. Attention vous devez ac- • Voilà à partir d’ici, vous avez lancé l’installateur, et une fenêtre apparait ! cepter un contrat de licence. Cette dernière vous informe de l’emUne fois l’archive téléchargée et déplacement des répertoires de stockage. compressé (attention archive de 1,8Go), Je vous conseille de laisser le chemin ouvrez un terminal et connectez-vous avec par défaut c'est-à-dire dans le réperl’utilisateur oracle que nous avons créé toire home de votre utilisateur Oracle tout à l’heure, à l’aide de la commande su (cf. Figure 1). – oracle. Positionnez-vous dans le répertoire data- • Cette fenêtre décidément très chargée vous demande également de choisir le base et exécutez la commande : type d’installation que vous souhaitez. ./runInstaller Par défaut, j’ai choisi l’Edition Standard, mais vous pouvez très bien installer la Cette commande va vous lancer l’installateur version Enterprise ou alors personnaliOracle. Alors nouvelle petite mise en garde ! ser votre installation. À vous de choisir ! L’installateur d’Oracle est graphique, ce qui • Dans le champ UNIX DBA Group, il est temps de sélectionner le group dba (sousuppose soit de l’installer sur un serveur

oracle    soft  nproc  2047 oracle    hard  nproc  16384 oracle    soft  nofile  1024 oracle    hard  nofile  65536

Enregistrez les modifications !

Profil de l’utilisateur Oracle

Ne 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/ Figure 5. Créons votre nouvelle base de données ! oracle/.bash_profile.

www.lpmagazine.org

63

Pratique Oracle

Pour aller plus loin... • •





Le livre : Oracle 11g Administration – Aux éditions ENI Le livre : Oracle 11g SQL, PL/SQL, SQL*Plus – Aux éditions ENI

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 Suivant.

Deuxième Etape : •





Cette deuxième étape est relativement rapide, vous avez déjà fait le plus gros (voir Figure 2). L’installateur vous demande 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 chemin 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 : • •



/opt/oracle/app/oraInventory/ orainstRoot.sh

Puis : /opt/oracle/app/oracle/product/ 11.1.0/db_1/root.sh

/home/oracle/app/oracle/product/ 11.1.0/db_1/bin/netca

Voila vous avez installé Oracle. Passons maintenant au paramétrage si vous le voulez Cette commande permet le lancement d’un assistant de paramétrage. L’assistant est rebien ! lativement bien fait, et vous devez suivre Paramétrage d’Oracle 11g les étapes en adaptant à votre contexte les Nous pouvons maintenant passer aux paramètres. phases post-installation, c’est-à-dire créaDans cette première étape, nous voulons tion de base de données, communication établir une procédure d’écoute. Ainsi sélecdu SGBDR sur le réseau. Je pense qu’il tionnez cette option dans la liste, puis Suivant est inutile de vous préciser, que l’adminis- (Représenté en Figure 4). tration d’Oracle, surtout en ligne de comSélectionnez l’option Ajouter, puis Suimande, nécessite la connaissance préalable vant. du langage SQL, ce qui sera utile notamIndiquez cette fois-ci un nom pour le proment en termes d’administration d’une base cessus d’écoute (par exemple FUSSNER), (GRANT, REVOKE, ALTER, DROP, …). vous trouverez en Figure 6. un exemple de Vous trouverez dans l’encart Sur le Réseau, ma Configuration. un lien sur le SQL. À noter également La prochaine étape consiste à paraméqu’Oracle possède son propre langage pro- trer les protocoles de communication autocédural nommé PL/SQL. risés. Personnellement j’ai sélectionné TCP car ce dernier gère le contrôle des commuParamétrage du Listener nications (Mode Connecté). Cliquez sur SuiNous voila maintenant avec Oracle propre- vant. ment installé. Mais à ce moment de la parSélectionnez le numéro de port standard tie, si vous souhaitez créer tout de suite une pour les communications, puis suivant. base de données, cette derniere ne pourra L’assistant est terminé, Voulez-vous confietre accessible sur le réseau. Et pour cause, gurer un autre processus d’écoute ? Sélecil nous manque un élément essentiel : Le tionnez NON. Voilà le processus d’écoute est actif, listener. Il s’agit de l’outil indispensable qui permet d’établir une connexion réseau et votre base de données est accessible sur a la base de données, et ceci via le proto- le réseau !

Passez le test des pré-requis indispensables à l’installation ! Puis cliquez sur le bouton Suivant et Installer. Si un message d’avertissement apparait ignorez-le ! Vous pouvez maintenant prendre tranquillement une petite pause car vous l’avez bien mérité, de plus le processus d’installation va prendre quelques minutes, donc pas de panique. Illustration en Figure 3.

Je vous rassure tout de suite, à la fin du processus, vous avez encore un petit travail.

Quatrième Etape :

À la fin du processus d’installation, et pour finaliser cette dernière, l’assistant vous demande d’exécuter en tant que super-user (root), les commandes suivantes dans un terminal : Figure 6. Nommez votre base !

64

cole TCPC’est ainsi que je vous propose maintenant de configurer cet outil. Encore et toujours, dans votre terminal connecté root utilisez la commande suivante :

Linux+ 6/2009

Pratique Oracle

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ées



/home/oracle/app/oracle/product/



Pour 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 connecté root utilisez la commande suivante :

11.1.0/db_1/bin/dbca

Cette commande va lancer l’assistant de création 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 attribuer un mot de passe différent, ou alors utiliser la deuxième option et spécifier un mot de passe global pour l’ensemble des ces derniers. À partir de là, vous avez deux possibilités. La première est de cliquer sur le bouton 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 nouvelle base de données. N’oubliez jamais que cet utilitaire DBCA est l’outil indispensable, non seulement pour créer des bases de données, mais aussi et surtout pour réaliser des opérations d’administration ! Il vous sera donc très utile.

Sur le réseau Site d’Oracle : http://www.oracle.com/ global/fr/index.html

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’administration. 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 langage SQL ! À vos CREATE TABLE, DROP TABLE, INSERT INTO, SELECT FROM, GRANT, REVOKE, …. Par exemple, admettons que vous souhaitez 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é !

Conclusion

Voici terminée cette légère entrée en matière, dans le monde impitoyable d’OraVous pouvez maintenant vous connecter cle. Comme je vous l’ai signalé en début à votre nouvelle base de données, pour l’ad- d’article, il s’agit d’une usine à gaz, qui ne ministrer. s’apprivoise pas du jour au lendemain. Il Pour ce faire, dans un terminal la com- vous faut donc compléter vos connaissanmande : ces, par le langage SQL, et le mode complet d’administration d’Oracle en passant sqlplus [email protected] par la connaissance de l’architecture d’un serveur Oracle ou l’utilitaire de Sauvegarde RMAN. La plupart des bouquins sur le sujet comportent en moyenne pas moins de 500 pages. Bonne continuation sous le soleil linuxien…

Connexion à votre base

A propos de l’auteur... Jonathan FUSSNER est étudiant à l’école Supérieure d’Informatique SUPINFO, et spécialisé dans le domaine de l’administration de Systèmes et Réseaux. Vous pouvez le contacter au travers de son site Internet : www.fussner.net

Figure 7. Website http://www.oracle.com/global/fr/index.html

www.lpmagazine.org

65

Pratique Jupiter pour Eclipse

Révision de code avec Eclipse et Jupiter Adel SAFI

[email protected]

Dans 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.

66

D

urant les dernières décennies, le focus ne cesse d’être mis sur la détection des anomalies 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’attaquant 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 automatisés, les tests croisés ont permis d’avancer sur cet axe. L’une des phases qui ne cesse d’avoir de l’importance 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 pratiques courantes, et ce pour donner au code plus de qua-

Linux+ 6/2009

Cet article explique... Cet article présente Jupiter, un plugin pour Eclipse qui permet de faire de la revue de code

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 codeur ; 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.

Ce qu'il faut savoir... Bien que cet article s’adresse à tout type de développeurs, il prend un intérêt particulier pour ceux qui développent en équipe.

Pratique Jupiter pour Eclipse

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 processus de développement logiciel en particulier dans les méthodes dites agiles comme Figure 1. Identification d’un reviewId l'Extrême Programming. Il devient donc Malgré ces formalismes et règles de indispensable de disposer d’un outil qui codage, il n'est souvent possible de détec- permet d’effectuer la revue de code. ter si la solution implémentée est optimale que dans une phase très avancée du cycle de Processus de revue de code développement : la phase de tests de perfor- Pour fournir un logiciel de qualité, il est mances qui vient souvent après une phase nécessaire de produire un code source de de test fonctionnel. À ce stade, l’Entreprise qualité. Il existe des outils pour mesurer sera obligée de nommer un développeur Se- des indicateurs de qualité du code source et nior ou Expert pour optimiser le code. Le pour vérifier le respect des conventions de coût sera souvent lourd puisque tout le fonc- codage. Cependant, ces outils ont leurs litionnel doit être testé de nouveau par risque mites. Ils tendent à améliorer le code source de régression introduite par le code d’opti- en contrôlant le respect des normes de codage ou en identifiant les défauts de conmisation. L’idée est de prendre l’avis de ses Ex- ception. Par contre, ils ne permettent pas perts/Seniors avant la phase de test : une re- d’identifier les anomalies fonctionnelles. La vue de code doit être planifiée avant chaque revue de code permet d’identifier des bugs livraison au moins pour le code où il y a le avant de les rencontrer au moyen d’une replus de métier (business logique) et le plus lecture du code source par un développeur d’optimisation. Le principe est simple : expérimenté. identifier le code important (d'un point de La mise en place d’une revue de code vue logique métier) ou à risque (algorithme systématique pendant la phase de dévelopcompliqué ou interfaçage multiple avec des pement et de correction responsabilise encosystèmes externes…etc.), nommer des gens re plus les développeurs, car ils savent que qualifiés pour en faire la revue à une date leur travail sera automatiquement évalué. spécifique bien identifiée au niveau du cycle Ce système permet d’améliorer la qualité de réalisation. Les anomalies ou opportu- du code source écrit. De plus, le relecteur nités d’amélioration du code doivent être pourra identifier des bugs ou des axes clairement décrites, analysées puis traitées d’amélioration. avant la livraison du code pour test. Trois processus de revue de code exisCette idée prend plus d’importance dans tent : le monde de la sous-traitance logicielle très prospère et à la mode ces dernières années. • Revue de code bloquante : tout développement doit être relu avant d’être comLe processus serait le même mais l’objectif mité dans le référentiel du code source. est autre. En effet, pour les sociétés Editeurs Ce mode est un frein au développement de logiciels, la sous-traitance est risquée car certains développements peuvent se pour la maintenabilité du code qui pourrait retrouver en attente d’une relecture de devenir dépendant du sous-traitant ce qui implique la dépendance de l’Editeur de son développement dont ils dépendent. sous-traitant. Il ne suffit pas de se fier à la • Revue de code non-bloquante : tout code source commité dans le référentiel du qualité de la livraison exécutable : il faudrait s’assurer de la qualité du code et de son aptisource doit être relu. Cette méthode pertude d’être maintenue par une société tierce met au développeur de continuer son traet d’autant plus par l’Editeur même avec le vail sans attendre la relecture. De même, moindre coût de passation (handover). le relecteur n’est pas obligé de se préciPour cet objectif, il faudrait tout d’abord piter pour relire le code. respecter la règle d’or de vérifier le code • Revue de code avec le développement par binôme : c’est une conséquence de l’exavant même la phase de test. En plus, il fautrême programming. Cependant le tradrait revoir le code avant de payer le sousvail en binôme influence le jugement du traitant qui prétend terminer son travail et relecteur direct. demande d’être payé sur un test d’acceptance

www.lpmagazine.org

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 processus 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 properties 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 2. Choix des fichiers à réviser

Figure 3. Liste des réviseurs

Figure 4. Ajout d'un réviseur

67

Pratique Jupiter pour Eclipse

A propos de l'auteur

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- Figure 5. Révision individuelle rrection. la figure 2 s’ouvrira qui permet de choisir les Ce cycle va se répéter jusqu’à l’obtention classes à réviser d’un code source de bonne qualité. En cliquant sur le bouton next la fenêtre (figure 3) qui permet d’ajouter des réviseurs Avantages de Jupiter : Jupiter a plusieurs avantages : s’affichera. Le bouton Add de la figure 3 permet d’ajouter un réviseur • Faire un cycle de revue de code Figure 6. Marquer la ligne qui contient des anomalies complet, Phase de révision La phase de travail collaboratif : norma• Plugin qui s’intègre parfaitement à individuelle Eclipse, lement ce travail ne se fait pas par les réviDans cette phase (comme le montre la figure • Utilise SVN pour le suivi des phases de seurs mais par un autre comité. 5), chaque réviseur va relire le code d’une revue de code, L’application ne peut pas être divisée sur manière individuelle et va commenter les • Offre des fonctionnalités optionnelles plusieurs réviseurs, dans l’état actuel, on ne éventuelles anomalies qu’il pourrait détecter. et intéressantes comme la possibilité peut pas envoyer les fichiers à réviser vers Le réviseur peut même marquer les lid’indiquer la sévérité d’une erreur, plusieurs réviseurs. gnes qui contiennent les anomalies comme son type …, La fixation des dates de revue n’est pas nous le montre cette fenêtre (figure 6). • Facile à utiliser. possible. Adel Safi est in ingénieur en informatique passionné de linux depuis 2002. L'administration système et la programmation C/C++ sont ses domaines favoris.

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.

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.

Figure 7. Révision collectiveective

Conclusion

Cet 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ù plusieurs niveaux de compétences interviennent. 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’intègre à Eclipse et qui permet d’effectuer un cycle complet de revue de code. Ce processus est basé sur quatre phases que Jupiter implémente efficacement. Enfin, notons que plusieurs améliorations peuvent être effectuées pour que Jupiter atteigne la maturité. À titre d’exemple, nous pouvons envisager une gestion plus avancée des utilisateurs et des dates de revue de code.

Sur le net •

• Figure 8. Reprise de travail

68

Linux+ 6/2009

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

Pratique SVN

Avec SVN,

ne perdez plus rien Adel Essafi

[email protected]

L’é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.

S

i vous écrivez un document (article scientifique, rapport...) vos chefs hiérarchiques donneront leurs avis et peuvent même éditer le document. La gestion des différentes versions 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 logiciels le plus utilisé à savoir subversion (SVN). Nous allons commencer par une présentation de l’outil subversion. Nous décrirons ensuite les différentes opérations que fournit l’outil SVN. La dernière section sera consacré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 actuellement dans le monde des logiciels libres est sans doute SVN, mais on peut aussi citer GNU Arch, Bitkeeper, Git, Superversion, etc.

70

Linux+ 6/2009

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 :

Cet article explique... • •

Comment utiliser SVN pour gérer les différentes versions d'un fichier, Un outils graphique pour SVN.

Pratique SVN

• • • • •

garder un historique des différentes versions 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 souvent 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 terminologie liée à subversion.

Dépôt (repository)

Un dépôt Subversion est l'emplacement central où sont stockées toutes les données relatives 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.

Figure 1. KDESVN: une interface simple pour parcourir les dépôt svn

sion donnée d'un ou plusieurs fichiers. Après cours. Pour cela, il faut effectuer un update avoir vu l’essentiel des notions à connaitre, à l'aide de la commande svn update : nous pouvons passer maintenant à la descrip$ svn update tion du fonctionnement de SVN.

Création d'un nouveau projet

La 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. Projets Si le projet existe déjà au sein du dépôt, Au sein d'un dépôt se trouvent un ou plu- une seule commande suffit pour effectuer un sieurs projets. À chaque projet correspond en checkout et récupérer la dernière version des général un répertoire situé à la racine du dé- fichiers : il s'agit de la commande svn co. pôt et qui contient lui-même les fichiers $ svn co https://SERVEUR/svnrep/ 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évisions

Chaque modification faite au dépôt constitue une révision. Le numéro de révision commence à 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-

Ce qu'il faut savoir... Cet article est adressé à tout informaticien qui ne connaît pas SVN . Aucun prérequis n'est nécessaire pour une bonne compréhension.

U

index.htm

Updated to revision 37.

La commande indique qu'un fichier du répertoire, vraisemblablement modifié par quelqu'un d'autre depuis notre dernier update, a été mis à jour dans notre copie de travail.

Mise à jour des modifications dans le dépôt

Une 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 :

project . A page.html

$ svn commit -m "modification de

A

page.html"

index.htm

Checked out revision 36.

La commande précédente a effectué un checkout du projet project (situé dans un répertoire 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 projet

Sending

page.html

Transmitting file data . Committed revision 38.

Toute opération de commit s'effectue en indiquant 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 seulement 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 effectuer un nouvel update et résoudre d'éventuels conflits avant de relancer le commit.

Avant de travailler sur les fichiers du projet, Récupération d'une version il faut s'assurer que l'on est bien synchronisé antérieure d'un fichier avec le dépôt, c'est à dire que la copie de tra- Lorsqu'on travaille sur un fichier, il peut arrivail correspond bien à la dernière révision en ver que les modifications effectuées ne soient

www.lpmagazine.org

71

Pratique SVN pas bonnes et qu'on souhaite retourner au Là aussi, la suppression n'est effective qu'au Afficher l'arborescence fichier tel qu'il était lors du dernier update. La commit suivant. du dépôt On utilise la commande list de svn : svn list commande svn revert est faite pour ça : http://SERVEUR/mon_projet/ Renommer un fichier $ svn revert page.html Il faut utiliser svn move :

Afficher le contenu d'un fichier du dépôt

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 version 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ôt

$ svn move page.html test.html A

test.html

D

page.html

Pour afficher le contenu d'un fichier qui se trouve dans le dépôt, on utilise la commande cat :

$ svn commit -m

svn

"Renommage d'un fichier"

index.html

Deleting

page.html

Adding

test.html

http://SERVEUR/mon_projet/

Résolution des conflits

Les conflits peuvent intervenir au moment d'un update, lorsque des modifications ont été faites Afficher les différences à la fois dans la copie de travail et dans le dépôt. entre la copie locale et le dépôt Par exemple, si vous éditez en local un fichier Il faut lancer la commande svn diff depuis pour lui rajouter une ligne, et qu'un autre utilivotre copie de travail: sateur du dépôt a commité entre temps une modification différente sur le même fichier, votre $svn diff commit va générer l'erreur suivante : Committed revision 41.

Subversion propose un ensemble de com- Index: taskSet mandes pour ajouter, supprimer ou renommer ==================================== --- taskSet (révision 141) des fichiers du dépôt.

Ajout d'un fichier

cat

+++ taskSet

(copie de travail)

@@ -1,8 +1,11 @@

$ svn commit Sending

test.html

svn: Commit failed (details follow): svn: Your file or directory

Il faut utiliser svn add. À noter que l'ajout -0 -1 n'est effectif qu'au prochain commit :

65

'test.html' is probably out-of-date

10

svn:

-2

60

The version resource does not

$ svn add liens.htm A

liens.htm

$ svn commit -m "Ajout du fichier de liens" Adding

correspond to the resource

Afficher les le numéro de version de votre within the transaction. copie locale depuis la copie locale du projet Either the requested version resource is out of date on exécute la commande :

liens.htm

(needs to be updated),

Transmitting file data .

$svnversion

or the requested version

Committed revision 39.

137:142M

resource is newer than the

Suppression d'un fichier Il faut utiliser svn delete :

Afficher l'historique d'un fichier

$ svn delete liens.htm

$svn blame

D

liens.htm

$ svn commit -m "Suppression d'un fichier" Deleting

liens.htm

Committed revision 40.

transaction root (restart the commit).

http://SERVEUR/index.html 138

adel 3

3

78

adel 65

90

1

78

adel 60

85

1

77

adel 51

76

1

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 manuellement le résultat de cette résolution automatique. 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

72

Linux+ 6/2009

Pratique SVN

elles concernent les mêmes parties d'un fichier. toujours disposer d'une interface graphique. Dans ce cas un conflit est signalé lors de KDESVN est un projet qui vise à rendre l'utilisation de svn encore plus facile à travers une l'update : interface graphique conviviale et intuitive. $ svn update Néanmoins, il faut quand même avoir déjà C test.html compris le fonctionnement de svn pour pouvoir Updated to revision 43. utiliser cette interface. Comme son nom laisse entendre, KDESDans ce cas, deux nouveaux fichiers font leur VN est une application développée au sein du apparition dans votre copie de travail. Dans projet KDE et qui hérite donc de toutes les qual'exemple précédent, on se retrouve avec : lités de ce projet et est distribuée sous la licence •







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 version 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 actuellement 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 interface graphique pour svn

Bien que l'utilisation en mode ligne de commande soit triviale, certains utilisateurs préfèrent

GNU General Public License Version 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édemment, KDESVN est en fait une interface graphique pour svn et offre par conséquent toutes les opérations offertes par svn. L'ensemble de ces opérations est regroupé dans le menu subversion et organisé comme suit:

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.

Installation

général: contient les opération générales de svn (historique, récupération d'une revision, 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 que des 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 informations sur le dépôt de la copie de travail courante.

Grâ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- Enfin, notons que KDESVN, comme tout loliser l'installation. giciel qui se respecte, offre un ensemble de fonctions utiles et qui facilitent la vie aux utilisateurs Utilisation comme le menu préférences, les favoris (bookComme le montre la Figure 1, KDESVN offre marks) et les raccourcis claviers ... une interface simple et conviviale pour parcouConclusion rir et travailler avec les dépôts svn. À travers la barre de menu, nous pouvons Nous avons appris à travers cet article à traaccéder à toutes les fonctionnalités disponibles vailler avec un outil moderne et d'un apport dans KDESVN. Les options les plus utilisées pratique qui est sSVN. Cet outil permet en sont regroupées dans la barre d’outils. Le reste effet de garder les traces des différentes verde la fenêtre est divisé en quatre zones qui per- sions des fichiers d'un projet et de contrôler mettent respectivement d'afficher l'arborescen- toutes les modifications qui ont été faites. ce du projet, les fichiers du répertoire courant, Il est aussi largement répandu au sein des groupes de travail (entreprises, laboratoires les traces et les propriétés d'un fichier. ...) puisqu'il rend le travail collaboratif plus Créer une copie de travail pratique et plus efficace. D'abord, signalons que la copie de travail doit Dans la seconde section nous avons préêtre accessible dans le système de fichiers local senté un outil graphique, KDESVN, qui est puisque svn ne supporte pas les protocoles une interface graphique pour SVN. Cet outil comme smb ou fish. peut rapprocher svn de certains utilisateurs Pour récupérer un (ou une partie d'un) pro- qui ont du mal avec le mode commande. 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 A propos de l'auteur pouvez aussi indiquer la révision à récupérer. Adel Safi est un ingénieur en informatique Dans la majorité des cas, c'est la dernière révi- passionné de linux depuis 2002. L'admision que vous allez devoir récupérer. Choisissez nistration système et la programmation alors l'option HEAD qui permet de récupérer la C/C++ sont ses domaines favoris. révision la plus récente (voir Figure 2).

www.lpmagazine.org

73

Enterprise OpenERP

Déployez OpenERP ! Jonathan Fussner

[email protected]

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à.

74

C

omme David et Goliath, Oracle vs MySql, OpenERP est l'un de ces ERP (Enterprise Ressource Planning ou PGI, Progiciel de Gestion Intégré en français), qui se positionnant sur le marché des PME, affiche des arguments non négligeables. 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 terme français. Il s’agit tout simplement d’une solution (logicielle) 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 (comptabilité, gestion de stocks, GRH, pôle production, achats, ventes, gestion de projets, voir le Tableau 1), qui liés les uns

Linux+ 6/2009

Ce qu’il faut savoir... • •

Utiliser une distribution GNU/Linux et installer des logiciels, Connaitre les besoins de l’entreprise et son activité.

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 exhaustif sur l'utilisation d'OpenERP, mais de commencer

Cet article explique… • • •

L’introduction au monde des ERP libres, L’installation d’OpenERP, Le premier démarrage de cette solution et les possibilités offertes.

Enterprise OpenERP

Pour aller plus loin…. Le livre : Tiny ERP, Open ERP Pour une gestion d'entreprise efficace et intégrée -- Aux éditions Eyrolles

mais relativement complète, offertes par ce Installation de PostgreSQL logiciel. Vous la trouverez au travers du Tab- Qui dit ERP dit données et donc base de données. OpenERP utilise le célèbre SGBRO leau 1. PostgreSQL. Nous allons l’installer, touInstallation du serveur jours par la ligne de commande : Entrons maintenant dans le vif du sujet, je vous propose d'installer la partie serveur de aptitude install postgresql notre ERP, qui vous allez le voir n'est pas de postgresql-client gcc gs-gpl tout repos ! Avant de continuer, je vous propose de Après avoir installé ceci, vous devez mettre déployer notre solution côté serveur, sur un quelque peu les mains dans le cambouis et OS GNU/Linux évidemment, et pourquoi pas modifier un fichier de configuration. Je vous sur une Debian Lenny à jour. Du côté d'Ope- rassure, rien de méchant, juste une petite linERP, il s'agira de la version web qui à mon gne à remplacer : sens est plus intéressante en terme d'adminis• Editez le fichier /etc/postgresql/8.3/main/ tration que le client lourd. pg_hba.conf, Prérequis • Puis remplacez la ligne local all all ident Vous vous doutez bien que ce serait trop sameuser, simple s'il suffisait d'installer un paquetage • Par local all all trust, «serveur ». Avant tout nous devons installer • Enregistrez vos modifications et redéquelques paquetages afin d'apporter sur notre marrez le service PostgreSQL, à l'aide système le support du langage python, utilisé de la commande : /etc/init.d/postgresql-8.3 respar OpenERP. Nous rentrons donc maintetart nant dans une partie « ligne de commande », donc dans un terminal connecté root : aptitude install python python2.5 python- Configuration de PostgreSQL psycopg2 python-egenix-mxdatetime python- Nous allons maintenant avant de passer xml pythontz python-pychart python-vobject à l'installation à proprement parler d'OpenERP, python-pydot python-lxml python-libxslt1 configurer notre base de données et l'utilisateur correspondant. Les modifications suivantes python-reportlab python-profiler.

par le commencement : l'installation et le paramé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 types 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 propre à chaque structure. La phase d'installation est commune, mais la phase d'adaptation du système est unique et doit être réfléchie. C'est dans un cas de figure comme celuici que l'on reconnaît les qualités d'un bon administrateur système, car il doit posséder des capacités d'écoute, de compréhension, afin de pourvoir travailler avec les différents acteurs de l'entreprise (Responsables de production, financier, DRH, Stocks, Achats, Ventes, Management....) et pouvoir adapter au mieux sa 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'ensemble 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 doit prendre appui sur chaque pôle pour comprendre les enjeux du déploiement d'une telle solution, les attentes et les besoins des acteurs de l'entreprise. Un ERP peut devenir une force pour une entreprise, par rapport à un concurrent Figure 1. OpenERP via votre Navigateur (meilleur contrôle de la production, rapidité, ….). 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 principales fonctionnalités certes non exhaustive, Figure 2. Gestion de la base de données

www.lpmagazine.org

75

Enterprise OpenERP

bre important de connexions réseau et d'accès disque.

Prérequis

Comme 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

Figure 3. À propos de votre société

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 permettra de la même manière que PhpMyAdmin pour MySQL, d'administrer plus intuitivement votre SGBD. Attention, car cette application nécessitera un serveur web pour fonctionner, 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 :

Je vous fait confiance pour extraire l'ar- Puis : chive et vous positionner dessus à l'aide de easy_install TurboGears 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épendances, nécessaires à l'installation et au bon fonctionnement du serveur.

su - postgres

Puis créons un nouvel utilisateur nommé Installation du client Web Il est l'heure chers lecteurs, de passer à la OPENERP : deuxième partie de cet article, l'installation createuser --createdb --nodu client. Mais attention, pas n'importe quel createrole --pwprompt openerp client, le client web ! Alors comme je vous l'ai spécifié plus tôt, je ne vais pas rentrer Bien entendu, un mot de passe vous sera dans des débats qui tourneraient en rond, demandé, saisissez-en un ! Lorsque l'assistant mais à mon sens, le client web possède plus vous demande si l'utilisateur doit être un "su- d'avantages en terme d'administration (cenper utilisateur" saisissez O pour Oui. tralisation des ressources). Mais ne perdez La commande exit permet maintenant pas de vue, que cela demande néanmoins de quitter le mode d'administration de Pos- un serveur relativement correct en terme de tgreSQL. performance, car il devra supporter un nomJe 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 serveur

Nous y voilà ! Maintenant nous allons installer le serveur à proprement parler. Pour ce faire, commençons par aller sur le site d'OpenERP 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: Figure 4. Gérez vos partenaires ! //openerp.com/en/downloads.html

76

Linux+ 6/2009

Installation du client web

Il est grand temps de passer à la dernière partie 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 (relativement 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 paramétrage.

Démarrage des services

Je vous propose maintenant d'ouvrir deux terminaux, afin de lancer deux commandes : lancement du serveur

Via la commande : openerp-server lancement du client web

Enterprise OpenERP

Figure 5. Vos salariés !

Via la commande :

de données indicatives à titre d'exemple, afin de vous montrer les possibilité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é).

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ésentation de la page d'accueil d'OpenERP.

Base de données et paramétrages

et son mot de passe que vous avez renseigné juste avant. Dans les parties suivantes, il s'agit de paramétrer la solution au profil de votre entreprise, notamment en sélectionnant 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 Raison Sociale, l’adresse postale, etc...Un petit aperçu en Figure 3 ! Lorsque le résumé apparaît en page suivante, cliquez sur le bouton installer, pour compléter la base de données. Puis sur le bouton Commencer la configuration, afin de sélectionner dans un premier temps, le type de vue de votre interface. Par défaut je vous recommande le mode simplifié.

Utilisateurs et modules

Dans la continuité du paramétrage d'OpenERP, passons maintenant à la gestion de votre premier client (ou utilisateur !), renseignez 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 La première partie est terminée, cliquez sur d'utilisateurs et de droits d'accès. Ainsi, par exemple : le bouton OK, la base de données est à ce moment en cours de création. Vous voilà maintenant de retour sur la Nom d'utilisateur: Jonathan FUSSNER page d'accueil, veuillez vous authentifier Login: jonathan.fussner avec l'utilisateur par défaut c'est-à-dire admin Mot de passe: *******

Attendez une minute, nous avons oublié quelque chose de très important ! Les informations 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 Tableau 1. Principales fonctionnalités offertes par OpenERP prochaine étape, que nous allons réaliser via Gestion Logistique notre navigateur. Sous vos yeux l'interface Gestion d’activité Ventes Gestion de produits, services… d'OpenERP. Afin de créer une nouvelle base Achats Gestion de stocks de données, veuillez cliquer sur le bouton Facturation Gestion de la qualité Base de données. Gestion de points de vente Nous allons maintenant renseigner un certain nombre de variables, qui pour certaines Gestion des Ressources Gestion de la Relation Client d'entre elles sont par défaut (mot de passe Humaines super administrateur), d'autres sont à adapter Paie Relation clientèle à votre contexte : Représentation d'exemple Absences Marketing en Figure 2. Vacances Gestion des Contacts • • •

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 paramétrer l'ERP en fonction de vos paramètres et besoins. Si cette case est cochée, la base nouvellement créée sera enrichie

Recrutement ….

Gestion Financière Gestion de comptes (comptabilité) Analyse de comptes Gestion de budgets et paiements Gestion de projets Gestion d’opérations Gestion du temps Plannings Diagrammes (Gantt…) Gestion des flux Calendriers

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 bord Possibilité de mise en place d’un WebMail Gestion d’Alertes

Pour plus d’informations et de détails : http://openerp.com/en/discover/features.html

www.lpmagazine.org

77

Enterprise OpenERP

relance en cas de défaillance de la base ou du serveur. Sur le réseau Pensez également qu'il s'agit d'une appli• Site d’OpenERP : cation critique, donc inutile de rappeler aux http://openerp.com/ administrateurs systèmes que l'utilisation de • Demo OpenERP technique de redondance notamment RAID http://www.openerp.com/forum/topic sur votre machine est indispensable en cas de 9773.html?sid=9e21a94397447ad5 crash disque ou autres. Après, il est évident 021150ddb92b9097 que les solutions de sauvegarde et de sécurité • Site de démonstration d’OpenERP : ne manquent pas, mais c'est à vous de trouver http://openerp.com/en/discover/ la meilleure pour votre infrastructure. demonstration.html Prévoyez également de démarrer OpenERP, en tant que service (démon) ! Vous trouCliquez maintenant sur Ajouter un utilisateur verez dans l'encart "Sur le réseau" un lien vers puis sur Passer si vous voulez continuer avec une procédure relativement bien expliquée. cet unique utilisateur pour l'instant. Puis sur Quelques exemples pour Continuer. L'heure est maintenant venue de ce sou- embrayer le pas ! venir de ce que j'ai dit à propos de l'administra- Vous pouvez d’ores et déjà vous connecter teur qui doit sortir de sa salle de brassage, quit- pour utiliser OpenERP. Voici après connexion, ter quelques temps ses serveurs. Il est temps quelques premiers petits exemples d'utilisade passer faire un petit coucou au gentil Chef tion (attention légers exemples !) comptable, car vous devez pour la suite des opérations être en possession des informa- Configurer des partenaires et des catégories tions fiscales (aie !). Pour le Type de plan de compte, pour une Lorsque nous parlons de partenaires dans une entreprise française, vous devrez en toute lo- entreprise, cela englobe plusieurs personnes, gique choisir le PCG (Plan Comptable Géné- telles que des clients, des fournisseurs ou ral). Par la suite, rédigez un message qui sera encore des prospects. Vous allez ici pouvoir lié au paiement des factures et configurez la gérer vos partenaires, saisir des informations gestion des commandes (un petit tour chez le les concernant, .... Pour ce faire, lorsque responsable des ventes ou des expéditions ?). vous vous êtes connectés à OpenERP, le Décidément, c'est dans ces moments là menu situé à gauche de l'écran vous propose que je suis content d'avoir fait deux ans d'étu- un certain nombre de modules. Dans cette situation, cliquez sur "Partedes en comptabilité. Une fois récoltées et saisies, il ne vous naires". Maintenant avant de saisir des partenaireste plus qu'à passer à l'étape suivante et à sélectionner les modules que vous souhaitez uti- res, vous devez créer des catégories afin de les liser au sein d'OpenERP. Souvenez-vous en classer. Ainsi, pour une nouvelle catégorie : début d'article, je parlais de plus de 350 modu- Cliquez sur nouveau. Saisissez le nom de votre nouvelle les différents, il est temps de connaitre clairement les objectifs du déploiement de cette catégorie : vous pouvez bien entendu gérer solution pour sélectionner les modules qui une arborescence avec des catégories parents et enfants. seront utiles à l'exploitation. Cliquez sur sauvegarder ! Voilà votre Voilà après ceci, vous pourrez enfin commencer à utiliser OpenERP, continuer de ma- catégorie est créée. Vous pouvez maintenant en gérer pour nière plus fine le paramétrage, notamment en terme de gestion des utilisateurs et droits tous vos types de partenaires.... Situation présentée en Figure 4. d'accès. Créons par exemple, la fiche d'un client : N'oubliez pas que vous gérez en plus de l'ERP, une base de données, donc pensez aux sauvegardes, préparez un plan. Gar- • Cliquez sur partenaires puis partenaires, dez à l'esprit que cette base contiendra des • Cliquez sur Nouveau, informations essentielles de l'entreprise (en- • Saisissez les informations telles que la raison sociale, les adresses..., registrements comptables, facturation, gestion commerciale, gestion du personnel, pro- • Vous pouvez saisir les champs d'information contact..., duction .....) soyez donc extrêmement prudent, afin d'être sûr d'avoir une garantie de • Cliquez sur enregistrer.

78

Linux+ 6/2009

Ajoutez vos salariés

Dernier exemple pour la route. Comme tout ERP qui se respecte, OpenERP inclue la gestion de vos salariés. Vous pouvez ainsi en saisir, cela est intéressant dans la mesure où vous pourrez non seulement faire de la GRH (Gestion des Ressources Humaines) mais surtout gérer des projets, affecter des tâches à vos salariés enregistrés, gérer des plannings... bref les possibilités deviennent nombreuses. Ainsi, pour ajouter un salarié : représentation 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'utilisateur 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 Ressources 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.

Conclusion

Evidemment, nous avons omis de vous par ler de la gestion des factures, des commandes, du stock, des WorkFlows... mais les possibilités et les capacités d'OpenERP sont tellement importantes qu'elles sont impossibles à détailler dans cet article. Néanmoins, vous avez maintenant un serveur avec un ERP disponible, à vous de l'exploiter au maximum afin que cela devienne un véritable facteur clé de succès pour votre entreprise ! À bientôt sous le soleil du monde libre...

A propos de l’Auteur... Jonathan FUSSNER est étudiant à l’école Supérieure d’Informatique SUPINFO, et spécialisé dans le domaine de l’administration de Systèmes et Réseaux. Vous pouvez le contacter au travers de son site Internet : www.fussner.net

Fiche technique jeux

Section dirigée par Laurent DEROSIER

CLIM CITY

L’institut Cap Sciences de Bordeaux lance un jeu en ligne de simulation 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'appliquer 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ésespérément perdue ?

Vous pouvez jouer de suite ou créer un compte qui vous permettra 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/

PONEY TRON

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ètement 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 ???

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/

LEMMINGBALL Z 3D

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 évidemment, 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ésitez à pas jeter un coup d'œil au site donné ci-dessous pour de plus amples explications.

Tous les coups et les astuces : http://www.gamerzonline.fr/forums/jeux-multi-joueurs-en-ligne/ 2038-lemming-ball-z-dbz-online.html Site du jeu : http://www.lbz3d.com/

www.lpmagazine.org

79

Archives Linux+DVD 2008 sont 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 !

Pour le recevoir : envoyez-nous le bulletin d’abonnement avec information sur le choix de cadeau joint (voir site web) ou bien abonnez-vous directement sur le site du magazine http://www.lpmagazine.org/fr

Ne tardez pas ! La collection unique vous attend !

Merci de remplir ce bon de commande et de nous le retourner par fax : (+48) 22 244 24 59 ou par courrier : Software-Wydawnictwo Sp. z o.o., Bokserska 1, 02-682 Varsovie, Pologne Tél. (0033) 09.75.18.03.58 E-mail : [email protected] Yahoo 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) ................................ ................................................................................................................

* Pour voir l’offre actuelle des cadeaux, visitez notre site http://lpmagazine.org/prt/view/abonnement.html

BULLETIN D’ABONNEMENT

PRIX D’ABONNEMENT À LiNUX+ DVD : 38 € 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)

Abonnez-vous et recevez un cadeau !

¨ 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

Dans le prochain numéro

Le dossier spécial

SugarCRM

Autres articles : • Bash dans l’administration • Nagios en entreprise • Programmation Java Sur le DVD La meilleure distribution pour les débutants

Ubuntu 9.10 Karmic Koala

La rédaction se réserve le droit de modifier le contenu du magazine

Linux+ DVD est publié par Software Press Sp. z o.o. SK Bokserska 1, 02- 682 Varsovie, Pologne tél. : +33 170 610 717 fax : +48 22 244 24 59 http://www.lpmagazine.org

(c) 2009 Software Press Sp. z o.o. SK, tous droits réservés

Fabrication Andrzej Kuca [email protected]

Rédactrice en chef Aneta Mazur, [email protected]

Diffusion Ilona Lepieszka [email protected]

Président deSoftware Press Sp. z o.o. SK : Paweł Marciniak

DTP Graphics & Design Studio http://www.gdstudio.pl

Publicité public[email protected]

Directrice de la publication Ewa Łozowicka Tirage : 10 000 Imprimerie, photogravure ArtDruk www.artdruk.com Imprimé 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 parution ISSN : 1732-4327 Distribution : MLP Parc d’activités de Chesnes, 55 bd de la Noirée -BP 59 F - 38291 SAINT-QUENTIN-FALLAVIER CEDEX

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,

Les personnes désireuses de coopérer peuvent nous contacter à l’adresse : [email protected] La rédaction a fait tout son possible pour s’assurer que les logiciels sont à jour, pourtant, elle décline toute 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.

View more...

Comments

Copyright ©2017 KUPDF Inc.