Linux依赖冲突实战:deepin-wine疑难杂症排查指南
1. 当deepin-wine遇上依赖地狱报错现场还原第一次在Ubuntu上安装deepin-wine时那个满屏飘红的依赖错误让我至今记忆犹新。终端里不断刷新的但是它将不会被安装提示像极了游戏里的连环陷阱。这类问题通常发生在混合安装32位/64位软件包或者软件源版本混乱时。我最近一次遇到的典型报错是这样的下列软件包有未满足的依赖关系 deepin-libwine:i386 : 依赖: libc6:i386 ( 2.23) 但是它将不会被安装 依赖: libstdc6:i386 ( 5) 但是它将不会被安装 E: 有未能满足的依赖关系这种依赖冲突的本质是系统里同时存在多个版本的库文件就像图书馆里同一本书的不同译本混在一起。特别要注意那些带:i386后缀的32位库文件它们在64位系统中常常是冲突的源头。有次我统计过deepin-wine的依赖树涉及多达47个基础库任何一个环节出问题都会导致安装失败。2. 依赖冲突的三大元凶2.1 软件源混用埋下的祸根很多人在/etc/apt/sources.list里同时添加了官方源、第三方源和PPA源就像把不同菜系的调料混在一起。我见过最夸张的情况是有用户同时启用了Ubuntu 18.04和20.04的源结果libc6库的版本要求直接打架。建议用这个命令检查源优先级apt-cache policy libc6输出中的候选版本会显示当前生效的版本。如果看到多个源提供不同版本就该警惕了。我的经验是只保留官方源deepin官方源其他PPA能不用就不用。2.2 32位与64位库的左右互搏deepin-wine需要大量32位库(:i386)但系统默认安装的是64位版本。当两者版本号不一致时apt就会陷入选择困难。比如这个典型错误libc6-dev : 破坏: libc6-dev:i386 (! 2.23-0ubuntu11) 但是 2.27-3 正要被安装这种情况就像试图用USB-C接口给Micro-USB设备充电。解决方法是用dpkg查看已安装的架构dpkg -l | grep libc62.3 残留包制造的幽灵依赖之前用apt remove卸载软件时经常会有配置文件和依赖包残留。这些幽灵会在下次安装时突然作祟。有次我遇到deepin-wine死活装不上最后发现是之前卸载时漏了个deepin-libwine-dbg:i386的残包。排查技巧dpkg -l | grep ^rc这个命令会列出所有已删除但留有配置的包其中的rc状态表示removed-but-config-files。3. 五步排错法实战演示3.1 第一步强制修复依赖链遇到报错先别慌试试这个万能起手式sudo apt --fix-broken install这相当于让apt自己尝试解依赖死锁。但要注意它有时会把问题包直接卸载。我有次执行后系统自作主张移除了python3导致桌面环境崩溃。所以建议先备份重要数据。3.2 第二步清理冲突包当修复命令无效时需要手动清理冲突包。先找出所有涉及deepin-wine的包dpkg -l | grep -E deepin|wine然后用这个外科手术式删除命令以deepin-libwine为例sudo dpkg -P --force-all deepin-libwine:i386--force-all参数相当于强制拆除违章建筑要慎用。建议配合--dry-run先模拟操作。3.3 第三步更新软件源缓存有时候问题出在本地缓存过期。先备份原有源列表sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak然后换成阿里云镜像源以Ubuntu 20.04为例sudo sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list更新缓存时加-o Acquire::http::Timeout10参数防止卡死sudo apt -o Acquire::http::Timeout10 update3.4 第四步安装关键依赖库deepin-wine依赖的这些基础库建议提前装好sudo apt install libc6:i386 libstdc6:i386 libgcc1:i386 zlib1g:i386如果遇到版本冲突可以指定版本号安装sudo apt install libc6:i3862.31-0ubuntu9.2查看可用版本的命令apt-cache madison libc63.5 第五步完整安装流程最后执行完整安装以微信为例sudo apt install deepin.com.wechat如果还报错试试这个终极组合拳sudo apt clean sudo apt autoclean sudo apt autoremove sudo dpkg --configure -a sudo apt --fix-broken install4. 防患于未然的四个习惯4.1 使用虚拟环境隔离用schroot创建隔离环境是个好办法。这是我常用的配置模板debootstrap --archamd64 focal /path/to/chroot http://mirrors.aliyun.com/ubuntu然后在chroot内安装deepin-wine避免污染主系统。4.2 定期检查依赖关系这个命令可以可视化依赖树apt-rdepends deepin.com.wechat我习惯用graphviz生成依赖图apt-rdepends --dotty deepin.com.wechat | dot -Tpng deps.png4.3 善用版本锁定防止自动升级导致依赖破坏sudo apt-mark hold libc6:i386查看已锁定包apt-mark showhold4.4 日志记录操作历史安装前先开始记录script -a wine_install.log所有终端操作会被记录到文件方便回溯问题。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2486935.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!