Libzypp/Gestion des paquets
Sommaire
Gestion des paquets et résolution des dépendances
Introduction
openSUSE et SUSE Linux Enterprise utilisent rpm comme format de paquets. L'outil de base pour cela est le programme RPM (RPM Package manager), qui gère l'installation, la suppression et l'interrogations des paquets.
RPM s'assure que les prérequis d'un paquets sont vérifiés, par exemple si un paquet X nécessite aussi la bibliothèque libY et que vous essayez d'installer X sans avoir Y déjà installé, rpm refusera d'installer X et vous donnera un message d'erreur vous informant que libY manque. Par contre, RPM n'a pas de fonctionnalité pour installer automatiquement un paquet qui contiendra la bibliothèque libY.
Il y a différents programmes qui permettent d'utiliser rpm (et d'autres formats de paquetages) pour réaliser les opérations suivantes avec une interface utilisateur agréable:
- Installer un paquet et toutes ses dépendances automatiquement.
- Télécharger ces paquets automatiquement d'un serveur distant.
- Supprimer des paquets.
- Mettre à jour des paquetss avec des versions plus récentes.
Libzypp
SUSE Linux 10.0 proposait les outils suivants pour cela :
- YOU - YaST online update (outil de mise à jour)
- YaST package manager ("yast sw_single") pour l'installation et la suppression (mais pas pour la mise à jour)
- apt-rpm comme alternative à YaST et YOU.
Avec SUSE Linux 10.1, SUSE a intégré un nouvel outil de résolution des dépendances appelé "libzypp".
libzypp est l'intégration du gestionnaire de paquetage YaST et de libredcarpet de Ximian. Ces deux outils étaient utilisés par Novell - Red Carpet et YaST package manager - et il a été décider de les fusionner afin d'obtenir le meilleur des deux.
Les avantages pour SUSE Linux sont:
- Un meilleur moteur de résolution des dépendances.
- Plus d'information pour savoir pourquoi un paquetage est installé ou pourquoi aucune solution ne peut être trouvée.
- Une meilleure intégration de toutes les fonctionnalités qui avaient été ajoutées ces dernières années.
- Une ligne de commande performante
- Une même méthode pour gérer les paquetages *et* les correctifs.
- Une gestion des dépendances pour les paquets de mises à jour.
- Une meilleure manière de gérer des sélections de paquets (appelés maintenant "patterns")
- Administration à distance
- Possibilité d'ajouter des dépôts de paquets durant l'installation
- Plus de flexibilité pour la gestion de dépôts (par ex. il est possible d'avoir des pattern additionel pour chaque dépôt).
- Dépendances additionnelles basées sur le language (pour les polices, les traductions, etc.) ou le matériel (pour les pilotes)
Evolution
- Ainsi, suite à ses rachats consécutifs de Ximian et SuSE GmbH, Novell décide de fusionner les systèmes RedCarpet et YaST package manager à son système Zen Management Network, destiné à la gestion de grand parc hétérogène. Alors que le gestionnaire résultant, ZYpp, fonctionne bien sur les produits Entreprise avec le démon ZMD, il n'était pas très bien adapté à une distribution grand public, débouchant sur un "fiasco" total : la version openSUSE 10.1 sortit avec un système de paquets fonctionnant très mal à l'origine.
- La version 10.2 corrigeait tant bien que mal les défauts de cette version "ratée" à l'aide de la bibliothèque revisitée libzypp v2, et ZMD fut finalement supprimé définitivement de la version 10.3 d'octobre dernier et réservé uniquement à la version Entreprise. Tandis que ZYpp v3 munissait openSUSE d'un gestionnaire de paquets de niveau équivalent aux autres systèmes de gestion de paquets existants, il souffrait néanmoins de quelques défauts dans son implémentation qui limitait ses performances.
- En mai 2007, à l'occasion de la "29th International Conference on Software Engineering" ont été publiés les résultats du solveur expérimental OPIUM ("OPtimal Package Install/Uninstall Manager"), une première implémentation dans un système linux d'un solveur SAT (Boolean satisfiability problem). Ce nouvel outil est destiné à combler les déficiences, parfois inacceptables, des solveurs de dépendances traditionnels tels que Apt[1]. Le solveur SAT, issu de la théorie de la complexité[2], travaille fondamentalement différemment de ceux-ci (voir [3] pour le fonctionnement de l'algorithme d'Apt et Aptitude). Alors qu'ils doivent gérer un compromis entre la rapidité de la résolution du problème de dépendances et la qualité de cette même solution, le solveur SAT est complet : il ne trouve pas une solution possible, mais il trouve la meilleure solution possible dans un temps très raisonnable.
- Cependant, cette implémentation pour gérer un système Linux n'est pas optimisée : bien qu'il soit beaucoup plus fiable qu'Apt, OPIUM est aussi plus lent, puisque ses concepteurs se sont concentrés avant tout sur la démonstration de la qualité des solutions de l'algorithme. Prenant parti de la Hackweek de Novell en juin 2007 (semaine d'"Innovation libre" pour les employés), des résultats du solveur OPIUM ainsi que des outils serveurs debcheck/rpmcheck[4], Michael Schröder, employé à Nürnberg, démontra la faisabilité de l'implémentation d'un tel solveur dans libzypp, bien meilleur que celui alors implémenté dans libzypp. Les autres membres de l'équipe ZYpp se sont alors occupés à stabiliser et optimiser ZYpp v3 pour la sortie de la 10.3, avant de travailler sur ce nouveau solveur.
- Après quelques mois de travail, les résultats se montrent plus qu'encourageants : les tests de performances de ZYpp v4 par rapport à YUM et Smart, sur la même machine, sont éloquents (voir [5] pour quelques graphiques très parlants) et les "use-case" de Smart[6] sont correctement gérés. Une autre particularité étonnante de ce nouveau ZYpp est sa capacité à invoquer des recommandations matérielles de paquets. Besoin d'installer une nouvelle webcam ? Un simple branchement du matériel et un "zypper update" en ligne de commande (ou via YaST) et ZYpp va essayer de récupérer les bons drivers des dépôts onlines.
- Ainsi, ZYpp v4 est la première implémentation opensource d'un solveur "de production" exprimant les problèmes de résolution des dépendances comme un problème SAT. Il permet une fiabilité optimale et est capable de résoudre des situations où apt et yum échouent, tout en étant doté de très bonnes performances d'exécution, en particulier sur la consommation mémoire.
- ZYpp se veut d'être un projet indépendant de la distribution openSUSE : Il respecte donc une certaine interopérabilité[7] avec le "standard de fait" yum, et peut être utilisé avec d'autres distributions : l'interface graphique PackageKit implémente un backend ZYpp complet. Prenant partie de la souplesse de l'openSUSE Build Service, le gestionnaire de paquets ZYpp est dès à présent disponible pour la distribution Fedora, et des paquets pour Mandriva Linux[8] sont aussi prévus.
Sources
- [1] C. Tukker, D. Shuffelton, R. Jhala, S. Lerner, OPIUM: OPtimal Package Install/Uninstall Manager, 29th International Conference on Software Engineering (ICSE'07), 2007 : http://www.cs.ucsd.edu/~lerner/papers/opium.pdf
- [2] http://en.wikipedia.org/wiki/Computational_complexity_theory
- [3] D. Burrows, Modelling and Resolving Software Dependencies, June 2005 : http://people.debian.org/~dburrows/model.pdf
- [4] F. Mancinelli, J. Boender, R. di Cosmo, J. Vouillon, Managing the Complexity of Large Free and Open Source Package-Based Software Distributions, 21st IEEE International Conference on Automated Software Engineering (ASE'06), 2006
- [5] Yum, Smart and ZYpp speed / memory usage : http://duncan.mac-vicar.com/blog/archives/309
- [6] http://svn.labix.org/smart/trunk/README, http://duncan.mac-vicar.com/blog/archives/310, http://duncan.mac-vicar.com/blog/archives/311
- [7] The greatest unknown openSUSE 11.0 package management feature - Interoperability : http://duncan.mac-vicar.com/blog/archives/314
- [8] http://download.opensuse.org/repositories/zypp:/Backport/