在 KVM 虚拟机中运行 macOS 系统
之前介绍过如何在 Ubuntu 系统和 KVM 中安装 Windows 系统,当时就说了,希望有机会能把 macOS 也给虚拟化了,这样就完美了。今天这篇文章就是解决这个问题的。
准备工作
开始之前,你需要做好以下的准备工作:
- 一台可以正常工作的 Mac 电脑
- 一台装好了 KVM 的 Linux 主机
- 下载好了的 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. |
当然,如果你没有 Git 也可以直接下载 ZIP 压缩包。
下载地址:https://github.com/kholia/OSX-KVM
创建 ISO 镜像
虚拟机是无法识别 Apple 的 DMG 文件的,所以我们需要在 Mac App Store 获取的 macOS Installer 的基础上,生成一个可以在虚拟机中启动的 ISO 镜像。
如果 macOS Sierra 已经下载好了的话,我们直接执行下面的命令就可以生成一个安装光盘镜像了。
$ sudo ./create_install_iso.sh |
运行截图如上,程序结束后,会在当前目录生成了一个名为 Install_macOS_Sierra_(OS_X_10.12.2).iso
的光盘镜像文件。
把这个文件复制到 KVM 服务器,这一步就算是完成了。
rsync -avP Install_macOS_Sierra_(OS_X_10.12.2).iso server:/path/to/iso/ |
启动虚拟机
这里就是大坑了,之前折腾了 2 天都是卡在这里,用网上的各种方法一启动,就显示一个 boot:
就没有然后了。
我们先创建好需要的磁盘镜像 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.sh
和 boot-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 的欢迎界面:
接着像正常安装一样,开启「磁盘工具」,初始化磁盘:
这样,初始化磁盘的工作就完成了。
准备启动文件
其实,虽然是虚拟化 macOS,其实本质上还是运行一个 Hackintosh (黑苹果)。所以,必要的启动文件配置还是需要的。
好在在制作光盘镜像的时候,一些需要的文件就已经被打包在 ISO 光盘镜像里面了。
我们只需要打开 Terminal 把需要的文件复制到刚才初始化过的磁盘里面就可以了。
# cp -avP /Extra /Volumes/Macintosh/ |
然后我们就可以把虚拟机关闭了。
安装 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 的配置还有安装镜像不一样而已。
安装完成以后提示 Restart 到这里基本的安装就算完成了,我们需要关闭虚拟主机,然后再进行下一步。
用 Virsh 配置虚拟主机
参考 libvirt-macOS.xml
生成了如下的 XML 配置文件:
<domain type=’kvm’ xmlns:qemu=’http://libvirt.org/schemas/domain/qemu/1.0′> <name>sierra</name> <description># echo 1 > /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 $ virsh list |
接下来,用老方法映射一个本地端口来 VNC:
ssh -L 5911:127.0.0.1:5911 server |
重新启动以后的效果如下图:
最后,我们再把虚拟机设置为开启自动启动:
$ virsh autostart sierra Domain sierra marked as autostarted |
设置好远程桌面和远程登录以后,就再也不用使用 VNC 了,完美!收工!
在 KVM 虚拟机中运行 macOS 系统相关推荐
- unity3d android 后台运行,unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android...
易采站长站为您分析unity3d发布apk在android虚拟机中运行的详细步骤,需要的朋友可以参考下 unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android ...
- Linux学习笔记Day01-01在虚拟机中下载Linux系统(centos)详细步骤,vmtools安装
学习目标: 掌握linux环境下基本操作命令,如文件命令,编译工具使用,linux用户管理 linux各种配置 搭建对应语言的开发环境 Linux是一款操作系统,免费,开源,安全,高效,稳定,处理高并 ...
- 解决 VMware 虚拟机 中被提示 “请不要在虚拟机中运行此程序”或者“Themida Sorry, this application cannot run under a Virtual Mac
解决 VMware 虚拟机 中被提示 "请不要在虚拟机中运行此程序"或者"Themida Sorry, this application cannot run under ...
- VxWorks入门06:虚拟机中运行
在下载的VxWorks安装包中,包含了一份在虚拟机下安装测试的文档,我们按照这个文档测试一下. VxWorks 6.8.3 + VxWorks Workbench 3.2.3 + VMware 16. ...
- 【一站式】虚拟机中运行博途V15
[一站式]虚拟机中运行博途V15 所使用的的软件 步骤 一.安装虚拟机 二.安装一个Win 10系统的虚拟机 三.对客户机进行网络设置 四.对客户机系统内部进行设置 结尾 可供参考的相关文章 所使用的 ...
- android studio虚拟机如何使用,3.1、Android Studio在虚拟机中运行应用
Android虚拟机Monitor一个设备并且显示在你的开发计算机上.它可以允许你在不适用硬件设备的情况下开发.测试你的Android应用.虚拟机支持Android手机,Android Wear和平板 ...
- windows虚拟机_[安装实录]如何在 Vmware虚拟机中安装 macOS Mojave -- Windows 版
Note: 由于 Github 作者删除了破解的文件,现在该安装方法暂时无效.感谢知友西岚有提出一个解决线索,我对 github 不熟,暂时还未能测试.如果你也碰到类似的问题,可以尝试先按照西岚的方法 ...
- 【错误记录】VMware 虚拟机报错 ( 向 VMWare 虚拟机中的 Ubuntu 系统拷贝文件时磁盘空间不足 ② | 删除交换空间 )
文章目录 一.报错信息 二.解决方案 一.报错信息 在 [错误记录]VMware 虚拟机报错 ( 向 VMWare 虚拟机中的 Ubuntu 系统拷贝文件时磁盘空间不足 ) 博客中 , 给出了解决方案 ...
- 如何在虚拟机中运行知乎App
经过知乎大佬们的指点迷津,我将目光转向了模拟器,简单的尝试了几款模拟器之后,发现都不能打开知乎App,可气呀,抖音都能打开,为啥知乎打不开呢?难度知乎做了反欺诈检测?不会这么高级吧.于是我又重新把目光 ...
最新文章
- NetBeans常用快捷键
- webpack打包路径更改_扫盲: Webpack 从扫盲到手撸(上)
- 神秘的Waymo一反常态,CVPR现场发布大型自动驾驶数据集
- 初识中文分词(一)MMSEG
- 2020必知的 10 大顶级 python 库
- 算法与数据结构(选择排序)
- ArrayList为何线程不安全,如何解决
- Python 中list中所有值加和_Python 中去除列表中重复元素的5种方法
- 2017年java教材推荐_干货|2017年最新JavaEE课程大纲分享
- hdoj_1166_敌兵布阵_树状数组
- c语言全排列库函数,几种全排列的算法(C语言实现)
- AMD显卡超频显示器方法
- 前后端分离微服务管理系统项目实战SaaS-HRM项目(一)——系统概述与环境搭建
- 灭蚊灯UKCA FCC GB4706安全检测认证
- 2019-2022广汽埃安AIONS/AIONY/AIONV/AIONLX维修手册电路图技术资料
- PCB Layout的10个细节
- Electron 打包时下载 xxx-electron-v1.6.8-arch-x64.zip 文件出错
- mysql 中一个表里有父子关系_SQLAlchemy - 同一个表中的父子关系
- 单例模式,androidstudio简易app实例
- 1750套工装夹具检具治具机械设计机构solidworks模型3d课程图纸sw