内核升级时linux-modules-extra缺失的自动安装方案咨询
内核升级时linux-modules-extra缺失的自动安装方案咨询
我完全懂你这种头疼的情况——Dell XPS 9300的无线驱动刚好依赖linux-modules-extra包里的模块,每次内核更新后如果没同步装上对应版本的包,wifi就直接罢工,还要靠蓝牙 tether 来手动修复,确实麻烦。下面给你几个靠谱的自动解决方法,按推荐程度排序:
方法一:安装通用元包(最省心)
Ubuntu提供了linux-modules-extra-generic这个元包,它会自动追踪当前内核系列,每次内核更新时,apt会自动把对应版本的linux-modules-extra-XX-generic包一起安装。只需要执行一次:
sudo apt install linux-modules-extra-generic
安装完成后,后续所有内核更新都会自动带上对应的模块包,基本一劳永逸。
方法二:APT Post-Invoke钩子
如果元包方案对你不适用,可以给apt加一个钩子,让它每次完成包操作后自动检查并安装当前内核对应的模块包:
- 创建钩子配置文件:
sudo nano /etc/apt/apt.conf.d/99-auto-install-modules-extra
- 写入以下内容:
DPkg::Post-Invoke {"apt-get -y install linux-modules-extra-$(uname -r) 2>/dev/null || true;";};
- 保存退出(Ctrl+O,回车,Ctrl+X)。
这个钩子会在每次apt install/apt upgrade完成后,尝试安装当前运行内核对应的linux-modules-extra包,即使安装失败也不会影响其他操作。
方法三:DPKG触发器脚本
如果需要更精准地追踪内核安装事件,可以写一个DPKG触发器脚本:
- 创建执行脚本:
sudo nano /usr/local/bin/auto-install-modules-extra.sh
- 写入脚本内容:
#!/bin/bash # 获取所有已安装的内核版本 INSTALLED_KERNELS=$(dpkg --get-selections | grep -E 'linux-image-[0-9]+\.[0-9]+\.[0-9]+-[0-9]+-generic' | grep install | awk '{print $1}' | sed 's/linux-image-//') # 为每个内核版本安装对应的modules-extra for kernel in $INSTALLED_KERNELS; do apt-get -y install linux-modules-extra-$kernel 2>/dev/null done
- 给脚本加执行权限:
sudo chmod +x /usr/local/bin/auto-install-modules-extra.sh
- 创建DPKG触发器配置:
sudo nano /etc/dpkg/dpkg.cfg.d/trigger-modules-extra
- 写入:
trigger-hook linux-image-*-generic { action = install; command = "/usr/local/bin/auto-install-modules-extra.sh"; };
这样每次有新的linux-image-*-generic包被安装时,就会自动触发脚本安装对应的模块包。
小提示
如果之后还是遇到问题,可以先检查当前内核对应的模块包是否存在:
apt-cache search linux-modules-extra-$(uname -r)
如果显示存在但没安装,那钩子或元包可能没生效,再排查一下配置即可。
备注:内容来源于stack exchange,提问作者Miguel Sá Vieira




