Ubuntu 18.04升20.04后Python包依赖错误致sudo不可用
故障原因
Ubuntu 18.04升级20.04过程中网络中断,导致软件包安装状态不一致:一是大量Python2相关包处于半安装状态,依赖的核心python2.7-minimal包未正确部署;二是ubuntu-minimal元包依赖的sudo包被阻塞无法安装,所有apt操作被未满足的依赖关系拦截。Ubuntu 20.04中Python2相关包位于universe仓库,若源配置未启用该仓库也会加剧依赖报错。
修复步骤
所有操作直接通过root账户执行(当前sudo不可用,可通过物理控制台、云平台VNC或SSH密钥登录root):
- 第一步:重置dpkg半安装状态
执行命令清理中断的包配置流程:
若出现文件覆盖报错,追加强制参数执行:dpkg --configure -adpkg --configure -a --force-overwrite - 第二步:校正软件源并刷新缓存
编辑/etc/apt/sources.list,检查所有源条目版本代号是否为focal(20.04版本代号),删除所有带bionic(18.04版本代号)的旧源条目;同时在每个deb源末尾补充universe multiverse组件,确保Python2相关包可被检索到。示例正确源条目:
保存后执行命令清理旧缓存、刷新源索引:deb http://archive.ubuntu.com/ubuntu focal main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu focal-updates main restricted universe multiverse deb http://security.ubuntu.com/ubuntu focal-security main restricted universe multiverseapt clean all && apt update - 第三步:强制安装核心Python2.7运行时
先绕过临时依赖检查,安装缺失的核心Python2包,打通最底层依赖:
若执行中提示apt install python2.7-minimal python2.7 --fix-missing -o Dpkg::Options::="--force-overwrite" -ypython-support包阻塞,直接执行命令强制移除该废弃包(该包是Ubuntu 18.04及更早版本的旧Python管理组件,20.04中已淘汰,残留无实际作用):
移除后重新执行上述Python2.7安装命令即可。dpkg -r --force-remove-reinstreq python-support - 第四步:自动修复全量依赖
核心依赖就绪后,执行apt自带的修复命令,自动补全所有缺失依赖、安装sudo包:apt --fix-broken install -o Dpkg::Options::="--force-overwrite" -y - 第五步:验证修复效果
执行系统更新确认无依赖报错:
执行apt upgrade -ysudo --version确认命令可用,切回普通账户测试sudo提权功能是否恢复正常。
可选优化
Python2已于2020年停止官方维护,若业务无特殊依赖需求,系统修复完成后可执行命令移除所有Python2相关包,减少后续维护成本:
apt remove python2 python2-minimal python2.7* -y && apt autoremove -y
内容的提问来源于stack exchange,提问作者ShenYa
相关产品推荐
相关产品推荐

