`错误!无法找到 dkms.conf 文件`

`错误!无法找到 dkms.conf 文件`

在最近的apt-get dist-upgrade12.10 期间我收到以下错误:

Setting up linux-headers-3.5.0-19-generic (3.5.0-19.30) ...
Examining /etc/kernel/header_postinst.d.
run-parts: executing /etc/kernel/header_postinst.d/dkms 3.5.0-19-generic /boot/vmlinuz-3.5.0-19-generic
Error! Could not locate dkms.conf file.
File:  does not exist.

有任何想法吗?

答案1

这通常是由于模块在其源子目录中/var/lib/dkms没有文件造成的 -需要此文件,因此如果缺少该文件将会报告错误,然后可能会错过编译一些有效的模块。dkms.confdkms

要找到有问题的模块,请运行这个简短的脚本(感谢莱肯施泰因):

for i in /var/lib/dkms/*/[^k]*/source; do [ -e "$i" ] || echo "$i";done

这将输出任何 dkms 模块目录;然后您可以决定是否卸载创建它们的包,或者如果它们已被手动安装或重命名,则将它们移动到其他地方或删除它们。

答案2

我在内核升级时遇到这个问题已经有一段时间了,但结果是并不是所有的dkms驱动程序都会在内核升级时得到更新。

首先,我可以通过重新配置任何dkms强制它们为当前内核重新编译的软件包来解决这个问题 - 例如,我的 AMD 视频驱动程序失败了(软件包 == fglrx):

sudo dpkg-reconfigure fglrx

这至少会得到针对当前版本配置的驱动程序。

最后我发现了这个错误,其中包括一些可用于诊断的步骤:https://bugs.launchpad.net/ubuntu/+source/dkms/+bug/830915

dkms status
ls -R /var/lib/dkms

基本上,他们所做的就是四处寻找任何令人惊讶或意外的东西 - 例如您已卸载的软件包 - 或您在较早的 ubuntu 版本上手动安装的软件,这些软件可能无法与较新的版本一起使用。 特别检查目录上的日期戳,这可能会显示特别旧的软件包可能来自手动安装的软件包。

ls -l /var/lib/dkms

就我而言,我有一个旧版本的fglrx安装程序,一年前我用它来诊断一些问题,只是重新命名了它。删除这个旧东西后问题就解决了。

如果有垃圾,请删除它(或将其移出该目录) - 如果那里有一个手动安装的包,请考虑更新它,或卸载它并使用维护版本。

答案3

我在使用 Oracle ppa 的 VirtualBox 时遇到了这个问题,而不是使用 12.04 LTS 打包的那个:

Error! Could not locate dkms.conf file.
File:  does not exist.

我将 /var/lib/dkms 的内容复制到另一个目录作为备份,然后删除了 /var/lib/dkms 中的 vboxhost 目录;

mkdir ~/backup_dkms
cp -r /var/lib/dkms/* ~/backup_dkms 
rm -rf /var/lib/dkms/vboxhost

然后我重新配置了 virtualbox 包,如下所示:

sudo dpkg-reconfigure virtualbox-4.2

并成功做到了这一点:

   * Trying to register the VirtualBox kernel modules using DKMS

答案4

我曾经在装有 Nvidia 驱动程序的 Red Hat 7.5 Workstation 上遇到过这种情况。我知道这不是 Ubuntu,但这可能对某些人有帮助...

从 dkms 中删除 Nvidia 文件,然后重新安装 dkms:

rm -rf /var/lib/dkms/nvidia
yum reinstall dkms

然后重新安装 Nvidia 驱动程序

./NVIDIA-installer.bin --dkms
reboot

警告,这对我有用,但可能不是正确的做事方式。

相关内容