kvm 轉載

 
macOS Sierra

以前介紹過如何在 Ubuntu 系統和 KVM 中安裝 Windows 系統,當時就說了,但願有機會能把 macOS 也給虛擬化了,這樣就完美了。今天這篇文章就是解決這個問題的。javascript

準備工做

開始以前,你須要作好如下的準備工做:java

  • 一臺能夠正常工做的 Mac 電腦
  • 一臺裝好了 KVM 的 Linux 主機
  • 下載好了的 macOS 安裝包
  • 一顆不怕折騰的心

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

$ 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. 

固然,若是你沒有 Git 也能夠直接下載 ZIP 壓縮包git

建立 ISO 鏡像

虛擬機是沒法識別 Apple 的 DMG 文件的,因此咱們須要在 Mac App Store 獲取的 macOS Installer 的基礎上,生成一個能夠在虛擬機中啓動的 ISO 鏡像。github

若是 macOS Sierra 已經下載好了的話,咱們直接執行下面的命令就能夠生成一個安裝光盤鏡像了。macos

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

運行截圖如上,程序結束後,會在當前目錄生成了一個名爲 Install_macOS_Sierra_(OS_X_10.12.2).iso 的光盤鏡像文件。api

把這個文件複製到 KVM 服務器,這一步就算是完成了。ruby

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

啓動虛擬機

這裏就是大坑了,以前折騰了 2 天都是卡在這裏,用網上的各類方法一啓動,就顯示一個 boot: 就沒有而後了。bash

咱們先建立好須要的磁盤鏡像 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 

參考倉庫裏面的 boot.shboot-macOS.sh,整理了以下的命令用於首次啓動虛擬機:

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 的安裝鏡像,由於直接使用 macOS Sierra 沒法調出「磁盤工具」,就算在「語言選擇」界面等了多久都沒法正常操做。因此最終選擇了一個折中的辦法,用老版本的鏡像啓動來初始化硬盤,而後再用新版本的鏡像來安裝系統。

OS X El Capitan 安裝光盤的製做方法與 macOS Sierra 相似,請參考「建立 ISO 鏡像」部分。

初始化磁盤

執行過上述命令後,命令行會一直處於等待狀態,這個時候咱們須要使用 VNC 遠程桌面來完成剩下的操做。

注意:系統自帶的 VNC 客戶端還有 RealVNC Viewer 都沒法正常訪問沒有密碼保護的遠程桌面。只有 TigerVNC 才能正常訪問,這裏也浪費了很多的時間。

正常鏈接後,能夠看到 El Capitan 的歡迎界面:

 
El Capitan

接着像正常安裝同樣,開啓「磁盤工具」,初始化磁盤:

 
Disk Utility
 
Disk Utility
 
Disk Utility

這樣,初始化磁盤的工做就完成了。

準備啓動文件

其實,雖然是虛擬化 macOS,其實本質上仍是運行一個 Hackintosh (黑蘋果)。因此,必要的啓動文件配置仍是須要的。

好在在製做光盤鏡像的時候,一些須要的文件就已經被打包在 ISO 光盤鏡像裏面了。

咱們只須要打開 Terminal 把須要的文件複製到剛纔初始化過的磁盤裏面就能夠了。

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

而後咱們就能夠把虛擬機關閉了。

安裝 macOS Sierra

虛擬機關閉之後,咱們換一個命令來執行剛纔的啓動步驟:

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' 

其實跟第一次啓動虛擬機沒有太多的不一樣,主要的變化是 CPU 的配置還有安裝鏡像不同而已。

 
Sierra Install

安裝完成之後提示 Restart 到這裏基本的安裝就算完成了,咱們須要關閉虛擬主機,而後再進行下一步。

 
Sierra Install

用 Virsh 配置虛擬主機

參考 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> 

上面這個是配置文件,好比保存爲 sierra.xml,而後用 virsh 註冊一個新的虛擬機:

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

$ virsh start sierra
Domain sierra started

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

接下來,用老方法映射一個本地端口來 VNC:

ssh -L 5911:127.0.0.1:5911 server

從新啓動之後的效果以下圖:

 
Sierra Desktop

最後,咱們再把虛擬機設置爲開啓自動啓動:

$ virsh autostart sierra
Domain sierra marked as autostarted

設置好遠程桌面和遠程登陸之後,就不再用使用 VNC 了,完美!收工!

做者:TommyLau 連接:https://www.jianshu.com/p/e95c458d78bd 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。
相關文章
相關標籤/搜索