/usr/share/doc/aptitude/html/en/ch02s03s02.html is in aptitude-doc-en 0.8.10-6ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | <?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Immediate dependency resolution</title><link rel="stylesheet" type="text/css" href="aptitude.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.79.1" /><link rel="home" href="index.html" title="aptitude user's manual" /><link rel="up" href="ch02s03.html" title="Resolving package dependencies" /><link rel="prev" href="ch02s03s01.html" title="Dependency resolution in aptitude" /><link rel="next" href="ch02s03s03.html" title="Resolving Dependencies Interactively" /><link rel="preface" href="pr01.html" title="Introduction" /><link rel="chapter" href="ch01.html" title="Chapter 1. Getting started" /><link rel="chapter" href="ch02.html" title="Chapter 2. aptitude reference guide" /><link rel="chapter" href="ch03.html" title="Chapter 3. aptitude frequently asked questions" /><link rel="chapter" href="ch04.html" title="Chapter 4. Credits" /><link rel="reference" href="rn01.html" title="Command-line reference" /><link rel="refentry" href="rn01re01.html" title="aptitude" /><link rel="refentry" href="rn01re02.html" title="aptitude-create-state-bundle" /><link rel="refentry" href="rn01re03.html" title="aptitude-run-state-bundle" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Immediate dependency resolution</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s03s01.html"><img src="images/prev.gif" alt="Prev" /></a> </td><th width="60%" align="center">Resolving package dependencies</th><td width="20%" align="right"> <a accesskey="n" href="ch02s03s03.html"><img src="images/next.gif" alt="Next" /></a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="secImmediateResolution"></a>Immediate dependency resolution</h3></div></div></div><p>
Whenever you choose to install or upgrade a package in
<span class="command"><strong>aptitude</strong></span>, <span class="command"><strong>aptitude</strong></span> makes an immediate attempt to resolve
any of its dependencies that are not fulfilled. For each
unsatisfied dependency (either a <span class="quote">“<span class="quote">Depends</span>”</span>, a
<span class="quote">“<span class="quote">Recommends</span>”</span>, or a <span class="quote">“<span class="quote">Conflicts</span>”</span>),
it performs the following steps:
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
If the dependency is a recommendation, <span class="command"><strong>aptitude</strong></span> tries
to guess whether it is a <span class="quote">“<span class="quote">new</span>”</span>
recommendation or a <span class="quote">“<span class="quote">previously satisfied</span>”</span>
recommendation. <span class="command"><strong>aptitude</strong></span> considers a recommendation
to be <span class="quote">“<span class="quote">new</span>”</span> if the package declaring the
recommendation is not currently installed, or if its
installed version does not recommend a package of the
same name. On the other hand, a recommendation is
<span class="quote">“<span class="quote">previously satisfied</span>”</span> if the package
declaring the recommendation is installed, the currently
installed version recommends a package of the same name,
and that recommendation is currently fulfilled.
</p><p>
For example: suppose that version <code class="literal">1.0</code>
of <code class="literal">prog</code> recommends version
<code class="literal">4.0</code> of <code class="literal">libcool1</code>,
but version <code class="literal">2.0</code> of
<code class="literal">prog</code> recommends version
<code class="literal">5.0</code> of <code class="literal">libcool1</code>,
and also recommends <code class="literal">apache</code>. If you
choose to upgrade <code class="literal">prog</code> from version
<code class="literal">1.0</code> to version
<code class="literal">2.0</code>, the recommendation of
<code class="literal">apache</code> will be considered to be
<span class="quote">“<span class="quote">new</span>”</span> because version
<code class="literal">1.0</code> of <code class="literal">prog</code> did
not recommend <code class="literal">apache</code>. On the other
hand, the recommendation of <code class="literal">libcool1</code>
is <span class="emphasis"><em>not</em></span> <span class="quote">“<span class="quote">new</span>”</span>, because
version <code class="literal">1.0</code> of
<code class="literal">prog</code> recommended
<code class="literal">libcool1</code>, even though it recommended
a different version. However, if
<code class="literal">libcool1</code> is installed, then that
recommendation will be considered to be
<span class="quote">“<span class="quote">previously satisfied</span>”</span>.
</p><p>
If the configuration option <a class="link" href="ch02s05s05.html#configAptInstall-Recommends"><code class="literal">APT::Install-Recommends</code></a>
is <code class="literal">true</code>, <span class="command"><strong>aptitude</strong></span> will always
attempt to fulfill <span class="quote">“<span class="quote">new</span>”</span> and
<span class="quote">“<span class="quote">previously satisfied</span>”</span> recommendations; all
others will be ignored by immediate resolution. If that
option is <code class="literal">false</code>, immediate dependency
resolution will ignore <span class="emphasis"><em>all</em></span>
recommendations.
</p></li><li class="listitem"><p>
If the dependency is on several packages combined with
OR, examine each of the alternatives in the order that
they are given. For instance, if a package depends on
<span class="quote">“<span class="quote"><code class="literal">exim |
mail-transport-agent</code></span>”</span>, <span class="command"><strong>aptitude</strong></span> will
first process <code class="literal">exim</code>, then
<code class="literal">mail-transport-agent</code>.
</p></li><li class="listitem"><p>
For each alternative, attempt to resolve it. If the
dependency is a conflict, remove the current alternative
if it is installed (and for an unversioned conflict,
also remove any package providing the target of the
conflict). Otherwise, install the candidate version of
the current alternative if it satisfies the dependency.
If not, or if there is no candidate version (for
instance, because the current alternative is a virtual
package), and if the dependency is unversioned, attempt
to install the highest-priority
package<a href="#ftn.idm2001" class="footnote" id="idm2001"><sup class="footnote">[12]</sup></a> whose
candidate version provides the target of the current
alternative.
</p><p>
For instance, say we are attempting to resolve
<span class="quote">“<span class="quote"><code class="literal">Depends: exim |
mail-transport-agent</code></span>”</span>. <span class="command"><strong>aptitude</strong></span> will
first attempt to install the package
<code class="literal">exim</code>. If <code class="literal">exim</code> is
not available, <span class="command"><strong>aptitude</strong></span> will then attempt to install
the highest-priority package whose candidate version
provides <code class="literal">exim</code>. If there is no such
package, <span class="command"><strong>aptitude</strong></span> will install the highest-priority
package whose candidate version provides the virtual
package <code class="literal">mail-transport-agent</code>. On the
other hand, suppose that the dependency is
<span class="quote">“<span class="quote"><code class="literal">Depends: exim (>= 2.0.0) |
mail-transport-agent</code></span>”</span>, but only version
<code class="literal">1.0</code> of <code class="literal">exim</code> is
available. In this case, <span class="command"><strong>aptitude</strong></span> will not install
<code class="literal">exim</code> (because the version does not
match), nor will it attempt to install packages
providing <code class="literal">exim</code> (because virtual
packages cannot match a dependency with a version
restriction). Thus, <span class="command"><strong>aptitude</strong></span> will fall back to
installing the highest-priority package whose candidate
version provides
<code class="literal">mail-transport-agent</code>.
</p></li><li class="listitem"><p>
If a package was installed by the previous step, resolve
its dependencies using this algorithm, then stop.
</p></li></ol></div><p>
While this technique very often solves all the outstanding
package dependencies, it can fail in a number of common
circumstances.
</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
Conflicts are resolved by removing the package that is
the target of the conflict. But now other packages that
depend on this package have unresolved dependencies; the
immediate resolver makes no attempt to fix them.
</p></li><li class="listitem"><p>
A dependency might not be satisfiable due to version
restrictions and due to the limitation that only
candidate versions are considered. For instance, say
that versions <code class="literal">1.0</code> and
<code class="literal">2.0</code> of <code class="literal">fileutils</code>
are available, that the candidate version is
<code class="literal">1.0</code>, and that the package
<code class="literal">octopus</code> declares a dependency
<span class="quote">“<span class="quote"><code class="literal">Depends: fileutils (>=
2.0)</code></span>”</span>. Immediate resolution is unable
to resolve this dependency: it will never consider
version <code class="literal">2.0</code> of the package, since
that is not the candidate version.
</p></li></ul></div><p>
The interactive dependency resolver can solve these
situations and more. When there are broken dependencies
left over, or when immediate dependency resolution is
disabled, the interactive resolver will automatically start
searching for a solution. The next section describes how to
use the interactive dependency resolver.
</p><div class="footnotes"><br /><hr style="width:100; text-align:left;margin-left: 0" /><div id="ftn.idm2001" class="footnote"><p><a href="#idm2001" class="para"><sup class="para">[12] </sup></a>The package with the highest
<span class="command"><strong>dpkg</strong></span> priority, not the package with
the highest <code class="systemitem">apt</code> pin priority.</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s03s01.html"><img src="images/prev.gif" alt="Prev" /></a> </td><td width="20%" align="center"><a accesskey="u" href="ch02s03.html"><img src="images/up.gif" alt="Up" /></a></td><td width="40%" align="right"> <a accesskey="n" href="ch02s03s03.html"><img src="images/next.gif" alt="Next" /></a></td></tr><tr><td width="40%" align="left" valign="top">Dependency resolution in <span class="command"><strong>aptitude</strong></span> </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.gif" alt="Home" /></a></td><td width="40%" align="right" valign="top"> Resolving Dependencies Interactively</td></tr></table></div></body></html>
|