在Ubuntu上通过do-release-upgrade升级失败后,如何删除过时的软件包?


14

有时,当我通过升级系统时do-release-upgrade,更新过程失败,脚本告诉我通过手动完成该过程dpkg --configure -a。这不是一个严重的问题-手动解决依赖关系问题并完成升级过程后,一切正常。

但是该do-release-upgrade脚本在完成升级后具有清理过程:

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

从旧版本的系统中删除了一些过时的软件包。

当自动升级失败并且我手动完成升级时,似乎没有执行此过程,因此系统中仍安装了旧版本的过时软件包。

手动完成升级后,如何手动运行“删除过时的软件包”过程?

Answers:


16

测试一下:

打开一个终端,

Ctrl+ Alt+T

运行:

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

1
谢谢,这些命令正是我想要的,主要是dpkg -l|grep "^rc"|awk '{print $2}'显示要删除的软件包。apt-get或aptitude不想看到它被删除,这很奇怪。
Murz 2014年

2
根据您的示例,在do-release-upgrade失败后,用于删除过时软件包的单行cli命令为:sudo dpkg -l|grep "^rc"|awk '{print $2}' | xargs sudo apt-get remove -y --purge。注意,此命令将删除软件包而不进行确认,但是对于自动快速清理系统很有用。
Murz 2014年

在我的系统上,'^rc'甚至没有安装带有-mark的软件包,但是升级在搜索过时的软件包之前失败了。因此,此答案似乎不完整。如果成功,它将不会删除by的所有软件包do-release-upgrade
Ruslan

2

我相信“删除过时的软件包”实际上只是运行一个sudo apt-get autoremove。试试看,看看是否有帮助。


2
sudo apt-get autoremove是删除软件包的一小部分,即删除do-release-upgrade,例如do-release-upgrade在同一系统上删除大约150个软件包,但是apt-get autoremove-仅删除5-10个软件包。
Murz 2014年

1

我发现这个不相关问题的答案可能提供了实用程序和命令,似乎可以删除更多未使用的东西:

  1. 安装“ deborphan”软件​​包。
  2. sudo deborphan | xargs sudo apt-get -y remove --purge
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.