VirtualBox是一套開源免費且跨平台的虛擬機器軟體,可以在一個作業系統中建立多台的虛擬電腦,且獨立運行不同的作業系統。macOS Mojave是蘋果公司在2018年發佈的作業系統,通常蘋果的作業系統都需要購買蘋果電腦才可以使用,然而就算不去購買昂貴的蘋果電腦硬體,我們還是可以藉由VirtualBox,在任意的電腦和作業系統上模擬運行macOS Mojave!



Clover EFI Bootloader

在VirtualBox內運行macOS Mojave會有一些準備工作要做,首先就是要在Linux作業系統中製作一個屬於自己的「Clover EFI Bootloader」開機引導程式,如果您沒有Linux作業系統,可以直接在這個小節之後下載現成的開機引導程式。為什麼會需要Clover EFI Bootloader呢?因為macOS Mojave預設使用蘋果自己開發的檔案系統─APFS,由於這個檔案系統沒有被VirtualBox直接支援,因此會造成無法正常開機的問題。網路上有些人會在macOS Mojave安裝完後,將APFS再透過其它的macOS轉回傳統的HFS來用,本站提供的是另一種比較乾淨的方式。Clover EFI Bootloader是開源的開機引導程式,可以用來對不同作業系統做開機引導,可以啟動使用APFS的macOS。

至於為什麼要製作屬於自己的Clover EFI Bootloader呢?這是因為使用VirtualBox來模擬macOS時,並無法隨心所欲地改變螢幕解析度。虛擬機器使用的解析度必須寫死在Clover EFI Bootloader的設定檔(此設定檔稍候會提到)中,如果設定檔中設定的解析度和虛擬機器所設定的解析度不同,開機時就會直接花屏。

Clover EFI Bootloader的開源專案可以在SourceForge上找到,網址如下:

https://sourceforge.net/projects/cloverefiboot/

透過以上連結可以取得Clover EFI Bootloader的可開機ISO映像檔。

由於我們等等需要「qemu」的相關虛擬硬碟工具和「7z」壓縮工具,因此要先安裝一下。基於Debian的Linux發行版可以使用以下指令來安裝:

sudo apt install qemu-utils p7zip-full

RedHat系的Linux發行版可以使用以下指令來安裝:

sudo dnf install qemu-img nbd p7zip

使用以下指令,來產生一個100MB的空白檔案,命名為「clover.raw」,存放在目前的工作目錄下。

dd if=/dev/zero of=clover.raw count=1 bs=100M

接著使用以下指令替這個檔案切出EFI分割區。

echo ",,ef," | sfdisk clover.raw

macos-mojave-virtualbox

然後使用以下指令啟用「nbd」內核模組,讓我們可以使用qemu來掛載虛擬硬碟檔。

sudo modprobe nbd

使用以下指令將「/dev/nbd1」這個裝置去使用「clover.raw」這個檔案。

sudo qemu-nbd -c /dev/nbd1 -f raw clover.raw

接著用以下指令將「/dev/nbd1」這個裝置的的一個分割區(/dev/nbd1p1),也就是剛才建立好的EFI分割區,格式化成FAT32。

sudo mkfs.fat -F32 /dev/nbd1p1

macos-mojave-virtualbox

接著使用以下指令在目前的工作目錄下建立「efi」目錄。

mkdir efi

再用以下指令將「/dev/nbd1p1」這個分割區掛載到「efi」目錄上。

sudo mount /dev/nbd1p1 efi

macos-mojave-virtualbox

透過「7z」指令將剛才下載下來的Clover EFI Bootloader解開至「efi」目錄中。

sudo 7z x clover.iso -oefi

macos-mojave-virtualbox

Clover EFI Bootloader預設並沒有啟用APFS支援,因此需要執行以下指令來啟用「ApfsDriverLoader-64.efi」這支EFI程式。

sudo cp efi/EFI/CLOVER/drivers-Off/drivers64UEFI/ApfsDriverLoader-64.efi efi/EFI/CLOVER/drivers64UEFI

macos-mojave-virtualbox

然後用文字編輯器編輯Clover EFI Bootloader的設定檔「efi/EFI/CLOVER/config.plist」。以「vim」這個文字編輯器為例,指令如下:

macos-mojave-virtualbox

將以下設定檔的內容覆蓋至「efi/EFI/CLOVER/config.plist」中。

