与 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 6 和 Windows 7 总体上存在问题,因此这些也许并不完全是准将的错。对 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 帮助弹出窗口,目前没有选项可以禁用此行为。