Sometimes, when I upgrade a system via do-release-upgrade, the update process fails and the script tells me to finish the process manually via dpkg --configure -a. This is a not serious problem - after manually solving the dependencies problem and the finishing upgrade process all works well.

But the do-release-upgrade script has a cleanup process after finishing the upgrade:

Remove obsolete packages?  
XXX packages are going to be removed.  
Continue [yN]  Details [d]y

which removes some obsolete packages from old version of system.

Seems that this process doesn't execute when the automatic upgrade fails and I finish upgrade manually, so obsolete packages from old version remain installed in the system.

How I can run the "Remove obsolete packages" process manually after finishing the upgrade by hand?


Test this:

Open a terminal (press Ctrl+Alt+T).

Run this:

sudo -i

apt-get update
apt-get autoremove
apt-get clean
UNUSCONF=$(dpkg -l|grep "^rc" | awk '{print $2}')
apt-get remove --purge $UNUSCONF

NEWKERNEL=$(uname -r|sed 's/-*[a-z]//g'|sed 's/-386//g')



UNUSKERNELS=$(dpkg -l | awk '{print $2}' | grep -E $ADDKERNEL | grep -vE $METAKERNEL | grep -v $NEWKERNEL)

apt-get remove --purge $UNUSKERNELS

  • 1
    Thanks, those commands is exactly that I want, main of them is dpkg -l|grep "^rc"|awk '{print $2}' that shows packages to remove. This is strange that apt-get or aptitude dont' want to see it for removing. – Murz Oct 26 '14 at 11:51
  • 2
    One-line cli command for remove obsolete packages after failed do-release-upgrade based on your example is: sudo dpkg -l|grep "^rc"|awk '{print $2}' | xargs sudo apt-get remove -y --purge. Attention, this command removes packages without confirmation, but is useful for automate quickly cleanup systems. – Murz Oct 26 '14 at 11:59
  • On my system the '^rc'-marked packages weren't even installed, but the upgrade failed right before searching for obsolete packages. So this answer seems incomplete. This won't remove all packages which would be by do-release-upgrade, should it succeed. – Ruslan Jul 2 '16 at 13:18

I believe the "Remove obsolete packages" actually just runs a sudo apt-get autoremove. Try it, see if it helps.

  • 2
    sudo apt-get autoremove is remove only little part of packages, that removes do-release-upgrade, for example do-release-upgrade on same system removes about 150 packages, but apt-get autoremove - remove only about 5-10 packages. – Murz Oct 26 '14 at 11:48

I find that this answer of an unrelated question might provide a utility and command that seems to remove more of the unused stuff:

  1. Install the "deborphan" package.
  2. sudo deborphan | xargs sudo apt-get -y remove --purge
  • note the difference between orphaned packages and obsolete packages. And that the OT wanted to remove obsolete packages - askubuntu.com/questions/286947/… – Daniel Alder Mar 13 '20 at 15:54
  • @Daniel Alder the OT wanted to remove the obsolete packages after a failed release upgrade. What the release upgrade does as the final step after replacing the repositories and executing a full upgrade, is it removes orphaned packages. Therefore this is the last step to be repeated manually after a failed release upgrade. – DustWolf Mar 14 '20 at 20:39

Looking in the upgrade logs in /var/log/dist-upgrade, there is a line in main.log:

main.log:2020-12-23 21:01:53,154 DEBUG Obsolete: linux-headers-5.4.0-56-generic linux-hwe-5.4-headers-5.4.0-56 linux-image-5.4.0-56-generic linux-modules-5.4.0-56-generic linux-modules-extra-5.4.0-56-generic msgpack-tools slirp4netns

I think uninstalling these combined with the apt-get autoremove should do the same the upgrade would have done if it had run to completion.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.