问题描述
在最近的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.
有任何想法吗?
最佳解决思路
我已经在内核升级上获得了一段时间,结果并非所有的dkms
驱动程序都在kernel-upgrades上得到更新。
首先,通过重新配置使用dkms
的任何软件包强制它们为当前内核重新编译,我能够解决这个问题 – 例如,我的AMD视频驱动程序失败了(package == fglrx
):
sudo dpkg-reconfigure fglrx
这至少会为当前版本配置驱动程序。
最后我发现了这个bug,其中包括一些可用于诊断的步骤:https://bugs.launchpad.net/ubuntu/+source/dkms/+bug/830915
dkms status
ls -R /var/lib/dkms
基本上他们正在做的是寻找令人惊讶或意外的任何事情 – 例如你已经卸载的软件包 – 或者你在早期的ubuntu版本上手动安装的软件,并且可能无法使用较新的版本。特别检查目录上的date-stamp,这些目录可能会显示特别旧的包可能来自手动安装的包。
ls -l /var/lib/dkms
在我的情况下,我有一个旧版本的fglrx
安装,我曾用于一年前诊断一些问题,只有re-named它。删除这个旧的问题使问题消失了。
如果有垃圾删除它(或将其移出该目录) – 如果有一个手动安装的包,请考虑更新它,或卸载它并使用维护版本。
次佳解决思路
这通常是由/var/lib/dkms
中的模块在其源子目录中没有dkms.conf
文件引起的 – dkms
需要此文件,因此如果缺少则会报告错误,然后可能会错过编译某些有效模块。
要查找有问题的模块,请运行此简短脚本(感谢Lekensteyn):
for i in /var/lib/dkms/*/[^k]*/source; do [ -e "$i" ] || echo "$i";done
这将输出任何dkms模块目录;然后,您可以决定是否卸载创建它们的程序包,或者是否已手动安装或重命名,以将它们移动到其他位置或将其删除。
第三种解决思路
我从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
然后我重新配置了虚拟机包,如下所示:
sudo dpkg-reconfigure virtualbox-4.2
它成功地做到了这一点:
* Trying to register the VirtualBox kernel modules using DKMS
第四种思路
我很长一段时间也遇到了这个问题。我需要在内核更新和重启后每次重新安装NVIDIA驱动程序。最近,我开始研究这个问题。实际上,我的问题是在/usr/src/
下有多个模块文件夹具有相同的前缀nvidia-
,在/var/lib/dkms/nvidia
下有多个具有不同版本号的文件夹。删除旧版本后,都执行以下命令
dkms status
dkms autoinstall
工作。