注意「ScreenResolution」這項設定值,這個就是我們想要讓macOS運作的螢幕解析度。以Full HD的螢幕解析度來說,將虛擬機器設成「1600x900」的話,可以讓macOS的虛擬機器在畫面中以「視窗化」的方式完整顯示出來,不會出現捲軸。本文之後提供的Clover EFI Bootloader成品也是使用「1600x900」。

macos-mojave-virtualbox

儲存設定檔後,執行以下指令來卸載虛擬硬碟目錄。

sudo umount efi

macos-mojave-virtualbox

接著再執行以下指令,將「clover.raw」這個虛擬硬碟檔轉成VirtualBox可以使用的vmdk格式,命名為「clover.vmdk」。

qemu-img convert clover.raw -O vmdk clover.vmdk

如果不想自己做這個「clover.vmdk」,或是因為沒有Linux作業系統而無法製作的話,可以直接使用本站提供的「clover.vmdk」,解析度為「1600x900」。下載連結:

https://file.magiclen.org/index.php?file=436c6f76657220343833312045464920426f6f746c6f61646572207769746820415046532e726172

macOS 10.14 Mojave的可開機安裝映像檔

參考這篇文章來製作或取得macOS 10.14 Mojave的可開機安裝映像檔:

https://magiclen.org/macos-mojave-iso/

安裝VirtualBox

如果您還沒有安裝VirtualBox的話,可以透過以下連結,到VirtualBox的官網來取得並安裝最新的VirtualBox。

https://www.virtualbox.org/

建立VirtualBox虛擬機器

在VirtualBox內新增macOS的虛擬機器時,需注意類型要選擇「Mac OS X」,且版本要選擇「macOS 10.13 High Sierra」(或「macOS 10.14 Mojave」,如果有的話)。虛擬機器名稱在此筆者直接取名為「macOS」,這個不太重要。

macos-mojave-virtualbox

記憶體建議給4GB以上。

macos-mojave-virtualbox

接著要建立新的虛擬硬碟,格式選VDI,硬碟大小建議32GB以上。至於虛擬硬碟是否要固定大小,就看使用者自己的需求了。建議選動態分配就好。

macos-mojave-virtualbox

macos-mojave-virtualbox

macos-mojave-virtualbox

將macOS的虛擬電腦建立出來後,先不要開機,再去對它調整一下。首先是處理器的部份,預設可能只有一個核心,建議可以多給一點。

macos-mojave-virtualbox

接著是顯示記憶體的部份,也可以多給一點。至於顯示加速的部份基本上對模擬的macOS是沒有什麼影響的。

macos-mojave-virtualbox

USB的部份要選「USB 3.0(xHCI) 控制器」,否則無法成功開機。

macos-mojave-virtualbox

接著要在命令列模式(Windows)或終端機模式(Unix-like)下,使用以下指令來調整剛才建立的macOS虛擬機器。

以上環境變數「VM_RES」為虛擬電腦要使用的螢幕解析度,「VM_NAME」為虛擬電腦的名稱。Windows使用者可能需要自行去尋找VirtualBox提供的「VBoxManage.exe」的位置來執行。

macos-mojave-virtualbox

在虛擬機器安裝macOS 10.14 Mojave

啟動剛才建立並設定完成的macOS虛擬機器,使用macOS Mojave的可開機映像檔來開機。

macos-mojave-virtualbox

macos-mojave-virtualbox

macos-mojave-virtualbox

成功開機後,稍等一下即可進入macOS Mojave的安裝程式。一開始要選擇語言,在此以繁體中文為例。

macos-mojave-virtualbox

macos-mojave-virtualbox

接著會進入macOS的工具程式選單,先選擇「磁碟工具程式」。

macos-mojave-virtualbox

在左邊邊欄選到我們建立的虛擬硬碟後,按下「清除」可以重新建立硬碟分割表和格式化硬碟。

macos-mojave-virtualbox

虛擬硬碟的名稱輸入「Mojave」。如果想要用不同名稱的話,Clover EFI Bootloader設定檔中的「DefaultVolume」這個設定項目也建議要跟著改,不然macOS在開機的時候都需要先使用鍵盤來選擇開機方式。格式的話選擇「APFS」,不建議選擇「Mac OS 擴充格式」(就是HFS),因為它會讓之後的開機方法變得不同,就不在本篇文章的適用範圍了。架構選擇「GUID 分割驅配置表」。

