aptly supports automatic recursive resolving of package dependencies. For example, given set
pkg-b aptly can figure out all the package dependencies and pull them
with the packages. This allows to pull
packages and so on.
Command aptly snapshot pull was the first one to support dependency resolving (it is enabled by default in this command). The best example is pulling selected packages from backports repos with dependencies, overriding packages in base distribution.
All the commands which accept package query as parameter (this includes family of
aptly * search commands, various
move commands), apply filter to the source matching only specified
packages. But if
-with-deps flag is set, aptly resolves dependencies of packages matching the filter expanding
matching packages with all the available dependencies. This allows for example to search for package with all its
Command aptly mirror update also supports package filters set either when mirror is created or modified. This allows to cut down download size dramatically by selecting only subset of the available packages.
Overall, aptly dependency resolution is not that robust as
apt-get one, but it should work fine in the most cases.
When filtering complete Debian distributions, it’s advised to always pick up
Priority (Required) or
Priority (Important) packages
(what is that?) as a basis to resolve
Several options affect dependency resolving process. They might be set either in the configuration file or
passed via command-line flags. If passed via flags, they should be passed to the command which executes
dependency resolution algorithm each time command is run (e.g. mirror filter is set with aptly mirror create,
but filter is applied in aptly mirror update, so dependency flags should be passed to
aptly mirror update command).
By default, aptly only follows dependencies in
Pre-Depends: fields, flags
-dep-follow-suggests expand that to
Suggests fields. When
-dep-follow-source flag is set, aptly
pulls source packages for each binary package selected.
-dep-follow-all-variants is enabled, aptly follows all the paths for dependencies to grab all the available
dependent packages. For example, if
pkg-a depends on either
pkg-c, by default aptly will pick one of
pkg-c, but with
-dep-follow-all-variants aptly would pick up both packages. Same applies to virtual packages,
all the package which provide the feature would be selected.
New in 1.1.0 .
When global flag
-dep-verbose-resolve is set (or respective configuration option is enabled), aptly prints
detailed log while resolving dependencies:
Missing dependencies: file-rc (>= 0.8.16) [amd64], python:any (>= 2.7.1-0ubuntu2) [amd64], python3:any (>= 3.3.2-2~) [amd64], file-rc [amd64], perl (<< 5.17) [amd64], iptables-router (>= 1.2.3) [amd64], systemd [amd64], sgml-base (>= 1.26+nmu2) [amd64], sed (>= 4.1.2-8) [amd64] Unsatisfied dependency: file-rc (>= 0.8.16) [amd64] Unsatisfied dependency: python:any (>= 2.7.1-0ubuntu2) [amd64] Unsatisfied dependency: python3:any (>= 3.3.2-2~) [amd64] Unsatisfied dependency: file-rc [amd64] Unsatisfied dependency: perl (<< 5.17) [amd64] Unsatisfied dependency: iptables-router (>= 1.2.3) [amd64] Unsatisfied dependency: systemd [amd64] Injecting package: sgml-base_1.26+nmu4ubuntu1_all Injecting package: sed_4.2.2-4ubuntu1_amd64
Dependency resolving process goes through several steps in a loop, exiting the loop once it’s not possible to inject any new dependency:
Unsatisfied dependency:message is printed.