24

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?

Zanna
  • 72,471
Murz
  • 1,181
  • 1
  • 9
  • 9

5 Answers5

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

Pablo Bianchi
  • 17,552
kyodake
  • 18,075
  • 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 '14 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 '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 02 '16 at 13:18
  • Is this still valid in 2021? Ubuntu 20.04 LTS? – sc911 Jun 15 '21 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.

Steve Dee
  • 837
2

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
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
DustWolf
  • 439
  • note the difference between orphaned packages and obsolete packages. And that the OT wanted to remove obsolete packages - https://askubuntu.com/questions/286947/obsolete-packages-vs-orphaned-packages – 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
1

How to see all obsolete packages:

apt list '?obsolete'

How to remove all obsolete packages:

sudo apt -V remove '?obsolete'
  • 1
    Compared to other answers, this is closer to what the Ubuntu release upgrade tool actually does, however be careful, as the above command will also remove packages installed with dpkg which are not available to apt – Ale Feb 14 '25 at 11:41