Pour résoudre tous ces problèmes, vous choisirez donc d’utiliser des outils spécifiques. Vous pourriez vouloir commencer par écrire vos propres scripts et outils pour gérer ce genre de choses. Il est cependant judicieux d’utiliser les outils déjà disponibles plutôt que d’en recréer soi-même. Les meilleurs outils pour résoudre ce genre de problème sont les gestionnaires de paquetages.
Si vous n’avez jamais créé de paquetages auparavant, il sera nécessaire de passer un peu de temps pour apprendre comment le faire. Cependant cela vous fera gagner beaucoup de temps par la suite. Utiliser les paquetages pour construire et installer les logiciels présente beaucoup d’avantages :
- Connaître la version installée du logiciel, désinstaller ou mettre à jour le logiciel
Les paquetages permettent le suivi de la version installée du logiciel sur le système. Ils permettent aussi de facilement installer, désinstaller ou mettre à jour le logiciel, ou trouver quel paquetage fournit un fichier donné.
Construire des paquetages dans un nouvel environnement et déployer les paquetages
Pourquoi devez-vous utiliser un système de compilation.
Le gestionnaire de paquetages est un outil très intéressant pour gérer la compilation et l’installation du logiciel. Cependant ce n’est pas suffisant. Le gestionnaire de paquetages construit le logiciel en utilisant les outils et les bibliothèques disponibles sur le système, après l’installation de la liste des dépendances de compilation.
Il y a quelques inconvénients à procéder ainsi :
- Support de multiples distributions
Quelquefois, l’infrastructure utilise différentes distributions, ou différentes éditions de la même distribution. Un paquetage construit sur une distribution ne fonctionne pas obligatoirement sur une autre car la version de certains composants est différente ou incompatible. Pour éviter ce genre de problèmes, les paquetages doivent être construits en utilisant la même distribution que celle sur laquelle ils seront utilisés.
- Un nouvel environnement de compilation
Les paquetages sources comprennent une liste des dépendances de compilation qui doivent être installées pour compiler le paquetage. Cependant lors de la compilation du paquetage sur votre propre machine ou sur un serveur de compilation spécifique, il y a généralement d’autres paquetages qui sont déjà installés et qui pourront potentiellement être utilisés pour la compilation d’un paquetage. Il est par conséquent très facile d’oublier que ces paquetages ont été installés, oublier de les inclure parmi les dépendances de compilation du paquetage et de ne pas remarquer le problème vu que la compilation fonctionne pour vous. Le système peut aussi présenter une configuration ou des mises à jours personnalisées dont vous avez oublié la présence, qui peuvent aussi influencer la compilation du paquetage. Le problème ne sera pas remarqué tant que quelqu’un n’aura pas besoin de recompiler le paquetage sur un autre système. Pour augmenter les chances de pouvoir reproduire une compilation de paquetage dans le future, il faut le faire dans un nouvel environnement. Habituellement cela est assuré en créant, pour chaque compilation de paqutage, un nouveau chroot minimal pour la distribution choisie.
Une fois que votre paquetage est compilé, il faut le copier sur la machine où il sera installé. Les distributions fournissent habituellement des outils pour gérer cela (apt-get sur Debian, urpmi sur Mageia, yum sur Fedora, etc.). Ces outils téléchargent et installent automatiquement le paquetage et ses dépendances à partir d’un serveur partageant un dépôt de paquetages. Pour pouvoir utiliser ces outils, il est nécessaire de monter un dépôt de paquetages, qui est un répertoire contenant tous les paquetages disponibles et quelques métadonnées.
Tout cela peut se gérer à la main, cependant il est préférable de monter un système de compilation des paquetages pour gérer tout cela automatiquement à votre place. Utiliser un système de compilation des paquetages a de nombreux avantages :
- Moins sujet aux erreurs
Compiler les paquetages dans un chroot, copier les fichiers résultants dans le répertoire adéquat et régénérer les métadonnées du répertoire n’est pas très difficile, mais c’est chronophage et sujet aux erreurs si c’est fait à la main. Utiliser un système de compilation des paquetages économise le temps et évite bien des erreurs.
- Plus facile
Si compiler et installer des paquetages dans un répertoire est une tâche difficile et chronophage, vous-même ou d’autres membres de votre équipe seront tentés de l’éviter et d’utiliser une autre solution.
- Outils de suivi des révisions et traçabilité
Utiliser un outil de gestion des versions comme git ou subversion pour gérer les modifications du paquetage source est recommandé. Un SCM attaché au système de compilation garantira que tout paquetage disponible dans le dépôt de paquetages est aussi disponible dans le dépôt de gestion des sources, apportant la traçabilité aux paquetages.
- Imposer une politique d’empaquetage
Des outils sont disponibles pour imposer une politique d’empaquetage (rpmlint pour rpm, lintian pour deb). Posséder une politique d’empaquetage est utile pour produire des paquetages cohérents. Le système de compilation des paquetages peut être configuré pour exécuter automatiquement des tests du respect des règles et refuser un téléversement des paquetages qui ne respectent pas la politique.
- Surveillance
Le système de compilation permet la surveillance des dernières compilations. Une interface web fournit un rapport de la dernière compilation, les journaux de compilation. Une liste de diffusion peut être utilisée pour recevoir les notifications de compilation. En cas de travail en équipe, elle permet à tous les membres de l’équipe de suivre les dernières modifications.
- Automatisation
Certains paquetages spécifiques peuvent exiger l’exécution de tâches supplémentaires lors de leurs mise à jour. Envoyer un courriel, extraire des fichiers pour mettre à jour un site web ou d’autres tâches peuvent être confiées à un script qui les réalisera automatiquement quand ce paquetage spécifique est mis à jour. C’est la méthode utilisée pour extraire les fichiers de l’installateur de Mageia dans l’arborescence du miroir quand un paquetage est mis à jour.
Comment installer un système de compilation Mageia ?
Cela sera le sujet d’un autre billet.
Configuration des logiciels
L’installation d’un logiciel n’est habituellement que la première partie du travail réalisé par les administrateurs système. La seconde partie est la configuration du logiciel. Le paquetage assure la première partie de la configuration initiale, cependant davantage de travail est souvent nécessaire.
Il existe plusieurs façons de procéder :
- Éditer manuellement la configuration directement sur le serveur
- Éviter toute configuration manuelle sur un serveur, mais utiliser un outil de gestion de la configuration comme Cfengine, Puppet ou Ansible pour le faire à votre place.
En utilisant un outil de gestion de la configuration, celle-ci n’est pas réalisée directement sur les serveurs, mais les règles écrites dans le dépôt de gestion de la configuration seront appliquées automatiquement par l’outil de gestion de la configuration. Cela n’est pas aussi rapide qu’une édition directe sur le serveur, mais il y a de nombreux avantages :
- Gérez votre infrastructure comme un projet logiciel
Les outils de configuration permettent de gérer l’infrastructure comme n’importe quel autre projet de développement logiciel ordinaire. Beaucoup d’outils à disposition des développeurs sont utilisables : gestion des versions sources, soumission de correctifs, revue de code, tests automatisés, etc.
- Travail en équipe
En cas de travail en équipe, vous pouvez enregistrer vos règles de configuration du serveur dans un dépôt commun de gestion des versions sources, rendant possible le suivi et la vérification de tous les changements apportés aux serveurs par tous les membres de l’équipe.
- Documentation
Détenir de la documentation au sujet des logiciels installés sur les serveurs et comment ils sont configurés est très utile, surtout quand il peut y avoir plusieurs personnes à travailler dessus. Cependant, un problème très fréquent avec la documentation est que si quelqu’un l’a bien écrite à l’origine, personne ne la maintien ensuite, causant sa rapide obsolescence. Il est très facile d’effectuer un changement et d’oublier de le documenter, ou d’oublier qu’une documentation existe quelque part et doit être mise à jour. Posséder une documentation précise est important, et quelquefois, avoir une documentation obsolète, fournissant une information erronée peut être pire que de ne pas avoir de documentation. Le dépôt de gestion de la configuration peut être vu comme une sorte de documentation sur l’infrastructure, et comme c’est ce qui est actuellement utilisé pour mettre en place l’infrastructure, il est très probablement plus à jour que n’importe quelle autre documentation. En développement logiciel, avoir du code auto-documenté, ou du code qui peut être compris sans documentation est en général préférable à une documentation maintenue séparément. Et c’est la même chose pour l’administration système.
- Tests de l’environnement et de la reproductibilité
Utiliser un outil de configuration permet de reproduire facilement la configuration d’un serveur sur un autre serveur. C’est utile en cas de besoin de remplacer ou d’ajouter un serveur, ou encore pour mettre en place un environnement de test.
- Maintenir une configuration correcte
L’outil de gestion de la configuration va s’exécuter à intervalles réguliers pour vérifier que la configuration est toujours correcte et n’appelle pas de modifications.
- Réutilisation
Comme en développement logiciel, l’utilisation d’un outil de gestion de la configuration permet de réutiliser les composants que vous avez créés. Il est généralement possible de créer des modules dotés de paramètres pour adapter le comportement du module. On peut quelquefois trouver des modules existants sur internet, mais malheureusement, la plupart d’entre eux nécessiteront d’importantes modifications pour les adapter à votre besoin. Les premières versions de puppet étaient dépourvues de fonctionnalités importantes telles que la classe paramétrée, aussi la création de composants était difficile, mais cela a évolué.
Quel outil de gestion de la configuration utiliser ?
Quand nous avons commencé la mise en place des serveurs de Mageia, au début du projet Mageia, nous avons décidé d’utiliser puppet, après avoir envisagé différent outils disponibles. Puppet semblait être l’outil de gestion de la configuration le plus intéressant du moment. Depuis ces dernières années, les choses ont beaucoup évolué dans ce domaine, et il existe d’autres alternatives que vous pourriez tester avant de décider laquelle choisir :
Les modules pour puppet de Mageia
Les modules pour puppet que nous utilisons pour configurer les serveurs sont disponibles sur un dépôt svn.
Ce qui doit être amélioré
Le processus actuel est bon, mais il reste certaines choses à améliorer. Si vous désirez contribuer, mais sans savoir ce qui pourrait être utile, voici quelques idée :
- Génération automatique des paquetages
Certains langages comme Perl, Python ou Ruby fournissent leur propre système d’empaquetage pour les bibliothèques. Beaucoup de gens apprécient l’utilisation de ces paquetages plutôt que les paquetages RPM car les paquetages de la distribution ne sont pas toujours disponibles ni à jour. L’avantage des premiers paquetages cités est d’être construits en amont, donc immédiatement disponibles. L’inconvénient est qu’ils ne sont généralement pas bien intégrés avec le reste du système et nécessite l’utilisation de deux systèmes différents d’empaquetage, ce qui complique les choses. Bien souvent les gens ne sont pas des empaqueteurs expérimentés, aussi utilisent-ils simplement le paquetage spécifique du langage disponible, car ils pensent que l’empaquetage est trop difficile ou bien n’ont pas le temps de le faire. Si la conversion à partir de ces paquetages vers RPM était plus simple, on bénéficierait d’une bonne disponibilité de paquetages bien intégrés avec le reste du système. Heureusement, ces paquetages spécifiques du langage contiennent en général toute l’information nécessaire à l’empaquetage RPM (descriptions, licence, dépendances, etc.), aussi la création d’un paquetage RPM est souvent une simple conversion de cette information dans le format RPM et peut-être automatisée. Grâce au travail de Jérôme Quelin sur cpan2dist, il est possible de générer des paquetages RPM Mageia automatiquement à partir de modules CPAN. C’est ce qui nous permet d’avoir 3300 paquetages perl disponibles dans la distribution.
Nous avons besoin d’outils similaires pour python, ruby et autres paquetages du langage.
- Paramétrage du système de compilation
Nous utilisons un système de compilation pour compiler nos paquetages car nous avons déjà un système de compilation disponible pour compiler la distribution Mageia. Ce n’est donc pas beaucoup plus de travail de le configurer pour avoir aussi notre propre dépôt de paquetages. Cependant, l’installation d’un système de compilation n’est pas actuellement une tâche facile et ceux qui ne compilent pas une distribution complète ne veulent pas passer trop de temps à configurer un système de compilation. Nous avons donc besoin d’améliorer le processus de la configuration du système de compilation pour le simplifier. Ce qui manque actuellement est la documentation pour expliquer comment le faire, en utilisant notre module puppet. Un prochain billet sur ce blog expliquera cela.
- Support de OBS
Une autre alternative consiste à utiliser OBS (Open Build Service), qui est un système de compilation agréable avec la prise en charge de multiples distributions. Cependant, il est encore peu adapté pour Mageia. Nous devons régler cela afin qu’il devienne possible de gérer les dépôts de Mageia avec OBS.
- Prise en charge de Mageia par Ansible et Salt Stack
Ansible et Salt Stack sont tous les deux des outils intéressants pour la gestion de la configuration. Cependant ils sont toujours dépourvus de la prise en charge d’urpmi pour l’installation des paquetages. Dernière nouvelle : Philippe Makowski travaille sur un module urpmi pour Ansible, mais ce n’est toujours pas intégré en amont, et les contributions sont bienvenues.