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

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

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

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

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

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

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

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

答案1

测试一下:

打开终端(按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

答案2

查看升级日志/var/log/dist-upgrade,有一行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

思考卸载这些并结合apt-get autoremove应该执行与升级相同的操作(如果升级已完成)。

答案3

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

答案4

如何查看所有过时的软件包:

apt list '?obsolete'

如何删除所有过时的软件包:

sudo apt -V remove '?obsolete'

相关内容