Virtualbox UEFI Debian \ Ubuntu: различия между версиями

Материал из support.qbpro.ru
imported>Vix
(Новая страница: «При выполнении: /sbin/vboxconfig vboxdrv.sh: Stopping VirtualBox services. vboxdrv.sh: Building VirtualBox kernel modules. vboxdrv.sh: Starting...»)
 
imported>Vix
Нет описания правки
Строка 24: Строка 24:
    
    
   <p>  Ubuntu 16.04 на Dell Latitude E7440 с BIOS A18 и с двойной загрузкой Windows 10.  </p>
   <p>  Ubuntu 16.04 на Dell Latitude E7440 с BIOS A18 и с двойной загрузкой Windows 10.  </p>
 
  <p> Кредит переходит к основному источнику информации, которую я использовал для решения
  эта проблема, которая относится конкретно к Fedora /Redhat:
  <a href="http://gorka.eguileor.com/vbox-vmware-in-secureboot-linux-2016-update/" rel="noreferrer"> http://gorka.eguileor.com/vbox-vmware- в-secureboot-линукс-2016-обновление /</a> </p>
 
  <p> И соответствующий вопрос Ask Ubuntu:
  <a href="https://askubuntu.com/questions/760671/could-not-load-vboxdrv-after-upgrade-to-ubuntu-16-04-and-i-want-to-keep-secur"> Не удалось загрузить «vboxdrv» после обновления до Ubuntu 16.04 (и я хочу сохранить безопасную загрузку) </a> </p>
    
    
   <h1> Шаги, чтобы заставить его работать, в частности, для Ubuntu /Debian </h1>
   <h1> Шаги, чтобы заставить его работать, в частности, для Ubuntu /Debian </h1>
Строка 42: Строка 35:
   модули. </p>
   модули. </p>


<pre><code>$ sudo -i
$ sudo -i
# mkdir /root/module-signing
# mkdir /root/module-signing
# cd /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/"
# 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
# chmod 600 MOK.priv
</code></pre>
</li>
</li>
   <li>
   <li>
Строка 56: Строка 48:
   поскольку он предназначен только для временного использования. </p>
   поскольку он предназначен только для временного использования. </p>


<pre><code># mokutil --import /root/module-signing/MOK.der
# mokutil --import /root/module-signing/MOK.der
input password:
input password:
input password again:
input password again:
</code></pre>
 
</li>
</li>
   <li> <p> Перезагрузите компьютер. Когда запускается загрузчик, утилита MOK manager EFI должна автоматически запускаться. Он попросит части
   <li> <p> Перезагрузите компьютер. Когда запускается загрузчик, утилита MOK manager EFI должна автоматически запускаться. Он попросит части
Строка 66: Строка 58:
   продолжить загрузку. Ядро Linux будет записывать ключи, которые
   продолжить загрузку. Ядро Linux будет записывать ключи, которые
   и вы сможете увидеть свой собственный ключ с помощью команды:
   и вы сможете увидеть свой собственный ключ с помощью команды:
  <code>dmesg|grep 'EFI: Loaded cert'</code> </p> </li>
dmesg|grep 'EFI: Loaded cert'</li>
   <li>
   <li>
<p> Используя утилиту подписи, поставляемую с файлами сборки ядра, подпишите все модули VirtualBox, используя закрытый ключ MOK, сгенерированный на шаге 2.
<p> Используя утилиту подписи, поставляемую с файлами сборки ядра, подпишите все модули VirtualBox, используя закрытый ключ MOK, сгенерированный на шаге 2.
   Я помещал это в маленький скрипт <code>/root/module-signing/sign-vbox-modules</code>, поэтому его можно легко запустить, когда новые ядра установлены как часть регулярных обновлений: </p>
   Я помещал это в маленький скрипт <code>/root/module-signing/sign-vbox-modules</code>, поэтому его можно легко запустить, когда новые ядра установлены как часть регулярных обновлений: </p>


<pre><code>#!/bin/bash
#!/bin/bash
 
for modfile in $(dirname $(modinfo -n vboxdrv))/*.ko; do
for modfile in $(dirname $(modinfo -n vboxdrv))/*.ko; do
   echo "Signing $modfile"
   echo "Signing $modfile"
   /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 \
   /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 \
                                 /root/module-signing/MOK.priv \
                                 /root/module-signing/MOK.priv \
                                 /root/module-signing/MOK.der "$modfile"
                                 /root/module-signing/MOK.der "$modfile"
done
done
</code></pre>
 
   <p> И затем: </p>
   <p> И затем: </p>


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


<pre><code># modprobe vboxdrv
# modprobe vboxdrv
</code></pre>
</li>
</li>
   </ol>
   </ol>

Версия от 01:13, 22 апреля 2020

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

/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, поэтому его можно легко запустить, когда новые ядра установлены как часть регулярных обновлений:

    #!/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, если это необходимо. (Я имею не испытал это сам.)

ИСТОЧНИК: