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 来源:简书 简书著做权归做者全部,任何形式的转载都请联系做者得到受权并注明出处。
相关文章
相关标签/搜索