【漂移菌】原创-Ubuntu apt upgrade 修复记录

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 个软件包等待升级,但 kmodlibkmod2 版本不一致导致整个升级链断裂。

根因分析

  1. libkmod2 已升级到 29-1ubuntu1.1,但 kmod 仍停留在 29-1ubuntu1
  2. kmod 的新版本 29-1ubuntu1.1 包含 /etc/modprobe.d/blacklist.conf,但该文件已被第三方包 mod-blacklist 1.0-r0(OpenEmbedded 构建)占用。
  3. 因此 apt --fix-broken install 在覆盖配置文件时触发 dpkg 冲突,导致 kmod 无法完成升级,并阻塞了依赖它的 bluezgnome-bluetoothindicator-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"

该命令成功配置了 kmodbluezgnome-bluetoothindicator-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(或点击顶部面板输入法图标)即可在英文与中文拼音输入法之间切换。

注意事项

  1. 修改系统语言后需要重新登录重启才能完全生效。
  2. libglapi-mesa 被保留是厂商固定策略导致,不要强行使用 dpkg --force 或删除 pinning 文件,否则可能破坏图形/显示驱动。
  3. 若日后再次遇到 dpkg 配置文件冲突,可优先使用 DEBIAN_FRONTEND=noninteractive + --force-confold 方式处理。
1 个赞