OSX-KVM - 在 QEMU/KVM上运行macOS

文章目录

      • 依赖
      • 安装准备
      • 安装
      • Headless macOS
      • Setting Expectations Right
      • 安装后
      • 这合法吗?
      • 动机
      • 回馈贡献


OSX-KVM 支持早 QEMU/KVM上运行macOS。现在支持OpenCore+Monterey+Ventura+Sonoma!

现在仅提供商业(付费)支持,以避免垃圾邮件问题。不需要Mac系统。

  • github : https://github.com/kholia/OSX-KVM

下述过程中,创建一个Virtual Hackintosh 系统。

注意:此存储库中包含的所有Blob和资源都是可重新派生的(包括所有说明!)。

使用Proxmox和macOS?请参阅Nick的博客。

目前支持离线macOS安装-请参阅此文档🎉 : https://github.com/kholia/OSX-KVM/blob/master/run_offline.md)


依赖

  • 现代Linux分布。例如。Ubuntu 22.04 LTS 64位或更高版本。
  • QEMU >= 6.2.0
  • 需要支持 Intel VT-x/AMD SVM 的 CPU(grep -e vmx -e svm /proc/cpuinfo
  • >=macOS Sierra 需要支持SSE4.1的CPU
  • >=macOS Mojave 需要支持AVX2的CPU

注意:众所周知,较旧的AMD CPU存在问题,但现代AMD Ryzen处理器工作正常(即使对于macOS Sonoma)。


安装准备

  • 安装QEMU和其他软件包。
sudo apt-get install qemu uml-utilities virt-manager git \
wget libguestfs-tools p7zip-full make dmg2img tesseract-ocr \
tesseract-ocr-eng genisoimage vim net-tools screen -y

此步骤可能需要根据您的Linux分布进行调整。


在QEMU系统上克隆此存储库。此存储库中的文件将在以下步骤中使用。

cd ~git clone --depth 1 --recursive https://github.com/kholia/OSX-KVM.gitcd OSX-KVM

可以通过以下命令 提取存储库更新:

git pull --rebase

此存储库大量使用基于rebase的工作流。


  • KVM可能需要在主机上进行以下调整才能工作。
sudo modprobe kvm; echo 1 | sudo tee /sys/module/kvm/parameters/ignore_msrs

要使此更改永久化,您可以使用以下命令。

sudo cp kvm.conf /etc/modprobe.d/kvm.conf  # for intel boxes onlysudo cp kvm_amd.conf /etc/modprobe.d/kvm.conf  # for amd boxes only

  • Add user to the kvm and libvirt groups (might be needed).
sudo usermod -aG kvm $(whoami)
sudo usermod -aG libvirt $(whoami)
sudo usermod -aG input $(whoami)

注意:执行此命令后重新登录。


  • 拉取数据macOS安装程序。
./fetch-macOS-v2.py

您可以在此处选择所需的macOS版本。执行此步骤后, 当前文件夹中应该有BaseSystem.dmg文件。

注意:让>= Big Sur设置位于Country Selection屏幕上,并且 如果事情进展缓慢,请在其他类似的地方停留一段时间。最初的macOS 安装向导最终会成功。


试运行:

$ ./fetch-macOS-v2.py
1. High Sierra (10.13)
2. Mojave (10.14)
3. Catalina (10.15)
4. Big Sur (11.7)
5. Monterey (12.6)
6. Ventura (13) - RECOMMENDED
7. Sonoma (14)Choose a product to download (1-6): 6

注意:HighSierra支持现代NVIDIA GPU,但更高版本的macOS不支持。

  • 将下载的BaseSystem.dmg文件转换为BaseSystem.img文件。
dmg2img -i BaseSystem.dmg BaseSystem.img

  • 创建将安装macOS的虚拟HDD图像。如果您更改 磁盘图像的名称从mac_hdd_ng.img到其他东西,引导脚本 将需要更新以指向新的图片名称。
qemu-img create -f qcow2 mac_hdd_ng.img 256G

注意:在快速SSD/NVMe磁盘上创建此HDD图像文件以获得最佳效果。

  • 现在您已准备好安装macOS🚀

安装

  • CLI方法(主)。只需运行OpenCore-Boot.sh脚本即可启动 安装过程。
./OpenCore-Boot.sh

注意:相同的脚本适用于所有最新的macOS版本。

  • 使用macOS安装程序中的Disk Utility工具来分区,并且 格式化附加到macOS VM的虚拟磁盘。使用APFS(默认) 对于现代macOS版本。
  • 继续,并安装macOS🙌
  • (可选) 和 libvirt (virt-manager / virsh stuff) 一起使用这个 macOS VM disk。
  • 编辑 macOS-libvirt-Catalina.xml 文件和修改多文件路径 (查找文件中的 CHANGEME 字符串)。通常情况下,以下命令会起作用。
sed "s/CHANGEME/$USER/g" macOS-libvirt-Catalina.xml > macOS.xmlvirt-xml-validate macOS.xml

  • 通过运行以下命令创建虚拟机。
virsh --connect qemu:///system define macOS.xml

  • 如果需要,向 libvirt-qemu 用户授予必要的权限,
sudo setfacl -m u:libvirt-qemu:rx /home/$USER
sudo setfacl -R -m u:libvirt-qemu:rx /home/$USER/OSX-KVM

  • 启动 virt-manager 并启动macOS虚拟机。

Headless macOS

  • 使用提供的 boot-macOS-headless.sh 脚本。
./boot-macOS-headless.sh

Setting Expectations Right

在建立Virtual Hackintosh系统方面做得很好!这样的系统可以用于各种目的(例如,软件构建、测试、反向工作),它可能是您所需要的全部,以及此存储库中记录的一些调整。

然而,这样的系统缺乏图形加速、可靠的声音子系统、 USB 3功能和其他类似的东西。要启用这些东西,请 看看我们的笔记。我们想继续我们的测试 留档工作请[联系我们](mailto:dhiru.kholia@gmail.com?subject=[GitHub] OSX-KVM Funding Support) 如果你能资助这个领域的工作。

有可能有“beyond-native-apple-hw”的表现,但这确实需要工作、耐心和一点运气(也许?)。


安装后

  • 请参阅网络说明,了解如何在VM、出站和入站中设置网络,以便通过SSH、VNC等远程访问VM。
  • 要通过GPU和其他设备,请参阅这些注释。
  • 需要不同的分辨率?查看此存储库中包含的注释。
  • iMessage有问题?查看此存储库中包含的注释。
  • 强烈推荐macOS调整 — https://github.com/sickcodes/osx-optimizer

这合法吗?

“secret” 苹果OSK字符串 在公网上广泛可用。

它也包含在这里提供的公共法庭文件中。

我不是律师,但苹果试图将OSK字符串视为商业机密的尝试 似乎没有成功。由于这些原因,OSK字符串被自由地包含在这个存储库中。

请查看 ‘Legality of Hackintoshing’ documentation bits from Dortania’s OpenCore Install Guide 。

Gabriel Somlo对在QEMU/KVM下运行macOS所涉及的法律方面也有一些想法。

您可能还会发现这篇“宣布适用于macOS的Amazon EC2 Mac实例”文章很有趣。

注意:您有责任理解和接受(或不接受)Apple EULA。

注意:这不是法律建议,因此如果您有任何疑虑,请自行进行适当的评估并与您的律师讨论(文字来源:Dortania)


动机

我的目标是以简单、可重现的方式启用基于macOS的教育任务、构建+测试、内核调试、逆转和macOS安全研究,而不会“投资”苹果封闭的生态系统(太多)。

这些Virtual Hackintosh系统并不打算取代真正的 物理macOS系统。

就个人而言,这个存储库一直是我“退出”苹果的一种方式 生态系统。它帮助我测试和比较了Canon CanoScan LiDE 120扫描仪和Brother HL-2250DN激光打印机的互操作性。还有这些 设备现在可以在现代版本的Ubuntu上正常工作(耶,免费 软件)。此外,很久以前,我不得不完全擦拭我(当时)全新的 MacBook Pro (Retina, 15-inch, Late 2013)并在上面安装徐邦图 OS X内核不断崩溃!

背景故事:我前世是加拿大的一个(贫穷的)学生,苹果让我破解苹果钥匙链的工作比它需要的要困难得多。这就是我对Hackintosh系统感兴趣的原因。


回馈贡献

这个项目总是需要你的帮助、时间和注意力。我正在寻找以下工作项目的帮助(拉-请求!):

  • 关于在流行的云提供商上运行macOS的文档(Hetzner,美东二机房, 请参阅Is This Legal?部分和相关参考资料。
  • 记录(分享)您如何使用此项目来构建+测试开源项目/完成您的工作。
  • 记录如何使用此项目进行XNU内核调试和开发。
  • 记录启动一堆无头macOS VM(构建场)的过程。
  • 文档使用munki部署软件 这样的build farm
  • 启用VNC+SSH支持开箱即用。
  • 鲁棒性改进始终受到欢迎!
  • (不是这样)疯狂的想法-通过OpenCV自动安装macOS。

2024-06-04(二)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/25398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【每日算法】

算法第15天| (二叉树part02)层序遍历、226.翻转二叉树(优先掌握递归)、101. 对称二叉树(优先掌握递归) 文章目录 算法第15天| (二叉树part02)层序遍历、226.翻转二叉树(优先掌握递归)、101. 对称二叉树(优先掌握递归)一、层序遍历二、226. 翻转二叉树(优先掌握递归)三、101. 对…

Elasticsearch index 设置 false,为什么还可以被检索到?

在 Elasticsearch 中,mapping 定义了索引中的字段类型及其处理方式。 近期有球友提问,为什么设置了 index: false 的字段仍能被检索。 本文将详细探讨这个问题,并引入列式存储的概念,帮助大家更好地理解 Elasticsearch 的存储和查…

在Tomcat 10.1.x上使用jstl

通过在Web应用程序项目的/WEB-INF/lib文件夹中放入以下两个Jar包 jakarta.servlet.jsp.jstl-3.0.1.jarjakarta.servlet.jsp.jstl-api-3.0.0.jar 在 jsp 页面导入 taglib 标签 <% taglib prefix"c" uri"jakarta.tags.core" %>

区分live(居住v)、live(直播的adj、直播地adv)、life/lives(生活n及其复数)的读音

文章目录 区分live&#xff08;居住v&#xff09;、live&#xff08;直播的adj、直播地adv&#xff09;、life/lives&#xff08;生活n及其复数&#xff09;的读音 区分live&#xff08;居住v&#xff09;、live&#xff08;直播的adj、直播地adv&#xff09;、life/lives&…

打造实用的时间序列数据处理类:Python中的TimeSeriesAnalyzer

题目:打造实用的时间序列数据处理类:Python中的TimeSeriesAnalyzer 在数据科学、金融分析和许多其他领域中,时间序列数据是非常常见的。处理这类数据通常需要特定的技术和方法。本文将介绍如何设计一个用于处理时间序列数据的Python类TimeSeriesAnalyzer,它包含了一些基本…

mysql数据库 自增id从指定数字开始

如果想要给每个用户一个七或者更多位数的uid&#xff0c;可以在用户表中设置id为自增&#xff0c;并且设置初始值 1.创建表时指定 CREATE TABLE user( -- 建表语句 )AUTO_INCTEMENT自增值; 例如 create table user (id int unsigned primary key auto_incremen…

基于STM32F030设计的多点温度采集系统(BC26+OneNet)

一、项目背景 随着物联网技术的迅猛发展&#xff0c;越来越多的智能设备应运而生&#xff0c;而温度采集系统是其中重要的一类。在现代工业和家庭生活中&#xff0c;温度对于生产、居住和储存等过程的控制有着非常重要的作用。因此&#xff0c;准确地采集环境温度数据并进行处…

HTML做成一个粒子漩涡特效页面

大家好&#xff0c;今天制作制作一个粒子漩涡特效的页面&#xff01; 先看具体效果&#xff1a; 要在一个单一的 index.html 页面中实现粒子漩涡特效&#xff0c;我们可以使用HTML、CSS和JavaScript&#xff08;不需要外部库&#xff09;。下面是一个简单的例子&#xff0c;展…

免费热榜API——哔哩哔哩

一、请求地址 http://api.dataguan.com/api/center/getBiBiHot 二、请求方式 post 三、接口文档 1、请求参数 到www.dataguan.com 免费获取apikey和sign&#xff0c;sign由apikey和apisecret生成 字段说明是否必传apiKey接口钥匙是sign签名是 2、响应说明 字段说明top…

JWT 从入门到精通

什么是 JWT JSON Web Token&#xff08;JWT&#xff09;是目前最流行的跨域身份验证解决方案 JSON Web Token Introduction - jwt.ioLearn about JSON Web Tokens, what are they, how they work, when and why you should use them.https://jwt.io/introduction 一、常见会…

Git发布正式

一般我们开发都是在测试环境开发&#xff0c;开发完成后再发布到正式环境。 一.分支代码合并到主分支1.首先切换到自己的分支(比如分支叫&#xff1a;dev)git checkout dev2.把本地分支拉取下来git pull 或者 git pull origin dev3.切换到主分支mastergit checkout master4.更新…

【Vue】购物车案例-构建项目

脚手架新建项目 (注意&#xff1a;勾选vuex) 版本说明&#xff1a; vue2 vue-router3 vuex3 vue3 vue-router4 vuex4/pinia vue create vue-cart-demo需要勾选上vuex&#xff0c;由于这个项目只有一个页面&#xff0c;vuex可勾可不勾 将原本src内容清空&#xff0c;替换成教学…

【计算机网络基础】IP地址

文章目录 一、IP介绍IP地址和Mac地址IP地址分类 二、IPV4地址IPV4地址分类子网掩码进制转换方法8421法则转换法私网地址PNAT技术IP分配原则 三、IPv6地址IPV6组成IPV6分类IPV6特殊地址 四、VLSM可变长子网掩码划分子网VLSM优点 &#x1f308;你好呀&#xff01;我是 山顶风景独…

springboot+mqtt使用总结

1.软件的选型 1.1.使用免费版EMQX 1.1.1.下载 百度搜索的目前是会打开官网&#xff0c;这里提供下免费版的使用链接EMQX使用手册 文档很详细&#xff0c;这里不再记录了。 1.2.使用rabbitmq rabbitmq一般做消息队列用&#xff0c;作为mqtt用我没有找到详细资料&#xff0c…

异常(Exception)

异常是什么 异常就是程序在进行时的不正常行为&#xff0c;就像之前数组时会遇到空指针异常&#xff08;NullPointerException&#xff09;&#xff0c;数组越界异常&#xff08;ArrayIndexOutOfBoundsException&#xff09;等等。 在java中异常由类来表示。 异常的分类 异常…

2013年 阿拉斯加巴罗活动层厚度和土壤含水量

Pre-ABoVE: Active Layer Thickness and Soil Water Content, Barrow, Alaska, 2013 ABoVE前&#xff1a;阿拉斯加巴罗活动层厚度和土壤含水量&#xff0c;2013年 简介 文件修订日期&#xff1a;2018-01-10 数据集版本&#xff1a;1 摘要 该数据集提供了 2013 年 8 月在…

Java | Leetcode Java题解之第142题环形链表II

题目&#xff1a; 题解&#xff1a; public class Solution {public ListNode detectCycle(ListNode head) {if (head null) {return null;}ListNode slow head, fast head;while (fast ! null) {slow slow.next;if (fast.next ! null) {fast fast.next.next;} else {ret…

网络安全难学吗?2024该怎么系统学习网络安全?

学习网络安全需要循序渐进&#xff0c;由浅入深。很多人对网络安全进行了解以后&#xff0c;就打算开始学习网络安全&#xff0c;但是又不知道怎么去系统的学习。 网络安全本身的知识不难&#xff0c;但需要学习的内容有很多&#xff0c;其中包括Linux、数据库、渗透测试、等保…

mysql中定时器的使用

在MySQL中&#xff0c;你可以使用事件调度器&#xff08;Event Scheduler&#xff09;来创建和管理定时器&#xff0c;这些定时器可以在指定的时间间隔或特定的时间自动执行事件。这些事件通常用于执行数据库维护任务&#xff0c;如定期备份、数据归档、清理旧数据等。 以下是…