Когда я пытаюсь использовать virtualbox (установленный через диспетчер пакетов), я могу получить следующую ошибку при открытии виртуальной машины:
Драйвер ядра VirtualBox Linux (vboxdrv) либо не загружен, либо есть разрешение проблема с / dev / vboxdrv. Установите пакет virtualbox-dkms и загрузите модуль ядра, выполнив «modprobe vboxdrv» как root. Если он доступен в вашем дистрибутиве, вы должны сначала установить пакет DKMS. Этот пакет отслеживает изменения ядра Linux и при необходимости перекомпилирует модуль ядра vboxdrv.Теперь, когда я попытался запустить sudo modprobe vboxdrv, это ошибки с
modprobe: ERROR: could not insert 'vboxdrv': Required key not available
Я также заметил, что в конце установки virtualbox-dkms он появляется с:
DKMS: install completed.
Setting up virtualbox (5.0.40-dfsg-0ubuntu1.16.04.2) ...
vboxweb.service is a disabled or a static unit, not starting it.
Job for virtualbox.service failed because the control process exited with error code. See "systemctl status virtualbox.service" and "journalctl -xe" for details.
invoke-rc.d: initscript virtualbox, action "restart" failed.
Проверка состояния показывает
● virtualbox.service - LSB: VirtualBox Linux kernel module
Loaded: loaded (/etc/init.d/virtualbox; bad; vendor preset: enabled)
Active: failed (Result: exit-code) since di 2018-03-20 14:05:46 CET; 6min ago
Docs: man:systemd-sysv-generator(8)
mrt 20 14:05:45 paul-GP60-2QF systemd[1]: Starting LSB: VirtualBox Linux kernel module...
mrt 20 14:05:46 paul-GP60-2QF virtualbox[15359]: * Loading VirtualBox kernel modules...
mrt 20 14:05:46 paul-GP60-2QF virtualbox[15359]: * modprobe vboxdrv failed. Please use 'dmesg' to find out why
mrt 20 14:05:46 paul-GP60-2QF virtualbox[15359]: ...fail!
mrt 20 14:05:46 paul-GP60-2QF systemd[1]: virtualbox.service: Control process exited, code=exited status=1
mrt 20 14:05:46 paul-GP60-2QF systemd[1]: Failed to start LSB: VirtualBox Linux kernel module.
mrt 20 14:05:46 paul-GP60-2QF systemd[1]: virtualbox.service: Unit entered failed state.
mrt 20 14:05:46 paul-GP60-2QF systemd[1]: virtualbox.service: Failed with result 'exit-code'.
Теперь во время установки была небольшая «аномалия». - процедура установки попросила меня отключить безопасную загрузку. - Я не хочу этого, я хочу продолжать использовать безопасную загрузку (поскольку она работает как с ubuntu, так и с окнами, и даже с виртуальным окном на Windows).
Означает ли это, что я не могу быть в безопасности загрузки и виртуальной коробки? Это кажется глупым, учитывая, что виртуальная коробка работает внутри операционной системы, а сам ubuntu начинается просто отлично.
Возможно использование самокомпилированных модулей ядра в безопасной загрузочной среде. Все модули должны быть подписаны и ключи должны быть зарегистрированы в безопасном загрузочном BIOS (или загрузчике)
Создать сертификат и закрытый ключ для подписания
## Create a signing key and certificate##
## Signing certificate and keys
sign_key=signing_key.priv
sign_crt=signing_key.x509
## Subject for certificate
sign_sub=""
sign_sub+="/O=Your Name"
sign_sub+="/CN=Module Signing Key"
sign_sub+="/emailAddress=Your.Name@somewhere.com"
sign_sub+="/"
## Create certificate and keys
if [[ ! -f "$sign_key" ]] && [[ ! -f "$sign_crt" ]]; then
openssl req -new -x509 -newkey rsa:2048 -keyout "$sign_key" \
-outform DER -out "$sign_crt" -nodes -days 365 -subj "$sign_sub"
fi
## Print certificate
openssl x509 -in "$sign_crt" -inform DER -noout -text
Внутри заголовков ядра Linux под /usr/src/ используется инструмент подписи для модулей ядра (обязательные пакеты sudo apt-get install build-essential libssl-dev).
## Build signing tool
gcc "/usr/src/linux-headers-$(uname -r)/scripts/sign-file.c" -L \
/usr/include/openssl/ -lcrypto -lssl -o sign-file
С помощью инструмента подписи все модули VirtualBox должны быть подписаны.
## Sign virtualbox modules
vbox_mod=()
vbox_mod+=(vboxdrv)
vbox_mod+=(vboxnetadp)
vbox_mod+=(vboxnetflt)
vbox_mod+=(vboxpci)
for module in "${vbox_mod[@]}"; do
echo "Signing module $module"
sudo sign-file sha256 "$sign_key" "$sign_crt" \
"$(modinfo -n "$module")"
done
Наконец, сертификат необходимо добавить в безопасную загрузочную BIOS (требуется пакет sudo apt-get install mokutil)
## Add key to UEFI keyring
sudo mokutil --import "$sign_crt"
Рекомендуется создать скрипт для этого, потому что при каждом обновлении ядра модули должны быть снова подписаны. Сертификат и ключ могут быть повторно использованы, поэтому он не должен постоянно обновляться.
Возможно использование самокомпилированных модулей ядра в безопасной загрузочной среде. Все модули должны быть подписаны и ключи должны быть зарегистрированы в безопасном загрузочном BIOS (или загрузчике)
Создать сертификат и закрытый ключ для подписания
## Create a signing key and certificate##
## Signing certificate and keys
sign_key=signing_key.priv
sign_crt=signing_key.x509
## Subject for certificate
sign_sub=""
sign_sub+="/O=Your Name"
sign_sub+="/CN=Module Signing Key"
sign_sub+="/emailAddress=Your.Name@somewhere.com"
sign_sub+="/"
## Create certificate and keys
if [[ ! -f "$sign_key" ]] && [[ ! -f "$sign_crt" ]]; then
openssl req -new -x509 -newkey rsa:2048 -keyout "$sign_key" \
-outform DER -out "$sign_crt" -nodes -days 365 -subj "$sign_sub"
fi
## Print certificate
openssl x509 -in "$sign_crt" -inform DER -noout -text
Внутри заголовков ядра Linux под /usr/src/ используется инструмент подписи для модулей ядра (обязательные пакеты sudo apt-get install build-essential libssl-dev).
## Build signing tool
gcc "/usr/src/linux-headers-$(uname -r)/scripts/sign-file.c" -L \
/usr/include/openssl/ -lcrypto -lssl -o sign-file
С помощью инструмента подписи все модули VirtualBox должны быть подписаны.
## Sign virtualbox modules
vbox_mod=()
vbox_mod+=(vboxdrv)
vbox_mod+=(vboxnetadp)
vbox_mod+=(vboxnetflt)
vbox_mod+=(vboxpci)
for module in "${vbox_mod[@]}"; do
echo "Signing module $module"
sudo sign-file sha256 "$sign_key" "$sign_crt" \
"$(modinfo -n "$module")"
done
Наконец, сертификат необходимо добавить в безопасную загрузочную BIOS (требуется пакет sudo apt-get install mokutil)
## Add key to UEFI keyring
sudo mokutil --import "$sign_crt"
Рекомендуется создать скрипт для этого, потому что при каждом обновлении ядра модули должны быть снова подписаны. Сертификат и ключ могут быть повторно использованы, поэтому он не должен постоянно обновляться.