22

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?

5 Answers 5

31

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')

ADDKERNEL="linux-(image|headers|ubuntu-modules|restricted-modules)"

METAKERNEL="linux-(image|headers|restricted-modules)-(generic|i386|server|common|rt|xen)"

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

apt-get remove --purge $UNUSKERNELS

update-grub
4
  • 2
    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, 2014 at 11:51
  • 3
    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, 2014 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, 2016 at 13:18
  • Is this still valid in 2021? Ubuntu 20.04 LTS?
    – sc911
    Jun 15, 2021 at 13:35
4

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.

2

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

1
  • 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, 2014 at 11:48
2

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
2
  • note the difference between orphaned packages and obsolete packages. And that the OT wanted to remove obsolete packages - askubuntu.com/questions/286947/… Mar 13, 2020 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, 2020 at 20:39
0

How to see all obsolete packages:

apt list '?obsolete'

How to remove all obsolete packages:

sudo apt -V remove '?obsolete'

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .