Résolution immédiate des dépendances

Dès que vous choisissez d'installer ou de mettre à jour un paquet avec aptitude, aptitude essaie immédiatement de résoudre toutes les dépendances qui ne sont pas satisfaites. Pour chaque dépendance non satisfaite (qu'elle soit du type « Depends », « Recommends » ou « Conflicts »), il effectue les étapes suivantes :

  1. Si la dépendance est une recommandation (« Recommends »), aptitude essaie de deviner s'il s'agit d'une « nouvelle » recommandation, ou si elle était déjà « satisfaite précédemment ». aptitude considère une recommandation comme étant « nouvelle » si le paquet qui la déclare n'est pas actuellement installé, ou si la version installée ne recommande pas de paquet du même nom. Au contraire, une recommandation est considérée comme étant « satisfaite précédemment » si le paquet déclarant cette recommandation est installé, que la version actuelle recommande un paquet du même nom, et que cette recommandation est actuellement satisfaite.

    Par exemple, supposons que la version 1.0 de prog recommande la version 4.0 de libcool1, mais que la version 2.0 de prog recommande la version 5.0 de libcool1, ainsi que le paquet apache. Si vous choisissez de mettre à jour prog de la version 1.0 vers la version 2.0, la recommandation d'apache sera considérée comme « nouvelle » car la version 1.0 de prog ne recommandait pas apache. D'autre part, la recommandation de libcool1 n'est pas « nouvelle », puisque la version 1.0 de prog recommandait libcool1, même s'il s'agissait d'une version différente. Si libcool1 est installée, cette recommandation sera considérée comme étant « satisfaite précédemment ».

    Si l'option de configuration APT::Install-Recommends est vraie (« true »), aptitude essaiera toujours de satisfaire les « nouvelles » recommandations, ainsi que celles qui étaient « satisfaites précédemment ». Toutes les autres seront ignorées par la résolution immédiate. Si cette option est fausse (« false »), la résolution immédiate ignorera toutes les recommandations.

  2. Si la dépendance porte sur plusieurs paquets, combinés avec un OU, examiner chaque alternative dans l'ordre donné. Par exemple, si un paquet dépend de « exim | mail-transport-agent », aptitude traitera d'abord exim, puis mail-transport-agent.

  3. Pour chaque alternative, essayer de résoudre la dépendance. Si la dépendance est un conflit, supprimer l'alternative examinée si elle est installée (et pour un conflit sans indication de version, supprimer aussi tout paquet fournissant la cible du conflit). Sinon, installer la version candidate de l'alternative examinée si elle satisfait la dépendance. Si elle ne la satisfait pas, ou s'il n'y a pas de version candidate (par exemple, si l'alternative examinée est un paquet virtuel), et si la dépendance n'indique pas de version, essayer d'installer le paquet avec la plus haute priorité[12] dont la version candidate fournit la cible de l'alternative examinée.

    Par exemple, si la dépendance à résoudre est « Depends: exim | mail-transport-agent », aptitude essaiera d'abord d'installer le paquet exim. Si exim n'est pas disponible, aptitude essaiera alors d'installer le paquet avec la plus haute priorité dont la version candidate fournit exim. S'il n'y a pas de tel paquet, aptitude installera le paquet avec la plus haute priorité dont la version candidate fournit le paquet virtuel mail-transport-agent. Si maintenant, la dépendance examinée est « Depends: exim (>= 2.0.0) | mail-transport-agent », et que seule la version 1.0 d'exim est disponible, aptitude dans ce cas n'installera pas exim (car la version ne correspond pas), et n'essaiera pas non plus d'installer un paquet fournissant exim (car les paquets virtuels ne peuvent pas correspondre à une dépendance avec une restriction de version). Donc, aptitude installera le paquet avec la plus haute priorité dont la version candidate fournit mail-transport-agent.

  4. Si un paquet a été installé à l'étape précédente, résoudre ses dépendances avec cet algorithme, puis arrêter.

Bien que cette technique résolve très souvent la totalité des dépendances entre paquets en jeu, elle peut échouer dans un certain nombre de cas communs.

Le solveur interactif de dépendances peut résoudre ces situations, et bien d'autres. Lorsqu'il y a des dépendances cassées restantes, ou que la résolution immédiate est désactivée, le solveur interactif commence automatiquement à chercher une solution. La section suivante décrit comment utiliser le solveur interactif.



[12] Le paquet avec la plus haute priorité dpkg, non pas la plus haute priorité d'épinglage.