Я пытаюсь установить VirtualBox на Ubuntu 16.04, сохраняя безопасную загрузку.
Я выполнил следующие инструкции: Не удалось загрузить «vboxdrv» после обновления до Ubuntu 16.04 (и я хочу сохранить безопасная загрузка) и https://stegard.net/2016/10/virtualbox-secure-boot-ubuntu-fail/ Оба они почти одинаковы (я оставил файлы MOK в каталоге / root, как во второй ссылке). Кажется, все работает нормально, я перезагрузился, снова вставил свой пароль, перезагрузился. Все хорошие
Но тогда, когда я пытаюсь использовать VirtualBox, он все равно не работает. Если я запустил его с терминала, я получаю:
WARNING: The character device /dev/vboxdrv does not exist.
Please install the virtualbox-dkms package and the appropriate
headers, most likely linux-headers-generic.
You will not be able to start VMs until this problem is fixed.
Но эти два пакета уже установлены и обновлены.
В комментариях в верхнем ответе в другом сообщении говорится о переустановке virtualbox-dkms перед выполнением этих инструкций. Я попытался, и тот же результат.
Я попробовал ответить здесь: Не удалось загрузить «vboxdrv» после обновления до Ubuntu 16.04 (и я хочу сохранить безопасную загрузку) Что подсказывает мне снова спросить, хочу ли я отключить безопасную загрузку, к которой я говорю No, и обратно к квадрату.
Если я запустил modprobe, я получаю: modprobe: ERROR: could not insert 'vboxdrv': Required key not available
Любая идея о том, как заставить VirtualBox работать с включенным SecureBoot (пожалуйста, воздержитесь от того, чтобы мне было сказано удалить его ...)?
thanks
Я не пробовал ни одну из этих процедур. Однако я делаю это по-другому, но это очень утомительный метод. Это описание упростит это, потому что я ссылаюсь на большую страницу, которую я написал, которая покрывает худшие из утомительных частей. Моя процедура:
Возьмите под свой контроль Безопасную загрузку. В моем случае я настроил свой компьютер так, чтобы я встроил свой собственный открытый ключ Secure Boot в прошивку. Таким образом, мне не нужно использовать Shim или MOK. Я удалил ключи от Microsoft и добавил свои собственные ключи Canonical к компьютеру, на котором я использую эту процедуру, но вы можете настроить все, что вам нравится. Критическая часть для вашего вопроса заключается в том, что вы должны включать в себя ключ, который вы создаете, с закрытым ключом, который вы сохраняете, чтобы заставить его работать. Вам также понадобятся ключи, используемые для подписывания стандартных компонентов - ключ Canonical, ключ для публичного рынка Microsoft или и то, и другое. Если вы используете двойную загрузку с Windows, вам понадобится открытый ключ для того, который Microsoft использует для подписания собственного загрузчика. См. Эту страницу для всех подробностей - но имейте в виду, что это утомительная и сложная процедура, поэтому вы можете потратить некоторое время на то, чтобы эта часть работала. Обратите внимание, что большинство UEFI упрощают восстановление стандартного набора ключей, поэтому риск, связанный с попыткой этой процедуры, является низким. Подпишите модули VirtualBox. Следующий шаг - подписать модули ядра VirtualBox. Это делается почти так же, как и страницы, на которые вы ссылались; однако у меня есть сценарий, помогающий автоматизировать этот процесс (см. ниже). Загрузите модуль VirtualBox. После подписания модулей они должны быть загружены. Это должно произойти автоматически при перезагрузке; но если вы хотите использовать VirtualBox без перезагрузки, вы должны явно использовать modprobe для каждого из модулей (vboxdrv, vboxnetflt, vboxpci и vboxnetadp). Повторите шаги 2-3 после каждого обновления ядра. После обновления ядра необходимо повторить шаги №2 и №3.Для удобства я написал скрипт для выполнения шагов № 2 и № 3 в одной команде. Я называю это sign-vbox. Вот он:
#!/bin/bash
# sign-vbox script, copyright (c) 2017 by Rod Smith
# Distributed under the terms of the GPLv3
if [ "$#" -ne 1 ] && [ "$#" -ne 0 ]; then
echo "Usage: $0 [ {kernel-version} ]"
exit 1
fi
if [ "$#" == 0 ]; then
kernel_version=$(uname -r)
else
kernel_version="$1"
fi
sign_file=$(find /usr/src/ -name sign-file | tail -n 1)
if [ -z $sign_file ]; then
echo "Can't find the sign-file binary! Exiting!"
exit 1
else
path_to_modules="/lib/modules/$kernel_version/updates/dkms"
if [ ! -f $path_to_modules/vboxdrv.ko ]; then
echo "Could not find $path_to_modules/vboxdrv.ko!"
echo "Is the kernel version correct?"
exit 1
fi
echo "Signing modules for $kernel_version"
$sign_file sha256 /etc/refind.d/keys/refind_local.key /etc/refind.d/keys/refind_local.cer $path_to_modules/vboxdrv.ko
$sign_file sha256 /etc/refind.d/keys/refind_local.key /etc/refind.d/keys/refind_local.cer $path_to_modules/vboxnetadp.ko
$sign_file sha256 /etc/refind.d/keys/refind_local.key /etc/refind.d/keys/refind_local.cer $path_to_modules/vboxnetflt.ko
$sign_file sha256 /etc/refind.d/keys/refind_local.key /etc/refind.d/keys/refind_local.cer $path_to_modules/vboxpci.ko
modprobe vboxdrv
modprobe vboxnetflt
modprobe vboxpci
modprobe vboxnetadp
echo "Loaded vbox modules:"
lsmod | grep vbox
fi
Чтобы использовать этот скрипт, просто введите его имя. Он подписывает модули VirtualBox, связанные с текущим ядром. Если вы передадите ему номер версии ядра, он должен подписать ядра, связанные с этой версией ядра, но не существует места для ошибки при указании номера версии ядра. (Ожидается, что тот же формат, который uname -r вернется, если ядро запускалось.)
Обратите внимание, что сценарий ожидает найти частные ключи [refind_local.key) и public (refind_local.cer) в /etc/refind.d/keys/. Вам придется изменить это место для своей собственной системы, если вы не используете rEFInd и не используете для этого локальные ключи. Файл закрытого ключа должен быть таким же безопасным, как вы можете его сделать, например, иметь разрешения 0400 (-r--------). Также может оказаться полезным ограниченный доступ к самому каталогу. Еще лучше, поставьте его на флэш-накопитель USB, который вы подключаете только при выполнении этой команды.
Кроме того, я написал этот скрипт для личного использования. Вероятно, у него есть ошибки, особенно если они используются таким образом, которого я не ожидаю. Конечно, это не очень хорошо, если необходимые исходные файлы ядра не установлены.
Можно предположить, что этот скрипт будет работать с методами на основе MOK, которые вы пытались использовать, если вы указали его на файлы ключей, которые вы создали , публичный файл которого вы загрузили в MOK. Однако я не могу этого обещать, и, конечно, ваши проблемы могут быть вызваны неправильным образом подписанными модулями ядра или проблемами на конце Shim / MOK. Использование этого скрипта поможет только в том случае, если ваши модули ядра не были правильно подписаны.
Я не пробовал ни одну из этих процедур. Однако я делаю это по-другому, но это очень утомительный метод. Это описание упростит это, потому что я ссылаюсь на большую страницу, которую я написал, которая покрывает худшие из утомительных частей. Моя процедура:
Возьмите под свой контроль Безопасную загрузку. В моем случае я настроил свой компьютер так, чтобы я встроил свой собственный открытый ключ Secure Boot в прошивку. Таким образом, мне не нужно использовать Shim или MOK. Я удалил ключи от Microsoft и добавил свои собственные ключи Canonical к компьютеру, на котором я использую эту процедуру, но вы можете настроить все, что вам нравится. Критическая часть для вашего вопроса заключается в том, что вы должны включать в себя ключ, который вы создаете, с закрытым ключом, который вы сохраняете, чтобы заставить его работать. Вам также понадобятся ключи, используемые для подписывания стандартных компонентов - ключ Canonical, ключ для публичного рынка Microsoft или и то, и другое. Если вы используете двойную загрузку с Windows, вам понадобится открытый ключ для того, который Microsoft использует для подписания собственного загрузчика. См. Эту страницу для всех подробностей - но имейте в виду, что это утомительная и сложная процедура, поэтому вы можете потратить некоторое время на то, чтобы эта часть работала. Обратите внимание, что большинство UEFI упрощают восстановление стандартного набора ключей, поэтому риск, связанный с попыткой этой процедуры, является низким. Подпишите модули VirtualBox. Следующий шаг - подписать модули ядра VirtualBox. Это делается почти так же, как и страницы, на которые вы ссылались; однако у меня есть сценарий, помогающий автоматизировать этот процесс (см. ниже). Загрузите модуль VirtualBox. После подписания модулей они должны быть загружены. Это должно произойти автоматически при перезагрузке; но если вы хотите использовать VirtualBox без перезагрузки, вы должны явно использовать modprobe для каждого из модулей (vboxdrv, vboxnetflt, vboxpci и vboxnetadp). Повторите шаги 2-3 после каждого обновления ядра. После обновления ядра необходимо повторить шаги №2 и №3.Для удобства я написал скрипт для выполнения шагов № 2 и № 3 в одной команде. Я называю это sign-vbox. Вот он:
#!/bin/bash
# sign-vbox script, copyright (c) 2017 by Rod Smith
# Distributed under the terms of the GPLv3
if [ "$#" -ne 1 ] && [ "$#" -ne 0 ]; then
echo "Usage: $0 [ {kernel-version} ]"
exit 1
fi
if [ "$#" == 0 ]; then
kernel_version=$(uname -r)
else
kernel_version="$1"
fi
sign_file=$(find /usr/src/ -name sign-file | tail -n 1)
if [ -z $sign_file ]; then
echo "Can't find the sign-file binary! Exiting!"
exit 1
else
path_to_modules="/lib/modules/$kernel_version/updates/dkms"
if [ ! -f $path_to_modules/vboxdrv.ko ]; then
echo "Could not find $path_to_modules/vboxdrv.ko!"
echo "Is the kernel version correct?"
exit 1
fi
echo "Signing modules for $kernel_version"
$sign_file sha256 /etc/refind.d/keys/refind_local.key /etc/refind.d/keys/refind_local.cer $path_to_modules/vboxdrv.ko
$sign_file sha256 /etc/refind.d/keys/refind_local.key /etc/refind.d/keys/refind_local.cer $path_to_modules/vboxnetadp.ko
$sign_file sha256 /etc/refind.d/keys/refind_local.key /etc/refind.d/keys/refind_local.cer $path_to_modules/vboxnetflt.ko
$sign_file sha256 /etc/refind.d/keys/refind_local.key /etc/refind.d/keys/refind_local.cer $path_to_modules/vboxpci.ko
modprobe vboxdrv
modprobe vboxnetflt
modprobe vboxpci
modprobe vboxnetadp
echo "Loaded vbox modules:"
lsmod | grep vbox
fi
Чтобы использовать этот скрипт, просто введите его имя. Он подписывает модули VirtualBox, связанные с текущим ядром. Если вы передадите ему номер версии ядра, он должен подписать ядра, связанные с этой версией ядра, но не существует места для ошибки при указании номера версии ядра. (Ожидается, что тот же формат, который uname -r вернется, если ядро запускалось.)
Обратите внимание, что сценарий ожидает найти частные ключи [refind_local.key) и public (refind_local.cer) в /etc/refind.d/keys/. Вам придется изменить это место для своей собственной системы, если вы не используете rEFInd и не используете для этого локальные ключи. Файл закрытого ключа должен быть таким же безопасным, как вы можете его сделать, например, иметь разрешения 0400 (-r--------). Также может оказаться полезным ограниченный доступ к самому каталогу. Еще лучше, поставьте его на флэш-накопитель USB, который вы подключаете только при выполнении этой команды.
Кроме того, я написал этот скрипт для личного использования. Вероятно, у него есть ошибки, особенно если они используются таким образом, которого я не ожидаю. Конечно, это не очень хорошо, если необходимые исходные файлы ядра не установлены.
Можно предположить, что этот скрипт будет работать с методами на основе MOK, которые вы пытались использовать, если вы указали его на файлы ключей, которые вы создали , публичный файл которого вы загрузили в MOK. Однако я не могу этого обещать, и, конечно, ваши проблемы могут быть вызваны неправильным образом подписанными модулями ядра или проблемами на конце Shim / MOK. Использование этого скрипта поможет только в том случае, если ваши модули ядра не были правильно подписаны.
Я не пробовал ни одну из этих процедур. Однако я делаю это по-другому, но это очень утомительный метод. Это описание упростит это, потому что я ссылаюсь на большую страницу, которую я написал, которая покрывает худшие из утомительных частей. Моя процедура:
Возьмите под свой контроль Безопасную загрузку. В моем случае я настроил свой компьютер так, чтобы я встроил свой собственный открытый ключ Secure Boot в прошивку. Таким образом, мне не нужно использовать Shim или MOK. Я удалил ключи от Microsoft и добавил свои собственные ключи Canonical к компьютеру, на котором я использую эту процедуру, но вы можете настроить все, что вам нравится. Критическая часть для вашего вопроса заключается в том, что вы должны включать в себя ключ, который вы создаете, с закрытым ключом, который вы сохраняете, чтобы заставить его работать. Вам также понадобятся ключи, используемые для подписывания стандартных компонентов - ключ Canonical, ключ для публичного рынка Microsoft или и то, и другое. Если вы используете двойную загрузку с Windows, вам понадобится открытый ключ для того, который Microsoft использует для подписания собственного загрузчика. См. Эту страницу для всех подробностей - но имейте в виду, что это утомительная и сложная процедура, поэтому вы можете потратить некоторое время на то, чтобы эта часть работала. Обратите внимание, что большинство UEFI упрощают восстановление стандартного набора ключей, поэтому риск, связанный с попыткой этой процедуры, является низким. Подпишите модули VirtualBox. Следующий шаг - подписать модули ядра VirtualBox. Это делается почти так же, как и страницы, на которые вы ссылались; однако у меня есть сценарий, помогающий автоматизировать этот процесс (см. ниже). Загрузите модуль VirtualBox. После подписания модулей они должны быть загружены. Это должно произойти автоматически при перезагрузке; но если вы хотите использовать VirtualBox без перезагрузки, вы должны явно использовать modprobe для каждого из модулей (vboxdrv, vboxnetflt, vboxpci и vboxnetadp). Повторите шаги 2-3 после каждого обновления ядра. После обновления ядра необходимо повторить шаги №2 и №3.Для удобства я написал скрипт для выполнения шагов № 2 и № 3 в одной команде. Я называю это sign-vbox. Вот он:
#!/bin/bash
# sign-vbox script, copyright (c) 2017 by Rod Smith
# Distributed under the terms of the GPLv3
if [ "$#" -ne 1 ] && [ "$#" -ne 0 ]; then
echo "Usage: $0 [ {kernel-version} ]"
exit 1
fi
if [ "$#" == 0 ]; then
kernel_version=$(uname -r)
else
kernel_version="$1"
fi
sign_file=$(find /usr/src/ -name sign-file | tail -n 1)
if [ -z $sign_file ]; then
echo "Can't find the sign-file binary! Exiting!"
exit 1
else
path_to_modules="/lib/modules/$kernel_version/updates/dkms"
if [ ! -f $path_to_modules/vboxdrv.ko ]; then
echo "Could not find $path_to_modules/vboxdrv.ko!"
echo "Is the kernel version correct?"
exit 1
fi
echo "Signing modules for $kernel_version"
$sign_file sha256 /etc/refind.d/keys/refind_local.key /etc/refind.d/keys/refind_local.cer $path_to_modules/vboxdrv.ko
$sign_file sha256 /etc/refind.d/keys/refind_local.key /etc/refind.d/keys/refind_local.cer $path_to_modules/vboxnetadp.ko
$sign_file sha256 /etc/refind.d/keys/refind_local.key /etc/refind.d/keys/refind_local.cer $path_to_modules/vboxnetflt.ko
$sign_file sha256 /etc/refind.d/keys/refind_local.key /etc/refind.d/keys/refind_local.cer $path_to_modules/vboxpci.ko
modprobe vboxdrv
modprobe vboxnetflt
modprobe vboxpci
modprobe vboxnetadp
echo "Loaded vbox modules:"
lsmod | grep vbox
fi
Чтобы использовать этот скрипт, просто введите его имя. Он подписывает модули VirtualBox, связанные с текущим ядром. Если вы передадите ему номер версии ядра, он должен подписать ядра, связанные с этой версией ядра, но не существует места для ошибки при указании номера версии ядра. (Ожидается, что тот же формат, который uname -r вернется, если ядро запускалось.)
Обратите внимание, что сценарий ожидает найти частные ключи [refind_local.key) и public (refind_local.cer) в /etc/refind.d/keys/. Вам придется изменить это место для своей собственной системы, если вы не используете rEFInd и не используете для этого локальные ключи. Файл закрытого ключа должен быть таким же безопасным, как вы можете его сделать, например, иметь разрешения 0400 (-r--------). Также может оказаться полезным ограниченный доступ к самому каталогу. Еще лучше, поставьте его на флэш-накопитель USB, который вы подключаете только при выполнении этой команды.
Кроме того, я написал этот скрипт для личного использования. Вероятно, у него есть ошибки, особенно если они используются таким образом, которого я не ожидаю. Конечно, это не очень хорошо, если необходимые исходные файлы ядра не установлены.
Можно предположить, что этот скрипт будет работать с методами на основе MOK, которые вы пытались использовать, если вы указали его на файлы ключей, которые вы создали , публичный файл которого вы загрузили в MOK. Однако я не могу этого обещать, и, конечно, ваши проблемы могут быть вызваны неправильным образом подписанными модулями ядра или проблемами на конце Shim / MOK. Использование этого скрипта поможет только в том случае, если ваши модули ядра не были правильно подписаны.