在 KVM 虛擬機(jī)中運(yùn)行 macOS 系統(tǒng)

macOS Sierra

之前介紹過(guò)如何在 Ubuntu 系統(tǒng)和 KVM 中安裝 Windows 系統(tǒng)攒读,當(dāng)時(shí)就說(shuō)了廓旬,希望有機(jī)會(huì)能把 macOS 也給虛擬化了凿蒜,這樣就完美了。今天這篇文章就是解決這個(gè)問(wèn)題的绝编。

準(zhǔn)備工作

開(kāi)始之前僻澎,你需要做好以下的準(zhǔn)備工作:

  • 一臺(tái)可以正常工作的 Mac 電腦
  • 一臺(tái)裝好了 KVM 的 Linux 主機(jī)
  • 下載好了的 macOS 安裝包
  • 一顆不怕折騰的心

首先參考 Dhiru Kholia 的方式,獲取一份代碼先:

$ git clone git@github.com:kholia/OSX-KVM.git
Cloning into 'OSX-KVM'...
remote: Counting objects: 28, done.
remote: Total 28 (delta 0), reused 0 (delta 0), pack-reused 28
Receiving objects: 100% (28/28), 2.62 MiB | 98.00 KiB/s, done.
Resolving deltas: 100% (1/1), done.

當(dāng)然瓮增,如果你沒(méi)有 Git 也可以直接下載 ZIP 壓縮包怎棱。

創(chuàng)建 ISO 鏡像

虛擬機(jī)是無(wú)法識(shí)別 Apple 的 DMG 文件的,所以我們需要在 Mac App Store 獲取的 macOS Installer 的基礎(chǔ)上绷跑,生成一個(gè)可以在虛擬機(jī)中啟動(dòng)的 ISO 鏡像。

如果 macOS Sierra 已經(jīng)下載好了的話凡资,我們直接執(zhí)行下面的命令就可以生成一個(gè)安裝光盤(pán)鏡像了砸捏。

$ sudo ./create_install_iso.sh
Create ISO
Create ISO Done

運(yùn)行截圖如上,程序結(jié)束后隙赁,會(huì)在當(dāng)前目錄生成了一個(gè)名為 Install_macOS_Sierra_(OS_X_10.12.2).iso 的光盤(pán)鏡像文件垦藏。

把這個(gè)文件復(fù)制到 KVM 服務(wù)器,這一步就算是完成了伞访。

rsync -avP Install_macOS_Sierra_(OS_X_10.12.2).iso server:/path/to/iso/

啟動(dòng)虛擬機(jī)

這里就是大坑了掂骏,之前折騰了 2 天都是卡在這里,用網(wǎng)上的各種方法一啟動(dòng)厚掷,就顯示一個(gè) boot: 就沒(méi)有然后了弟灼。

我們先創(chuàng)建好需要的磁盤(pán)鏡像 sierra.qcow2

$ cd /path/to/kvm
$ qemu-img create -f qcow2 sierra.qcow2 64G
Formatting 'sierra.qcow2', fmt=qcow2 size=68719476736 encryption=off cluster_size=65536 lazy_refcounts=off refcount_bits=16

參考倉(cāng)庫(kù)里面的 boot.shboot-macOS.sh级解,整理了如下的命令用于首次啟動(dòng)虛擬機(jī):

kvm-spice -enable-kvm -m 4096 -cpu core2duo,kvm=off \
    -machine pc-q35-2.4 \
    -smp 4,cores=2 \
    -usb -device usb-kbd -device usb-mouse \
    -device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" \
    -kernel ./enoch_rev2839_boot \
    -smbios type=2 \
    -device ide-drive,bus=ide.2,drive=MacHDD \
    -drive id=MacHDD,if=none,file=./sierra.qcow2 \
    -vnc 0.0.0.0:0 -k en-us \
    -netdev tap,id=net0,ifname=tap0,script=no,downscript=no -device e1000-82545em,netdev=net0,id=net0,mac=52:54:00:c9:18:27 \
    -device ide-drive,bus=ide.0,drive=MacDVD \
    -drive id=MacDVD,if=none,snapshot=on,file='/path/to/iso/Install_OS_X_10.11.6_El_Capitan.iso'

