Is do-release-upgrade too aggressively removing transitionals?
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
libvirt (Ubuntu) |
Incomplete
|
Low
|
Unassigned | ||
ubuntu-release-upgrader (Ubuntu) |
New
|
Low
|
Unassigned |
Bug Description
It seems do-release-upgrade on long term multiple upgrades might unintentionally remove things a bit too aggressive if they have changed to be transitionals.
Example Scenario:
- LTS = src:foo v1 creates package bin:bar v1
- LTS+1 = src:foo v2 creates transitional:bar v2 depending on bin:newbar v2
- LTS+2 = src:foo v3 no more creates the transitional:bar
Expectation:
- LTS -> LTS+1 switches to transitional:bar v2 which pulls in bin:newbar
- LTS+1 -> LTS+2 keeps transitional:bar v2 around pulling in bin:newbar still
- apt dist-upgrade (even with apt autoremove) behaves this way
What happens:
- LTS -> LTS+1 switches to transitional:bar v2 which pulls in bin:newbar v2
- LTS+1 -> LTS+2 suggests to remove transitional:bar v2 in the section "Remove (was auto installed)"
- If "y" is given, then the former functionality stops working
To be fair, all of this is behind a question, with a default not to do so, like:
```
39 packages are going to be removed.
...
Continue [yN]
```
Question to update-
- Is this intentionally more aggressive than dist-upgrade + autoremove?
- If so, what should packages or admins do to avoid that (other than saying "n" at the "Remove (was auto installed)" question?
----------
###
This was initially reported and checked for libvirt (below) but should be a generic behavior
###
# History
In debian/1.2.10-1 7ca6a8a libvirt-bin was changed to be a transitional.
This will need to be retained until an LTS change happens so for Ubuntu this was kept and up until Xenial libvirt-bin was a package with content.
Then it followed Debian
Later in yakkety yak and later it got changed to be a transitional in 1.3.1-2
Since we'd need to wait for an Ubuntu LTS 1.3.3-2ubuntu1 kept libvirt-bin (the transitional) around this stayed another while.
Then post Bionic we dropped even that and libvirt-bin was no more (no package, no transitional, no nothing).
# Problem
This is kind of how transitions work, but now we've got a report that if people installed e.g. on Xenial and just `apt install libvirt-bin` to get virsh and other things back then. And upgrade through to e.g. focal or even later - they got the replacement packages like `libvirt-clients` removed (presumably as nothing depended on it anymore).
TODO:
This history is a bit convoluted as the timing was so different due to waiting until after LTSes.
But we need to:
1. Install xenial, install libvirt-bin, do-release-upgrade through to Jammy, check if libvirt-clients is still around or not.
2. if not, then this is a bug and we need to find how to avoid.
Potentially this is needed in all >Bionic and need to retain the libvirt-bin transitional forever? This feels so worng, with a deeper look I hope we can find what is actually going on and find a better solution.
P.S. original reporter is Mmike on #ubuntu-server in IRC
This is the focal after upgrade of Mmike: https:/ /pastebin. com/4JFf3a0h
<Mmike> cpaelzer, so, there packages are removed during final stage of do-release-upgrade from 20.04 to 22.04: libvirt-clients libvirt-daemon libvirt- daemon- config- network libvirt- daemon- config- nwfilter libvirt- daemon- driver- qemu libvirt- daemon- system libvirt- daemon- system- systemd libvirt0
<Mmike> They're listed under `Remove (was auto installed)` 'section'.
<Mmike> (There is around 200 of them, but I only noticed issues on machines where I have libvirt installed while those were fresh xenial boxes)