有时,当我通过 升级系统时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'