Le système de dépôts/paquets

Sous Windows, pour installer un nouveau logiciel on va sur le site officiel du logiciel (ou sur tout autre site qui le propose), on le télécharge, puis on l’installe. C’est parfois un exécutable, qui va proposer différentes étapes pour s’installer, c’est parfois une archive (zip en général) qu’il faudra décompresser où on souhaite installer le logiciel (ou bien c’est une archive qui comporte l’exécutable décrit juste avant), ou alors c’est un MSI, un fichier .msi dont l’extension signifie MicroSoft Installer, qui est en réalité un exécutable mais qui simplifie l’installation, la désinstallation et la mise à jour.

Bref, sous Windows on télécharge un fichier, ou double click dessus, on choisit où l’installer et c’est terminé: on sait où il est et il est accessible dans le menu démarré, et aussi sur le bureau si on n’a pas décoché la petite case correspondante.

Sous linux, c’est une autre histoire: avec la diversité des systèmes linux (architecture, arborescence des fichiers, méthode de démarrage des services), on se retrouve avec une situation où le ou les créateurs d’un logiciel ne peuvent pas fournir un simple fichier qui va s’installer où on le souhaite. C’est d’ailleurs pour cette raison que quand on fait un projet sous linux, il faut mieux qu’il soit open source comme ça il suffit de proposer le code source à télécharger et c’est l’utilisateur qui s’emmerde à l’installer et surtout à le compiler.

