Я знаю, что существует много открытых обсуждений, связывающих эту проблему, но ни один из них не обращается к уникальной причине об ошибке.
Это о Ubuntu 16.04 в моем случае. Я устанавливаю VirtualBox из репозитория Ubuntu, с sudo apt install virtualbox-qt
У меня было ядро, 4.4.0-34-универсальное установленный. После того, как я установил VirtualBox, все хорошо работало.
Но после того, как я обновил систему (через программное обеспечение Updater) и обновил с sudo apt upgrade
, sudo apt dist-upgrade
и auto-remove
, моя виртуальная машина не может запуститься. 4.4.0-36-универсальное ядро теперь установлено. Это говорит что-то как:
please install virtualbox-dkms and check if appropriate linux-headers are installed
virtualbox-dkms
уже установлен, таким образом, ничего не происходит после sudo apt install virtualbox-dkms
Но что относительно заголовков?
$ dpkg -l | grep linux-headers
ii linux-headers-4.4.0-34 4.4.0-34.53 all Header files related to Linux kernel version 4.4.0
ii linux-headers-4.4.0-34-generic 4.4.0-34.53 amd64 Linux kernel headers for version 4.4.0 on 64 bit x86 SMP
ii linux-headers-4.4.0-36 4.4.0-36.55 all Header files related to Linux kernel version 4.4.0
ii linux-headers-4.4.0-36-generic 4.4.0-36.55 amd64 Linux kernel headers for version 4.4.0 on 64 bit x86 SMP
ii linux-headers-generic 4.4.0.36.38 amd64 Generic Linux kernel headers
$ uname -r
4.4.0-36-generic
И какова настоящая причина, почему это происходит после каждого обновления ядра? Я хочу знать точно, что делать и не всегда проводить дни, фиксируя его.
Я нашел решение.
Хотя на мой вопрос нет ответа, и я не совсем понимаю ПОЧЕМУ эта проблема возникает, я хочу поделиться с вами простым кратким изложением решения. Я согласился с тем, что ядро Linux просто не предоставляет поддержку Virtualbox после обновления. Они знают причину.
В любом случае проблема возникает после почти каждого обновления ядра или пакета. Если вы попытаетесь
$ sudo modprobe vboxdrv
, вы получите modprobe: ERROR: could not insert 'vboxdrv': Required key not available
.
Решение состоит в том, чтобы вручную подписывать ключ КАЖДЫЙ раз, когда это происходит, потому что подпись зависит от КЕРНЕЛ. Это связано с тем, что Ubuntu 16.04 БЕЗ отключения системы безопасной загрузки.
Шаги:
Проверьте, соответствуют ли установленные заголовки ($ dpkg -l | grep linux-headers
) работающему ядру
($ uname -r
).
Вы всегда можете использовать эту команду, чтобы увидеть список зарегистрированных / подписанных ключей:
$ sudo keyctl list %:.system_keyring
.
Если вы уже подписали ключ для Virtualbox (со старым ядром), вам необходимо удалить его. Есть способ удалить один ключ, но я удаляю их все за один раз (все ключи, которые я зарегистрировал):
$ sudo mokutil --reset
. Выберите пароль и перезагрузите компьютер.
$ openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Akrog/"
. Вместо «MOK» и «Akrog» выберите имена (например, «vbX509Key» и «vbKey»). $ sudo /usr/src/linux-headers-XXX-generic/scripts/sign-file sha256 ./MOK.priv ./MOK.der /lib/modules/XXX-generic/updates/dkms/vboxdrv.ko
. Вместо «MOK» используйте указанное имя и правильную версию ядра вместо «XXX». $ sudo mokutil --import MOK.der
. Опять же, используйте указанное имя вместо «МОК». Выберите пароль и перезагрузите компьютер. Теперь вы можете нормально запускать и использовать Virtualbox.
После обновления ядра в случае проблем с VirtualBox из репозитория Ubuntu просто используют последний VirtualBox от официального сайта. Это могло бы быть простое и быстрое решение.