Issues preventing migration¶
Packages fail to migrate for a many different reasons. Sometimes the clues listed under the Issues preventing migration: line item on the update excuses page are enough to indicate the next action needed; that is the focus of this article.
In other cases, the autopkgtest log file needs to be analyzed. For that, see Understand autopkgtest logs.
Proposed migration series
The Proposed migration article series explains the various migration failures and ways of investigating them.
- Process overview:
- Practical guidance:
- Issue types:
main
/universe
binary mismatch¶
A given source package may have some binaries in main
and others in universe
, but this can get mixed up for various reasons. This type of issues, known as “component mismatches” (see the list of current Component mismatches), looks like this in the list of migration excuses:
php8.1-dba/amd64 in main cannot depend on libqdbm14 in universe
Check the prior release to see if php8.1-dba
and libqdbm14
were both in main
, or both in universe
:
- Both packages were previously in
universe
: Most likely the package in
main
needs to be demoted touniverse
. Ask an Archive Admin to do this, or file a bug report (for an example, see LP: #1962491).If the dependency in
universe
needs to be inmain
, for example a newly introduced binary package, then file a Main Inclusion Review (MIR) bug report.
- Both packages were previously in
main
: Investigate why the
universe
package was moved out ofmain
. The resolution may be to:Move one or the other package, so they’re both in the same pocket.
Find a way to remove the dependency between them.
Note
Extra-includes and unintended dependencies
One very special case of a component mismatch is unintended dependencies due to extra-includes. While most dependencies seem obvious (seeds –> packages –> packages) there is an aspect of germinate (see germinate-output for a list of outputs for all flavors) that automatically includes all -dbg
, -dev
, and -doc*
packages in a source archive that is in main
(look for line with Extra-Include:
in the supported
seed). In germinate
, these appear as Rescued from <src>
.
If a merge is affected, the solution – without adding delta – usually is to add an Extra-exclude
to the supported
file. See an example with net-snmp
.
For more information on component mismatches, from an Archive Administration perspective, see Package overrides.
Impossible depends¶
A migration excuse in this format:
Impossible Depends: <AAA> -> <BBB>/<VERSION>/<ARCH>
means package <AAA>
has a dependency on package <BBB>
, version <VERSION>
, for architecture <ARCH>
, but it is not possible to satisfy this.
One reason this can occur is if the package <BBB>
is in universe
whereas <AAA>
is in main
. It may be that some of package <AAA>
’s binaries need to be moved to universe
. See main/universe binary mismatch for directions.
Migrating makes something uninstallable¶
A migration excuse in this format:
migrating [<AAA>]/[<AAA>-<NEW-VERSION>]/[ARCH] to testing makes [<BBB>]/[<BBB>-<VERSION>]/[arch] uninstallable
means that package <BBB>
has a versioned build dependency against the old version of package <AAA>
. A no-change rebuild can be used in these cases to force a rebuild.
Depends: <AAA> [<BBB>]
(not considered)¶
A migration excuse in this format:
Depends: <AAA> [<BBB>] (not considered)
Package <AAA>
is blocked because it depends on <BBB>
, however, <BBB>
is either invalid or rejected.
If the dependency itself is not valid, this line is followed by an Invalidated by dependency line. In this case, look at the situation with package <BBB>
, and resolve that first in order to move package <AAA>
forward.
Implicit dependency: <AAA> [<BBB>]
¶
A migration excuse in this format:
Implicit dependency: <AAA> [<BBB>]
An implicit dependency is a pseudo dependency where Breaks/Conflicts creates an inverted dependency. For example, <BBB>
Depends on <AAA>
, but <AAA>=2.0-1
breaks <BBB>=1.0-1
, so <BBB>=2.0-1
must migrate first (or they must migrate together).
A way to handle this is to re-run autopkgtest for <BBB>
(for 2.0-1) and include a trigger for <AAA>=2.0
. For example:
$ excuses-kicker -t <AAA> <BBB>
This can also occur when:
<BBB>
has Depends: <AAA> (<< 2.0), due to the use of some non-stable internal interface.<AAA>
has a Provides that changes from1.0-1
to2.0-1
, but<BBB>
has a Depends on the earlier version.
Implicit dependency: <AAA> [<BBB>]
(not considered)¶
A migration excuse in this format:
Implicit dependency: <AAA> [<BBB>] (not considered)
Similar to Implicit dependency: <AAA> [<BBB>], <AAA>
and <BBB>
are intertwined, but <BBB>
is also either
invalid or rejected. In these cases, resolve the issue(s) for <BBB>
and then re-run the autopkgtest for it
with <AAA>
as the trigger.
Has no binaries on arch <ARCH>
¶
A migration excuse in this format:
Has no binaries on arch <ARCH>
This usually means the package has either failed to build or failed to upload the binaries for a build. See Failure to Build From Source (FTBFS) for tips on how to handle this class of problems.
Has no binaries on any arch (- to X.Y.Z
)¶
A migration excuse in this format:
Has no binaries on any arch (- to X.Y.Z)
If the package doesn’t have a current version, this error can indicate:
The package is not (yet) in the Archive.
Its binaries were removed previously but not sync-blocklisted and thus reappeared.
If the package should not be synced into the Archive, on #release:ubuntu.com, request to remove the packages’ binaries and add them to sync-blocklist.txt.
Otherwise, check the Upload queue in Launchpad:
No reason - still stuck?¶
If the package, as shown in update_excuses, looks good but is not migrating, it might mean an installability conflict. Do not be confused by the Will attempt migration (Any information below is purely informational) status - there are more checks happening afterwards. This is checked and reported in update output.txt.
Parse the update_output.txt
file¶
Using the exim4
package as an example.
Find the package in update output.txt:
trying: exim4 skipped: exim4 (4, 0, 137) got: 11+0: a-0:a-0:a-0:i-2:p-1:r-7:s-1 * riscv64: sa-exim
This means that if
exim4
goes into the-release
pocket,sa-exim
becomes uninstallable in the-release
pocket onriscv64
.Note
Architectures are checked in a fixed order, and only the problems on the first architecture with problems are shown.
Explanation of the lines in the output:
skipped: exim4 (4, 0, 137)
This means:
4 packages have already been found that won’t be planned to be upgraded because they would break dependencies, i.e. they are rejected.
0 packages are unsure (“maybe rejected”).
137 packages remain to be examined after this package before this check of all packages is completed.
got: 11+0: a-0:a-0:a-0:i-2:p-1:r-7:s-1
The
got
line shows the number of problems in the release pocket on the different architectures (until the first architecture where a problem is found). In this case, it’s 11 uninstallable packages on all architectures together. The letters stand for (in this order):a
: amd64a
: arm64a
: armhfi
: i386p
: ppc64elr
: riscv64s
: s390x
The
i-2
means that ifexim4
would go into the-release
pocket, there would be 2 uninstallable packages oni386
.
Try to reproduce that in a
-proposed
-enabled container. In this example:root@k:~# apt install exim4 sa-exim ... The following packages have unmet dependencies: sa-exim : Depends: exim4-localscanapi-4.1
Now that it’s confirmed, compare the old and new
exim4
:root@k:~# apt-cache show exim4-daemon-light | grep -e scanapi -e '^Versi' Version: 4.96-3ubuntu1 Provides: exim4-localscanapi-6.0, mail-transport-agent Version: 4.95-4ubuntu3 Provides: exim4-localscanapi-4.1, mail-transport-agent
Therefore, the example needs (as is most often the solution in these cases) a no-change rebuild to pick up the new dependency. Do a test build to ensure it works, and submit an upload to resolve this situation.