Ubuntu apt upgrade 修复记录
环境信息
- 系统:Ubuntu 22.04.2 LTS (Jammy Jellyfish)
- 架构:ARM64 (aarch64)
- 软件源:华为云 Ubuntu Ports 镜像
- 用户名:
aidlux
问题现象
执行 sudo apt upgrade 时失败,模拟升级提示存在未满足的依赖:
kmod : Depends: libkmod2 (= 29-1ubuntu1) but 29-1ubuntu1.1 is installed
E: Unmet dependencies. Try 'apt --fix-broken install'
同时系统有 267 个软件包等待升级,但 kmod 与 libkmod2 版本不一致导致整个升级链断裂。
根因分析
libkmod2已升级到29-1ubuntu1.1,但kmod仍停留在29-1ubuntu1。kmod的新版本29-1ubuntu1.1包含/etc/modprobe.d/blacklist.conf,但该文件已被第三方包mod-blacklist 1.0-r0(OpenEmbedded 构建)占用。- 因此
apt --fix-broken install在覆盖配置文件时触发dpkg冲突,导致kmod无法完成升级,并阻塞了依赖它的bluez、gnome-bluetooth、indicator-bluetooth等包。
修复步骤
1. 更新软件包列表
sudo apt update
输出显示 267 个软件包可升级。
2. 备份冲突的配置文件
sudo cp /etc/modprobe.d/blacklist.conf /etc/modprobe.d/blacklist.conf.bak.$(date +%Y%m%d)
3. 使用强制覆盖方式安装新版 kmod
先下载对应版本:
sudo apt-get download kmod=29-1ubuntu1.1
由于 mod-blacklist 占用了同名文件,使用 dpkg --force-overwrite 让新版 kmod 覆盖:
sudo dpkg -i --force-overwrite kmod_29-1ubuntu1.1_arm64.deb
此时会提示 libkmod2 尚未配置完成,属于正常中间状态。
4. 非交互式修复破损依赖
为避免 dpkg 在配置文件冲突时卡住,使用非交互模式并保留旧配置:
sudo DEBIAN_FRONTEND=noninteractive apt --fix-broken install -y \
-o Dpkg::Options::="--force-confold"
该命令成功配置了 kmod、bluez、gnome-bluetooth、indicator-bluetooth。
5. 执行完整系统升级
sudo DEBIAN_FRONTEND=noninteractive apt upgrade -y \
-o Dpkg::Options::="--force-confold"
升级过程顺利,所有可升级包均已安装。
6. 清理无用包
sudo apt autoremove -y
验证结果
sudo dpkg --audit
# 无输出,表示没有破损包
sudo apt --simulate upgrade
# 0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded
仍有 libglapi-mesa 被保留(kept back),原因是 /etc/apt/preferences.d/osfix015_block_reinstall.pref 中对若干 Mesa/X11 相关包做了 -1 优先级固定,这是厂商(Aidlux)自定义镜像的预期行为,不影响日常使用,无需强行升级。
中文输入法与系统语言设置
1. 安装中文语言包与输入法
sudo apt install -y language-pack-zh-hans language-pack-zh-hans-base \
fonts-noto-cjk ibus-libpinyin
实际环境中这些包已预装,命令确保它们处于最新状态。
2. 设置系统默认 locale 为中文
sudo update-locale LANG=zh_CN.UTF-8 LANGUAGE=zh_CN:zh
验证 /etc/default/locale:
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:zh
注销并重新登录后,系统界面将显示为简体中文。
3. 配置中文输入法
-
将输入框架设为 IBus:
im-config -n ibus -
将 GNOME 输入源设为美式键盘 + 智能拼音:
gsettings set org.gnome.desktop.input-sources sources \ "[('xkb', 'us'), ('ibus', 'libpinyin')]" -
设置 GNOME 区域格式:
gsettings set org.gnome.system.locale region 'zh_CN.UTF-8'
按 Super + Space(或点击顶部面板输入法图标)即可在英文与中文拼音输入法之间切换。
注意事项
- 修改系统语言后需要重新登录或重启才能完全生效。
libglapi-mesa被保留是厂商固定策略导致,不要强行使用dpkg --force或删除 pinning 文件,否则可能破坏图形/显示驱动。- 若日后再次遇到
dpkg配置文件冲突,可优先使用DEBIAN_FRONTEND=noninteractive+--force-confold方式处理。