14 votes

Comment déboguer un problème de dépendances non satisfaites?

Note à propos des doublons possibles :

À ma connaissance, ceci n'est pas un doublon de Comment résoudre les dépendances non satisfaites après avoir ajouté un PPA? sinon veuillez le prouver en résolvant le problème de test que je mentionne ci-dessous en utilisant n'importe quelle réponse de là-bas.


Contexte :

J'ai rencontré ce problème auparavant Comment réparer l'installation de wine sur Ubuntu 14.04.3LTS 64 bits. Il a été résolu par une révision manuelle/humaine de toutes les dépendances récursives du package cible (wine).

Reproduire le problème (Cas de test) :

Créons la même situation, simplifiée avec juste 1 package problématique.

  1. Installez une nouvelle Ubuntu 14.04 sur VirtualBox.

  2. Ouvrez software-properties-gtk et activez le dépôt backports.

  3. Obtenez la liste des derniers packages

    sudo apt-get update
  4. Exécutez apt-get -s install wine pour confirmer que wine peut être installé.

  5. Installez le package problématique libcgmanager0 depuis backports

    $ apt-cache policy libcgmanager0
    libcgmanager0:
      Installé : 0.24-0ubuntu5
      Candidat : 0.24-0ubuntu7.5
      Table de version :
         0.39-2ubuntu2~ubuntu14.04.1 0
            100 http://dz.archive.ubuntu.com/ubuntu/ trusty-backports/main amd64 Packages
         0.24-0ubuntu7.5 0
            500 http://dz.archive.ubuntu.com/ubuntu/ trusty-updates/main amd64 Packages
         0.24-0ubuntu7.1 0
            500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
     *** 0.24-0ubuntu5 0
            500 http://dz.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages
            100 /var/lib/dpkg/status

    Forcer apt à installer libcgmanager0 version 0.39-2ubuntu2~ubuntu14.04.1

    sudo apt-get install libcgmanager0=0.39-2ubuntu2~ubuntu14.04.1

Nous nous retrouvons maintenant dans la même situation que l'utilisateur de la question mentionnée dans le contexte, l'installation de wine échoue avec une dépendance non satisfaite, ne montrant que les packages de dépendance de premier niveau.

  • apt-get -s install wine

    Lecture des listes de paquets... Fait
    Construction de l'arbre des dépendances       
    Lecture des informations d'état... Fait
    Certains paquets ne peuvent être installés. Cela peut signifier que vous avez
    demandé l'impossible ou, si vous utilisez la distribution unstable, que certains
    paquets n'ont pas encore été créés ou ne sont pas sortis d'Incoming.
    Les informations suivantes peuvent aider à résoudre la situation :
    Les paquets suivants contiennent des dépendances non satisfaites :
    wine : Dépend: wine1.6 mais ne sera pas installé
    E: Impossible de corriger les problèmes, des paquets défectueux sont en mode « garder en l'état ».
  • apt-get -s install wine1.6

    Lecture des listes de paquets... Fait
    Construction de l'arbre des dépendances       
    Lecture des informations d'état... Fait
    Certains paquets ne peuvent être installés. Cela peut signifier que vous avez
    demandé l'impossible ou, si vous utilisez la distribution unstable, que certains
    paquets n'ont pas encore été créés ou ne sont pas sortis d'Incoming.
    Les informations suivantes peuvent aider à résoudre la situation :
    Les paquets suivants contiennent des dépendances non satisfaites :
     wine1.6 : Dépend: wine1.6-i386 (= 1:1.6.2-0ubuntu4)
    E: Impossible de corriger les problèmes, des paquets défectueux sont en mode « garder en l'état ».
  • apt-get -s install wine1.6-i386

    Lecture des listes de paquets... Fait
    Construction de l'arbre des dépendances       
    Lecture des informations d'état... Fait
    Certains paquets ne peuvent être installés. Cela peut signifier que vous avez
    demandé l'impossible ou, si vous utilisez la distribution unstable, que certains
    paquets n'ont pas encore été créés ou ne sont pas sortis d'Incoming.
    Les informations suivantes peuvent aider à résoudre la situation :
    Les paquets suivants contiennent des dépendances non satisfaites :
     wine1.6-i386:i386 : Dépend: libglu1-mesa:i386 mais ne sera pas installé ou
                                  libglu1:i386
                         Dépend: libgphoto2-6:i386 (>= 2.5.2) mais ne sera pas installé
                         Dépend: libgphoto2-port10:i386 (>= 2.5.2) mais ne sera pas installé
                         Recommande: libsane:i386 mais ne sera pas installé
    E: Impossible de corriger les problèmes, des paquets défectueux sont en mode « garder en l'état ».

Il n'est pas pratique de suivre les dépendances avec apt-get install une par une.

Solution idéale :

Le vrai problème ici

  1. apt n'a pas pu installer libcgmanager0:i386 version 0.39-2ubuntu2~ubuntu14.04.1 parce que le dépôt backports a une priorité inférieure 100 moins que la version 0.24-0ubuntu7.5 du dépôt updates avec 500
  2. apt n'a pas pu installer libcgmanager0:i386 version 0.24-0ubuntu7.5 parce que libcgmanager0:amd64 est installé avec une version différente 0.39-2ubuntu2~ubuntu14.04.1

La solution la plus rapide est de forcer l'installation de la même version i386 depuis backports

sudo apt-get install libcgmanager0:i386=0.39-2ubuntu2~ubuntu14.04.1

ou de le rétrograder (amd64) vers n'importe quelle version des dépôts réguliers

sudo apt-get install libcgmanager0=0.24-0ubuntu7.5

Méthodes/outils que j'ai essayés :

  • La désactivation des PPA n'a aucun lien avec le problème.
  • L'utilisation de aptitude en mode interactif, ne propose que des solutions avec de nombreuses suppressions (>200 !!!).
  • Utiliser apt-get install manuellement en suivant l'arbre des dépendances. Impraticable, car les dépendances de premier et deuxième niveau n'ont pas donné de message significatif sur le conflit.
  • debfoster peut générer les dépendances récursives mais seulement pour les packages déjà installés. Cependant, wine n'est pas encore installé.

Sujet / Mes intérêts :

Disons que je veux installer wine sans connaître le problème du package libcgmanager0 (ou exactement libcgmanager0:amd64=0.39-2ubuntu2~ubuntu14.04.1 qui est déjà installé).

Je cherche une méthode de débogage ou un moyen de connaître le nom du package problématique et de comprendre rapidement ce qui s'est passé.

  1. Comment déboguer les problèmes de dépendances non satisfaites en général?

    Il y a peut-être de nouvelles options dans dpkg/apt/aptitude qui tracent le résolveur de dépendances interne. Cela peut montrer libcgmanager0 dans sa sortie.

  2. S'il n'y a pas de réponse canonique à cela, quelqu'un pourrait-il me montrer une meilleure façon de générer la liste des dépendances récursives ou simuler le résolveur de dépendances avec plus de détails qui pourraient aider à résoudre le problème?

    Pourquoi toutes les dépendances? Parce que je veux vérifier la sortie des commandes ci-dessous pour tous les packages en une seule fois.

    • apt-cache policy
    • apt-get -s install

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X