Linux软件包循环依赖解决 彻底删除i386架构 更新软件源
0.问题
之前为了wine和intel核显驱动加了32位的库,现在每次apt upgrade更新都被循环依赖弄得不堪其扰,apt --fix-broken install解决缺失都循环报错,寸步难行,忍无可忍、
而且一看全是i386的依赖,这32位我不用也罢!全给我死!!!
(写博客的时候已经解决了,bash里日志已经被刷没,所以图是网上找的一张一样情况的,意会一下)
1.解决循环依赖
使用dpkg --purge --force-all 命令删除所有冲突软件包
比如我显示libegl1-mesa-dev冲突,那就按照提示把出问题的包干了(你清楚并确认你到底在干什么要干什么的前提下)循环多次,直到最后没有一个报错
dpkg --purge --force-all <软件包>
2.0 删除i386架构先行踩坑(可跳过)
尝试直接删除 i386架构,报错
dpkg --remove-architecture i386 dpkg: 错误: 无法移除体系结构 i386 ,当前它仍被数据库使用。
匹配386包删除,报错无法删除基础软件包
apt-get remove --purge `dpkg --get-selections | awk '/i386/{print $1}'` 【警告】:下列基础软件包将被卸载。 请勿尝试,除非您确实知道您在做什么! libgcc-s1:i386 gcc-14-base:i386 (是由于 libgcc-s1:i386) libc6:i386 (是由于 libgcc-s1:i386) 升级了 0 个软件包,新安装了 0 个软件包,要卸载 254 个软件包,有 29 个软件包未被升级。 有 10 个软件包没有被完全安装或卸载。 解压缩后将会空出 1,350 MB 的空间。 E: 不允许移除系统必需的关键软件包。这么做可能损坏系统。
2.1 删除i386架构
既然系统打死不让删除三个基础软件包,那就修改awk,排除匹配这三个基础软件包
(你的冲突基础包可能不一样,所以下面会解释命令的作用,方便你按照自己需求修改)
apt-get remove --purge `dpkg --get-selections | awk '/i386/{print $1}' | awk '!/libgcc-s1/{print $1}' | awk '!/libc6/{print $1}' | awk '!/gcc-14-base/{print $1}'` # 先查询dpkg包, | 管道符号交给awk筛选 # awk '/i386/{print $1}' 筛选包含i386, | 管道符号再次交给下一级awk筛选 # awk '!/gcc-14-base/{print $1}' 筛选不包含gcc-14-base # 由于dpkg查询与筛选都写在 ` ` 命令执行区域内,所以刷选出的软件包最后交给最前的 apt-get remove --purge 做删除
删除普通i386包后 使用dpkg强力删除剩余的三个基础软件包
dpkg --get-selections | awk '/i386/{print $1}' #查找还有哪些386包 dpkg --purge --force-all libgcc-s1:i386 dpkg --purge --force-all gcc-14-base:i386 dpkg --purge --force-all libc6:i386
现在就可以删除386了
dpkg --remove-architecture i386
3. 更改软件源
更改软件源文件配置添加阿里云源
讨厌的循环依赖和i386都让他爪巴了,顺便更新一下软件源,因为我发现很多包都不太齐拉不了
原先软件源存在/etc/apt/sources.list,Ubuntu新版本现已更换新路径为/etc/apt/sources.list.d/ubuntu.sources
vim /etc/apt/sources.list.d/ubuntu.sources 替换 http://archive.ubuntu.com/ → https://mirrors.aliyun.com/
(这里我直接复制了第一段到第三段,修改了URL)
进行软件更新
apt autoremove #删除不用包 apt update apt upgrade #更新源 更新软件