Cette étape est emmerdante car la compilation ne fonctionne jamais du premier coup: il faut patcher le code ou bien le script de compilation pour l’adapter à son système. Il faut de plus posséder un environnement de développement avec les « headers » et les outils de compilation, et surtout, il faut installer les librairies externe utilisés par le logiciel, ainsi qu’une version de développement (les fameux devel). Après il faut configurer tout comme il faut et prier pendant la compilation ou l’exécution du script de configuration de la compilation ne plante pas sur une erreur totalement incompréhensible. Du genre: « configure: error: Could not link against ! »… against what ? Ou sinon: « configure: error: libgc required. See `config.log’ for more details. » c’est gentil mais libgc est déjà installé et config.log n’aide en rien… SUPER (attention, je ne dis pas qu’il n’y a pas de solution).

Ces problèmes à la con ne peuvent pas être résolu par le grand public, et à vrai dire ils ne devraient pas non plus faire chier le geek à perdre une heure à comprendre comment le gars à écrit son programme (oui, car rien n’est standard). Du coup, au lieu de compiler le logiciel, les personnes qui s’occupent de la distribution vont le faire pour vous. En effet, ce sont les mieux placés pour connaître les spécificités du système de la distribution et les plus aptes à patcher les logiciels pour qu’ils fonctionnent bien.

De là est né les paquets logiciels (http://fr.wikipedia.org/wiki/Paquet_%28logiciel%29) et les systèmes de gestion de paquets. Bon c’est peut-être né avant, mais la raison de leur utilisation intensive dans linux est là. Ainsi dans Linux, pour installer un logiciel on doit télécharger un paquet préparé pour son système, puis l’installer. Rien de bien compliqué finalement.

Oui, c’est simple, c’est pratique, cela assure l’absence de malware, et bla bla bla, et certaines personnes seront aveuglées au point de vous dire que c’est la meilleure chose au monde au point de n’y trouver aucun défaut… alors qu’en fait c’est pour palier à un gros problème de linux: la diversité… qui est aussi un avantage, mais dans ce cas là, c’est un inconvénient puisque cela empêche l’utilisateur d’installer des logiciels correctement.

Un logiciel a souvent besoin d’utiliser une librairie externe, par exemple zlib si le logiciel doit compresser ou décompresser des fichiers zip. Il y a alors un système de dépendance entre les paquets, et biensûr une numérotation de version: tout ceci est pris en compte par le gestionnaire de paquet et il va s’occuper tout seul de résoudre les dépendances et d’installer tous les paquets liés au paquet que l’on souhaite installer.

C’est magique. Sauf qu’il faut que quelqu’un doit créer ce paquet, définir les dépendances, les versions qui vont bien, et même patcher le code (code source ou code de script de configuration, ou autre). Ce quelqu’un est soit une personne de la distribution, qui sera appelé le mainteneur du paquet, il sera possible de télécharger le logiciel « simplement » à partir du gestionnaire de paquet. Ou bien c’est une personne externe qui va empaqueter le logiciel et dans ce cas, en fonction des distributions, il faudra juste un petit peu bidouiller mais cela reste à la porter de tous.

Il se trouve que j’aime bien être à jour des versions, donc le fait d’avoir un intermédiaire pour pouvoir utiliser la dernière version est assez chiant. En particulier quand les nouvelles versions apportent beaucoup de nouvelles fonctionnalités ou améliorations. A ce propos, peu de temps après mon passage à linux (Kubuntu), j’ai découvert Mumble pour discuter oralement sous linux, c’est un logiciel cross-plateforme et cela permet de faire des conférences facilement avec des utilisateurs Windows.

Il y a eu une mise à jour de ce logiciel qui est passé de la version 1.1.8 à 1.2. Le hic, est que la 1.2 apporte de grandes modifications rendant le logiciel incompatible avec la 1.1.x… et dans Kubuntu c’est resté à la 1.1.8. J’ai quand même installé cette « vieille » version avec dégout car je savais que mes amis sous Windows allaient en 2 clicks télécharger la dernière version. De plus, je faisais office de serveur, donc j’étais bloqué à la 1.1.8… heureusement que les anciennes versions étaient toujours disponible et que les windowsiens ont pu l’installer et communiquer avec moi.

Mais voyant le release note de la version 1.2 (http://mumble.sourceforge.net/1.2.0), je me suis dis que c’était trop con de ne pas pouvoir en profiter. La version serveur 1.2.0 était disponible sur linux, mais pas le client. Surement parce qu’un serveur c’est plus facile à packager. J’ai installé le serveur et je tente ensuite de compiler la nouvelle version cliente, je suis donc le guide en ayant pris soin de modifier la commande et d’enlever les paquets manquants et:

$ sudo apt-get install qt4-dev-tools libqt4-dev libspeex1 libspeex-dev libboost-dev libasound2-dev libxevie-dev libxevie1 libssl-dev g++ libspeechd-dev libzeroc-ice-dev libpulse-dev slice2cpp libcap-dev libspeexdsp-dev libprotobuf-dev protobuf-compiler libogg-dev

Les NOUVEAUX paquets suivants seront installés :
comerr-dev gccxml ice33-slice libasound2-dev libaudio-dev libavahi-client-dev libavahi-common-dev libboost-date-time1.38-dev libboost-date-time1.38.0 libboost-dev libboost-filesystem1.38-dev libboost-filesystem1.38.0 libboost-graph1.38-dev libboost-graph1.38.0 libboost-iostreams1.38-dev libboost-iostreams1.38.0 libboost-math1.38-dev libboost-math1.38.0 libboost-program-options1.38-dev libboost-python1.38-dev libboost-python1.38.0 libboost-regex1.38-dev libboost-regex1.38.0 libboost-serialization1.38-dev libboost-serialization1.38.0 libboost-signals1.38-dev libboost-signals1.38.0 libboost-system1.38-dev libboost-system1.38.0 libboost-test1.38-dev libboost-test1.38.0 libboost-thread1.38-dev libboost-thread1.38.0 libboost-wave1.38-dev libboost-wave1.38.0 libboost1.38-dev libboost1.38-doc libcap-dev libdb4.6++ libdbus-1-dev libexpat1-dev libfontconfig1-dev libfreetype6-dev libfreeze33 libgl1-mesa-dev libglacier2-33 libglib2.0-dev libglu1-mesa-dev libglu1-xorg-dev libgssrpc4 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libicu-dev libkadm5srv6 libkdb5-4 libkrb5-dev liblcms1-dev libmng-dev libogg-dev libpq-dev libprotobuf-dev libprotobuf3 libpulse-browse0 libpulse-dev libpulse-mainloop-glib0 libqt4-dev libqt4-opengl-dev libspeechd-dev libspeex-dev libspeexdsp-dev libsqlite0 libsqlite0-dev libssl-dev libxcursor-dev libxevie-dev libxext-dev libxfixes-dev libxft-dev libxi-dev libxinerama-dev libxmu-dev libxmu-headers libxrandr-dev libxrender-dev libzeroc-ice33-dbg libzeroc-ice33-dev mesa-common-dev protobuf-compiler python-dev python2.6-dev qt4-designer qt4-dev-tools qt4-doc qt4-qmake x11proto-evie-dev x11proto-fixes-dev x11proto-randr-dev x11proto-render-dev x11proto-xext-dev x11proto-xinerama-dev xlibmesa-gl-dev
Il est nécessaire de prendre 172Mo dans les archives.
Après cette opération, 577Mo d’espace disque supplémentaires seront utilisés

577 Mo à installer pour compiler l’application… J’ai donc laissé tomber par manque d’espace disque. Sur le forum du projet, j’ai trouvé un sujet intéressant sur le forum officiel:

With linux this isn’t so easy. You’d have to release and maintain a packet for every distro / version. (Ubuntu 9.10/8.10/8.04 RedHat….and so on). This is why you have packet maintainers for the different OSses that feed your releases into the source tree of the distro.

We don’t do that for snapshots/pre release version. So you either have to self-compile or find a packet from someone who did. If you have a specific request for a distribution you might be lucky and someone in this forum can give it to you.

On y vient… il faut trouver un paquet que quelqu’un d’autre a fait… et les libristes aveuglés vous répondront qu’il y aura toujours quelqu’un pour le faire pour vous. Dit autrement, vous serez TOUJOURS dépendant de quelqu’un.

Autre exemple provenant de ce site:

Les dépôts avec vieilles versions des logiciels, ça me gonfle. Les dépôts mettent des plombes à être mis à jour.

Je veux la dernière version de VLC ? Pas dans les dépôts Ubuntu 7.10. Dépôts Debian ? Même pas la peine d’y penser !
Je vais donc sur le site de VLC pour télécharger la dernière version. Je clic: Et là on m’indique gentiment le dépôt Ubuntu.
Gros malin, si je viens télécharger VLC sur le site de VLC, c’est qu’il n’est évidemment pas à jour dans le dépôt, sinon il se serait mis à jour automatiquement. Mince y’a aucune version compilée disponible ! Faut vraiment être une buse.
J’en suis réduit à télécharger les sources et compiler… et installer un paquet manquant… et recompiler… et installer un autre paquet manquant… et recompiler… et installer un paquet manquant… et recompiler…et… et merde !
Pour le coup, les utilisateurs de Windows sont moins emmerdés: Ils téléchargent le fichier .exe, double-clic et terminé !

J’ai aussi mis Firefox à jour, mais au moins la fondation Mozilla a eu l’intelligence de mettre une version compilée à disposition (décompresser, copier, changer le lien /usr/bin/firefox – pas sorcier). Idem pour la mise à jour du plugin Flash: décompresser, copier le fichier, terminé.

Moi depuis, je suis passé à une meilleure distribution. Cependant, pour le grand public c’est une très bonne solution.

Publicités

It begins

Cela faisait longtemps que je voulais exprimer mon avis sur linux, mais pas pour faire de la propagande en montrant que les cotés positifs, comme on le voit souvent, presque du genre: « whouaa, on peut créer des dossiers sans passer par la ligne de commande« , « il existe des bureaux virtuels sous linux, ça pète trop » (même Windows peut aussi avoir ça…), « wahou, les bureaux virtuels peuvent être visualisés sous forme de cube, la classe« .

Mon désir d’expression se faisait surtout ressentir quand linux « buggait », surement parce qu’il y en a marre de voir plein de sites mettre en avant linux en disant qu’il est prêt pour le grand public, alors qu’en réalité… il ne l’est peut-être pas.