注意:這里我使用了 OS X El Capitan 的安裝鏡像,因?yàn)橹苯邮褂?macOS Sierra 無(wú)法調(diào)出「磁盤(pán)工具」田绑,就算在「語(yǔ)言選擇」界面等了多久都無(wú)法正常操作勤哗。所以最終選擇了一個(gè)折中的辦法,用老版本的鏡像啟動(dòng)來(lái)初始化硬盤(pán)掩驱,然后再用新版本的鏡像來(lái)安裝系統(tǒng)芒划。

OS X El Capitan 安裝光盤(pán)的制作方法與 macOS Sierra 類似,請(qǐng)參考「創(chuàng)建 ISO 鏡像」部分欧穴。

初始化磁盤(pán)

執(zhí)行過(guò)上述命令后民逼,命令行會(huì)一直處于等待狀態(tài),這個(gè)時(shí)候我們需要使用 VNC 遠(yuǎn)程桌面來(lái)完成剩下的操作涮帘。

注意:系統(tǒng)自帶的 VNC 客戶端還有 RealVNC Viewer 都無(wú)法正常訪問(wèn)沒(méi)有密碼保護(hù)的遠(yuǎn)程桌面缴挖。只有 TigerVNC 才能正常訪問(wèn),這里也浪費(fèi)了不少的時(shí)間焚辅。

正常連接后映屋,可以看到 El Capitan 的歡迎界面:

El Capitan

接著像正常安裝一樣,開(kāi)啟「磁盤(pán)工具」同蜻,初始化磁盤(pán):

Disk Utility
Disk Utility
Disk Utility

這樣棚点,初始化磁盤(pán)的工作就完成了。

準(zhǔn)備啟動(dòng)文件

其實(shí)湾蔓,雖然是虛擬化 macOS瘫析,其實(shí)本質(zhì)上還是運(yùn)行一個(gè) Hackintosh (黑蘋(píng)果)。所以默责,必要的啟動(dòng)文件配置還是需要的贬循。

好在在制作光盤(pán)鏡像的時(shí)候,一些需要的文件就已經(jīng)被打包在 ISO 光盤(pán)鏡像里面了桃序。

我們只需要打開(kāi) Terminal 把需要的文件復(fù)制到剛才初始化過(guò)的磁盤(pán)里面就可以了杖虾。

# cp -avP /Extra /Volumes/Macintosh/
Terminal
Terminal

然后我們就可以把虛擬機(jī)關(guān)閉了。

安裝 macOS Sierra

虛擬機(jī)關(guān)閉以后媒熊,我們換一個(gè)命令來(lái)執(zhí)行剛才的啟動(dòng)步驟:

kvm-spice -enable-kvm -m 4092 -cpu Penryn,kvm=off,vendor=GenuineIntel \
    -machine pc-q35-2.4 \
    -smp 4,cores=2 \
    -usb -device usb-kbd -device usb-mouse \
    -device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" \
    -kernel ./enoch_rev2839_boot \
    -smbios type=2 \
    -vnc 0.0.0.0:0 -k en-us \
    -device ide-drive,bus=ide.2,drive=MacHDD \
    -drive id=MacHDD,if=none,file=./sierra.qcow2 \
    -netdev tap,id=net0,ifname=tap0,script=no,downscript=no -device e1000-82545em,netdev=net0,id=net0,mac=52:54:00:c9:18:27 \
    -device ide-drive,bus=ide.0,drive=MacDVD \
    -drive id=MacDVD,if=none,snapshot=on,file='/path/to/iso/Install_macOS_Sierra_(OS_X_10.12.2).iso'

其實(shí)跟第一次啟動(dòng)虛擬機(jī)沒(méi)有太多的不同奇适,主要的變化是 CPU 的配置還有安裝鏡像不一樣而已。

Sierra Install

安裝完成以后提示 Restart 到這里基本的安裝就算完成了芦鳍,我們需要關(guān)閉虛擬主機(jī)嚷往,然后再進(jìn)行下一步。

