21

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
  • 69,223
  • 56
  • 216
  • 327
Murz
  • 1,021
  • 1
  • 9
  • 9

4 Answers4

29

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
  • 14,308
  • 4
  • 74
  • 117
kyodake
  • 15,052
  • 3
  • 40
  • 48
  • 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
  • 4
  • 9
2

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

Dan Johansen
  • 952
  • 6
  • 11
  • 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
  • 383
  • 4
  • 12
  • 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