NAME
debtree - show relationships between packages
SYNOPSIS
debtree [options] package
DESCRIPTION
Generates dependency graphs (in ‘dot’ syntax) for the specified
package. The output is written to STDOUT and can be used as input for
the command dot(1) from the package ‘graphviz’.
Dependency graphs will by default show (pre-)dependencies, recommended
packages, unversioned conflicts, and virtual packages provided by the
requested package. Optionally also suggested packages and versioned
conflicts can be included.
Besides graphs showing regular dependencies, debtree can also generate
graphs showing the reverse dependencies of and the build dependencies
for a package.
Dependency types
The type of dependency between packages is by line type and the color
of the arrow indicating the dependency:
Build-Depends: dark gold, bold
Build-Depends-Indep: light gold
Pre-Depends: purple, bold
Depends: blue
Recommends: black
Suggests: black, dotted
Conflicts: red
Provides: green, inverted arrow
By default the version requirements for versioned dependencies and
conflicts will be shown alongside the arrow.
Alternative dependencies
Alternative dependencies will be shown within a single node (a
rectangular shape with horizontal lines separating the packages).
An alternative dependency will be indicated by a single arrow, unless
one or more of the dependencies are versioned. In that case a separate
arrow (ending at the relevant package) showing the version requirement
is drawn. Arrows for dependencies on a package in a set of alternatives
will originate at the correct package in the set, though in some cases
this may be on the seperation line between two alternatives.
If a package included in an alternative dependency also needs to be
displayed separately or is also part of some other alternative
dependency set, its dependencies will only be included once, with the
package’s first occurence. For the secondary occurences the package
name will be shown between square brackets: ‘[...]’.
See also the --show-installed option below.
Virtual packages
Virtual packages will be shown as an octagonal shape with a green
inverted arrow from the providing package(s).
If only a single package provides the virtual package, this package
(and its dependencies) will be displayed in the graph.
If there are multiple packages that provide the virtual package, they
will be shown within a single node with rounded corners but only if
there are less than three (or the number set by the --max-providers
option). If there are more than that number, this will be indicated by
an ellipsis (‘...’) in the node; no individual packages will be shown
but the number of providing packages is indicated alongside the arrow.
Dependencies of the providing packages will not be shown.
A regular dependency graph will by default also show any virtual
packages provided by the requested binary package.
Unknown packages
Packages that are listed as dependency, but that are unknown in the
package database will be displayed with a reddish shade. In the case of
alternative dependencies, the package name will be shown between
question marks: ‘?...?’.
Package versions
If multiple versions of a package are available, the dependency
information for the highest available version will be used, with one
exception. If the --show-installed option is used, the installed
version will be used for packages that are installed on the system.
Managing graph size and complexity
debtree offers several mechanisms to help reduce the size of dependency
graphs of packages with large or complex dependency trees. The first
mechanism is to limit what types of dependencies are included, for
example excluding Recommended or Conflicting packages from the graph.
The second mechanism is the configuration of lists of skip and end
packages; see the section CONFIGURATION below for details. The last
mechanism is to place a hard limit on the depth of the dependency tree.
It is not possible to include the dependencies of suggested packages.
Doing so would in almost all cases result in an explosion of the size
of graphs.
For some packages it is unfortunately almost impossible to generate a
usable dependency graph due to the number of dependencies they have.
This is often the case for meta packages, for example those for KDE or
GNOME.
OPTIONS
This program follows the usual GNU command line syntax, with long
options starting with two dashes (‘-’). An overview of supported
options is included below.
--show-installed, -I
Show which packages are installed on the system.
The nodes for packages which are installed on the system will be
colored light green. For alternative dependencies, only
installed packages will be included (an ellipsis is used to
indicate omitted alternatives); for unsatisfied alternative
dependencies, all alternatives will be included.
--show-rdeps, -R
Also show reverse dependencies of the package and any virtual
packages it provides.
Reverse dependencies that are not installed will be colored
light yellow; installed ones light blue. Displaying reverse
dependencies of type Suggests is not supported.
Use of the option --show-installed in combination with this
option is recommended. See also the options --rdeps-depth and
--max-rdeps. This option is ignored if --build-dep is also
specified.
--build-dep, -b
Show build dependencies instead of package dependencies.
Suggested packages will never be included in a build dependency
graph. If there are alternative packages to satisfy a
dependency, normally only the first alternative will be shown.
However, when used in combination with the --show-installed
option, all allready installed alternatives will be included for
satisfied dependencies (unless the --no-alternatives option is
also given).
--arch=architecture
Specify the architecture (or ‘all’) for the build dependency
graph. If the option --buildep option is not present, this
option will be ignored. Default is the architecture of the
system on which the command is being run.
If architecture ‘all’ is specified, all build dependencies will
be shown. If any build dependencies have ‘architecture
conditions’, those will be displayed in a graph.
If an architecture is specified (including the default), only
build dependencies that are relevant for that architecture will
be shown; build dependencies for other architectures will be
ignored.
--with-suggests, -S
Include suggested packages; dependencies of suggested packages
are never included.
--no-recommends
Don’t show recommended packages.
This option will be ignored if used in combination with the
--with-suggests option.
--no-alternatives
Only show the first package from a set of alternative
dependencies. Effectively this shows what package would be
installed by default (in most cases).
--no-provides
Don’t show virtual packages provided by the requested package.
--max-providers=number
When there are multiple packages providing a virtual package,
only show the providing packages if there are less than this
number. Default is 3.
--no-versions
Don’t show the versions for versioned dependencies.
--no-conflicts
Don’t show unversioned conflicts.
--versioned-conflicts, -VC
Include versioned conflicts; by default only unversioned
conflicts are shown.
This option will be ignored if used in combination with the
--no-conflicts option.
--max-depth=number
Limit the number of levels of dependencies that is traversed.
This option sets a limit to the number of levels debtree will
recurse when determining dependencies. Packages at the specified
level will be treated as end packages (see section CONFIGURATION
below).
The option can be used both to reduce the size of graphs.
--rdeps-depth=number
The maximum number of levels for reverse dependencies.
By default only one level is displayed. Use this option to
display more levels. Implies --show-rdeps.
--max-rdeps=number
Limit the display of indirect reverse dependencies.
When displaying multiple levels of reverse dependencies, a
reverse dependency that itself has a lot of reverse dependencies
can really explode the graph. By default up to 5 indirect
reverse dependencies are shown individually.
--no-skip
Also display dependencies that are suppressed by default (e.g.
libc6).
When selected, skip packages will be treated as end packages
instead. This means that dependencies that by default are not
included in graphs, will now be shown, but their dependencies
will not. See also the section CONFIGURATION below.
--show-all
Display the full dependency tree.
When selected, all default limits in the form of end and skip
packages are disabled and the full dependency graph for the
package will be generated. See also the section CONFIGURATION
below.
This option implies the --no-skip option, but can be used in
combination with the --max-depth option. Note that this option
does not affect the types of dependencies that are included.
--rotate, -r
Draw the graph top-town instead of left-to-right.
--condense
Activates an option of dot(1) that can help reduce the clutter
in dense graphs by concentrating lines (relationships) between
packages together for parts of their paths.
--quiet, -q
Suppress any informational/warning messages.
--verbose, -v
Increase verbosity.
Displays additional informational and debug messages; can be
repeated up to three times.
CONFIGURATION
debtree can be configured to limit the size and complexity of
dependency graphs. This is done using two lists:
/etc/debtree/skiplist, ~/.debtree/skiplist
List of skip packages. Packages included in this list are
completely excluded from graphs. The list should only contain
dependencies that are so common that including them in graphs
only clutters the graph and does not really add any information.
Examples are libc6 and zlib1g. If an alternative dependency
contains only skip packages it will be omitted; if it contains a
mix of skip and non-skip packages, the presence of the skip
packages will be shown using an ellipsis (’...’).
/etc/debtree/endlist, ~/.debtree/endlist
List of end packages. Packages included in this list are shown
in the graph, but their dependencies will not be shown. A
diamond shape is used to indicate an end package; in the case of
alternative dependencies, the package name will be shown between
braces: ‘{...}’.
Preferably only packages that offer a functionality that is
somewhat distinct from its reverse dependencies should be
included in this list. In some cases it may be necessary to also
include packages because their dependency tree is just too big
or complex.
If a list is present under the HOME directory of the user, that file
will be used instead of the default file in /etc/debtree/.
See also the options --no-skip, --show-all and --max-depth.
EXAMPLES
Below are some basic usage examples for debtree. For more extensive
examples of graphs and additional information, please see the debtree
website: htpp://collab-maint.alioth.debian.org/debtree.
$ debtree dpkg >dpkg.dot
Generate the dependency graph for package dpkg and save the
output to a file ‘dpkg.dot’.
$ dot -Tsvg -o dpkg.svg dpkg.dot
Use dot(1) to generate an SVG image from the ‘.dot’ file.
$ debtree dpkg | dot -Tpng >dpkg.png
Generate the dependency graph for package dpkg as PNG image and
save the resulting output to a file.
$ debtree -b dpkg | dot -Tps | kghostview - &
Generate the build dependency graph for package dpkg in
postscript format and view the result using KDE’s kghostview(1).
SEE ALSO
dot(1). prune(1). gvpr(1).
AUTHOR
Frans Pop <elendil@planet.nl>.