[Bug 2078720] Re: Upgrading from jammy to noble results in a linux-headers package being in a broken state
Julian Andres Klode
2078720 at bugs.launchpad.net
Thu Sep 5 19:28:10 UTC 2024
ubuntu-release-upgrader SRU uploaded to noble and also uploaded to
oracular.
These reintroduce the slow path as a fallback, specifically for APT
versions prior to this SRU (and hence mantic); they also fix that code
to correctly consider running kernels (and KeepInstalledSection) in the
removal of reverse dependencies of obsolete packages.
** Changed in: ubuntu-release-upgrader (Ubuntu)
Status: Triaged => Fix Committed
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to apt in Ubuntu.
https://bugs.launchpad.net/bugs/2078720
Title:
Upgrading from jammy to noble results in a linux-headers package being
in a broken state
Status in apt package in Ubuntu:
New
Status in linux-aws package in Ubuntu:
Confirmed
Status in linux-gcp package in Ubuntu:
Confirmed
Status in ubuntu-release-upgrader package in Ubuntu:
Fix Committed
Status in apt source package in Jammy:
In Progress
Status in linux-aws source package in Jammy:
New
Status in linux-gcp source package in Jammy:
New
Status in apt source package in Noble:
New
Status in linux-aws source package in Noble:
New
Status in linux-gcp source package in Noble:
New
Status in ubuntu-release-upgrader source package in Noble:
In Progress
Bug description:
[Impact]
Obsolete packages can be removed despite still having reverse dependencies installed, for example:
Now that 24.04.1 has been released, 22.04 users are encouraged to upgrade to 24.04 via the `do-release-upgrade` command. This issue was seen whilst testing this upgrade path.
Upgrading and later rebooting a jammy GCP instance results in `linux-headers-6.5.0-1025-gcp` being a broken state.
```
$ sudo apt install
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
linux-headers-6.5.0-1025-gcp : Depends: linux-gcp-6.5-headers-6.5.0-1025 but it is not installable
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).
```
`linux-gcp-6.5-headers-6.5.0-1025` is a dependency of `linux-image-6.5.0-1025-gcp` which is also not removed during the upgrade.
```
$ apt-cache rdepends linux-headers-6.5.0-1025-gcp
linux-headers-6.5.0-1025-gcp
Reverse Depends:
linux-image-6.5.0-1025-gcp
$ apt-cache rdepends linux-image-6.5.0-1025-gcp
linux-image-6.5.0-1025-gcp
Reverse Depends:
```
Running `apt --fix-broken install` resolves the error.
```
$ sudo apt --fix-broken install
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Correcting dependencies... Done
The following packages will be REMOVED:
linux-headers-6.5.0-1025-gcp
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 27.9 MB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 83770 files and directories currently installed.)
Removing linux-headers-6.5.0-1025-gcp (6.5.0-1025.27~22.04.1) ...
$ sudo apt install
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
```
This issue was also observed after upgrading a jammy AWS instance to
noble.
```
$ sudo apt install
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
linux-headers-6.5.0-1024-aws : Depends: linux-aws-6.5-headers-6.5.0-1024 but it is not installable
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).
```
[Test plan]
To prepare the VMs, follow the following scheme:
$ lxc launch ubuntu:jammy jammy-to-noble
$ lxc exec jammy-to-noble apt-mark lxd-agent-launcher # otherwise it resets
To validate the apt change on jammy,
ubuntu at jammy-to-noble$ add-apt-repository -p proposed
ubuntu at jammy-to-noble$ apt install libapt-pkg6.0 # to upgrade libapt-pkg6.0
ubuntu at jammy-to-noble$ do-release-upgrade
To validate the APT change on noble, we must rely on the test suite as
we won't have a noble->oracular upgrade bug causing it, most likely.
To validate an ubuntu-release-upgrader change, instead run:
ubuntu at jammy-to-noble$ do-release-upgrade -p
ubuntu at mantic-to-noble$ do-release-upgrade -p
[Where problems could occur: APT SRU]
For the APT change, the function in question is used in a small number
of places:
In APT library:
- In the `upgrade` command and library function. Removals are already undone there before calling it so we never reach the new code path.
- In the phased update implementation, during dist-upgrade. I expect a failure is lurking there that is fixed by this, but I haven't been able to write a reproducer to trigger it just yet.
In aptitude:
- The function is wrapped, but the wrapper never called
In QApt:
- QApt seems to rely on it for upgrading and doesn't seem to have any error checking of the return value. I expect it will read the error
[Where problems could occur: u-r-u SRU]
Upgrades will now result in a consistent state, but may spend hours searching for obsolete software again.
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/apt/+bug/2078720/+subscriptions
More information about the foundations-bugs
mailing list