Virtualbox UEFI Debian \ Ubuntu

Материал из support.qbpro.ru
Версия от 01:16, 22 апреля 2020; imported>Vix
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

При выполнении:

/sbin/vboxconfig
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: failed: modprobe vboxdrv failed. Please use 'dmesg' to find out why.

There were problems setting up VirtualBox.  To re-start the set-up process, run
  /sbin/vboxconfig
as root.

VirtualBox + Безопасная загрузка + Ubuntu = сбой

Проблема заключается в том, что все модули ядра должны быть подписаны ключом, которому доверяет система UEFI, иначе загрузка не удастся. Ubuntu не подписывает сторонние модули vbox * kernel, а скорее дает пользователю возможность отключить Безопасную загрузку после установки пакет виртуальных боксов. Я мог бы это сделать, но тогда я увижу раздражающее сообщение «Загрузка в небезопасном режиме» каждый раз, когда машина запускается, а также установка с двойной загрузкой Windows 10 у меня будет не функция.

Ubuntu 16.04 на Dell Latitude E7440 с BIOS A18 и с двойной загрузкой Windows 10.

Шаги, чтобы заставить его работать, в частности, для Ubuntu /Debian

  1. Установите пакет виртуальных боксов. Если установка обнаруживает, что безопасная загрузка включена, вам будет предоставлена ​​проблема и предоставляется возможность отключить безопасную загрузку. Выберите «Нет».

  2. Создайте персональную общедоступную /приватную пару ключей RSA, которая будет использоваться для подписи модулей ядра. Я решил использовать учетную запись root и каталог /root /module-signature /для хранения всех вещей, связанных с подписью ядра модули.

    $ sudo -i
    # mkdir /root/module-signing
    # cd /root/module-signing
    # openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=YOUR_NAME/"
    [...]
    # chmod 600 MOK.priv
    
  3. Используйте служебную программу MOK («Ключ владельца машины») для импорта открытого ключа, чтобы система могла доверять ей. Это двухэтапный процесс где ключ сначала импортируется, а затем должен быть зарегистрирован, когда машина загрузится в следующий раз. Простой пароль достаточно хорош, поскольку он предназначен только для временного использования.

    # mokutil --import /root/module-signing/MOK.der
    input password:
    input password again:
    
  4. Перезагрузите компьютер. Когда запускается загрузчик, утилита MOK manager EFI должна автоматически запускаться. Он попросит части пароль, предоставленный на шаге 3. Выберите «Записаться MOK», затем вы должны см. ключ, импортированный на шаге 3. Заполните шаги регистрации, затем продолжить загрузку. Ядро Linux будет записывать ключи, которые и вы сможете увидеть свой собственный ключ с помощью команды: dmesg|grep 'EFI: Loaded cert'

  5. Используя утилиту подписи, поставляемую с файлами сборки ядра, подпишите все модули VirtualBox, используя закрытый ключ MOK, сгенерированный на шаге 2. Я помещал это в маленький скрипт /root/module-signing/sign-vbox-modules, поэтому его можно легко запустить, когда новые ядра установлены как часть регулярных обновлений:

    echo > /root/module-signing/sign-vbox-modules
    mcedit /root/module-signing/sign-vbox-modules
    
    • Текст скрипта:
    #!/bin/bash
    
    for modfile in $(dirname $(modinfo -n vboxdrv))/*.ko; do
     echo "Signing $modfile"
     /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 \
                                   /root/module-signing/MOK.priv \
                                   /root/module-signing/MOK.der "$modfile"
    done
    
    

    И затем:

    # chmod 700 /root/module-signing/sign-vbox-modules
    
    
  6. Запустите скрипт с шага 5 с правами root. Вам нужно будет запустить скрипт подписи каждый раз, когда будет установлено новое обновление ядра, поскольку это приведет к восстановлению сторонних модулей VirtualBox. Использовать скрипт только после загрузки нового ядра, поскольку он полагается на modinfo -n и uname -r , чтобы указать версию ядра для подписания.
  7. Загрузите модуль vboxdrv и запустите VirtualBox:

    # modprobe vboxdrv
    
    

Процедура также может использоваться для подписи другого стороннего ядра модули, такие как графические драйверы nvidia, если это необходимо. (Я имею не испытал это сам.)

ИСТОЧНИК: