Linux is keeping a lot of old packages and running out of space causing it to fail to update.
As a temporary workaround my old post linux-kernel-fails-to-update shows how to fix that the hard way.
After continually getting update failures due to the boot partition running out of space I found the reason is that some packages were marked as manually installed and thus not being removed.
To check if any kernels are marked as manually installed use:
apt-mark showmanual | grep linux-*
You should see only a few entries like
linux-generic. If you see entries like
linux-headers-5.4.... these may be the reason they are not getting removed.
To fix that simply mark them as
auto. For example:
apt-mark auto linux-headers-* apt-mark auto linux-image-* apt-mark auto linux-modules-* apt-mark auto linux-cloud-tools-* apt-mark auto linux-tools-*
sudo apt autoremove and it will remove all of the old packages!