macos-mojave-virtualbox

macos-mojave-virtualbox

macos-mojave-virtualbox

格式化好虛擬硬碟後,就可以關閉磁碟工具程式,回到macOS的工具程式選單。此時就可以開始「安裝 macOS」啦!

macos-mojave-virtualbox

一開始要先同意macOS的合約。

macos-mojave-virtualbox

macos-mojave-virtualbox

接著選擇macOS要安裝上去的硬碟。

macos-mojave-virtualbox

然後就是等候安裝。

macos-mojave-virtualbox

進度條跑完後,虛擬電腦就會重新開機,但重新開機的過程中可能在以下畫面中卡住。

macos-mojave-virtualbox

不過也別擔心,此時可以放心地強制對虛擬電腦做重新開機的動作。但我們在重新開機時可以發現,VirtualBox又會去使用macOS的可開機安裝程式來開機,這是因為Mojave使用APFS,而VirtualBox本身無法使用APFS來開機,所以才必須要使用剛才準備好的Clover EFI Bootloader。

先把macOS虛擬機器關機,然後將Clover EFI Bootloader的虛擬硬碟也掛到macOS的虛擬機器下,SATA埠的順序建議可以調整成「Clover EFI Bootloader」→「Mojave」→「光碟機」。

macos-mojave-virtualbox

再次開啟macOS虛擬機器後,就可以進入到Clover EFI Bootloader的畫面,用鍵盤選擇「Boot macOS install from xxx」(xxx為硬碟名稱),來打開安裝到一半的macOS。

macos-mojave-virtualbox

macos-mojave-virtualbox

然後繼續等候安裝程式完成安裝。

macos-mojave-virtualbox

macos-mojave-virtualbox

macOS完成安裝後,會自動重新開機。當然,重新開機的時候可能也會跟前面提到的狀況一樣,卡在黑底白字的畫面,此時直接強制重新開機即可。

macOS虛擬機器重新開機後,同樣在Clover EFI Bootloader的畫面,用鍵盤選擇「Boot macOS install from xxx」(xxx為硬碟名稱),來打開安裝完成的macOS。

macos-mojave-virtualbox

第一次進入安裝完成的macOS,會需要進行地區、鍵盤、Apple ID的設定。

macos-mojave-virtualbox

macos-mojave-virtualbox

macos-mojave-virtualbox

macos-mojave-virtualbox

macos-mojave-virtualbox

macos-mojave-virtualbox

macos-mojave-virtualbox

然後要同意使用macOS的合約。

macos-mojave-virtualbox

macos-mojave-virtualbox

再完成macOS使用者的帳號設定。

macos-mojave-virtualbox

macos-mojave-virtualbox

接著是macOS Mojave的新功能,選擇要使用淺色還是深色的佈景主題。

macos-mojave-virtualbox

等候設定完成。

macos-mojave-virtualbox

然後就會進入macOS的桌面,一開始要先設定鍵盤。

macos-mojave-virtualbox

macOS會要求使用者按下左邊Shift鍵的右邊的按鍵,和右邊Shift鍵的左邊的按鍵。以一般鍵盤(ANSI)來說的話就是「Z」和「/」啦!

macos-mojave-virtualbox

macos-mojave-virtualbox

確認鍵盤設定。

macos-mojave-virtualbox

至此macOS Mojave就在虛擬機器內安裝並設定完成啦!

macos-mojave-virtualbox

因為我們使用Clover EFI Bootloader來完成後一半的安裝程式的關係,所以即便在最一開始我們有選擇「繁體中文」,語言在重開機之後還是會被固定為英文。如果要修改成中文,可以到macOS Mojave的系統設定中的語言和地區,將繁體中文和中文輸入法加回來。

macos-mojave-virtualbox

macos-mojave-virtualbox

macos-mojave-virtualbox

macos-mojave-virtualbox

macos-mojave-virtualbox

macos-mojave-virtualbox

重新開機後就可以套用設定。

macos-mojave-virtualbox

macos-mojave-virtualbox

macos-mojave-virtualbox

macos-mojave-virtualbox

另外,由於我們使用Clover EFI Bootloader的虛擬硬碟,macOS通常會在開機之後跳出「電腦讀不到您放入的磁碟」的提示。這個提示可以直接「忽略」,並不影響使用。

macos-mojave-virtualbox