Не удалось загрузить vboxdrv после обновления до Ubuntu 16.04 (и я хочу сохранить безопасную загрузку)
Я обновляю Ubuntu 15.10 до 16.04, и с тех пор VirtualBox 5.0.18 больше не запускает мои виртуальные машины. Он жалуется, что vboxdrv не загружен. Поэтому я пытаюсь загрузить его и получаю следующую ошибку:
$ sudo modprobe vboxdrv
modprobe: ERROR: could not insert 'vboxdrv': Required key not available
Я считаю, что это связано с безопасной загрузкой, которую я использую и которую я хочу продолжать использовать. На самом деле с Ubuntu 15.10 безопасная загрузка и VirtualBox работали просто отлично.
Тоже попробовал $ sudo apt-get --reinstall install virtualbox-dkms
который успешно собрал модуль ядра, но не решил эту проблему.
Любая идея, как загрузить vboxdrv при сохранении безопасной загрузки?
Обновление 2: также я попытался выполнить sudo mokutil --disable-validation
, При выполнении этой команды во время следующей загрузки мне предлагается отключить безопасную загрузку, добавить ключ или хэш с диска. Поскольку я не хочу отключать безопасную загрузку, похоже, это тоже не решает мою проблему. Также я хочу оставить UEFI активным для параллельной установки Windows.
Примечание. Если вы не против отключить безопасную загрузку, см. Почему я получаю "Требуемый ключ недоступен" при установке модулей ядра сторонних производителей или после обновления ядра? вместо.
9 ответов
Начиная с версии ядра 4.4.0-20 было принудительно запрещено запускать неподписанные модули ядра с включенной безопасной загрузкой. Поскольку вы хотите сохранить безопасную загрузку, следующий логический шаг - подписать эти модули.
Итак, давайте попробуем это.
Создать ключи подписи
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive common name/"
Опция: для дополнительной безопасности пропустите ключ -nodes, который запросит пароль. Затем, прежде чем перейти к следующему шагу, обязательно
export KBUILD_SIGN_PIN='yourpassword'
Подпишите модуль (vboxdrv для этого примера, но повторите для других модулей в
ls $(dirname $(modinfo -n vboxdrv))/vbox*.ko)
для полной функциональности)sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxdrv)
Подтвердите, что модуль подписан
tail $(modinfo -n vboxdrv) | grep "Module signature appended"
Зарегистрируйте ключи для безопасной загрузки
sudo mokutil --import MOK.der
который попросит ввести пароль для подтверждения импорта на следующем шаге.
Перезагрузитесь и следуйте инструкциям, чтобы зарегистрировать MOK (ключ владельца машины). Вот образец с картинками. Система перезагрузится еще раз.
Подтвердите, что ключ зарегистрирован
mokutil --test-key MOK.der
Если VirtualBox по-прежнему не загружается, возможно, модуль не загружается (sudo modprobe vboxdrv
исправит это) или что ключ не подписан. Просто повторите этот шаг, и все должно работать нормально.
Ресурсы: Подробная статья на сайте для реализации подписания модулей в Fedora и Ubuntu. @zwets для дополнительной безопасности. @shasha_trn за упоминание всех модулей.
Дополнительный ресурс: я каждый раз создавал bash-скрипт для собственного использования virtualbox-dkms
обновляет и, таким образом, перезаписывает подписанные модули. Проверьте мой vboxsign первоначально на GitHub.
Я знаю, что этот вопрос слишком старый, но поскольку нет принятого ответа, и ни один из этих ответов не решил проблему в моем случае, я пишу, как я решил это сегодня, не отключая безопасную загрузку:
При запуске этой команды получайте такую ошибку:
$ sudo modprobe vboxdrv
modprobe: ERROR: could not insert 'vboxdrv': Required key not available
Проблема в том, что модуль не подписан и поэтому не загружается с ядром. Это произойдет, если на вашем компьютере активирован режим SecureBoot, что очень часто встречается в современном оборудовании.
Вот почему я получаю эту ошибку, открывая любую машину в виртуальном ящике.
Драйвер ядра не установлен (rc=-1908)
Выполните следующие действия, чтобы подписать драйвер, и он загружается как модуль ядра в системах Ubuntu, а также в Debian 9:
1. Установите пакет mkutil, чтобы иметь возможность подписывать.
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install mokutil
2. сгенерируйте файл подписи:
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VirtualBox/"
3. Затем добавляем в ядро:
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxdrv)
4. Зарегистрируйте его для безопасной загрузки.
ВАЖНЫЙ! Это попросит вас ввести пароль, введите тот, который вы хотите, вам нужно будет использовать его только один раз при следующей перезагрузке.
sudo mokutil --import MOK.der
5. Наконец, перезагрузите компьютер. Появится синий экран с ожиданием клавиатуры, нажмите клавишу, которая просит вас прервать загрузку.
Когда вы находитесь внутри синего экрана, выберите
Enroll MOK > Continue > and it will ask you for the password
что вы ввели ранее, вы введете его, и вам сообщат, что операция была успешно завершена.
Теперь ваша операционная система запустится, и теперь вы можете без проблем использовать VirtualBox:)
Надеюсь, это кому-то поможет.
В моей системе я сделал следующее, чтобы она заработала:
Запустите mokutil:
sudo mokutil --disable-validation
Затем mokutil попросил меня установить пароль для менеджера MOK. После перезагрузки ПК в BIOS появилось диалоговое окно для настройки MOK Manager. Я отключил SecureBoot из этого диалога, он запрашивал несколько символов из пароля (т. Е. Введите символ (5) и т. Д.).
После загрузки модули vboxdrv загружаются правильно.
lsmod | grep vboxdrv
vboxdrv 454656 3 vboxnetadp,vboxnetflt,vboxpci
Любопытно, что mokutil все еще показывает, что SecureBoot включен:
sudo mokutil --sb-state
SecureBoot enabled
Вы можете отключить проверку
sudo apt install mokutil
sudo mokutil --disable-validation
После этого следует установить пакеты DKMS.
У меня была эта проблема с Ubuntu 20.04 (после новой установки). Я не запускал UEFI в BIOS и выполнял автоматический вход в Ubuntu.
Что исправлено, я изменил автоматический вход на автоматический вход и включил UEFI в BIOS.
Хорошо, после небольшого тестирования я почти уверен, что это проблема безопасной загрузки.
Как в случае, если он включен, то это бросается:
ВНИМАНИЕ: модуль ядра vboxdrv не загружен. Либо нет доступного модуля для текущего ядра (4.4.0-21-generic), либо его не удалось загрузить. Пожалуйста, перекомпилируйте модуль ядра и установите его с помощью установки sudo /sbin/rcvboxdrv
Однако, если безопасная загрузка отключена, то Virtualbox загружается просто без ошибок.
У меня все еще мой биос установлен как UEFI.
У меня была та же проблема сегодня, у меня были Windows 10 и Ubuntu 15.10 на двойной загрузке с включенным UEFI на Bios (я не отключил его, чтобы я мог запустить предустановленную Windows).
После обновления до Ubuntu 16.04 VirtualBox перестал загружать мои виртуальные машины с тем же сообщением об ошибке:
modprobe: ERROR: could not insert 'vboxdrv': Required key not available
Я подозревал проблему UEFI, потому что при обновлении установщик спросил меня, хочу ли я отключить его, на что я ответил "Нет" (потому что "Да" может сделать мою Windows непригодной для использования).
Что я сделал, так это перешел в Bios и включил поддержку устаревшей загрузки BIOS БЕЗ отключения безопасной загрузки.
Виртуалбокс теперь работает нормально.
Обновление: как правильно заметил @zwets в комментарии, включение устаревших модулей приводит к отключению безопасной загрузки.
Я получил ошибку о vboxdrv после обновления тоже. Но была проблема со старой версией (5.0.14) Oracle VM VirtualBox Extension Pack. Я скачал и установил более новую версию (5.0.18) этого пакета, и проблема исчезла.
Это сработало для меня (сборка 5.11.0-27-generic)
sudo apt-get autoremove virtualbox-dkmssudo apt-get установить виртуальный бокс
он был перекомпилирован с новым ядром :)