Installation de logiciels sous Linux : Les
Systèmes de Paquets
J'ai créé ce sujet, il y a peu sur le forum d'un club de réseau
(les Tontons Fraggeurs) dont certains membres étaient intéressé par
GNU/Linux et en particuliers Ubuntu, distribution que j'utilise
également.
Il s'adresse à des débutants Linux venant de Windows et visent à
expliquer sommairement les systèmes de paquets et leurs intérêts.
Les parallèles avec le système de Microsoft ne sont pas là dans le
but de troller, mais d';expliquer les différences de philosophies
dans la gestion des logiciels.
- Introduction:
Un petit post (gros finalement) pour expliquer une des GROSSEs
différences de la majorité des distributions linux par rapport à un
système Windows: les systèmes de packages (ou paquet en
français).
Il en existe un certain nombre mais il y en a 2 très
courants:
- Aptitude: vient de Debian et est utilisé par toutes les distributions qui
en découlent comme Ubuntu (Synaptique est une interface graphique
du système aptitude). Les paquets sont des fichiers .deb (comme
Debian ;-) )
- RPM: Redhat Package Manager (fichier .rpm) utilisé par les
ditributions Red Hat, Fedora Core, Mandrake/Mandriva, SuSE... via différentes interfaces graphiques ou non
(rpm, urpmi, yum ...)
D'autres distributions peuvent avoir d'autres systèmes de packages
mais fonctionnent globalement sur le même principe (Gentoo, SuSE, ....)
- Un système de "packages" c'est quoi?
C'est le système qui gère les logiciels et leurs dépendances.
C'est-à-dire qui va gérer proprement les installations, mises à
jour et désinstallations.
Par exemple, pour installer Firefox en passant par Synaptic sur
Ubuntu, permet d'installer la dernière version compatible et les
dépendances (par exemple les librairies de gestions des jpg ou du
gif...) dans leurs bonnes versions. Alors que l'installation à la
main à partir des fichiers .tar.gz ou .tar.bz2 risque de demander
pas mal d'efforts avant d'arriver à un Firefox fonctionnel (et
aboutir à un système bien bordelique)
Les avantages des systèmes de paquets:
- installations/désinstallations de n'importe quel logiciel de
façon propre et standardisée pour une distribution (executables,
raccourcis et fichiers de configuration aux bons endroits)
- gestions avancées des dépendances, ce qui évite les mauvaises
surprises
- mises à jour facilitées de l'ensemble du système: là où
WindowsUpdate ne s'occupe QUE de Windows/IE/Outlook Express, un
système de packages va mettre à jour tous les logiciels installés
grâce à lui: du noyau GNU/Linux, au lecteur multimedia en passant
par la suite bureautique et les outils systèmes. Un contrôle sur
les mises à jour est cepedant possible pour éviter l'installation
de n'importe quelle mise à jour.
Les inconvénients:
- connection internet haut débit quasi obligatoire
- parfois des décalages temporels entre la sortie d'une nouvelle
version d'un logiciel et sa disponibilité pour un système de paquet
donné (varie de quelques heures à quelques semaines suivant la
popularité et/ou l'importance de la mise à jour)
Exemple: Firefox 1.0.7, il a fallu attendre 1~2 jours entre sa
sortie et sa disponibilité sur les dépôt officiels d'Ubuntu 5.04
(moins d'une demi-journée sur 5.10) car il a été testé et compilé
pour s'ajuster eu mieux avec le reste de la distribution.
- Le bon réflexe:
On y arrive donc:
Sous Windows, le réflexe pour installer un logiciel est soit de
l'acheter ou de télécharger sur internet un installeur à executer.
Cet installeur décompresse puis copie des fichiers dans un ou
plusieurs répertoires cibles et modifie souvent la base de
registre, sans se soucier de la présence ou non d'autres
programmes.
Sous Linux, le bon réflexe pour installer un logiciel est de passer
systématiquement par le gestionnaire de paquet et de faire une
recherche dans la base de logiciel.
En effet, le principal mauvais réflexe qui perd les débutant sous
Linux, est de chercher à télécharger le logiciel sur le site du
projet. En général, on y trouve les sources (fichier .tar.gz ou
.tar.bz2) qui nécessitent plusieurs manipulations en ligne de
commande ( ./configure, make, make install) et souvent donnent des
erreurs de dépendance qui entraînent dans un cercle vicieux de
téléchargement/compilation/problème de dépendance fastidieux et qui
abouti à un système bordelique au possible.
Sous GNU/Linux, les dépendances peuvent être nombreuses en raison
de la grande modularité: dépendances à une bibliothèque graphique
comme GTK sous Gnome ou Qt pour KDE, la gestion des types de
fichiers (codec jpeg, tiff, png, video, compression, encodage ...)
ou des emprunts à d'autre programmes pour certaines
fonctions.
Exemple de dépendance de firefox (non-exhaustif):
- libgtk2.0-0 : pour l'interface graphique (boutons, menus
...)
- libjpeg62 : pour le rendu des image jpg
- libpng12-0 : pour le rendu des image png
- ...
Exemple de dépendance sous Windows: DirectX 9.0 pour Battelfied 2,
codec DivX pour MediaPlayer Classic ...
NOTA: les drivers 3D nVidia et ATI bien que propriétaires sont
souvent disponibles sur des dépôts alternatifs.
- Comment ça fonctionne:
Dans le cas d'une installation:
En fait, c'est assez simple à partir du moment où on sait se que
l'on veut installer (fonctions de recherche du gestionnaire de
paquets, forums, google...).
- Téléchargement d'une liste de logiciels disponibles
- Construction d'un arbre des dépendances
- Recherche dans la liste du logiciel demandé
- Proposition de logiciels conseillés qui peuevnt apporter un
plus, au logiciel demandés (dépendances optionnelles, logiciel
complémentaire mais non-dépendant...)
- Recherche des dépendances installées sur le système, si elle
sont suffisantes, le gestionnaire télécharge et installe le(s)
logiciel(s) demandé(s) => fin
- Propose l'installation des dépendances nécessaires au bon
fonctionnement du logiciel demandé => si validation par
l'utilisateur, téléchargement et installation puis fin.
Dans le cas d'une mise à jour, le procédé est presque le
même:
- Téléchargement d'une liste de logiciel disponible
- Construction d'un arbre des dépendances
- Recherche des différences de version
- Propose la mise à jour de tous les paquets ayant une version
supérieure disponible et de leurs éventuelles dépendances.
- Proposition de logiciels conseillés qui peuevnt apporter un
plus, au logiciel demandés (dépendances optionnelles, logiciel
complémentaire mais non-dépendant...)
- 5- Si validation par l'utilisateur => téléchargement et
application des modifications
- 6- Le gestionnaire demande souvent quoi faire dans le cas des
fichiers de configuration lors qu'ils ont été modifiés depuis
l'installation.
Les serveurs mettant à disposition ces listes et les logiciels sont
appelés "dépôts" ou "repositories". Ils ont pour la plupart des
utilités différents: dépôts de mise à jour officiel, dépôts
officieux, dépôts de mise à jour de sécurité, dépôts de "backport"
(port de logiciels récents sur d'anciennes distributions)....
Pour informations, les serveurs Ubuntu que j'utlise proposent 17689
paquets. Il y a de quoi faire.
- Les exceptions:
Il y a quand même quelques exceptions.
- Ce sont essentiellements des logiciels propriétaires comme les
jeux 3D. Par exemple, UT2004 ou Neverwinter Night qui utilisent
leurs propres installeurs. Cependant, ils ne mettent pas
spécialement le foutoir: un répertoire avec les données et
executables + un fichier ou un répertoire caché dans le répertoire
utilisateur pour la configuration personnelle et les sauvegardes.
Plus généralement, les logiciels dont la licence d'utilisation ne
permet pas de les diffuser par le système de dépôts.
- Les logiciels expériementaux/en cours de développement dont
l'avancement ne permet pas une stabilité suffisante pour les
proposer dans les listes de logiciels. Ces logiciels sont, de
toutes façons, réservés aux utilisateurs confirmés et aux
développeurs capables de jongler avec les bugs.
- certains logiciels que les mainteneurs des dépôts n'ont pas
jugés utiles de mettre à disposition. Ils sont très rares et soit
disposent d'alternatives de meilleure qualité, soit sont très
spécifiques à un usage ou encore ne sont plus maintenus à jour par
leurs développeurs et le projet est considéré comme abandonné et/ou
obsolète.
- Ajouts:
- Mise à jour de tout le système:
Avec le système Aptitude de Debian, il est possible de mettre à
jour entièrement le système avec très peu de manipulations. Par
exemple, passer de Ubuntu "Hoary Hedgedog" 5.04 à Ubuntu "Breezy
Badger" 5.10 en moins de 5 minutes de configuration. Ensuite le
plus long consiste à attendre le téléchargement des paquets et
leurs installation. Un reboot est voilà un système complètement à
jour sans perte des anciennes configurations, sans avoir besoin de
réinstaller les logiciels rajoutés après la première
installation.
- Il est possible d'installer des logiciels en respectant le
système de packages sans passer par Synaptic, à partir du moment où
on dispose d'un fichier .deb. En fait, il faut utilisés la commande
à l'origine du système: dpkg
CODE
dpkg --install nom fichier.deb
Pour plus d'info: man est aussi ton ami:
CODE
man dpkg
permet d'avoir le manuel de la fonction. la commande man marche
pour 95% des logiciels.
- Convertir des fichiers d'installation pour tel ou tel système
de package ou de sources compressées (.tar.gz ou .tar.bz2): la
commande alien.
Extrait du man alien:
CODE
EXAMPLES
Here are some examples of the use of alien:
alien --to-deb package.rpm
Convert the package.rpm into a
package.deb
alien --to-rpm package.deb
Convert the package.deb into a
package.rpm
alien -i package.rpm
Convert the package.rpm into a
package.deb (converting to a .deb
package is default, so you need
not specify --to-deb), and install
the generated package.
alien --to-deb --to-rpm --to-tgz --to-slp
foo.deb bar.rpm baz.tgz
Creates 9 new packages. When it
is done, foo bar and baz are available
in all 4 package
formats.
Les frontières entre systèmes de packages tombent (par contre
attention aux dépendances...)!
Pour plus d'information sur alien:
CODE
man alien
Il existe aussi le logiciel checkinstall qui permet de faire des
paquets (RMP, .deb, tgz):
- décompresser les sources dans un répertoire nommé selon le
paquet à créer et sa version
- faire les deux premières étapes d'une installations à la main:
./configure et make
- lancer en root checkinstall qui va générer le paquet et
l'installer
- Les dépôt et leurs mirroirs:
Les dépôts configurés par défaut sont les serveurs principaux de la
distribution. En cas de grosse mise à jour, ils peuvent parfois
être saturés. Il existe cependant plein de serveurs mirroirs dont
le contenu est identique et mis à jour simultanément.
Il y a peut être des mirroirs près de chez vous: Par exemple pour
Fedora Core/Red Hat un gros mirroir est hébergé par le CIRIL à
Nancy, et pour Ubuntu et Debian, il a un mirroir à l'université de
Strasbourg.
Ces miroirs sont moins saturés et possèdent des bandes passantes
très larges (fibre optique, connection x Gbit ....)
Un outils permet de choisir les meilleurs dépôts: netselect
Merci à Duke98, TuXXX, Scaramouche, theocrite et noobietux pour
leurs contributions (corrections, ajouts, remarques...)
EDIT 1: ajout de la seconde partie du post
EDIT 2: ajout des "Petits ajouts" et correction de quelques fautes
d'ortographes, petites modifications divers, ajout de la notes sur
les drivers ATI et nVidia.
EDIT 3: remarque de Duke98 et corrections de quelques fautes de
plus
EDIT 4: ajout des liens vers les tutoriaux dédiés aux
distributions
EDIT 5: corrections et ajouts selon les remarques (nombreuses) de
TuXXX, Scaramouche, theocrite et noobietux.