1. 程式人生 > >UEFI環境下安裝VirtualBox

UEFI環境下安裝VirtualBox

造冰箱的大熊貓@cnblogs 2018/12/19

 

1、問題

在一臺新計算機上安裝VirtualBox(VirtualBox 5.13.8+Ubuntu 16.04),啟動虛擬機器時出現“Kernel driver not installed (rc=-1908)”錯誤。按照錯誤提示執行“sudo modprobe vboxdrv”無法解決問題。降級安裝老版本的VirtualBox問題依舊。最後發現這個問題是與計算機使用UEFI導致的。

 

2、問題產生的原因

首先說明一下虛擬機器安裝環境:

  - 主機:使用UEFI

  - 作業系統:Ubuntu 16.04

  - VirtualBox:v5.1.38_Ubuntu r122592

  - uname -a:4.15.0-42-generic

UEFI[1]定義了計算機韌體與作業系統之間的介面,是傳統BIOS的替代者。UEFI的功能之一是提供所謂的“Secure Boot”功能。該功能只允許通過數字簽名認證的作業系統或驅動被載入。VirtualBox所需的模組“vboxdrv”沒有進行數字簽名,導致該模組未能被載入,進而導致VirtualBox執行失敗。

 

3、解決方法一

在計算機韌體配置中關閉“Secure Boot”功能,VirtualBox就可以正常執行。但是,一旦重新啟動“Secure Boot”,問題又會出現。

 

4、解決方法二

為xboxdvr建立數字簽名,並將數字簽名新增到UEFI中。具體操作步驟如下:

 

1)建立數字簽名

在命令列中執行以下命令

openssl req -new -x509 -newkey rsa:2048 -keyout FILENAME.priv -outform DER -out FILENAME.der -nodes -days 36500 -subj "/CN=KEYNAME/"    

執行這個命令,會在當前路徑下建立一對數字簽名檔案FILENAME.priv和FILENAME.der。你可以將FILENAME和KEYNAME設定為任何你喜歡的名字。

 

2)檢查vboxdrv的位置

在命令列中執行以下命令

modinfo vboxdrv

返回如下執行結果(顯示內容可能會因為作業系統和硬體的不同而略有不同)

filename:       /lib/modules/4.15.0-42-generic/updates/dkms/vboxdrv.ko
version:        5.1.38_Ubuntu r122592 (0x002a0000)
license:        GPL
description:    Oracle VM VirtualBox Support Driver
author:         Oracle Corporation
srcversion:     6598048D64CD6300853C314
depends:        
retpoline:      Y
name:           vboxdrv
vermagic:       4.15.0-42-generic SMP mod_unload 
parm:           force_async_tsc:force the asynchronous TSC mode (int)

 

3)對vboxdrv進行數字簽名

在命令列中執行一下命令

sudo /usr/src/linux-headers-4.15.0-42-generic/scripts/sign-file sha256 ./FILENAME.priv ./FILENAME.der /lib/modules/4.15.0-42-generic/updates/dkms/vboxdrv.ko

 這裡,

 - linux-headers-4.15.0-42-generic應當與“uname -a”命令返回的結果相匹配。

 - ./FILENAME.priv”、./FILENAME.der應當與步驟1)中生產的數字簽名檔案的路徑相匹配。這上述例子中,我們假設一對數字簽名檔案處於命令行當前路徑下。

 - /lib/modules/4.15.0-42-generic/updates/dkms/vboxdrv.ko:應當與步驟2)返回的“filename”保持一致。

 

4)將公鑰新增至MOK

在命令列中執行以下命令,將vboxdrv的公鑰新增到UEFI的MOK(Module Owned Keys)。

sudo mokutil --import FILENAME.der

 

5)登記公鑰

重啟計算機,UEFI會檢測到MOK中新添加了公鑰,並提示使用者是否登記新的公鑰。使用者根據螢幕提示執行即可(選擇“Enroll key from disk”)。

 

完成上述步驟後,VirtualBox中的虛擬機器就可以正常運行了。

 

 

[1] 維基百科:UEFI