Gérer des problèmes de dépendances en .deb

Un petit billet technique pour régler (une partie) des problèmes de dépendances qui peuvent parfois bloquer l’installation de certains paquets ou simplement vous laisse des paquets non mis à jour lors des upgrade ou mises à jour automatiques sur une Debian (mais aussi sur la plupart des dérivées).
Le but étant d’être toujours ainsi après un apt-get install, upgrade ou autoremove :
0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.

Avant toute chose, il faut d’abord s’assurer que les dépôts sont au carré car il peut y avoir des solutions inextricables mais je pars du principe que votre sources.list est relativement propre. Je pars également du principe que ceux qui ont taté à l’apt-pinning l’ont fait dans les règles de l’art sous peine de se retrouver rapidement avec un système bancal. Pour revenir à un sources.list au carré, je vous conseille ce site qui permet de générer ce qu’il faut selon vos besoins. Une fois cela fait ne pas oublier de faire un apt-get autoclean puis update pour recharger la liste des paquets disponibles avec cette nouvelle configuration.

Mais même sans avoir voulu chevaucher les dépôts les plus hasardeux, une simple utilisation du dépôt backports peut amener un cas comme celui-ci :
sudo apt-get install libqtwebkit4:i386

Les paquets suivants contiennent des dépendances non satisfaites : 
libqtwebkit4:i386 : Dépend: libgstreamer-plugins-base0.10-0:i386 (>= 0.10.31) mais ne sera pas installé
E: Impossible de corriger les problèmes, des paquets défectueux sont en mode « garder en l'état ».

En cherchant un peu, on trouve des conseils pas toujours recommandés comme ici
Certes, cela peut régler le problème s’il ne s’agit que d’un paquet bancal mais si des tas de paquets en dépendent, vous risquez de vous retrouver sans certains paquets essentiels comme Gnome, ce qui peut être un peu embêtant. En cherchant un peu plus, on trouve sur les forums des conseils parfois plus avisés et c’est ceux que je vais relayer dans ce billet.

Utiliser la commande aptitude -s (simulation donc aucun risque) afin d’avoir plus de détail sur le paquet qui coince :

aptitude install -s libqtwebkit4:i386

Ce qui nous donne :

Les paquets suivants ont des dépendances non satisfaites : 
liborc-0.4-0 : Casse: liborc-0.4-0:i386 (!= 1:0.4.19-1~bpo70+1) mais 1:0.4.16-2 doit être installé.
liborc-0.4-0:i386 : Casse: liborc-0.4-0 (!= 1:0.4.16-2) mais 1:0.4.19-1~bpo70+1 est installé.
Les actions suivantes permettront de résoudre ces dépendances :
Supprimer les paquets suivants : 1) audacity 2) brasero 3) calibre 4) cheese 5) ekiga 6) empathy 7) evolution 8) evolution-data-server 9) evolution-plugins 10) ffmpeg 11) gcompris 12) gdm3 13) gimp 14) gir1.2-clutter-gst-1.0 15) gir1.2-goa-1.0 16) gir1.2-javascriptcoregtk-3.0 17) gir1.2-rb-3.0 18) gir1.2-totem-1.0 19) gir1.2-webkit-3.0 20) gnome

Bon j’ai arrêté là la liste des réjouissances mais vous comprenez bien qu’il y a du monde qui dépend du paquet qui coince (ici liborc-0.4-0) et qu’une suppression sauvage aurait fait des dégâts lors d’un autoremove et je me serais alors retrouvé en ligne de commande avec tous mon environnement de bureau et ses outils désinstallés.

Mais on a déjà circonscrit le problème et à partir d’ici, on peut aller dans synaptic par exemple pour forcer une autre version du paquet ou continuer en ligne de commande comme je vais vous montrer. Pour savoir quels sont les différentes versions du paquet qui pose problème, on va utiliser la commande apt-cache policy :

apt-cache policy liborc-0.4-0

liborc-0.4-0: 
Installé : 1:0.4.19-1~bpo70+1
Candidat : 1:0.4.19-1~bpo70+1
Table de version :
*** 1:0.4.19-1~bpo70+1 0
100 http://ftp.debian.org/debian/ wheezy-backports/main amd64 Packages
100 /var/lib/dpkg/status
1:0.4.16-2 0
500 http://ftp.debian.org/debian/ wheezy/main amd64 Packages

Ici, on voit que c’est la version backports qui est installée car elle est prioritaire mais que si je veux installer le paquet du début, il va falloir que je repasse à la version stable par la commande apt-get install précisant la version :

sudo apt-get install liborc-0.4-0=1:0.4.16-2 -V

Forcément, si des paquets dépendent de la version backports, ils vont également être supprimés mais la liste ne devrait pas être aussi critique que précédemment et il faudra peut-être alors les réinstaller en version stable si vous en avez besoin.

Voilà, une façon relativement propre de remettre son système d’équerre et de ne plus tourner en rond avec des problèmes de dépendances à n’en plus finir.

Vus : 12256
Publié par alterlibriste : 146