與 Windows 和 OS X 相容的 Python 腳本,可從 Apple 或您的軟體更新伺服器取得特定 Mac 型號的 Boot Camp ESD(「電子軟體分發」)。它在平面套件中解壓縮多層存檔,如果腳本使用--install
選項在 Windows 上運行,它也會執行 64 位元 MSI 安裝程式。
在 Windows 上,使用 7-Zip 解壓縮存檔,然後下載並安裝 7-Zip MSI,如果 Brigadier 安裝了它,則稍後將其刪除。該工具過去使用 dmg2img 從 Apple 的WindowsSupport.dmg
文件中提取文件,但較新版本的 7-Zip 包含了對 DMG 的更完整支持,因此似乎不再需要 dmg2img。
寫這篇文章有兩個原因:
它最初設計為作為 Boot Camp 部署到 Mac 的映像後步驟運行,但由於它需要網路連接,因此系統上必須已有可用的網路驅動程式。 (請參閱下面的注意事項)
Brigadier 在最新版本的 Boot Camp 5 和現在的 Boot Camp 6 中使用驅動程式套件和硬體模型的一些組合產生了不太好的結果。也許不完全是準將的錯。對 Boot Camp setup.exe
的一些檢查表明,該可執行檔執行多項任務並為最終執行BootCamp.msi
設定一些環境,但我們並不總是能夠透過 Brigadier 簡單地呼叫msiexec
來安裝直接MSI。
我對 Windows 內部結構的了解還遠遠不夠,無法理解如何能夠執行 setup.exe 實際執行的任何操作的全自動版本(除了最終在 MSI 上運行msiexec /i /qr
之外)。例如,此 PR 建議透過對msiexec
使用不同的「安靜」選項可以獲得更好的結果,但setup.exe
的反彙編顯示它實際上正在執行/qr
,就像目前 master 分支中的程式碼一樣。我覺得我沒有足夠的知識來嘗試回答這類問題。
幾年前我也遇到一些奇怪的問題。例如,單一驅動程式安裝程式(與 Intel 晶片組相關)會彈出一系列 WinRAR SFX 錯誤,因為它嘗試順序執行所有驅動程式的本地化檔案(甚至不可執行)。只需單擊這些對話框最終就會導致安裝繼續,但在此之前該過程將被阻止。當用戶手動運行setup.exe
時不會發生此錯誤,但我不明白為什麼。
雖然我仍然希望能夠解決這些問題,但我的環境中雙啟動實驗室的用例正在縮小,因此很難證明花進一步研究這些問題所需的時間是合理的。如果任何了解逆向setup.exe
的安裝程式包裝程式和 MSI 安裝程式以及一般 Windows 系統管理的人,有興趣解決此工具中目前對 Boot Camp 驅動程式靜默安裝的支援問題,我會喜歡一些幫助! BootCamp.msi
中的多個安裝程式屬性也可能對解決此問題有所幫助。
運行 brigadier,不帶任何選項來下載適用於該模型的 ESD 並將其解壓縮到當前工作目錄。在 OS X 上,ESD 以 .dmg 格式儲存,以便於燒錄到光碟;在 Windows 上,驅動程式檔案被提取。
使用--model
選項運行它以指定備用模型,格式為MacPro3,1
等。
使用--install
選項運行它來下載和安裝,安裝後刪除驅動程式。這顯然只適用於 Windows。此選項是為了自動安裝 Boot Camp 驅動程式而建立的。
將brigadier.plist
檔案放在與腳本相同的資料夾中,以覆寫 .sucatalog URL 以指向內部軟體更新伺服器目錄(詳細資訊如下)。
其他選項如下所示。
您可以在發佈區域找到適用於 Windows 的預編譯二進位。如果您尚未在 Windows 上安裝 Python,這可能會很有用。這是使用 PyInstaller 建造的。以下是有關自行建構的更多詳細資訊。
它也可以直接從 OS X 或 Windows 上的 Git 簽出執行。
除了一些命令列選項之外:
Usage: brigadier [options]
Options:
-h, --help show this help message and exit
-m MODEL, --model=MODEL
System model identifier to use (otherwise this
machine's model is used).
-i, --install After the installer is downloaded, perform the install
automatically. Can be used on Windows only.
-o OUTPUT_DIR, --output-dir=OUTPUT_DIR
Base path where the installer files will be extracted
into a folder named after the product, ie.
'BootCamp-041-1234'. Uses the current directory if
this option is omitted.
-k, --keep-files Keep the files that were downloaded/extracted. Useful
only with the '--install' option on Windows.
您也可以建立brigadier.plist
XML plist 檔案並將其放置在與腳本相同的目錄中。它目前支援一個鍵: CatalogURL
,這是一個指向包含 BootCampESD 套件的內部 SUS 目錄 URL 的字串。請參閱此存儲庫中的範例。
在映像後 Sysprep 階段執行 Boot Camp 驅動程式是很常見的,這樣就可以將相同的映像部署到不同的模型,而無需考慮模型和所需的 Boot Camp 套件。 Brigadier 似乎在 SysPrep FirstLogonCommand 的上下文中運作。
在這種情況下執行時,腳本會執行一種解決方法,其中目前工作通常為windowssystem32
。在我對 64 位元系統進行的測試中,MSI 將停止嘗試尋找其安裝程式元件,因為 Windows 將其System32
資料夾分叉到SysWoW64
中以用於 32 位元應用程式。當腳本偵測到此工作目錄沒有--output-dir
選項覆寫它時,它將把輸出目錄設定為系統的根目錄,即。 %SystemRoot%
。
預設情況下,當使用--install
時,它將在安裝後清理其提取的文件,除非給出--keep-files
選項,因此除非您想保留文件,否則不需要在安裝後清理。
如果您希望將其作為標準 Python 腳本運行,則需要 Windows 版 Python(已使用最新的 2.7 版本進行測試)才能執行該腳本。
如果您想自己建置它,可以使用附帶的建置腳本。它需要Python和pywin32的匹配版本。它會為您處理下載 PyInstaller。只需不帶參數運行它,它將在當前工作目錄中建立一個 zip 檔案:
c:python27python build_windows_exe.py
在 OS X 上,我們有本機 hdiutil 和 pkgutil 指令來完成解壓縮驅動程式檔案的工作。在 Windows 上,我們:
WindowsSupport.dmg
檔案中提取驅動程式檔案C:WindowsINF
內的“BootCamp”(或類似)資料夾中。此資料夾是裝置驅動程式的預設搜尋位置,它應該會自動偵測並安裝位於此處的所有未知硬體的驅動程式。您還可以修改DevicePath
註冊表項以添加自定義位置,但使用現有的INF
資料夾意味著除了文件副本之外不需要進行其他更改即可更新現有映像的驅動程序,因此無需實際恢復映像並啟動它即可完成此操作只是為了安裝驅動程式。對於 WIM 映像來說,使用 Windows 和 DISM 進行離線驅動程式服務很容易,但大多數管理員可能不會將 WIM 映像部署到 Mac,而是使用包裝 ntfsprogs 的工具。brigadier.plist
將支援使用儲存在私人網路伺服器上的您自己的副本來覆寫這些 URL。HKEY_CURRENT_USERSoftwareApple Inc.Apple Keyboard Support
中設定FirstTimeRun
註冊表項,以停用首次啟動的 Boot Camp 幫助彈出窗口,目前沒有選項可以停用此行為。