Package removal¶
The ubuntu-archive
team handles removals of both source and binary packages.
See the work list of source package removals requested by developers.
Binary package removals generally do not require a bug report; for source
packages I require either a Launchpad or Debian bug # to reference in the
removal, because from time to time users will find the publishing
history and complain to the Archive Admin who did the removal, so it’s useful
to be able to redirect them.
Source package removals via Debian¶
If a source package has been removed from Debian, then there is no need for
someone to file a separate removal bug because these can be handled through
process-removals
. Whenever I get a ping about removing a package from the
devel series and they say as justification that it’s been removed from
unstable
, I handle the request by firing up process-removals
and deal that
way with the entire pending queue.
When processing removals of packages that have been removed from Debian, it is
important not to break consistency of the Archive when they still have
reverse-depends
, but it is also important to not let these packages linger
forever. When there are reverse-dependencies, particularly Ubuntu-specific ones,
I make a point to file bug reports to give Ubuntu developers time to respond;
see below.
Recommends should not block removals of packages. Seed references should be referred to the maintainers of the relevant flavor before removal.
Other source removals of packages from Debian¶
If we are removing a package from Ubuntu that is still in Debian unstable
,
some sort of justification for the removal is needed. A non-comprehensive list
of sufficient justifications:
The package FTBFS and is blocking some transitions (either in
proposed-migration
or in NBS removal).The package FTBFS or fails autopkgtests and has been removed from Debian
testing
.Upstream has fast-moving development and it does not make sense to ship the package in a stable Ubuntu release.
If not removing, but keeping it in the Archive – then the driving team should ensure they can maintain it despite changing so fast. For example, an agreed SRU exception.
The Security Team has flagged the package as unsupportable. In some cases I have asked the Security Team to also raise bugs on these packages in Debian as well before removing.
There is a demote-to-proposed
command which can be used to move a package to
devel-proposed
instead of removing it entirely. I NEVER use this command,
except if the package has an Ubuntu delta that is important to preserve in the
event that a fix becomes available in Debian. Otherwise, if a package is buggy
enough to be removed from the -release
pocket, it is better to remove it
entirely and wait for Debian to fix it rather than land it in -proposed
where
it takes attention of our +1 maintenance folks
and the Release Team.
Not removing it would continue to potentially contaminate -proposed
and on
the other hand we have plenty of ways nowadays to get access to the former
delta again.
In some cases, a package must be removed not because it is buggy but because it
depends on another package which is buggy. These removals should be tracked in
the extra-removals.txt
file within the
sync-blocklist
repository.
Source removals of Ubuntu-specific packages¶
During the heyday of MOTU, Ubuntu acquired many Ubuntu-specific packages that were uploaded by an Ubuntu developer who is no longer active. Over time, many of these packages have bit-rotted; in particular, by not having their packaging updated to make sure they continue to be buildable, or not being ported to newer versions of library dependencies. We are generally content to let these packages drift until they become blockers, either by Failing to Build from Source and blocking transitions, or depending on packages that have been removed from Debian.
Before removing an Ubuntu-specific package, even if it is “obviously” abandoned, I always file a bug report against the package with the rationale, and where there is an obvious historic “owner” of the package I will subscribe them to the bug if they don’t already have a bug subscription to the package (they usually don’t) and give them time to remedy the situation if they still care about the package.
Such bugs should be given a deadline of the end of the current release cycle, to ensure NBS gets cleaned up before a stable release.
Source removals of SRU upload from -proposed
¶
The SRU Pending Report
has a section at the bottom suggesting removals from -proposed
for several
different reasons.
-updates
is equal or higher than -proposed
¶
This is the normal sequence of events. An SRU is verified, released, and the
package has to also be removed from -proposed
. The suggested command-line in
the report is correct, and can be run.
When can it be run? Only when everything has been published, i.e., avoid the LP publishing lag. Rule of thumb: give it a few days.
Example:
remove-package -y -m "moved to -updates" -s noble-proposed -e \
4.18.4-1ubuntu0.1 xfce4-panel
-release
is equal or higher than -proposed
¶
Haven’t seen this case before. I suspect it can happen at release opening. To be determined.
Failed verification for more than 10 days¶
If an SRU has the verification-failed
tag, it is expected to be corrected
within 10 days, either by a new upload, or something else that fixes the
problem.
If that does not happen, the package is eligible for removal from -proposed
.
The sru-remove
package, when given the “failed” reason, will automatically
add a comment to the LP bug with the reason for removal, and mention this “10
days” period.
Example:
sru-remove --reason=failed -s oracular -p samba 2092308
No test plan verification done in more then 105 days¶
If an upload has been sitting in -proposed
and not verified for 105 days or
more, it’s also eligible for removal. That is the ‘--reason=ancient
’ parameter
(which is the assumed default if not given), and it will also add the
appropriate explanation to the bug behind the SRU.
Example:
sru-remove -s focal -p libxmlb 1988440
Removals of binary packages¶
When a binary package ceases to be built by its source package, it must be manually removed by an Archive Admin. These to-be-removed packages show up in several places.
If
proposed-migration
can work out how to move the new source package to the-release
pocket without making any binary packages uninstallable, then they show up on the NBS removal list. This is the easiest case, as the top of the page gives a command that can be used to remove all binaries that are safe to remove (no remaining reverse-dependencies).If the NBS package is in the
-proposed
pocket, it will be reported onupdate_excuses
asold binaries
. These are unfortunately not reported in their own report, but have to be found when someone happens to look at the correspondingupdate_excuses
entry.If the packages are NBS because support for a given architecture has been dropped entirely by the source package, these instead appear in
update_excuses
as amissing build
. These require additional discernment before removal, since a missing build could also mean the package is supposed to be built on the architecture but failed to do so (or is still building).In some cases a binary may be dropped on a particular architecture, but the package manages to migrate from
-proposed
to the-release
pocket anyway. In this case, they don’t show up on the NBS list because that binary package is not NBS on all architectures. Instead you have to check the uninstallable report and out-of-date package report for the corresponding series.
Revert a package to a previous version¶
A special case of package removals is where we want to remove a package and replace it with a previous version. This most commonly occurs in the development series.
For example, if a transition is almost complete we may receive a request to
revert a new upload that accidentally entangles the transition. To do this, we
need to remove the existing package with remove-package
, then copy the
previous package forwards with:
copy-package --force-same-destination --auto-approve --version=$VERSION_TO_RESTORE --include-binaries --from-suite=$SUITE --to-suite=$SUITE $PKG
Checking dependencies before removal¶
You usually want to check to avoid causing:
Installation issues by something having a dependency on the produced binaries.
Fail to build due to missing dependencies, for a package that builds depends on a produced binary.
There are many ways to check for reverse dependencies, with different pros and cons. The following list gets gradually more complete, but also takes longer and is sometimes harder to set up.
reverse-depends
¶
The most common and most widely used tool, even fine for normal cases is
reverse-depends
from the package ubuntu-dev-tools
. Quick and helpful, but
not always fully complete.
apt-cache rdepends
¶
The other two tools check the current state of a release. To instead inspect a
particular system configuration one would tend to use apt-cache rdepends
instead.
checkrdepends
¶
We’ve had cases where the other tools struggled to follow virtual dependencies
or the rust ecosystem’s use of provides
in build dependencies. So far
checkrdepends
from ubuntu-archive-tools
seems to cover this the best.
We recommend at least:
Using
archive-base
to not require a local mirror.Using
--include-provides
to also check if we might make things un-buildable.
Example:
./checkrdepends --no-ports --include-provides --suite plucky --archive-base 'http://archive.ubuntu.com/ubuntu' debian-pan debian-astro
Checking removal reasons in publication history¶
Sometimes one might want to double check if something was removed and
asynchronous tools like rmadison
will not immediately update as they need a
publishing run and then some processing. Instead one could check such via
launchpad API or the web.
Commonly known is the source publishing history, which is also linked from the
package. For example in
publishing history
you can see automatic and manual removals, but also the effects of a package
going through -proposed
migration.
Less known is that there also is a binary package publishing history, which you
might want to check if e.g. removing a binary for a single architecture. For
example in this case
which can be seen in effect on
https://launchpad.net/ubuntu/plucky/armhf/pdfsandwich
.