# macOS-on-KVM
**Repository Path**: lduml/macOS-on-KVM
## Basic Information
- **Project Name**: macOS-on-KVM
- **Description**: https://github.com/zyk2290/macOS-on-KVM/
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-02-19
- **Last Updated**: 2021-02-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 要求
1. 主板支持VT-d和VT-x
3. 一张独立显卡,以及支持集显的CPU
4. 用户需要对Linux 系统有一定了解
5. 分配给客户机的 GPU 的 ROM 必须支持 UEFI
5. 多信号源显示器,或多个显示器(多条视频线)
# 本人电脑配置
显卡:GTX1070
主板:华硕玩家国度 Z270-GAMING(UEFI,CSM关闭)
处理器:i7-6700K
内存:16G * 2 (DDR4)
(如果主板是与我的相似的话,是最好的)




# 写在(伪)最前
UP 主还只是一位高中生,由于时间以及能力原因,我不可能能够回答所有的问题(可能你们的问题我一个都回答不来,当然如果我能帮一下的话我会尽力的)。
如果可以的话,厚着脸皮求个点赞呗(我知道这个视频的制作水平(也包括这份文档))远远差过其他UP 主的视频,但我确实是尽力了,就当我求你们了呗(所以才没求投币(当然如果你想的话更欢迎,嘻嘻嘻)))。
如果有问题的话,请在评论区或弹幕内提醒我,我会抽空更新这个文档的(当然视频就不太可能更新了)
请各位不要喷我,我真的是尽力了(我承认我自己仍然对QEMU 和虚拟系统管理器仍然还是在一知半解的状态,我也是一边安装一边学(我也承认这也是我第一次使用QEMU))。
最后谢谢各位了!!
# 优劣
## 优点
1. 不需要再对clover 进行大修改即可运行N 卡
2. 恢复方便,就算把EFI 分区弄坏了也能直接恢复
3. 备份方便,可以直接拷贝硬盘文件走
(好了我编不出来了)
## 缺点
1. 对主板的虚拟化的各项功能有较高要求
2. 多显示屏,要求多次切换显示器信号源
3. 需要CPU 支持集显(其实不支持也是可以的,但是本方法是针对有集显的用户的
4. 无法使用DDR4 内存,降为DDR3
**不过你都已经点进来了,对吧**
# 什么是KVM & QEMU
KVM:
> 基于内核的虚拟机(英语:Kernel-based Virtual Machine,縮
>寫為KVM)是一种用於Linux內核中的虛擬化基礎设施,可將
>Linux內核轉化為一個虚拟机监视器。KVM于2007年2月5日被
>導入Linux 2.6.20核心中。KVM需要支持硬件虚拟化拓展特
>性的处理器。
>KVM 起 初 支 持 x86 平 台 处 理 器 并 随 后 被 移 植 到 了
>S/390、PowerPC、和IA-64平台上。在3.9内核合并时也导
>入了ARM移植版。
>诸多客户操作系统支持KVM,包括Linux的诸多发行版、
>BSD、Solaris、Windows、Haiku、ReactOS、Plan 9、AROS研
>究操作系统和OS X。除此之外,还支持Android 2.2、
>GNU/Hurd
>(Debian K16)、Minix 3.1.2a、Solaris 10 U3和
>Darwin 8.0.1,而其他操作系统或新版操作系统都支持KVM,
>仅仅存在一些限制而已。
>VirtIO 半 虚 拟 化 在 Linux 、 OpenBSD 、 FreeBSD 、
>NetBSD、Windows上支持对部分设备的半虚拟化。这项特
>性支持半虚拟化网卡、半虚拟化磁盘控制器、用于调整客
>户端内存使用的气球设备(Balloon device)和使用獨立計算環
>境簡單協議驱动程序的VGA图形接口。
QEMU
>QEMU(quick emulator)是一款由Fabrice Bellard等人编写的免费的可
>执 行 硬 件 虚 拟 化 的 ( hardware virtualization ) 开 源 托 管 虚 拟 机
>(VMM)。
>其与Bochs,PearPC类似,但拥有高速(配合KVM),跨平台的特性。
>QEMU是一个托管的虚拟机镜像,它通过动态的二进制转换,模拟
>CPU,并且提供一组设备模型,使它能够运行多种未修改的客户机
>OS,可以通过与KVM(kernel-based virtual machine开源加速器)一起
>使用进而接近本地速度运行虚拟机(接近真实电脑的速度)。
>QEMU还可以为user-level的进程执行CPU仿真,进而允许了为一种架构
>编译的程序在另外一种架构上面运行(藉由VMM的形式)。
(没错我全在维基百科上抄的)
# 安装
## S1:将视频输出线接入主板的口上
## S2:在自己的主板里启用相应的虚拟化选项
详细看视频
## S3:安装Ubuntu
1.进入 https://ubuntu.com/download/desktop 下载Ubuntu 安装镜像(我选择了19.04)
2.使用一款自己顺手的U盘启动制作工具(推荐Rufus)
这里给大家看一下我的配置

3.开始安装Ubuntu(最好UEFI)
## S4:配置环境
### 安装软件
先安装git
```shell
sudo apt install -y git
git clone https://github.com/foxlet/macOS-Simple-KVM.git
```
配置python 环境,顺便下载镜像
```shell
sudo apt install -y python python3 python-pip python3-pip
pip3 install click request
pip install click request
cd macOS-Simple-KVM
./jumpstart.sh --high-sierra
```
再安装KVM/QEMU 需要的软件
```shell
sudo apt install -y virt-manager qemu-kvm qemu libvirt-daemon-system libvirt-clients ovmf bridge-utils
```
加入kvm 用户组
```shell
sudo adduser `id -un` kvm
```
启动libvirt 服务
```shell
sudo systemctl enable libvirtd
sudo systemctl start libvirtd
```
## 配置安装基本macOS
确认上面几步已经完成的,重启
打开虚拟系统管理器(在活动里搜索,关键词:virt-manager)
可以看到以下界面

在终端内,将当前工作文件夹切换到macOS-Simple-KVM 里,执行
```shell
sudo ./make.sh --add
```
可以看到虚拟系统管理器出现一个新的虚拟机

### 创建虚拟硬盘
```shell
qemu-img create -f qcow2 MyDisk.qcow2 [disk_size]G
```
其中[disk_size] 里填虚拟硬盘大小
接着,选定该虚拟机,双击,在选项卡下找到一个带‘i’ 字样的图标,如图

单击“选定“选择或创建自定义存储”并在下方找到“管理”,并再选择“本地浏览”,找到刚才创建的虚拟硬盘,并选定它
### 更改网卡配置
找到旁边有NIC 字样的选项卡,按下图调整


### 启动虚拟机
单击’i'字样右侧的像播放键的图标,再单击同一栏最左边的图标,启动后clover boot manager 内直接回车
### 安装macOS
来到这个界面(该界面唯一的区别是截图上的Install 应为Reinstall,其它无改变)后

点击 Disk Utility, 然后在侧边栏选择你要安装的硬盘(截图与实际会有一些不同,可以看大小大概知道要安装的硬盘)

单击Erase

按自己需求改名,接着按Erase(不要改其它内容)
然后关闭Disk Utility

选择Reinstall macOS (该截图与实际不符)
来到以下界面
接下来就接受许可协议,选择安装的硬盘(分区),接着一路下一步
开始安装
### 配置macOS
在这里注意一下,在其它设备上试过选择在上下滑动时死机,建议直接选第一个

下面就不贴图片了
但是
**不要登录,不要登录,不要登录**
现时
**不要使用任何苹果的在线服务,不要使用任何苹果的在线服务,不要使用任何苹果的在线服务**
其它按需更改
#### 改变地区与语言设置
进入桌面后,打开设置

选择Language & Region

按下图改变地区的设置
在界面中找到“+”键,添加简体中文

如果要使用中文的话选择右边的选项,如果要使用英文的话,选左边

**基本安装结束**
## S4:配置显卡直通
### 下载Web Driver
打开 http://www.macvidcards.com/drivers.html ,拉到最下面
找到下图的驱动,双击下载

之后用U 盘将该驱动送到macOS 上
在虚拟机中插入U 盘的教程如下:

选择“添加硬件”,在弹出的窗口中选择”USB 主机设备“,同时选择你的U 盘,最后按“完成”,如下图
然后就应该可以在macOS 上打开下载的驱动文件了
### 安装 Web Driver
打开安装文件

一路下一步
如遇到以下窗口

选择左边那个选项

划红线的能点的都点上
结束安装后,让它重启,等它重启完后再关机
### 配置显卡直通
#### 配置
执行
```
sudo nano /etc/default/grub
```
在该配置文件内找到下图划蓝线这一行

加上这些字段```nouveau.modeset=0 rd.driver.blacklist=nouveau intel_iommu=on iommu=pt vfio-pci.ids=```
(题外话,官方的文档上是要求把intel_iommu=on iommu=pt vfio-pci.ids= 加到GRUB_CMDLINE_LINUX=" "(也就是截图的下一行)里的,但我没看清楚,但是加到这里也好像没什么问题)
再打开一个终端窗口,执行```lspci -nn``` ,以我的电脑为例

找到你的显卡,在后面找到设备码,在我这里的例子是10de:1b81
同时给显卡板载声卡也给直通过去,同样的操作,在我这里的例子是10de:10f0
把这两个码复制粘贴到刚才的等号后面,中间使用逗号分隔
贴上我的例子

接着Ctrl + x ,Y 键保存退出,运行
```shell
sudo update-grub
```
完成后重启
#### 检查
打开终端,下载一个叫iommu.sh 的脚本(可在本仓库内找到)
运行```chmod a+x ./iommu.sh``` (假设你的脚本就在当前工作文件夹内),
接着运行
```shell
./iommu.sh
```
贴上我的运行后的例子

如图,可以看到再每一行开头前都可以找到 IOMMU Group N,接着找到你的显卡,看其对应的组号(本例中为1)接着上下看一下有没有其它设备,如果就像本例中的只有一个PCI bridge(这个东西可以忽略)是你没有见过的,那么就说明直通成功了,如果还有除上述设备的其它设备,那么你就要考虑放弃了(可以考虑使用ACS Override,但那很复杂,具体可以参考https://passthroughpo.st/mac-os-vm-guide-part-2-gpu-passthrough-and-tweaks/ ,拉到最下面Troubleshooting 这一节中的Multiple PCI devices in the same IOMMU group 来寻求更多帮助)
#### 在虚拟机中设置显卡驱动
##### macOS 中设置Web Driver
直通成功后(恭喜你),
再次打开虚拟机,找到在上面那一栏的如图示的图标(已划红线),单击

再单击在下图中鼠标选择的选项

输密码,在以下对话框内选择“Not Now” ,接着手动关机

接着,请再找一条视频线从显卡上的接口接到显示器(不管是另一个还是原来的)上
现在顺便找另一个鼠标(USB)
#### 在虚拟系统管理器中设置显卡直通
移除下列两个设备

将你的显卡添加进来,选择添加硬件,找到PCI 主机设备,在左侧的设备列表中找到你的显卡以及板载显卡的声卡,依次添加

接着参考上面的U 盘插入虚拟机的教程,**先将刚才的U 盘移除**
**再**将刚才找的鼠标和你的键盘以USB 设备形式添加,
移除安装盘(硬盘序号可能不对,但文件名“BaseSystem.img" 还是一样)

接着开机

在该界面上,按Enter 键
接着**立即**(划重点)将显示器的信号源切换到你的显卡所接的信号线所属的信号上
稍等片刻,如果还有闪屏的现象,参阅上面的”macOS 中设置Web Driver“ 节再切换一次,但略有不同的是这次**直接选择重启**而不是手动关机后再开机,**并且不要更改显示器信号源**
在输入密码界面登录时若没有闪屏现象,同时也可以在苹果图标那里打开关于本机,可以看到自己的独显,那么就说明
**该黑苹果已经可以进行基本日常工作**(U 盘暂时无法使用)
截至现在
**不要使用任何苹果的在线服务**
**不要使用任何苹果的在线服务**
**不要使用任何苹果的在线服务**
## S5:Apple ID 设置
首先执行```sudo spctl --master-disable``` 以允许来自所有来源的应用程序
在https://mackie100projects.altervista.org/ 下载Clover Configurator(以下简称CCV)
打开刚刚下载的CCV,在侧边栏里选择”Mount EFI“

在下方的EFI Partitions 中也应该有两个选择,两个都挂载,等会儿看一下哪个是对的

挂载成功以后,单击旁边的Open Partition,如果分区内存在EFI\Clover 一系列文件夹的话,说明就是这个盘

打开到EFI/Clover 文件夹后,打开config.plist 文件(如果不是以CCV 打开,则右键打开方式,再不行直接拖进CCV 的窗口)
选择侧边栏上的SMBIOS ,单击红色框,选择与你最相似的机器(不用死抠)


单击红框的按钮

输完验证码后,若出现以下内容,则说明过了,如果出现一台mac 电脑的话,请再上图的Serial Number 旁边再按一下Generate New,再重复一遍

接着再按下图红框按钮

(接下来的内容全在https://www.tonymacx86.com/threads/an-idiots-guide-to-imessage.196827/ 抄的)
出现以下内容,也是再按Generate Now 再按Check Coverage 按钮再来一次

出现以下内容说明成功
保存退出
接着打开虚拟机管理界面,选择硬件详情
选择NIC 开头的选项

将右侧中的勾选框中的active 给取消掉,应用,即可断网(开网即相反)
打开终端,执行(将[username] 替换成你的用户名)
```shell
cd /Users/[username]/Library/Caches
sudo rm -rf com.apple.iCloudHelper com.apple.imfoundation.IMRemoteURLConnectionAgent com.apple.Message
cd ..
cd ./Preferences
sudo rm -rf com.apple.iChat.* com.apple.icloud.* com.apple.ids.service com.apple.imagent.* com.apple.imessage.* com.apple.imservice.*
```
重启后开网,在**设置**里登录苹果账号
## S6 evdev 设置
关闭虚拟机
打开Ubuntu 上的终端
键入
```
ls /dev/input/by-id
```
找到你要选的设备,将其设备名替换[input device id]
```shell
sudo cat /dev/input/by-id/[input device id]
```
移动你刚才选的设备(是键盘的就随便敲几下键盘,是鼠标的就移动一下),如果有乱码输出,则说明成功
在另一个终端内键入
```shell
sudo EDITOR=nano virsh edit win10
```
找到相似的地方(看视频你才能知道复制粘贴到哪里)
```xml
```
将刚刚的鼠标名和键盘名替换MOUSE_NAME 以及KEYBOARD_NAME (不要调换)
将[username] 替换成你的用户名
(第1、2行的命令不确定是否要执行,反正也花不了多少时间)
```shell
sudo usermod -a -G input [username]
sudo gpasswd -a [username] input
sudo usermod -a -G input root
sudo gpasswd -a root input
sudo systemctl stop apparmor
sudo systemctl restart libvirtd
sudo systemctl disable apparmor
```
## S7:Have Fun!!!
# 参考
https://www.reddit.com/r/VFIO/comments/bamn5a/permission_denied_when_trying_to_pass_through/
https://passthroughpo.st/mac-os-vm-guide-part-2-gpu-passthrough-and-tweaks/
https://www.jianshu.com/p/74b18e6aa5fa
https://passthroughpo.st/new-and-improved-mac-os-tutorial-part-1-the-basics/
https://www.tonymacx86.com/threads/an-idiots-guide-to-imessage.196827/
https://passthroughpo.st/using-evdev-passthrough-seamless-vm-input/
(想不起来了。。。可能没了)