This is an issue affecting many Ubuntu servers. It basically happens when you enable automated security updates, multiple kernel packages get installed automatically, without removing the old ones, which gets /boot 100% full and the package manager is no longer able to function properly, showing a message complaining about dependency issues, e.g.
The following packages have unmet dependencies: linux-image-extra-4.4.0-64-generic : Depends: linux-image-4.4.0-64-generic but it is not going to be installed linux-image-generic : Depends: linux-image-4.4.0-64-generic but it is not going to be installed Recommends: thermald but it is not going to be installed mongodb-org : Depends: mongodb-org-shell but it is not going to be installed Depends: mongodb-org-server but it is not going to be installed Depends: mongodb-org-mongos but it is not going to be installed Depends: mongodb-org-tools but it is not going to be installed E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
The following is a solution to this problem that I’ve tried numerous times, and works immediately, then I will explain how to prevent this from happening again in the future:
First step, you need to know which kernel is currently running using:
uname -a
Let’s assume this gives you the following kernel version as an output:
4.4.0-57-generic
Keep this version in mind, as what we are going to do is pretty dangerous:
cd /boot sudo du -khs *
This will give you a long list of old kernel that you won’t be needing. Now we will manually delete the initrd.img-*** of old kernels prior to the currently-running version, e.g.
sudo rm -rf initrd.img-4.4.0-21-generic initrd.img-4.4.0-36-generic initrd.img-4.4.0-38-generic initrd.img-4.4.0-42-generic initrd.img-4.4.0-45-generic initrd.img-4.4.0-47-generic initrd.img-4.4.0-51-generic initrd.img-4.4.0-53-generic vmlinuz-4.4.0-21-generic vmlinuz-4.4.0-36-generic vmlinuz-4.4.0-38-generic vmlinuz-4.4.0-42-generic vmlinuz-4.4.0-45-generic vmlinuz-4.4.0-47-generic vmlinuz-4.4.0-51-generic vmlinuz-4.4.0-53-generic
This will free up some space, so that the package manager can breathe. Next:
sudo apt install -f
This will just fix part of the problem, as it will still complain about dependencies and /boot might get filled again, so that the next thing would be to:
sudo apt autoremove
This will remove all the dependencies for old kernel versions. You might need to run the last 2 commands a couple of times, now you got a clean /boot and the package manager is good.
To avoid this problem in the future, configure the unattended-upgrades package to automatically remove the old kernels along with their dependencies by editing the file:
sudo vi /etc/apt/apt.conf.d/50unattended-upgrades
Go to the following line, remove the comment and change “false” to “true”:
//Unattended-Upgrade::Remove-Unused-Dependencies "false";
so that it becomes like this:
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Save and exit the file.
That’s it, Enjoy!