A while ago, I updated my remaining Ubuntu 20.04 VMs to 22.04.
The upgrade process itself finished without any issues, but things started to fall apart when regular packages rolled in after a couple of days: Suddenly, apt started to complain about packages that have been kept back during the upgrade process. Seeing some seemingly broken packages on a clean system without any third-party repositories is quite unusual.
The following packages have been kept back: fwupd grub-efi-amd64 grub-efi-amd64-bin grub-efi-amd64-signed libfwupd2 libfwupdplugin5 php8.1-cli php8.1-common php8.1-gd php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-readline php8.1-xml qemu-guest-agent snapd tzdata 0 upgraded, 0 newly installed, 0 to remove and 17 not upgraded.
Previously, I’ve only ever encountered this situation when I (badly) mixed up Debian testing/sid or by using broken third-party repositories that were built with the wrong Debian or Ubuntu version in mind. While that often seems to work, it will fail sooner rather than later. But as I already mentioned, this time I noticed these issues on a clean installation – so what’s going on?
But there is no cause for concern: It is not a bug, but a (new) feature which got expanded to the package manager
apt in Ubuntu 21.04.
This feature causes all non-critical updates to be distributed in a staged manner, so hidden bugs won’t affect each and every user at the same time.
You can check if the package in question has been kept back due to a phased update by checking its apt-cache policy:
root@server:~# apt-cache policy fwupd
1.7.9-1~22.04.1 500 (phased 30%)
500 http://de.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
*** 1.7.5-3 500
500 http://de.archive.ubuntu.com/ubuntu jammy/main amd64 Packages
Unfortunately, the messages sent by apt are not exactly precise, especially since the package state should be know to the system thanks to the ‘phased’ parameter or policy. There’s already a bug report at the Ubuntu bug tracker, so we can hope that the situation will improve in future releases.
In case you want to disable phased updates again you need to add the following line to a new file within the
After that, the phased updates will not be considered in future update runs and you will start to receive all updates immediately after they are released to the public.