天天看點

在阿裡雲上裝黑蘋果(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):黑蘋果基礎