Looking for Computer Science  & Information Technology online courses ?
Check my new web site: https://www.yesik.it !


Une des grandes forces de Debian est sa robustesse. Surtout si vous installez la version stable. Le prix à payer pour cette robustesse est d'accepter de ne pas disposer des versions les plus récentes des logiciels. Voire, d'être contraint d'utiliser des versions datant parfois de plusieurs années.

Ce n'est pas nécessairement un problème sur un serveur, où il est souvent plus souhaitable de faire tourner des logiciels éprouvés, plutôt que de disposer des toutes dernières nouveautés. D'autant plus que les mises à jour de sécurité, elles, sont régulièrement diffusées.

Par contre, c'est plus gênant si vous désirez essayer une version plus récente de votre logiciel préféré sur votre machine personnelle. Ou si vous voulez exploiter les nouveautés d'une bibliothèque dans vos développements.

Traditionnellement, la solution serait de dire "tant pis pour les paquets, j'installe à partir des sources...". Si cela reste sans doute nécessaire quand vous voulez le nightly build d'un produit – il y a tout de même de grandes chances que vous trouviez une version adaptée à vos besoins dans les dépôts Debian testing ou unstable. D'un autre côté, sacrifier la stabilité de l'ensemble de votre système Debian juste pour une bibliothèque ou une application, c'est un peu dommage.

Heureusement, une solution intermédiaire existe: en effet, apt(8), le gestionnaire de paquets de Debian, accepte d'installer des logiciels issus de différentes versions de Debian. C'est ce que nous allons voir maintenant.

Stable, testing et les autres

Le projet Debian maintient en parallèle plusieurs distributions
Nom symboliqueDebian 4.0 (2007)Debian 5.0 (2009)
oldstable sarge etch
stable etch lenny
testing lenny squeeze
unstable sid sid

Le projet Debian maintient en parallèle plusieurs versions: comme son nom l'indique stable est la version la plus fiable du système. testing est la version candidate pour devenir stable. À l'inverse, la version oldstable est le nom de code de la version stable précédente. Enfin, unstable – qui s'appelle toujours sid – est la version la plus mouvante et la moins fiable des trois. Pour plus d'informations, je vous renvoie sur le site officiel du projet Debian: http://www.debian.org/releases/.

Il existe en réalité plusieurs moyens de procéder pour installer des paquets issus de versions différentes de Debian sur le même système. La technique que je vais présenter ici a l'avantage d'installer non seulement le paquet souhaité à partir d'une autre version de Debian, mais aussi d'installer tous les paquets requis à partir de cette même version. En effet, les paquets récents nécessitent souvent l'installation de dépendances tout aussi récentes.

Attention:

Cette solution a aussi les inconvénients de ses avantages: certains paquets nécessitent la mise à jour de nombreuses dépendances. Attention donc à ne pas basculer une grande partie de votre système en testing ou unstable juste pour essayer un logiciel. Soyez bien conscient de ce que vous faites...

En pratique

Ici, mon exemple sera l'installation de libjava-gnome-java. Ce paquet est disponible dans Lenny (la version stable au moment où j'écris). Mais dans une version relativement obsolète: or un certain nombre de méthodes ont été dépréciées récemment dans cette bibliothèque – et je préférerais donc pouvoir effectuer mes développements en utilisant l'API la plus récente possible.

La première chose à faire va être de modifier le fichier /etc/apt/sources.list pour ajouter les dépôts de la version de Debian qui contient le logiciel qui vous intéresse. Dans mon cas, il s'agissait de squeeze (testing à ce moment):

sh# echo 'deb http://ftp.de.debian.org/debian squeeze main' >> /etc/apt/sources.list
sh# echo 'deb http://security.debian.org/ squeeze/updates main' >> /etc/apt/sources.list
sh# apt-get update

Remarque:

Accessoirement, vous pouvez aussi ajouter les dépôts sources – mais ça ne m'intéressait pas dans ce cas:

sh# echo 'deb-src http://ftp.de.debian.org/debian squeeze main' >> /etc/apt/sources.list
sh# echo 'deb-src http://security.debian.org/ squeeze/updates main' >> /etc/apt/sources.list

