在阿里云上装黑苹果(1):黑苹果基础

本文关键字:云mac当局域网第二mac用,本地盘与网盘组raid

我们在很多地方谈到,苹果之所以好用,是因为mac产品家族间注重融合,比如ipad os与osx是完全不一样的系统,但它们可以交互,他们是生态层面,加以技术辅助的融合,并不是从0开始就纯粹技术融合的,比如共用完全一样的内核,etc..—— 不管如何,这也使得苹果的产品非常难于部分替代的方式去整体代替,除非整个弃用。

苹果在现代OS软硬件的各个层次都有自己的定制,小到硬件(nvme硬件,disk format,bootcamp, NVRAM。etc..)大到OS,软硬层次的融合性深定制,这是一种闭环竞争力。

所以有各种黑苹果技术出现,企图将x86的黑苹果装在普通PC上。这称为Hackintosh,最开始的黑苹果技术是修改系统文件 — 这属于破解和反工程,已经过时,后来发展到利用loader这条合法正途上来:最终要能使黑苹果目标完装官方无修发布的原生安装包。

何谓loader?最初的loader是grub这种bios向os的传手,仅是一个硬盘主分区上的bootstrape,用来boot OS,但是复杂化的grub2可以干很多其它事情,纯粹可以发展为一套软件。这样,bios作为固件和grub作为软件的界限就不是那么重要了。所以后来干脆统一了强化的grub作为标准,这就是EFI,可扩展固件接口 (EFI) 依然跟grub强化一样是一个介于操作系统与硬件平台固件的软件接口。只不过它更强大,这里有各种厂商写好的EFI,引导计算机的硬件逻辑。驱动(为什么这里要用驱动呢,这个驱动不是为了EFI用它是稍后注入到OS的,苹果有iokit接口供各种硬件接入,开源的黑驱动本质也是合法的白苹果驱动)等。注意它们实际是软件可以被置换重写,不是固件它们只是引导固件为OS所用,所以完全可以在这里欺骗OS。

我们在以前谈到黑群,它有一个pe层,loader和所有的驱动都放在那里,系统仅为数据和升级包。而苹果没有pe层决定引导的因素存在,黑苹果要做的工作要更底层一些,因为它对硬件也有诸多规范(安装完的黑苹果只能是macbook,mac mini,imac,etc..型号系列的硬件组合,以及五码同一),而苹果原生loader是闭源不可抠的或patch的,抠出来也不能转移的,转移了也不能用的,即使能用也是不合法的,即使合法且能用上,它也不是决定发行包最终能安装成功的唯一因素。

所以复杂的第三方efi loader技术完全可以在这里发挥作用,统一承担所有的功能更多作用,比如伪装苹果承认的硬件规范和五码合一负责欺骗硬件的工作及更进一步的引导安装工作(注意这里进一步这三字)。

甚至这种第三方loader发展到通用EFI伪装器的境界,它不仅能伪装苹果机,还可以伪装任何类型的硬件。你可以将这种强化了的loader想象成”虚拟的efi as loader”。因为它有配置文件可以对应任何硬件平台的硬件组合。除了引导和驱动,对于黑苹果需求它甚至可以提供很多专门工具如四叶草的F4提取原生硬件码。

—— 随着技术的发展,黑苹果的loader大致分为:变色龙引导,CLOVER四叶草引导,Ozmosis刷BIOS的方法安装(相对而言它使安装完的PC更象白苹果,不过它本质是clover应用的局限类型。)。截止到发稿日期,主流的安装方式是CLOVER四叶草引导。

以下都是摘录:

CLOVER的主要任务

SMBIOS(DMI)充满了模拟真正的Apple Macintosh的数据 - 运行macOS的要求。序列号是假的,但有效。

ACPI表 - 包含在PC的ROM中 - 通常不能正确编写并且可能包含错误,主要是因为制造商很懒惰:APIC表中的CPU核心数不正确,NMI数据丢失,表FACP中缺少重置寄存器,错误的电源配置文件,缺少SSDT表中的EIST数据,最好甚至不提DSDT表。Clover试图解决这些问题。

OS X试图通过所谓的EFI字符串从引导加载程序获取数据,描述视频,以太网或声卡等附加设备。Clover生成此类数据。

基于BIOS的计算机将在初始启动过程中在传统模式下使用USB,这在将控制权传递给操作系统时会成为问题。Clover将改变USB模式。

macOS使用称为NVRAM的特殊内存进行信息交换,该内存包含在RuntimeServices中(不存在于传统加载程序中)。Clover提供此类信息交换,支持正确的Firewire功能和使用“启动磁盘”首选项面板。此外,NVRAM用于注册iCloud和iMessage服务。

ConsoleControl协议是必需的,在DUET中不存在。

有必要通过DataHub协议填充EFI / Platform中的某些数据,该协议在DUET中不存在,并且不总是存在于UEFI中。此外,设置了极其重要的FSBFrequency值,有时是错误的或完全缺失的。

在工作之前必须正确初始化CPU,但由于主板通用以匹配大量不同的CPU,因此内部表不包含任何正确的CPU数据。Clover执行已安装CPU的完整检测,更正表和CPU本身。一个副作用是工作涡轮模式。

另一个小问题:DUET和EDK2源通用写入以匹配不同的硬件,但硬件依赖性本身依赖于常量。这意味着一个特定平台的编译过程。Clover旨在实现通用性并提供自动平台检测。

一些资源

一些黑苹果常用的软件或者驱动开发者的主页,希望大家能及时更新驱动和软件,驱动需要自己去对应驱动开发者的主页去更新。

RehabMan 维护了很多黑苹果驱动和相关补丁 https://bitbucket.org/RehabMan/

Vit9696 lilu和相关插件、applealc的主要开发或维护者 https://github.com/acidanthera

Clover团队更新 clover的主要发佈渠道 http://sourceforge.net/projects/cloverefiboot/

我们的工作

你可以去百度查找利用clover装机,打包集成clover的镜像,甚至进阶到高级kext制作等课题。

而我们要做的云主机上的黑苹果,除了正确的colover配置和virtio驱动的准备,都是必须的。还有更多工作要做。我们最终要实现一个云端的mac机,就跟本地局域网的mac mini作为第二mac一样,我们最终需要的是为上文《Dsm as deepin mate:将skynas打造成deepin的装机运维mateos》准备的timemachine盘,与本地一个盘/文件夹组同步,类raid作用或群晖的share sync。

这样的混合云方案兼顾本地业务和远程,比局域网的mac mini业务更偏向多一些建站和远程灾备。


(此处不设回复,扫码到微信参与留言,或直接点击到原文)

在阿里云上装黑苹果(1):黑苹果基础

上一篇:捉虫与寻龙:从0打造wordpress插件wp2oc fileshare (1) – 将wp存储后端做进owncloud


下一篇:在群晖docker上构建私有云IDE和devops构建链