在最近的apt-get dist-upgrade
12.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.conf
dkms
要找到有问题的模块,请运行这个简短的脚本(感谢莱肯施泰因):
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
警告,这对我有用,但可能不是正确的做事方式。