Contrairement à ce qui se passe habituellement, nous avons donc dans /etc/apt/sources.list les dépôts de plusieurs versions de Debian. Ce qui pose problème: en effet, par défaut apt-get installe toujours la version la plus récente disponible dans les dépôts qu'il connaît. Autant dire qu'en l'état, à la prochaine mise à jour, tout mon système passera en testing. Ce n'est pas ce que je veux. Je veux rester en stable. Mais juste installer un logiciel et ses dépendances à partir de testing.

Pour faire comprendre cela à apt, il faut l'indiquer explicitement dans le fichier /etc/apt/apt.conf:

sh# echo 'APT::Default-Release "stable";' >> /etc/apt/apt.conf

Maintenant apt sait qu'il ne doit installer par défaut que des paquets de stable (lenny en ce moment).

Par contre, comme apt connaît maintenant les dépôts de squeeze, je peux demander explicitement l'installation de paquets issus de cette version:

sh# apt-get install --target-release squeeze libjava-gnome-java

Et voilà! apt vous présente la liste des paquets qui seront installés. Ainsi que celle de ceux qui seront mis à jour. Je vous conseille d'être particulièrement attentif à la liste des paquets mis à jour. Histoire de vous assurer que rien de critique ne basculera dans une autre version que stable au cours du processus. Ou au moins d'accepter consciemment ce risque...

Examiner les versions installées

Une fois l'installation effectuée, votre système sera un mix de plusieurs versions de Debian. Vous pouvez utiliser apt-cache pour vérifier les versions disponibles et celles installées des différents paquets de votre système.

A titre d'illustration, dans mon cas, voici les versions connues par apt de libjava-gnome-jave. La version installée est marquée par trois étoiles. Remarquez que c'est bien celle de squeeze:

sh# apt-cache policy libjava-gnome-java
libjava-gnome-java:
  Installed: 4.0.15-1
  Candidate: 4.0.15-1
  Version table:
 *** 4.0.15-1 0
        500 http://ftp.de.debian.org squeeze/main Packages
        100 /var/lib/dpkg/status
     4.0.7-1 0
        990 http://ftp.de.debian.org lenny/main Packages

Et regardez maintenant la version de libc6:

sh# apt-cache policy libc6
libc6:
  Installed: 2.10.2-9
  Candidate: 2.10.2-9
  Version table:
 *** 2.10.2-9 0
        500 http://ftp.de.debian.org squeeze/main Packages
        100 /var/lib/dpkg/status
     2.7-18lenny2 0
        990 http://security.debian.org lenny/updates/main Packages
     2.7-18lenny1 0
        990 http://ftp.de.debian.org lenny/main Packages

C'est également celle de squeeze: elle a été mise à jour au cours du processus. Or c'est une bibliothèque virtuellement utilisée par tous les programmes d'un système Debian. Autrement dit, j'ai peut-être mis en danger la stabilité de mon système lors de cette installation. Mais c'est un risque que j'ai accepté de prendre sur ma machine (virtuelle!-) de développement. A titre de comparaison regardons un paquet sans relation avec libjava-gnome-java:

sh# apt-cache policy perl
perl:
  Installed: 5.10.0-19lenny2
  Candidate: 5.10.0-19lenny2
  Version table:
     5.10.1-12 0
        500 http://ftp.de.debian.org squeeze/main Packages
 *** 5.10.0-19lenny2 0
        990 http://ftp.de.debian.org lenny/main Packages
        100 /var/lib/dpkg/status

Le paquet perl ne fait pas parti des dépendances du paquet que j'ai installé à partir de squeeze. Il n'a donc pas été touché et est resté sous lenny.

Mises à jour

Avec cette configuration, même avec un upgrade, les paquets non passés de force sous squeeze resteront sous lenny:

sh# apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Même si apt connaît dans squeeze une version plus récente des paquets installés, sauf demande expresse de votre part, il n'installera que les paquets disponibles dans stable (lenny).

Dernière remarque, le jour où squeeze deviendra stable, votre système sera entièrement mis à jour sous squeeze. Quelque part, vous pouvez voir la procédure présentée ici comme un moyen d'avoir un avant-goût de la prochaine version de Debian...