補(bǔ)丁與 vmx 配置)
簡介unlocker208 是面向需要在 VMware Workstation 上運(yùn)行 macOS 的開發(fā)者與測(cè)試人員的必備補(bǔ)丁用于解除虛擬機(jī)對(duì)蘋果系統(tǒng)的限制使新建虛擬機(jī)時(shí)能選中 Apple 機(jī)型并正常引導(dǎo)啟動(dòng)。壓縮包共 18 個(gè)文件、約 9.61MB由 8 個(gè) sh 腳本、3 個(gè) exe 程序、3 個(gè) cmd 批處理、3 個(gè) py 腳本和 1 份 readme 說明構(gòu)成sh 與 cmd 分別對(duì)應(yīng) Linux、macOS 與 Windows 下的安裝、卸載和工具更新exe 為封裝好的可執(zhí)行文件py 腳本承擔(dān)補(bǔ)丁與客戶機(jī)工具下載的核心邏輯readme 則記錄了適用產(chǎn)品版本、依賴條件與已知限制。目前已有 2474 人學(xué)習(xí)。讀者可從中獲得覆蓋 Workstation、Player、Fusion 與 ESXi 的多平臺(tái)打補(bǔ)丁與還原方案以及新硬件版本虛擬機(jī)啟動(dòng)異常時(shí)的參數(shù)調(diào)整與排錯(cuò)思路便于快速搭建 macOS 實(shí)驗(yàn)環(huán)境。1. 一臺(tái)能跑 macOS 10.12.6 的虛擬機(jī)卡在了補(bǔ)丁這一步去年幫某實(shí)驗(yàn)室整理一套跨平臺(tái)測(cè)試環(huán)境需要在一臺(tái) Windows 主機(jī)上用 VMware 起一個(gè) macOS 10.12.6 虛擬機(jī)跑幾個(gè)只有舊系統(tǒng)才能驗(yàn)證的構(gòu)建腳本。VMware 裝好、鏡像也備齊了新建虛擬機(jī)時(shí)客戶機(jī)操作系統(tǒng)那一欄從頭翻到尾就是沒有 Apple Mac OS X。后來才想起 unlocker208 這個(gè)必備補(bǔ)丁——它做的事不復(fù)雜把 vmwarebase.dllWindows或 vmware-vmxLinux里被屏蔽的蘋果客戶機(jī)類型打回來讓向?qū)е匦鲁霈F(xiàn) Apple Mac OS X 10.12 的選項(xiàng)。聽起來像一步到位的事實(shí)際翻車點(diǎn)不少雙擊腳本閃退、打完補(bǔ)丁向?qū)Ю镆琅f沒有蘋果選項(xiàng)、虛擬機(jī)開機(jī)走到白蘋果就黑屏。這套環(huán)境在跨平臺(tái)開發(fā)和老系統(tǒng)兼容測(cè)試?yán)锖艹R娤旅姘雌脚_(tái)把安裝、配置和排查一步步寫清楚。2. 版本對(duì)齊unlocker208 和 VMware 11/12 的對(duì)應(yīng)關(guān)系unlocker 這個(gè)工具的版本號(hào)不是隨便起的每一個(gè) 2.0.x 都綁死了它能處理的 VMware 大版本。它做的事情是往 VMware 的二進(jìn)制文件里改字節(jié)、補(bǔ)字符串把客戶機(jī)列表里原本被關(guān)掉的 Apple Mac OS X 類型重新打開。VMware 每次大版本升級(jí)vmwarebase.dll 和 vmware-vmx 的內(nèi)部結(jié)構(gòu)、字符串偏移都會(huì)變腳本拿著舊版本的偏移去改新版本的文件輕則改完沒效果重則把 VMware 主程序改到起不來。所以裝之前先做一件事把主機(jī)上 VMware 的版本號(hào)確認(rèn)下來再對(duì)照表挑 unlocker 的版本。手上這份 unlocker208配的就是 Workstation 11/12 和 Player 7/12覆蓋的 macOS 客戶機(jī)正好落到 10.11 和 10.12。10.12.6 是 Sierra 的最后一個(gè)維護(hù)版本VMware 12.5 才開始在官方支持列表里正式寫上 Sierra兩者是配套的這也是為什么很多老教程里寫 macOS 10.12.6 時(shí)都點(diǎn)名 unlocker208。2.1 版本對(duì)照表別拿 2.0.8 去撬 Workstation 15unlocker 版本對(duì)應(yīng) Workstation對(duì)應(yīng) Player覆蓋的 macOS 客戶機(jī)2.0.711710.10 / 10.112.0.811 / 127 / 1210.11 / 10.122.0.9141410.13 及以后這張表里最容易踩的坑是「版本越新越好」的直覺。有人主機(jī)上是 Workstation 15翻出一份 unlocker208 就往上懟腳本跑完提示成功重啟 VMware 卻直接報(bào)初始化失敗因?yàn)檠a(bǔ)丁改到了錯(cuò)誤的代碼段。反過來Workstation 12 上用了更高版本的 unlocker同樣會(huì)因?yàn)檎也坏侥繕?biāo)偏移而中途退出。unlocker 的版本要跟著 VMware 走不是跟著 macOS 走。還有一個(gè)細(xì)節(jié)Workstation 和 Player 共用同一套內(nèi)核組件vmware-vmx所以同一個(gè) unlocker 版本能同時(shí)覆蓋兩者但前提是它們的大版本號(hào)落在表里。如果主機(jī)上裝的是 Workstation 12.5.x 這類小版本更新2.0.8 一般都能正常工作因?yàn)樾“姹局g二進(jìn)制布局變化不大跨大版本就不要再試了。2.2 解壓后目錄里有什么每個(gè)文件什么時(shí)候用解壓 unlocker208 之后目錄結(jié)構(gòu)大致是這樣不同人打包方式略有差異但關(guān)鍵文件名基本固定# unlocker208 解壓后的典型目錄結(jié)構(gòu) unlocker208/ ├── windows/ │ ├── win-install.cmd # Windows 打補(bǔ)丁入口 │ ├── win-uninstall.cmd # Windows 還原入口 │ ├── win-update-tools.cmd # 把新版 darwin 工具推進(jìn)虛擬機(jī) │ └── unlocker.exe # 真正改寫二進(jìn)制字節(jié)的程序 ├── linux/ │ ├── lnx-install.sh # Linux 打補(bǔ)丁入口 │ ├── lnx-uninstall.sh # Linux 還原入口 │ └── lnx-update-tools.sh └── tools/ ├── darwin.iso # macOS 10.12 及以后用的 VMware Tools └── darwinPre15.iso # 10.11 及以前用的舊版win-install.cmd和lnx-install.sh是入口腳本本身不直接改字節(jié)而是先停服務(wù)、備份原文件、再調(diào)用unlocker.exe做二進(jìn)制修改。tools目錄里的兩個(gè) iso 是裝完系統(tǒng)之后才用的負(fù)責(zé)分辨率自適應(yīng)、剪貼板共享和鼠標(biāo)不丟幀跟打補(bǔ)丁本身沒關(guān)系但裝 macOS 的整個(gè)流程里繞不開它。10.12.6 對(duì)應(yīng)的是darwin.isodarwinPre15.iso留給 10.11 及更早的系統(tǒng)別拿錯(cuò)。2.3 動(dòng)手前的三項(xiàng)檢查第一項(xiàng)VMware 必須完全退出。光關(guān)主窗口不夠后臺(tái)的vmware-vmx.exeWindows或vmware-vmxLinux進(jìn)程、授權(quán)服務(wù)、NAT 服務(wù)都可能還掛著它們會(huì)鎖住vmwarebase.dll和vmware-vmx腳本寫不進(jìn)去就會(huì)中途失敗。第二項(xiàng)確認(rèn) VMware 的實(shí)際安裝路徑。Windows 默認(rèn)在C:\Program Files (x86)\VMware\VMware WorkstationLinux 通過 bundle 安裝默認(rèn)在/usr/lib/vmware。如果當(dāng)初裝到了 D 盤或者自定義目錄后面所有命令里的路徑都要跟著換。# Linux確認(rèn)安裝目錄和核心二進(jìn)制是否存在 ls -ld /usr/lib/vmware ls -l /usr/lib/vmware/bin/vmware-vmx:: Windows確認(rèn)主程序位置路徑里有空格引號(hào)不能省 dir C:\Program Files (x86)\VMware\VMware Workstation\vmwarebase.dll第三項(xiàng)動(dòng)手之前先把整個(gè) VMware 安裝目錄冷備一份。這比事后逐個(gè)找.bak還原快得多尤其當(dāng)補(bǔ)丁改壞、VMware 起不來的時(shí)候整目錄換回去是最省事的后悔藥。# Linux整目錄冷備日期后綴方便回滾時(shí)挑版本 sudo cp -a /usr/lib/vmware /usr/lib/vmware.bak.$(date %Y%m%d):: Windows整目錄復(fù)制一份做冷備 xcopy C:\Program Files (x86)\VMware\VMware Workstation D:\backup\vmware-ws /E /I /H/E表示連空目錄一起復(fù)制/I表示目標(biāo)不存在時(shí)按目錄處理/H表示連隱藏文件一起帶上。備份完之后再開始打補(bǔ)丁出任何問題都有退路。3. 兩個(gè)平臺(tái)的打補(bǔ)丁流程Windows 的 win-install.cmd 與 Linux 的 lnx-install.sh打補(bǔ)丁本身只有一兩分鐘真正決定成敗的是執(zhí)行前的準(zhǔn)備和執(zhí)行時(shí)的姿勢(shì)。Windows 上最常見的翻車是「雙擊」Linux 上最常見的翻車是「路徑參數(shù)沒傳對(duì)」。兩個(gè)平臺(tái)的處理邏輯一樣停服務(wù)、備份、改寫、重啟差別只在腳本和路徑寫法。3.1 Windows右鍵管理員權(quán)限是第一步先說為什么不能雙擊。Windows 下雙擊一個(gè).cmd文件當(dāng)前工作目錄會(huì)被設(shè)成C:\Windows\System32腳本里所有相對(duì)路徑都會(huì)失效unlocker.exe找不到窗口一閃就關(guān)。正確做法是用管理員身份打開命令提示符先cd到腳本所在目錄再執(zhí)行。:: 1. 用管理員身份打開命令提示符先切到 unlocker 解壓后的 windows 目錄 cd /d D:\tools\unlocker208\windows :: 2. 停掉 VMware 的后臺(tái)服務(wù)否則 vmwarebase.dll 會(huì)被占用 net stop VMware Authorization Service net stop VMware NAT Service net stop VMware DHCP Service :: 3. 執(zhí)行安裝腳本腳本內(nèi)部會(huì)調(diào)用 unlocker.exe 改寫二進(jìn)制 win-install.cmdcd /d里的/d是跨盤符切換用的從 C 盤切到 D 盤必須加否則cd只會(huì)在當(dāng)前盤符里找目錄。三條net stop里VMware Authorization Service最關(guān)鍵它持有授權(quán)庫文件NAT 和 DHCP 服務(wù)停掉是為了讓vmware-vmx不被占用。腳本執(zhí)行后正常會(huì)依次輸出備份、打補(bǔ)丁、完成三類信息如果中途只看到備份沒有打補(bǔ)丁多半是unlocker.exe沒有被正確調(diào)用。執(zhí)行完之后用一條命令確認(rèn)補(bǔ)丁是否落盤:: 查看備份是否生成同名 .bak 文件就是補(bǔ)丁前的原件 dir C:\Program Files (x86)\VMware\VMware Workstation\vmwarebase.dll*輸出里應(yīng)該同時(shí)出現(xiàn)vmwarebase.dll和vmwarebase.dll.bak后者的修改時(shí)間就是補(bǔ)丁執(zhí)行的時(shí)間。如果只有.dll沒有.bak說明腳本在備份階段就失敗了這時(shí)候不要急著重跑先去看腳本窗口里的報(bào)錯(cuò)。萬一補(bǔ)丁打完 VMware 起不來還原也很直接:: 方式一跑自帶的還原腳本 cd /d D:\tools\unlocker208\windows win-uninstall.cmd :: 方式二手動(dòng)把 .bak 改回原名VMware 完全退出后操作 ren C:\Program Files (x86)\VMware\VMware Workstation\vmwarebase.dll.bak vmwarebase.dll ren C:\Program Files (x86)\VMware\VMware Workstation\vmware-vmx.exe.bak vmware-vmx.exe手動(dòng)還原要在 VMware 完全退出、服務(wù)全停的狀態(tài)下做否則文件被占用ren會(huì)報(bào)拒絕訪問。還原完之后再按 3.3 的方式重啟服務(wù)。3.2 Linux路徑參數(shù)不能省Linux 上的腳本是lnx-install.sh它需要知道 VMware 裝在哪兒。有的打包版本會(huì)要求把安裝根目錄作為第一個(gè)參數(shù)傳進(jìn)去不傳就默認(rèn)當(dāng)前目錄結(jié)果當(dāng)然找不到vmware-vmx。執(zhí)行前先看腳本開頭幾行的用法說明再按實(shí)際路徑傳參。# 1. 確認(rèn) VMware 裝在 /usr/lib/vmware ls -ld /usr/lib/vmware ls -l /usr/lib/vmware/bin/vmware-vmx # 2. 停止 VMware 相關(guān)服務(wù)服務(wù)不存在時(shí)也不中斷 sudo systemctl stop vmware.service 2/dev/null || true sudo systemctl stop vmware-workstation-server.service 2/dev/null || true # 3. 進(jìn)入 unlocker 的 linux 目錄執(zhí)行參數(shù)是 VMware 安裝根目錄 cd /opt/tools/unlocker208/linux sudo ./lnx-install.sh /usr/lib/vmware2/dev/null || true的作用是服務(wù)不存在時(shí)把錯(cuò)誤吞掉、命令繼續(xù)往下走避免因?yàn)槟硞€(gè)服務(wù)名對(duì)不上就中斷整段腳本。sudo不能省/usr/lib/vmware歸 root 所有普通用戶寫不進(jìn)去腳本會(huì)在備份階段就報(bào)權(quán)限錯(cuò)誤。如果安裝時(shí)用的是發(fā)行版?zhèn)}庫里的 VMware 包路徑可能不是/usr/lib/vmware用which vmware或ls /usr/bin/vmware反查實(shí)際位置。執(zhí)行完之后同樣確認(rèn).bak是否生成# 查看 vmware-vmx 和它的備份確認(rèn)補(bǔ)丁寫過 ls -l /usr/lib/vmware/bin/vmware-vmx*Linux 下要盯的還有一個(gè)隱藏問題腳本內(nèi)部靠python命令調(diào)用二進(jìn)制補(bǔ)丁邏輯新一些的發(fā)行版默認(rèn)只有python3沒有python這個(gè)別名腳本跑到一半就會(huì)停住。這個(gè)放到第 5 章細(xì)說先記住如果輸出里出現(xiàn)python: command not found就是它。還原同樣走自帶腳本# 還原把補(bǔ)丁前的二進(jìn)制換回來 cd /opt/tools/unlocker208/linux sudo ./lnx-uninstall.sh /usr/lib/vmware3.3 打完補(bǔ)丁之后的收尾重啟服務(wù)和主程序補(bǔ)丁寫進(jìn)磁盤不代表 VMware 會(huì)用上它。已經(jīng)在內(nèi)存里跑著的進(jìn)程仍然持有舊二進(jìn)制的句柄必須先把 VMware 徹底退干凈再重新啟動(dòng)新建虛擬機(jī)向?qū)Ю锊艜?huì)出現(xiàn) Apple 選項(xiàng)。:: Windows把之前停掉的服務(wù)重新拉起來 net start VMware Authorization Service net start VMware NAT Service net start VMware DHCP Service# Linux服務(wù)重新啟動(dòng)然后重新打開 VMware sudo systemctl start vmware.service 2/dev/null || true順序上建議先起服務(wù)再開主程序尤其是 Windows 下授權(quán)服務(wù)沒起來的時(shí)候VMware 會(huì)提示許可證問題。如果圖省事直接把機(jī)器重啟一遍也行效果一樣只是慢一點(diǎn)。重啟之后先別急著建虛擬機(jī)打開新建向?qū)Х幌驴蛻魴C(jī)操作系統(tǒng)列表看到Apple Mac OS X并且版本下拉里有10.12說明補(bǔ)丁這一步已經(jīng)成了剩下的就是 vmx 參數(shù)的事。4. vmx 參數(shù)配置讓 macOS 10.12.6 認(rèn)下這塊虛擬硬盤打補(bǔ)丁解決的是「VMware 愿不愿意讓你選 Mac」vmx 參數(shù)解決的是「macOS 愿不愿意在這臺(tái)虛擬機(jī)上開機(jī)」。這兩件事經(jīng)常被混為一談結(jié)果就是補(bǔ)丁打成功了、向?qū)Ю镆灿?Apple 選項(xiàng)了虛擬機(jī)一開機(jī)走到白蘋果進(jìn)度條一半就黑屏重啟或者直接掉出一個(gè)禁止符號(hào)。4.1 為什么只打補(bǔ)丁不夠VMware 用 SMC系統(tǒng)管理控制器模擬蘋果主板上的那顆芯片順便把 board-id、機(jī)型標(biāo)識(shí)這些信息一并虛擬出來。macOS 在啟動(dòng)早期會(huì)檢查 SMC 版本和 board-id 是否匹配不匹配就直接選擇關(guān)機(jī)。unlocker 只是把客戶機(jī)類型解鎖了并沒有改動(dòng)這些虛擬硬件的默認(rèn)值所以第一次開機(jī)大概率會(huì)卡在校驗(yàn)這一步。這也是為什么網(wǎng)上大量教程在講完 unlocker 之后都會(huì)補(bǔ)一句「記得在 vmx 里加 smc.version 0」。10.12.6 這個(gè)版本對(duì)這一行尤其敏感缺了它白蘋果進(jìn)度條基本走不過三分之一。4.2 關(guān)機(jī)后往 vmx 里補(bǔ)三行vmx 文件在虛擬機(jī)目錄里文件名和虛擬機(jī)同名擴(kuò)展名是.vmx。編輯之前必須先把虛擬機(jī)關(guān)機(jī)運(yùn)行狀態(tài)下改這個(gè)文件VMware 退出時(shí)會(huì)把內(nèi)存里的配置寫回去手改的內(nèi)容會(huì)被覆蓋。# 追加到虛擬機(jī)配置文件 macOS10126.vmx 末尾編輯前先關(guān)機(jī) smc.version 0 board-id.reflectHost TRUE hw.model iMac17,1smc.version 0是繞開 SMC 版本校驗(yàn)的關(guān)鍵行把版本號(hào)偽造成一個(gè) macOS 認(rèn)得的舊值讓啟動(dòng)流程能繼續(xù)往下走。board-id.reflectHost TRUE讓虛擬機(jī)把主機(jī)的 board-id 映射過去白蘋果進(jìn)度條走完之后不容易掉到禁止符。hw.model指定虛擬出來的 Mac 機(jī)型iMac17,1對(duì)應(yīng) 2015 款的 27 寸機(jī)型能正常跑 Sierra也能讓后續(xù)裝 VMware Tools 時(shí)的分辨率適配更順。三行都加上之后保存再開機(jī)。如果還是掉禁止符把hw.model換成MacPro6,1再試一次不同主機(jī) BIOS 下機(jī)型識(shí)別的表現(xiàn)會(huì)有差異這是玄學(xué)部分多試一兩個(gè)值通常能過。4.3 硬件面板里要調(diào)的五個(gè)選項(xiàng)vmx 參數(shù)之外虛擬機(jī)的硬件配置也有幾個(gè)默認(rèn)值不適合 macOS。新建完虛擬機(jī)、還沒第一次開機(jī)之前進(jìn)設(shè)置面板按下面的建議調(diào)一遍選項(xiàng)建議值原因硬盤類型SATAmacOS 安裝器不認(rèn)默認(rèn)的 SCSI 控制器會(huì)找不到磁盤光驅(qū)類型SATA安裝介質(zhì)要從 SATA 通道識(shí)別SCSI 下經(jīng)常讀不到USB 控制器xHCIEHCI 下鍵鼠容易漂移或完全沒反應(yīng)顯存128 MB安裝界面和后續(xù)分辨率都靠它低于 64 MB 會(huì)花屏內(nèi)存4 GB 起低于 2 GB 安裝器大概率卡在語言選擇界面安裝介質(zhì)這邊常見做法是拿到官方的InstallESD.dmg之后轉(zhuǎn)成虛擬機(jī)可用的磁盤格式或者做成啟動(dòng)盤再掛給虛擬機(jī)。這一步和 unlocker 無關(guān)但順序上要排在補(bǔ)丁和 vmx 參數(shù)之后否則裝到一半發(fā)現(xiàn)客戶機(jī)類型不對(duì)前面白忙。5. 常見問題排查補(bǔ)丁打了還是沒蘋果選項(xiàng)、開機(jī)掉禁止符5.1 補(bǔ)丁跑完新建向?qū)Ю餂]有 Apple Mac OS X現(xiàn)象win-install.cmd或lnx-install.sh執(zhí)行完沒有報(bào)錯(cuò)重啟 VMware 之后新建虛擬機(jī)客戶機(jī)列表里仍然只有 Windows、Linux、其他這幾項(xiàng)。原因最常見的兩種情況一是 VMware 在打補(bǔ)丁時(shí)沒有完全退出vmwarebase.dll被后臺(tái)進(jìn)程占用腳本跳過了改寫步驟但沒報(bào)錯(cuò)二是補(bǔ)丁版本和 VMware 版本對(duì)不上腳本找到了文件但偏移量不對(duì)改了個(gè)寂寞。解決先確認(rèn)進(jìn)程。Windows 下打開任務(wù)管理器把所有帶 VMware 字樣的進(jìn)程結(jié)束掉包括vmware.exe、vmware-vmx.exe、vmware-authd.exeLinux 下用ps -ef | grep vmware查一遍。然后重新以管理員/root 身份跑一次安裝腳本這次盯著輸出看有沒有patching之類的字樣。如果輸出里明確寫了 backup 但沒寫 patch回去核對(duì)第 2 章的版本對(duì)照表。5.2 Windows 上雙擊腳本一閃就沒現(xiàn)象雙擊win-install.cmd黑窗口閃一下就關(guān)閉VMware 安裝目錄里沒有任何.bak文件生成。原因雙擊時(shí)當(dāng)前工作目錄被設(shè)成C:\Windows\System32腳本里用相對(duì)路徑找unlocker.exe找不到直接退出另外雙擊默認(rèn)不帶管理員權(quán)限即使找得到文件也寫不進(jìn) 本文還有配套的精品資源點(diǎn)擊獲取