內(nèi)容來源于@什么值得買SMZDM.COM|作者:唐少游
本來從第三篇開始是基于一臺沒有任何參考的電腦,逐步逐步從零開始給大家展示黑蘋果優(yōu)化修復(fù)過程,可惜在第五篇結(jié)束后OC Formula主板損壞了,于是第六篇重新裝了一臺X99電腦,然而X99有非常詳細現(xiàn)成的資料,導(dǎo)致黑蘋果一步到位,大家也學(xué)不到啥,這次盡量延續(xù)第三篇的意圖,后續(xù)會把每個步驟都詳細列出來,這次引導(dǎo)器將基于OpenCore 0.5.6,未來我也不再會回Clover。
主要就是CFG Lock vt-d FastBoot CSM需要關(guān)閉,不過我這塊主板的BIOS沒有CFG-Lock設(shè)置項,我又不想重刷BIOS,所以考慮使用setup_var來修改BIOS不可選項。
經(jīng)過extract得到CFG Lock信息
可以看到默認為Disable,所以省事兒了,不需要做進一步修改。 同理,這個方法還可以對DVMT進行修改。
如何創(chuàng)建Clover引導(dǎo)U盤和配置方法已經(jīng)在篇三中講過了,沒有看過的朋友點下面的鏈接。
黑蘋果從入門到精通 篇三:在Intel電腦上安裝macOS 10.14 Mojave聲明本教程僅用作學(xué)習(xí)或個人使用,嚴禁將黑蘋果安裝作為商業(yè)牟利手段,以出售黑蘋果安裝服務(wù)進行交易。個人非常討厭那些在閑魚、淘寶上出售黑蘋果安裝服務(wù)的商家,原因有很多:一、安裝方法、啟動器、驅(qū)動程序均非淘寶商家開發(fā);二、淘寶商家安裝黑果實際效果很差,僅僅做到能用,而不是好用,各類驅(qū)動和DSDT/SSDT唐少游|贊578評論308收藏4k查看詳情
下圖是我的目錄結(jié)構(gòu),根據(jù)我自己的需求調(diào)整了Kext,config.plist隨手從黑果小兵repo中找的一個,反正都是可以調(diào)的,只要知道每一項的功能和可能造成的效果就行了。
10.15 Catalina對EC的名稱做了規(guī)定,很多主板的EC ACPI名稱為EC0或H_EC,需要將其改為EC(這種就只有一直關(guān)注黑蘋果的人才知道了),從DSDT中可以看出,華擎Z170m ITX對應(yīng)的EC名稱為H_EC。
所以我們要在ACPI熱修復(fù)中加入對EC的補丁
很多人可能會好奇熱修復(fù)中的Find和Patch中一串數(shù)字是怎么來的,這個實際上是字符串改十六進制,例如H_EC就是485F4543,H對應(yīng)48,_對應(yīng)5F即缺失,45對應(yīng)E,依次類推,盡量四個四個一組,即使EC這樣的兩個字符后面也要用__填補,所以EC的查找是EC__,Clover Configuration帶了這個小工具。
如果你不是用編輯器打開會發(fā)現(xiàn)對應(yīng)十六進制變成了一串奇怪字符串,這是Base64加密后的十六進制數(shù),找個工具翻譯過來就行。
除了這個EC補丁外,我還加入了RTC Fix,據(jù)說是很多Z390主板會卡apfs_module_start,但是很多教程傳的云里霧里的,說華碩華擎微星,我特么蠻久沒用Clover了還真不太清楚......
沒啥好說的,反正試試又不會死,我是先加入了但沒有啟用,萬一啟動真卡了這邊兒順手一開就行了。同理我還加了HDAS to HDEF(音頻),HECI to IMEI,GFX0 to IGPU,PEGP to GFX0(這三個都是顯卡有關(guān),第二個是核顯的修復(fù)),這些是根據(jù)這塊板子的DSDT需要做的針對性的修復(fù),但其實現(xiàn)在很多事情Kext都幫你做好了,所以也沒開,如果Kext沒起效再開。
哦對了,ACPI設(shè)置里不要忘了Plugin Type=1,六代以上開啟這個就能啟用CPU原生電源管理了。
在Boot-args中我加入了shiki-id=Mac-7BA5B2D9E42DDD94和shikigva=40,這個本質(zhì)上是仿冒iMacPro1,1實現(xiàn)獨顯硬解碼,因為我賊心不死,雖然6400T核顯在Windows下就感覺變頻怪怪的,但這不是還能用嘛,所以我選了iMac18,3想搞個核顯加速,事實證明我是在想peach。如果你就用獨顯硬解,沒有核顯,就直接選iMacPro1,1的SMBIOS就行啦。
另外作為第一次啟動,-v keepsyms=1 debug=0x100也是不可或缺的,這樣出問題了才有空拍照查資料。
比較詭異的一點是HWP Enable,在我的印象中是要這個開啟+plugin type=1才能完整開啟變頻,但是根據(jù)我后面實測的結(jié)果,開啟這個會導(dǎo)致CPU頻率卡死在2.4Ghz不變,雖然負載和功耗都在變,但總歸很奇怪,關(guān)了就可以正常變頻,這個真的有點讓我吃驚,我猜測啊(真的是猜的),plugin type=1就足夠讓幾個變頻kext正常加載,但是開啟這個會讓macOS去套系統(tǒng)內(nèi)相近的CPU變頻,如果是6700K這種普通的U應(yīng)該沒啥問題,但是6400T這種最好還是關(guān)了這個讓主板控制,(如果我記錯了這里變頻不用開HWP Enable請評論告訴我,但是我真記得是要開的)
設(shè)備設(shè)置這里主要是兩個屬性注入,聲卡和核顯加速,框框左邊是設(shè)備路徑,右邊是屬性注入,我還很有夢想的配置了核顯緩沖幀注入,嘿嘿,事實證明不行。
很多人看到這里估計要發(fā)問了,那怎么才能知道設(shè)備路徑是多少?注入?yún)?shù)是啥?一般來說設(shè)備路徑都是比較固定的,大部分主板的聲卡就掛在pci(0x1f,0x3)下,不用改,核顯也是pci(0x2,0x0)路徑
如果核顯加速就需要一個屬性,注入AAPL,ig-platform-id值0x19120001(這個是HD530的headless id值),然后我們需要兩個兩個一組分成四組,再倒著寫,就變成了01001219 ,具體可以查黑果小兵整理的《黑蘋果必備:Intel核顯platform ID整理及smbios速查表》
如果你是核顯輸出不是獨顯輸出,那請參考黑果小兵的《教程:利用Hackintool打開第8代核顯HDMI/DVI輸出的正確姿勢》,感謝黑果小兵,整理的很好,照著教程做就行了,很簡單。
音頻驅(qū)動其實很簡單,目前都是AppleALC+Lilu驅(qū)動,得益于網(wǎng)友們不斷的貢獻,AppleALC已經(jīng)包含了大部分的聲卡芯片布局,我們只需要一個個試layout-id即可,hackintool可以非常方便的完成這個工作,首先找到音頻部分,嘗試選取一個layout-id
然后在菜單欄中點擊文件-導(dǎo)出-引導(dǎo)文件config
不用擔心會覆蓋你原有的config,實際上他只是填充了對應(yīng)的音頻屬性。具體的layout-id可以查看github上的AppleALC庫中的WIKI或打開AppleALC看實際布局情況。如果說很不幸你的聲卡沒有適配的layout-id,說明需要你自己動手做一個,黑果小兵也做好了具體教程,但是但是!臺式機一般是不需要從頭做的,基本上看后面是3口還是6口輸出都能定下來了,而且很多時候6口輸出的聲卡布局是可以適配3口輸出的,如果你不會看布局,從1試到9一般就行了。
再講講引導(dǎo)界面的設(shè)置,首先是掃描部分,不要使用自動模式,自定義模式中,Entries是必須要的,除非你還裝了Linux,不然Linux也不用勾選,Legacy不要選,不然你會發(fā)現(xiàn)有一堆硬盤出現(xiàn)在引導(dǎo)項中,右邊隱藏卷可以用來隱藏不需要的Volume,例如Preboot和Recovery,除了名稱外還可以通過Volume/Disk UUID來隱藏卷,UUID可以在Clover界面按下F2(好像),preboot.log會保存在misc中(好像),這些隱藏的卷通過F3可以在引導(dǎo)時切換隱藏與否。
內(nèi)核補丁方面也要強調(diào)一下,黑蘋果小白真的太多了,很多人會拿著-v輸出來問我卡這兒了怎么辦,然后上來的圖長這樣(隨便找了張圖,發(fā)現(xiàn)很多人在遠景問連圖不上,只說卡在in memory panic stackshot succeeded后自動重啟,這樣鬼知道什么原因?qū)е碌模?/p>
其實上面的信息都是無用的信息,它只是macOS引導(dǎo)在出錯后整理加載的相關(guān)組件,并打包成log的一種方法,實際上錯誤輸出在這些的上面,所以我們需要勾選PanicNoKextDump!
這樣輸出的結(jié)果就可以看到了,例如下圖所示,這是我在調(diào)試核顯加速時的報錯,Kernel Extension in backtrace后面才是真正的報錯信息,不過這玩意兒輸出的信息和C++編譯的報錯差不多,就算輸出了也不一定能理解究竟是什么原因,例如我們可以知道是X86PlatformShim導(dǎo)致的連鎖錯誤,但是這玩意兒是和變頻有關(guān)的,具體是怎么錯又不清楚,只有我這樣正巧在調(diào)試核顯導(dǎo)致才能明白是核顯變頻出問題了。
另外沒有定制過USB接口的要添加USB Limit Patch,PMheart出品。
Comment: USB port limit patch #1 10.15.xName: com.apple.iokit.IOUSBHostFamilyFind: 83FB0F0FReplace: 83FB3F0FComment: USB Port limit patch #2 10.15.xName: com.apple.driver.usb.AppleUSBXHCIFind: 83F90F0FReplace: 83F93F0F
至此配置結(jié)束,剩下就是不斷的調(diào)試了。
首先肯定是一次點亮進系統(tǒng)了,不過后面完善的時候出現(xiàn)了一些問題,把修復(fù)的過程簡單說一下。
這個前面就已經(jīng)提到了,在我的印象中六代以上CPU變頻是通過PluginType=1和HWPEnable來實現(xiàn)的,但是在我的測試中發(fā)現(xiàn)CPU頻率鎖死在2.4Ghz,功耗和負載正常,一開始我以為是SMBIOS選取的問題,從iMac18,3切換到了iMac17,1,結(jié)果發(fā)現(xiàn)沒有區(qū)別,關(guān)閉了HWPEnable后成功變頻,原因不詳。
對于AMD免驅(qū)顯卡,加入WhateverGreen即可,硬解需要iMac Pro或者使用仿冒參數(shù)。
往Kext文件夾扔驅(qū)動就行了,看往期文章,但需要注意的是現(xiàn)在藍牙驅(qū)動需要BrcmBluetoothInjector.kext/BrcmFirmwareData.kext/BrcmPatchRAM3.kext三者搭配,篇五驅(qū)動方法過時了。
另開一篇文章吧,這里不想寫了,我被催的最多的就是USB定制,馬上回頭趕出來,真心超級簡單,為什么這么多人不會。不要迷信hackintool,它對USB Port的識別可能會出錯,最關(guān)鍵的還是要靠IORegistryExplorer。
這個是個比較復(fù)雜的問題,牽扯到方方面面,但很多時候和USB有關(guān),例如典型的睡眠秒醒,一般就是USB有Bridge、Hub或者藍牙沒有內(nèi)建。我這次碰到的比較奇葩,可以正常睡眠并喚醒,但是喚醒后系統(tǒng)卡飛,而且鍵盤輸入有問題,查閱資料得知一般是需要添加VoodooTSCSync.kext修復(fù),這個驅(qū)動很老了,上次我用它還是在第一次玩X99的時候(2016年吧),RehabMan出的最新版不需要修改核心數(shù),所有機器都可以用。
一個比較實用的小技巧,很多人喜歡用藍牙鍵盤,畢竟沒有凌亂的線材,希望一把藍牙鍵盤能無縫在Windows、macOS甚至Clover BIOS中都能使用,但是很可惜,Clover和BIOS使用需要蘋果原裝卡,而且還要主板固件支持,退而求其次,雙系統(tǒng)使用藍牙鍵盤如何實現(xiàn)?
首先需要把這把藍牙鍵盤在Windows下進行配對,例如我手頭K380支持三臺設(shè)備,使用1設(shè)備連接到Windows,接下來重啟到MacOS下,同樣使用1設(shè)備配對,但是兩個系統(tǒng)配對對碼方式是不一樣的,所以產(chǎn)生的校檢碼也不同,我們要做的就是把Windows改成和macOS一樣。
下載bt.py(后面會給下載鏈接),這是一個翻譯腳本,在Terminal中拖進去執(zhí)行,會在桌面生成一個btfix文件夾,里面有BTFix.reg,這個就是我們需要添加到Windows的注冊表中的文件,拷進U盤,重啟進入Windows,但是這塊對應(yīng)的注冊表我們是無法修改的,所以需要pstools打開注冊表(這個也在后面的網(wǎng)盤里面),在cmd中打開pstool所在文件夾,輸入psexec -s -i C:Windowsregedit.exe打開注冊表,然后同樣用編輯打開BTFix.reg,將對應(yīng)的注冊表區(qū)域照著BTFix.reg修改好,重啟就完成了。
2018-07-04,隨著時鐘的滴答,在10:30:33這一秒,騰訊第一個百萬規(guī)模管控系統(tǒng)-Tencent System Controller(TSC)誕生了,這絕對是一個劃時代的開端,一個新紀元的開始!
海量服務(wù)器管控系統(tǒng),一般人心中是這樣理解的,規(guī)模至多幾萬臺,全部以Master/Slave模式并行部署,所有node上面跑著一樣的進程,進程之間有著復(fù)雜的控制和協(xié)調(diào)機制,支持node的有限伸縮(scalable)。
但這一次,我們真的要重新定義海量服務(wù)器管控系統(tǒng)的理念,各位客官請聽我娓娓道來。
一、多層立體分布式
普通的分布式系統(tǒng)如hadoop皆基于C/S兩層架構(gòu),并且總是要求網(wǎng)絡(luò)扁平,在100萬集群節(jié)點數(shù)、跨IDC等復(fù)雜環(huán)境下難以勝任。
當服務(wù)器數(shù)規(guī)模達到100萬時,顯然不能用常規(guī)的master-worker兩層設(shè)計思想,必須使用master-zone_master-workor-worker_descendant[1-N代]的多層級管理設(shè)計,還需要融合worker的級聯(lián)管理能力。
使用這種類似“中央-省-縣-鎮(zhèn)-村”行政區(qū)域的管理模式帶來一系列好處,zone_master大多數(shù)事務(wù)是自治的,自行管理和決策,只是很重要的信息才上報給master;反之master也只給zone_master下達任務(wù)描述等很關(guān)鍵的信息,任務(wù)執(zhí)行后,各zone_master只需要向master報告總體的任務(wù)執(zhí)行情況即可,這樣設(shè)計可以大幅減少網(wǎng)絡(luò)通信傳輸,提升了整個系統(tǒng)控制能力。
二、百萬服務(wù)器管控系統(tǒng)架構(gòu)
對于普通C/S集群,在tcp server端我們用普通的NIO Server(java)、epoll/IOCP server(C/C++)即可輕松勝任。
但是對于百萬node并且都是活動連接的集群,上述架構(gòu)明顯不能勝任。因此我們必須采取分治法+協(xié)程的策略對百萬級別的連接進行統(tǒng)一管理和調(diào)度。
1. Zone-Master反向連接
TSC系統(tǒng)不同于一般集群系統(tǒng),是zone-master反向連接worker的,這樣做的好處如下:
(a) .響應(yīng)及時。對于新任務(wù)可以直接發(fā)起一個新連接進行處理,而不需要在已有的連接中反復(fù)協(xié)議交互。
(b) .worker部署方便。worker是被動接受連接,不需要配置server ip,所有worker安裝目錄和配置都是一樣的。
(c) .穩(wěn)定性高。系統(tǒng)連接只處理標準的心跳信息及全局狀態(tài)維護,用戶任務(wù)都是在實時發(fā)起的新連接中處理,天然的信道分離使得程序邏輯處理簡單,系統(tǒng)穩(wěn)定性高。
2. 多進程+epoll協(xié)程模式
分治法是處理復(fù)雜問題最樸素的哲學(xué)思想,對于一個100萬節(jié)點的集群,為了系統(tǒng)能高速響應(yīng),我們采取多機并行+每機并發(fā)多進程 +每進程并發(fā)協(xié)程的三重維度并行模式來處理,每個任務(wù)都可以被拆分在多個zone-master上跑,每個zone-master都采用多進程+epoll協(xié)程的模式對海量連接進行管理。
這種設(shè)計有如下優(yōu)點:
(a) .穩(wěn)定性高。在zone master上每個任務(wù)都是一個新的處理進程,進程里再使用epoll+協(xié)程進行多個連接的狀態(tài)管理。一個任務(wù)進程的異常掛掉并不會影響其他任務(wù)進程,更不會影響整個系統(tǒng)的集群管理。
(b).高并發(fā)快速連接能力。由于任務(wù)被分而治之處理,并且頂層master會根據(jù)地域的親和值將不同的連接分發(fā)到最近的zone-master,然后zone-master再在進程內(nèi)使用epoll+協(xié)程進行并發(fā)連接,使得系統(tǒng)最終性能異常高。經(jīng)實測,如果4萬個worker狀態(tài)都很好,對4萬個worker全部執(zhí)行一個集群任務(wù),可在10秒內(nèi)完成,這對傳統(tǒng)C/S集群來說簡直是逆天的節(jié)奏。
(c).可伸縮性強。當zone-master處理能力不足時,隨時可以擴容機器,并能將其他的zone-master所管理的節(jié)點遷移到新的zone-master,以減輕原來zone-master的負擔。
3. Worker級聯(lián)管理
每個worker機器上都有proxy和worker兩個進程,proxy只負責安全校驗以及轉(zhuǎn)發(fā)數(shù)據(jù)包,可以轉(zhuǎn)發(fā)給自己的worker進程,也可以轉(zhuǎn)發(fā)給別的worker進程,并支持無限層轉(zhuǎn)發(fā)。
明顯地,該架構(gòu)使得系統(tǒng)能輕易地支持類似樹形的復(fù)雜網(wǎng)絡(luò),并能穿透各種安全屏障及橋頭堡機器。
TSC支持任意網(wǎng)絡(luò)拓撲結(jié)構(gòu)的組網(wǎng),包括但不限于:
(a) .內(nèi)外網(wǎng)混合組網(wǎng)
公司早期(2010-2012)內(nèi)網(wǎng)跨城專線帶寬很小且非常昂貴,tsc支持公網(wǎng)連接南北城市組網(wǎng),傳輸海量文件為公司節(jié)省了大量成本。
(b) .自營/合作機房混合組網(wǎng)
SNG有二十多萬的合作機房機器,由于安全需要,合作機房和自營機房在網(wǎng)絡(luò)上是隔離的,但現(xiàn)實中SNG存在大量的跨“自營機房-合作機房”文件及腳本傳輸執(zhí)行的需求,tsc很好地滿足了SNG的該類管控需求。
(c) .普通區(qū)/devnet(開發(fā)網(wǎng))混合組網(wǎng)
由于公司的安全策略,默認情況下devnet是隔離的。但對于發(fā)布系統(tǒng)、編譯系統(tǒng)、持續(xù)集成系統(tǒng)來說,對devnet的自動化操作需求非常迫切,tsc很好地滿足了該類平臺的需求。
(d) .VPC多LAN重復(fù)組網(wǎng)
伴隨著公司業(yè)務(wù)高速發(fā)展,某些BG需要和第三方公司合作,需要對第三方公司的機器進行管理,比如發(fā)布、監(jiān)控等。第三方公司的機器位于自己獨立的內(nèi)網(wǎng)中,IP和公司的運營大網(wǎng)IP有重復(fù)和交疊。為了支持這種應(yīng)用場景,TSC除了IP尋址外,還增加了基于uid(唯一標識)尋址的功能,這就可以在原有騰訊運營的大網(wǎng)集群基礎(chǔ)上輕松橋接公司外的VPC私有網(wǎng)絡(luò)。
(e) .基于上述4種結(jié)構(gòu)的聯(lián)合組網(wǎng)
基于各種歷史原因和現(xiàn)實需求,目前tsc的組網(wǎng)模式實際上為上述4種模式的混合體。用戶下發(fā)tsc任務(wù)時,不用關(guān)心網(wǎng)絡(luò)細節(jié),只需要輸入ip或者uid即可,中間的路徑計算及路由過程完全由系統(tǒng)自動現(xiàn)實,因此用戶體驗相當好。
4. 海量拓撲管理
大型互聯(lián)網(wǎng)企業(yè)IDC管理網(wǎng)絡(luò)(全局視點)是一個超級復(fù)雜、內(nèi)外網(wǎng)混合、多種安全策略應(yīng)用、需多次穿透代理等的立體式網(wǎng)狀網(wǎng)絡(luò)。
IP路由技術(shù)不能解決本系統(tǒng)所面臨的困境,我們必須在軟件應(yīng)用層面想辦法解決這個問題。
設(shè)計上可以使用DB持久化存儲網(wǎng)絡(luò)拓撲關(guān)系,并使用讀cache緩存網(wǎng)絡(luò)拓撲關(guān)系提高性能。同時采用預(yù)先申明路由策略與自動路由信息探測相結(jié)合的方法管理網(wǎng)絡(luò)拓撲結(jié)構(gòu)。Master負載均衡時以預(yù)先申明路由信息為主,同時考慮實時路由信息權(quán)值進行下發(fā)任務(wù)。
這種動靜結(jié)合的方式能很好地解決超復(fù)雜的樹形網(wǎng)絡(luò)集群的管理及路由分發(fā)問題,同時又使得系統(tǒng)拓撲處于絕對的可控狀態(tài),不會引發(fā)泛洪、雪崩等非中心化集群系統(tǒng)可能存在的風(fēng)險。
三、多維度安全性
TSC安全架構(gòu)圖
1. 強鑒權(quán)
Worker上的任何操作必須經(jīng)過本地OS的權(quán)限系統(tǒng)驗證,權(quán)限控制與ssh類似(特殊的固定無危險的豁免腳本除外)。Linux默認會開啟pam增強鑒權(quán),Windows使用LogOnUser API鑒權(quán)。系統(tǒng)還支持插件式自定義鑒權(quán),譬如ssl公鑰鑒權(quán)。
2. 全通道ssl加密
Master、Zone-master、Workor、Worker_descendant所有節(jié)點通信均采用ssl加密,故TSC系統(tǒng)在通過公網(wǎng)轉(zhuǎn)發(fā)數(shù)據(jù)包時沒有安全風(fēng)險,在內(nèi)網(wǎng)中也沒有被監(jiān)聽和篡改的風(fēng)險。
3. 強化證書身份校驗
為了防止節(jié)點被偽造,系統(tǒng)中的所有節(jié)點相互通信都會檢查對端證書。證書不同于常規(guī)僅綁定url的證書,而是使用強化的證書域驗證,證書域(Common Name)分為 系統(tǒng)、角色、IP,如tsys_master_172.16.5.39,此證書僅能用于tsys業(yè)務(wù)master模塊而且IP必須為172.16.5.39,這種強化證書身份檢驗使得黑客根本無法偽造搭建系統(tǒng)節(jié)點。
4. 多重手段保證安全
除了整個外層通道的SSL加密,我們還對密碼等敏感字段進行了高強度的二次加密,并且融合了PAM/LDAP用戶驗證、協(xié)議用戶認證、sha512腳本驗證等多重安全手段保障系統(tǒng)安全。
TSC還支持加密密碼零保存、協(xié)議用戶驗證、服務(wù)器鑒定、防重放攻擊、全程審計等諸多安全特性。
四、無限伸縮能力
TSC的頂層調(diào)度層(master)采用set概念設(shè)計,每個set內(nèi)都有獨立的執(zhí)行單元,部署在獨立的物理機器上;多個set之間共享路由信息,在任務(wù)的分發(fā)、調(diào)度上,各個set的行為結(jié)果都是一致的,故可以看成是分布式系統(tǒng)的最終一致性。
執(zhí)行層會同時連接多個set,接受任意set的任務(wù)指令,并將指令最終送達Worker或者Worker_descendant執(zhí)行。
當系統(tǒng)處理能力遇到瓶頸時,直接擴容一個新的set即可,由于全局路由信息量較小,而且是1:N模式同步,因此系統(tǒng)理論上是支持無限伸縮的。