Un environnement de déploiement automatique pour les
Transcription
Un environnement de déploiement automatique pour les
ICSSEA 2002-7 Lestideau Un environnement de déploiement automatique pour les applications à base de composants Vincent Lestideau Adele Team Bat C LSR-IMAG , 220 rue de la chimie Domaine Universitaire, BP 53 38041 Grenoble Cedex 9 France E-mail: [email protected] Résumé : Avec le développement des réseaux et de l’Internet, la problématique du déploiement automatisé du logiciel à grande échelle est devenue de plus en plus cruciale. Le déploiement est un procédé logiciel complexe couvrant plusieurs activités allant de la configuration jusqu’à la désinstallation du logiciel. Une approche prometteuse est d’utiliser la technologie des fédérations d’outils. Ainsi dans la conceptualisation, nous avons considéré un système de déploiement comme une fédération d’outils coopératifs en distinguant les rôles de chaque outil Cet article présente un « framework qui permet de décrire de manière unifiée les outils. L’article développe cette approche et étudie plus particulièrement son application et expérimentation sur les phases de configuration et d’installation Mots clés : Environnement de déploiement, processus de déploiement, outils de déploiement, configuration, installation. Abstract : With the development of the networks and the Internet, the software deployment topic is becoming more and more critical. Deployment is in fact a complex software process with activities from the configuration to the software de-installation. Each step uses an appropriate tool. A promising approach is to use federation technology. During conceptualization, we consider deployment as a system federating cooperative tools by distinguishing the role of each tool. The paper presents our approach and focuses particularly on its application and experimentation to the configuration and installation steps. Keywords : Deployment, environment, process, tools, configuration, installation. 1. Introduction Le déploiement du logiciel est actuellement un des thèmes majeurs en génie logiciel. Ceci est dû en particulier à l'avènement des nouvelles technologies liées à l'Internet. Un des objectifs recherchés concerne l'automatisation d'un processus de déploiement couvrant toutes les étapes du cycle de vie d'un logiciel telles que la configuration, l'installation, la mise à jour et la désinstallation. Ce domaine fait l’objet d’un développement actif particulièrement de la part d’industriels comme en témoigne le nombre de produits disponibles sur le marché. Nous avons tout d'abord spécifié notre processus de déploiement en terme d'activités et de relations. Notre objectif est de créer un environnement de déploiement permettant d'automatiser ce processus. Pour cela, nous avons commencé par une étude des outils existants. Nous nous sommes rendu compte qu'il n'existe pour l'instant aucun outil couvrant tout le cycle de vie d'une application. Les outils ayant été conçu de manière ad hoc et partielle en privilégiant seulement un ou plusieurs aspects du déploiement. Par contre, ils sont souvent très performants dans leur domaine spécifique d'utilisation. Notre travail concerne plus particulièrement le déploiement d'applications à base de composants. Nous avons remarqué que les nouveaux modèles à composants tiennent de plus en plus compte des problèmes de déploiement. Pour résumer, elles proposent des moyens de résoudre, en amont, des problèmes de déploiement comme le versionnement lors de l'installation. Afin de réaliser notre environnement de déploiement, nous avons choisi de proposer une approche utilisant certaines des fonctionnalités offertes par les outils existants. Ainsi nous bénéficions à la fois des avantages des outils de déploiement et de la programmation à base de composants. Nous avons comme objectif de couvrir tout le cycle de vie d'un logiciel. Notre article se présente de la manière suivante. Nous présentons d'abord notre processus de déploiement. Ensuite nous avons réalisé une synthèse (du point de vue déploiement) des outils et des modèles à composant. Puis nous décrivons notre environnement en spécifiant les différentes entités de notre architecture et notre processus de déploiement. Afin de valider notre approche, nous présentons l'implémentation de notre environnement de déploiement. 2. Processus de déploiement logiciel Selon la définition de Carzaniga [1], le processus de déploiement fait référence à toutes les activités et leurs interactions lors du cycle de vie d’une application (figure 1). Ces activités concernent le versionnement, l’installation, la désinstallation, la mise à jour, l’adaptation, l’activation et la désactivation d’une application. Dans ce papier, nous nous intéressons aux activités de versionnement et d’installation, dans le cas d’applications basées sur des modèles à composants. Les autres activités sont présentées plus brièvement. Activation et désactivation. Ces activités correspondent aux étapes de démarrage (ou d’arrêt) des composants nécessaires lors du démarrage (ou de l’arrêt) d’une application. Sans l’activation de ces composants, l’application ne peut pas fonctionner correctement. Mise à jour. Il s’agit d’un cas particulier de l’activité d’installation. Elle consiste à installer une autre version d’une application déjà installée. Du fait que certains de ses composants sont déjà installés, elle est moins complexe que l’activité d’installation. Adaptation. Cette activité permet de modifier une application déjà installée. Cependant, à l’inverse de l’activité de mise à jour, on garde la même version de l’application, en se contentant de modifier sa configuration. Désinstallation. Cela consiste à désinstaller une application, en s’assurant que les autres applications installées fonctionneront toujours correctement. Pour cela, il faut tenir compte des composants partagés et de la mise à jour des registres. Dans notre processus, nous avons décomposé l’activité de versionnement en 3 sous activités. En particulier, nous avons ajouté l’activité de configuration, qui permet de créer les différents packages correspondants aux versions. Configuration. Un aspect intéressant des applications à base de composants est la possibilité de réutiliser des composants existants pour créer de nouvelles applications. Généralement, les composants sont stockés dans des 2/8 bases de développement et ils sont implémentés sous plusieurs versions. Nous avons développé un processus de sélection permettant d’annoter et de sélectionner les versions des composants correspondant à une configuration souhaitée. Packaging. Cela consiste à récupérer les composants issus de l’activité de configuration, ainsi que leurs annotations. Un package contient aussi la liste des dépendances logicielles de l’application, des informations liées au déploiement (identifiant du package, date de création…) et une description de l’application packagée (une sorte de manifeste). Cette description sera utilis ée pour déterminer si un package peut être installé sur une machine donnée, en respectant les contraintes liées à sa configuration. Transfert. Cette activité traite du transport d’un package d’un producteur vers un site consommateur. Dans le cas des réseaux, il faut tenir compte en particulier de la présence éventuelle de firewalls et de l’utilisation des bandes passantes. Installation. Cette activité réalise le « dé-packaging » des packages reçus, l’installation des différents composants, la modification des registres, la résolution des dépendances. Toutes ces opérations ayant été préparé lors des activités précédentes (configuration et packaging). Packager Configurer Transférer Installer Désinstaller Mettre à jour Adapter Désactiver Activer Figure 1 : Processus de déploiement Depuis peu, le déploiement est devenu une étape importante dans l’ingénierie logicielle et de nombreux outils ont été créer pour essayer de couvrir tout le processus de déploiement. En parallèle, les nouvelles spécifications de modèles à composant, comme « Component Corba Model » ou « Microsoft .NET » ont pris en compte les problèmes de déploiement. Dans le paragraphe suivant, nous présentons certains de ces outils de déploiement ainsi que les deux modèles à composants, cités auparavant. 3. Les outils et travaux existants Dans cette partie, nous nous intéressons à deux outils liés au déploiement, ainsi qu’à deux spécifications de modèles à composants. 3-1 Les outils de déploiement 3-1-1 InstallShield Developer Actuellement, le logiciel d’installation le plus connu se nomme InstallShield Developer [2] (ID). Son processus d’installation est composé de trois activités : la création, la distribution et la maintenance des applications. C’est un outil spécialisé dans les applications basées sur la plate forme Windows, ce qui lui permet d’utiliser les fonctionnalités offertes par le service Microsoft’s Windows Installer [3]. Ce service offre des moyens 3/8 automatiques pour réparer les fichiers corrompus d’une application. Il permet d’installer et de désinstaller correctement les applications sans altérer les applications déjà installées. Et enfin il offre un service de retour en arrière permettant un retour à l’état initial en cas de problèmes lors de l’installation. Afin d’utiliser ce service, ID crée un fichier MSI (selon le format Windows Installer) contenant des informations sur le package (version, date, nom du vendeur…), une base de données relationnelle et les fichiers de l’application (ou leur localisation, s’ils ne sont pas contenus dans le package). L’activité de création spécifie les fichiers de l’application et résout les dépendances. A la fin, un package est créé. L’activité de distribution fait référence au transfert du package. Pour cela, différents moyens sont proposés : via le Web, via un intranet, ou en utilisant un CD d’installation. Une fois le package transféré, il est lu et exécuté par le service Windows Installer. L’activité de maintenance consiste à mettre à jour et à assurer la cohérence de l’application installée. En terme de déploiement, ID propose une solution efficace pour les applications Windows en réalisant les activités d’installation et en assurant la cohérence des applications installées. 3-1-2 Java Web Start Java Web Start [4] (JWS) est une solution pour le déploiement d’applications sur le web. Il déploie des applications basées sur la technologie Java, soit à partir du web ou soit à partir d’un gestionnaire (le Java Application Manager). Les applications sont lancées par un simple clic sur une page Web ou dans le gestionnaire. Si l’application n’est pas déjà présente sur la machine de l’utilisateur (l’application sera donc installée pour la première fois), JWS lance le téléchargement de l’application. Les fichiers de l’application sont ensuite stockés et mis en mémoire. Ainsi l’application pourra être exécutée autant de fois que l’on souhaite sans devoir l’installer à chaque fois. Avant chaque exécution, JWS vérifie qu’il s’agit de la version la plus récente, sinon il lance automatiquement la mise à jour et ceci de façon transparente pour l’utilisateur. De cette façon, seules les versions les plus récentes sont exécutées. En terme de déploiement, JWS propose une solution permettant d’exécuter toujours les versions les plus récentes de chaque application. Ce système permet de résoudre les problèmes de mise à jour et de cohérence du système, mais ceci implique d’être régulièrement connecté au serveur d’applications. 3-1-3 Synthèse Il existe un grand nombre d’outils proposant des solutions partielles pour les problèmes de déploiement. Dans certains cas, ils sont très efficaces, mais ne couvrent pas tout le processus de déploiement. Certains (comme Java Web Start) couvrent une large partie du spectre mais ils imposent des contraintes assez restrictives (applications java, serveur web…). 3-2 Les modèles à composants. Récemment, de nouvelles spécifications ont essayé de traiter explicitement les problèmes dus au déploiement en en tenant compte dès la phase de conception. Dans ce paragraphe, nous décrivons deux de ces modèles en insistant plus particulièrement sur la partie liée au déploiement. 3-2-1 Le modèle à composant Corba (CCM) CCM est une spécification développée par l’OMG [5]. Elle spécifie explicitement un scénario de déploiement pour les composants. Dans CCM, les composants sont packagés dans des packages auto-descriptifs pouvant être assemblés entre eux. On forme ainsi un assemblage, qui correspond à l’unité de déploiement de CCM. Pour réaliser le déploiement d’applications CCM, il est nécessaire de définir la liste des composants constituant l’application, leur localisation logique et leurs connections. Pour chaque composant, il est nécessaire de spécifier ses éléments (interfaces, implémentations), de décrire ses contraintes système (OS, ORB…) et sa configuration initiale. Toutes ces informations sont nécessaires pour installer et exécuter une application. Afin d’utiliser ces informations, CCM spécifie plusieurs descripteurs, décrivant les packages, les composants et les assemblages. Ces différents descripteurs sont basés sur le langage OSD [6]. CCM propose un scénario de déploiement, basé sur ces packages et leurs descripteurs, assurant l’installation cohérente des applications CCM. 4/8 Dans ce modèle, le déploiement est réalisé par un ORB et par des outils de déploiement. Ces outils utilisent les services de l’ORB pour réaliser le transfert, l’installation, l’assemblage, l’instantiation et la configuration des applications sur les machines des clients. 3-2-2 Microsoft .NET Il s’agit du Framework [7] proposé par Microsoft pour résoudre ses problèmes de versionnement et de déploiement, dus essentiellement aux DLLs. Connu sous le nom d’ « enfer des DLLs » [8], le problème de versionnement apparaît, par exemple, lorsqu’on installe une nouvelle application et qu’elle comporte des composants déjà présent sur la machine, mais sous une autre version. Pour résoudre ce genre de problèmes, Microsoft utilise un nouveau concept appelé assemblage ; il est constituée par le code des composants, leurs ressources et un manifeste. Ce manifeste comporte des informations sur le composant telles que la liste des fichiers, les dépendances et d’autres informations utilisées pour exécuter le code. Pour concevoir des applications .NET, on doit respecter les contraintes suivantes : • • • • Les assemblages doivent être descriptifs, ainsi il n’y a pas d’impact sur les registres lors des installations. Ceci permet de simplifier les activités d’installation et de désinstallation. Les assemblages doivent respecter une politique de numérotation des versions. Le Framework doit supporter les composants « side by side » permettant à plusieurs versions d’un composant de s’exécuter sur la même machine. L’application doit être isolée le plus possible : un assemblage ne doit être accessible que par une seule application. Les assemblages peuvent être partagés mais ils doivent alors respecter des contraintes plus fortes comme avoir un nom global et unique. Dans .NET, le problème de versionnement durant l’activité d’installation semble être résolu, mais pour cela, il faut respecter des contraintes fortes comme le non partage (entre différentes applications) des assemblages. En terme de déploiement, .NET améliore la qualité des installations en diminuant le risque de modifier irrémédiablement une application déjà installée. 3-2-3 Synthèse En spécifiant explicitement les contraintes à respecter pour le déploiement, ces spécifications améliorent les activités de déploiement (en terme de dépendance, de localisation physique des composants…). Ainsi certains problèmes de déploiement sont pris en compte dès la phase de développement de l’application et non lors de l’installation elle-même. Un autre avantage est l’effort de standardisation des descriptions. 3-3 Conclusion Il apparaît que les problèmes de déploiement sont de plus en plus pris en compte par des outils et par des spécifications de modèles à composants. Les outils essayent de résoudre et d’automatiser plus particulièrement les problèmes d’installation et de maintenance, alors que les spécifications essayent d’aider ces outils en résolvant en amont une partie du travail (descriptions…). 4. Notre approche Comme nous l’avons précédemment expliqué, les outils existants ne couvrent pas tout le processus de déploiement, mais ils supportent des sous parties de ce processus. Notre approche consiste à utiliser ces outils pour constituer un environnement de déploiement. Une caractéristique importante au sujet de ces outils est qu’ils n’ont pas été conçus pour fonctionner ensemble et qu’ils ne sont pas modifiables (il s’agit pour la plupart de produits du commerce). C’est pourquoi nous avons décidé d’utiliser la technologie des fédérations développée par notre équipe. 4-1 La technologie des fédérations Cette technologie [9] permet de créer des applications en fédérant des outils existants. Ces outils ont été conçus pour un usage autonome, ils ne peuvent pas être modifiés et ils peuvent interagir directement avec leur environnement. Nous n’expliquerons pas dans cet article, les moyens utilisés pour fédérer les outils ensemble. De cette façon, tout le processus de déploiement peut être automatisé et guidé par la fédération (à l’aide d’un moteur de processus nommé APEL [10]). Une fédération est décrite en termes de rôles, qui sont les seules entités manipulées par la fédération. Il s’agit d’une abstraction d’un ensemble de fonctionnalités. Les outils (jouant des 5/8 rôles) ne sont pas considérés explicitement par la fédération. Cette technique nous permet d’être indépendant des outils que nous pouvons remplacer sans problèmes. Cette technologie offre aussi les avantages suivants : une infrastructure de communication permettant de transférer des données à travers des firewalls et la possibilité d’exécuter des applications à distance sur une machine distante sans intervention ou autorisation de son utilisateur. 4-2 Notre fédération de dépl oiement Actuellement, nous avons développé les parties de notre environnement de déploiement concernant l’installation et la configuration. Nous nous sommes intéressés aux applications à base de composants. Pour cela nous avons utilisé un modèle de composants inspiré de CCM ; nous avons ajouté le concept d’externalisation permettant un composant constitué de plusieurs composants d’être lui-même un composant. 4-2-1 Architecture En terme d’architecture, nous avons identifié 3 entités (figure 2) dans notre fédération d’installation : • • • un ensemble de serveurs d’applications, un serveur de déploiement, un ensemble de sites physiques. Serveur d’applications Serveur de déploiement Site physique Figure 2 : Architecture de déploiement Le serveur d’applications stocke un ensemble d’applications. Ces applications sont disponibles sous la forme d’un package ; résultat de l’activité de configuration (recherche des composants composant l’application…) puis d’ un outil de packaging (comme InstallShield). Chaque package comporte une description de l’application. Un site physique peut correspondre soit à la machine d’un utilisateur final, soit à une simple machine comme un distributeur de billets. Afin de gérer automatiquement le déploiement, chaque site est décrit par un modèle de site, qui donne une description physique (mémoire, processeur, capacité de stockage…) et logicielle (liste des applications installées..) du site. On peut aussi associer à un site, un ensemble de contraintes ou de règles à respecter lors d’une installation. Le serveur de déploiement est l’élément central de notre architecture. Toutes les communications et échanges entre les différentes entités passent par son intermédiaire. Lui seul, à la connaissance, à un instant donné, des différentes entités connectées à la fédération, ce qui procure une grande souplesse. Il gère toutes les communications entre les autres éléments. 4-2-2 Les rôles La première étape d’identification, nous a permis d’identifier les rôles de notre scénario : configuration, installation et analyse. 6/8 La configuration a pour rôle de créer une application à partir d’une configuration (par exemple, on peut imposer un langage de programmation) et en respectant des contraintes comme le système d’exploitation. L’installation a pour objectif de récupérer les composants d’une application, de lister les dépendances, de packager l’application. L’analyse permet à partir d’une configuration (description des fonctionnalités, choix de l’utilisateur…) de vérifier qu’un package (par l’intermédiaire de sa description) répond à la recherche effectuée et que son installation ne sera pas dommageable pour les applications déjà installées sur la cible. 4-2-3 La configuration L’objectif de cette activité consiste à concevoir une application correspondant à une configuration donnée. Il s’agit de trouver le bon assemblage de composants réalisant les fonctionnalités recherchées. Pour cela, nous utilisons un système d’annotations et de règles. Les annotations permettent de décrire chaque composant ainsi que ses différentes implémentations. Les règles assurent la cohérence de ces annotations. Dans notre modèle, chaque composant possède une interface et chaque interface est implémentée par des implémentations natives (code) ou composites (un ensemble de composants). Afin de disposer d’un large choix de versions pour chaque composant, nous nous sommes intéressés à la phase de développement des composants, ainsi nous disposons d’une base hiérarchisée de composants où les composants peuvent êtres terminés ou dans état de transition. L’objectif de ce papier, n’étant pas de décrire ce système [11], il suffit de savoir que l’on peut sélectionner automatiquement (en utilisant un algorithme de parcours) les composants, formant une application, en assurant la cohérence de l’ensemble. 4-2-4 L’installation Dans notre scénario, nous distinguons deux types possibles de déploiement ; en mode « push » (installation sans aucune demande ou intervention de l’utilisateur de la machine cible) ou en mode « pull » (à la demande explicite de la machine cible). La stratégie en mode « push » : Dans ce cas, la décision d’installer une application n’est pas prise au niveau des sites physiques mais au niveau du serveur de déploiement. C’est le cas, par exemple, lors de la mise à jour d’une application donnée sur un ensemble de sites physiques. Dans notre scénario, nous avons ajouté un rôle de superviseur, qui a pour objectif de trouver pour chaque cible, la bonne configuration de l’application à installer. Pour cela, il récupère d’abord la configuration souhaitée (à l’aide du modèle de site de la cible), puis il interroge le serveur de déploiement pour récupérer la liste des serveurs d’applications disponibles. Ensuite, il recherche les packages contenant l’application voulue et pour chacun il vérifie (à l’aide de l’outil d’analyse) s’ils sont compatibles. Dans le cas positif, il demande à la fédération de transférer le package. Une fonctionnalité importante de cette stratégie, c’est qu’elle permet d’effectuer des transfert d’un point à un autre de la fédération et ceci malgré la présence éventuelle de firewalls. Une fois le package transféré, on lance automatiquement sur la machine cible, un outil d’installation, qui réalise l’installation proprement dite. Dans le cas où aucun package ne correspondrait, on peut utiliser un outil de configuration pour le créer. La stratégie en mode « pull » : La différence avec la stratégie précédente, c’est que la décision d’installer une application est prise par le site physique. Dans ce cas, il peut participer au choix de la configuration souhaitée. Ensuite, le serveur de fédération prend le contrôle des opérations (recherche du package, analyse, installation…). Ceci est dû au fait que l’on ne veut pas que la machine cible puisse communiquer directement avec les serveurs d’application (problèmes de sécurité, contrôle des installations…). Dans les deux cas, on doit mettre à jour le modèle de site à chaque installation. Nous avons implémenté ces scénarios en utilisant un moteur de processus, qui permet l’automatisation. Chaque scénario est modélisé sous la forme d’un processus où chaque activité est jouée par un rôle. Ainsi nous avons créé une infrastructure de déploiement (réalisant les activités de configuration et d’installation) à l’aide de laquelle nous pouvons modéliser différents scénarios en terme de rôle tout en étant indépendant d’un scénario particulier. 7/8 Nous avons crée une fédération de déploiement couvrant les activités de configuration et d’installation de notre processus de déploiement. Nous avons donc le noyau autour duquel nous allons greffer de façon quasi transparente les rôles et processus des autres activités du cycle de vie du déploiement d’un logiciel. 5. Conclusion et perspectives Le but de notre étude est de fournir un environnement de déploiement générique tendant vers le zéro administration. Une des principales contributions de notre étude consiste en une définition d’un « framework » pour le déploiement. A partir de ce « framework », nous pouvons appliquer de nombreuses stratégies, pour adapter notre environnement. Des expérimentations ont été réalisées en laboratoire. Nous sommes à la phase d’expérimentation en vraie grandeur avec nos partenaires industriels. Bibliographie [1] Carzaniga, A. Fuggetta, R.S. Hall, A. van der Hoek, D. Heimbigner, A.L. Wolf. A Characterization Framework for Software Deployment Technologies. Technical Report CU-CS-857-98, Dept. of Computer Science, University of Colorado, April 1998. [2] Web site InstallShield Developer http://www.installshield.com/isd/ [3] Web site Microsoft's Windows Installer http://www.microsoft.com/ [4] Web site Java Web Start http://java.sun.com/products/javawebstart/ [5] J. Mischkinsky - CORBA 3.0 New Components Chapters - CCMFTFDraft ptc/99-10-04 -- OMG TC Document ptc/9910-04 October 29, 1999 [6] A. van Hoff, I. Hadi Partovi, T. Thai - The Open Software Description Format (OSD) – Site Web : http://www.w3.org/TR/NOTE-OSD [7] Web site .NET Framework http://msdn.microsoft.com/library/ [8] Rick Anderson - The End of DLL Hell- Microsoft Corporation – January 2000 http://msdn.microsoft.com/library/ [9] Jacky Estublier and Anh-Tuyet LE. Design and development of Software Federation ICSSEA 2001. Paris, France. 4-6 December 2001. http://www-adele.imag.fr/Les.Publications/intConferences/ICSSEA2001Est.pdf [10] S. Dami, J. Estublier and M. Amiour. APEL: A Graphical yet Executable Formalism for Process Modeling. Kluwer Academic Publishers, Boston. Process Technology. Edited by E. Di Nitto and A. Fuggetta..Pages 61 - 97. January 1998. [11] N.Belkhatir, P.Y. Cunin, V. Lestideau and H. Sali.- An OO framework for configuration of deployable large component based Software Products-OOPSLA 2001 Workshop on Engineering Complex O.O. systems for Evolution. Tempa, Florida, USA. 14-18 October 2001 8/8