Sierra Install

用 Virsh 配置虛擬主機(jī)

參考 libvirt-macOS.xml 生成了如下的 XML 配置文件:

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>sierra</name>
  <description># echo 1 &gt; /sys/module/kvm/parameters/ignore_msrs</description>
  <memory unit='KiB'>4194304</memory>
  <currentMemory unit='KiB'>4194304</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc-q35-2.4'>hvm</type>
    <kernel>/path/to/kvm/enoch_rev2839_boot</kernel>
  </os>
  <features>
    <acpi/>
    <kvm>
      <hidden state='on'/>
    </kvm>
  </features>
  <cpu mode='custom' match='exact'>
    <model fallback='allow'>Penryn</model>
  </cpu>
  <devices>
    <emulator>/usr/bin/kvm-spice</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/path/to/kvm/sierra.qcow2'/>
      <target dev='sda' bus='sata'/>
      <boot order='1'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <interface type='bridge'>
      <source bridge='br0'/>
      <model type='e1000-82545em'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <input type='mouse' bus='usb'/>
    <input type='keyboard' bus='usb'/>
    <graphics type='vnc' port='5911' autoport='no'/>
    <video>
      <model type='vmvga' vram='16384' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='none'/>
  </devices>
  <qemu:commandline>
    <qemu:arg value='-device'/>
    <qemu:arg value='isa-applesmc,osk=ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc'/>
    <qemu:arg value='-smbios'/>
    <qemu:arg value='type=2'/>
    <qemu:arg value='-k'/>
    <qemu:arg value='en-us'/>
    <qemu:arg value='-cpu'/>
    <qemu:arg value='Penryn,vendor=GenuineIntel'/>
  </qemu:commandline>
</domain>

上面這個(gè)是配置文件柠衅,比如保存為 sierra.xml皮仁,然后用 virsh 注冊(cè)一個(gè)新的虛擬機(jī):

$ virsh define sierra.xml
Domain sierra defined from sierra.xml

$ virsh start sierra
Domain sierra started

$ virsh list
 Id    Name                           State
----------------------------------------------------
  1    sierra                         running

接下來(lái),用老方法映射一個(gè)本地端口來(lái) VNC:

ssh -L 5911:127.0.0.1:5911 server

重新啟動(dòng)以后的效果如下圖:

Sierra Desktop

最后,我們?cè)侔烟摂M機(jī)設(shè)置為開(kāi)啟自動(dòng)啟動(dòng):

$ virsh autostart sierra
Domain sierra marked as autostarted

設(shè)置好遠(yuǎn)程桌面和遠(yuǎn)程登錄以后贷祈,就再也不用使用 VNC 了趋急,完美!收工付燥!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宣谈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子键科,更是在濱河造成了極大的恐慌闻丑,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勋颖,死亡現(xiàn)場(chǎng)離奇詭異嗦嗡,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)饭玲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)侥祭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人茄厘,你說(shuō)我怎么就攤上這事矮冬。” “怎么了次哈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵胎署,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我窑滞,道長(zhǎng)琼牧,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任哀卫,我火速辦了婚禮巨坊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘此改。我一直安慰自己趾撵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布带斑。 她就那樣靜靜地躺著鼓寺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪勋磕。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天敢靡,我揣著相機(jī)與錄音挂滓,去河邊找鬼。 笑死啸胧,一個(gè)胖子當(dāng)著我的面吹牛赶站,可吹牛的內(nèi)容都是我干的幔虏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼贝椿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼想括!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起烙博,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瑟蜈,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后渣窜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體铺根,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年乔宿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了位迂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡详瑞,死狀恐怖掂林,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坝橡,我是刑警寧澤泻帮,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站驳庭,受9級(jí)特大地震影響刑顺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜饲常,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一蹲堂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贝淤,春花似錦柒竞、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至离陶,卻和暖如春稼虎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背招刨。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工霎俩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓打却,卻偏偏與公主長(zhǎng)得像杉适,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子柳击,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容