三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

还在手动解包PKG和DMG?Brigadier一条命令搞定Mac的Boot Camp驱动

还在手动解包PKG和DMG?Brigadier一条命令搞定Mac的Boot Camp驱动

还在手动解包PKG和DMG?Brigadier一条命令搞定Mac的Boot Camp驱动

【免费下载链接】brigadierFetch and install Boot Camp ESDs with ease.项目地址: https://gitcode.com/gh_mirrors/bri/brigadier

想象这样一个周六:你刚给 MacBook Pro 装好 Windows,触控板失灵、键盘背光不亮、Wi-Fi 直接断联。你按照网上教程开始"手工"下载 Boot Camp 驱动——结果发现自己站在一个由.pkg.xar.gzip.cpio.dmg堆成的五层套娃面前,每一步都要装不同的解包工具,一折腾就是一下午。这正是 Brigadier 这个开源工具存在的全部理由:把"下载对应型号的 Boot Camp ESD 并解开所有嵌套压缩层"压缩成一条命令。

先说那个让人崩溃的周六下午

每个在 Mac 上装过 Windows 的人都经历过相似的循环:打开浏览器搜索"MacBookPro 驱动"→ 进入苹果支持页 → 面对七八个"适用于特定机型"的安装包 → 猜测哪一个是自己的 → 下载 2 个 GB 的镜像 → 解压 → 报错 → 换一个再试。

麻烦的根源其实只有三个:型号对不上、格式解不开、装完还缺东西。Brigadier 恰好就是冲着这三个坑去的,而且它把处理逻辑写进了代码里,不用你懂任何底层原理。

第一道坎:永远记不住的型号编号

Mac 的型号标识符长这样:MacBookPro15,1iMacPro1,1Macmini8,1。它藏在"系统信息"的犄角旮旯里,不同年份同尺寸的机器可能共享一个编号,而苹果的驱动包又是按这些编号分发的——选错了型号,下回来的驱动要么装不上,要么缺声卡和摄像头。

Brigadier 的做法很直接:脚本启动时会自动读取当前机器的型号标识符。在 Windows 上它调用wmic computersystem get model,在 macOS 上调用system_profiler,拿到结果后直接去苹果的软件更新服务器(sucatalog)匹配对应的 Boot Camp ESD。也就是说,你什么都不用填,它自己知道你是谁

当然,它也知道你可能在帮别人下载。手动指定型号同样支持,而且从 0.2.1 版本开始,--model参数可以重复传入,一次跑完多台机器:

./brigadier --model MacBookPro15,1 --model iMacPro1,1 --output-dir ./drivers

这是给谁用的?给那些维护着"半个机房"的 IT 管理员——后面我们还会展开。

第二道坎:PKG→XAR→GZIP→CPIO→DMG,五层套娃怎么解

这是整个流程里最劝退的部分。苹果分发的 Boot Camp ESD 是一个扁平包(flat package),想拿到里面的驱动文件,你得手动完成一整条解包链:

  1. pkgutil或 xar 解开.pkg外壳
  2. 从里面抽出Payload,它本身是 gzip 压缩
  3. 解压后得到Payload~,这层是 cpio 归档
  4. 从中取出WindowsSupport.dmg磁盘镜像
  5. 挂载 DMG,再拷贝出驱动文件

五层,每一步的工具和参数都不同,任何一步出错都得回头排查。这就是为什么网上有那么多"Boot Camp 驱动解压教程"。

Brigadier 把这一整条链子写死进了脚本里。在 Windows 上,它依赖 7-Zip 完成所有解包:检测到系统没装 7-Zip,就先自动下载安装;解完驱动,再把 7-Zip 卸载掉,全程不需要你动手。它的思路很朴素——把繁琐的重复劳动变成一次性写好的程序,你只需要关注结果。

在 macOS 上逻辑略有不同:脚本用系统自带的pkgutiltar解开多层归档,最后把WindowsSupport.dmg原样保留下来——因为 macOS 用户多半是想把它刻盘或者做成 USB 启动盘,而不是当场安装。

第三道坎:解开了,然后呢

驱动文件到手只是完成了前半段。在 Windows 上,你还需要在几十个文件夹里找到BootCamp64.msi(老一点的 ESD 里只有一个 64 位的BootCamp.msi),然后祈祷msiexec参数没敲错。

Brigadier 提供了一键模式,把"下载 + 解包 + 安装 + 清理"串成一条命令:

brigadier.exe --install

脚本会从解包目录里递归搜索 MSI 文件(不预设固定目录结构,兼容不同时期 ESD 的差异),然后执行静默安装,并把日志写到C:\BootCamp_Install.log。装完之后,临时文件自动删除——除非你加了--keep-files想留着做备份。安装收尾它也没闲着:会顺手写入注册表键HKEY_CURRENT_USER\Software\Apple Inc.\Apple Keyboard Support,把首次启动的 Boot Camp 帮助弹窗关掉。

注意两个前提:--install只在 Windows 上有效(在 macOS 上运行会直接退出),而且目前仅支持 64 位系统。这是项目自 2013 年延续下来的边界,因为苹果的 Boot Camp ESD 本身就以 64 位为主。

备份党专属:把驱动囤成自己的弹药库

不是所有场景都需要当场安装。很多人的习惯是:趁网络好,把驱动下好存进 U 盘,等哪天重装系统直接离线安装。这时--output-dir就派上用场了:

./brigadier --model MacBookPro15,1 --output-dir D:\BootCamp

下载结果会落在D:\BootCamp\BootCamp-041-1234这样的目录里——命名遵循苹果的产品 ID,方便你按版本归档。同一个模型在服务器上可能同时挂着多个 ESD,脚本默认挑选发布日期最新的那个;如果你心里有数要特定版本,可以用-p参数直接指定产品 ID,比如-p 031-0787

一个容易被忽略的细节:多个--model可以配一个--output-dir批量下载,所以做一个覆盖所有主力机型的离线驱动库并不复杂,只是把命令里的型号列表加长而已。这一步对教育实验室、对经常重装系统的人,性价比极高。

当 Brigadier 走进机房:给 IT 管理员的批量方案

Brigadier 最初就是为"给一批 Mac 统一部署 Windows"这种场景写的。项目作者维护着多台双系统机器,不想为每个型号单独维护系统镜像——镜像只有一个,驱动按型号现场拉取。这才是它真正的设计目标:作为系统镜像部署后的后处理步骤运行。

它能在 Sysprep 的 FirstLogonCommand 阶段工作,这背后还有一个隐蔽的坑:在该阶段运行时,工作目录通常是C:\Windows\System32,而 64 位系统会把 32 位应用重定向到 SysWoW64,导致 MSI 找不到安装组件。Brigadier 检测到这种"system32"工作目录时,会自动把输出目录切到系统盘根目录绕开问题——这种细节只有踩过坑的人才写得出来。

顺带一提,仓库里还有一个brigadier.ps1,是原版 Python 脚本的 PowerShell 移植。如果你所在的 Windows 环境更习惯用 PowerShell 管理,可以直接调用它,参数风格保持了一致:brigadier.ps1 -Installbrigadier.ps1 -Model 'MacBookAir5,2'

把苹果的服务器换成你自己的:内网部署的秘密武器

企业环境下,让每台机器都直连苹果服务器显然不合适:内网带宽、审计需求、甚至某些网络根本不通外网。Brigadier 提供了覆盖机制——在脚本同目录放一个brigadier.plist配置文件,就能把默认的软件更新目录指向你自己的服务器:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CatalogURL</key> <string>https://internal-sus.company.com/catalogs/others/index.sucatalog</string> </dict> </plist>

如果你已经在跑 Reposado 或自建的软件更新服务,把这份 plist 分发到镜像里,之后所有机器都会从内网拉 Boot Camp 驱动,速度和可控性都提升一个档次。模板可以直接参考仓库里的 plist-example/brigadier.plist。

虚拟机上想测驱动?有个官方提供的"后门"

在 VMware 或 VirtualBox 里测试 Boot Camp 安装时,安装器会检查宿主机是不是合规的 Mac 型号,直接拦下。项目在 msi-transform/ 目录里提供了一套绕过方案:一个现成的 MSI 转换文件set_nocheck.mst,作用是把调试属性NOCHECK置为 1。

用法很简单,用附带的 VBS 脚本把转换应用到 MSI 上再执行安装:

cscript WiUseXfm.vbs "C:\Drivers\Apple\BootCamp.msi" set_nocheck.mst

要提醒的是,NOCHECK只是跳过型号检查,图形驱动这类组件依然不会安装,适合验证基础服务而非完整模拟真机。仓库文档里也说得明白:这只是"基本模拟一次安装"。

动手之前,记住这三条避坑要点

Brigadier 的 README 写得非常坦诚,把已知局限一条条列了出来。用之前值得先过一遍:

  1. 必须能联网。它要访问苹果的 sucatalog 下载驱动,而这一步需要系统已经有一块能工作的网卡。最省事的做法是提前把各型号 ESD 里的网卡驱动拷进C:\Windows\INF\BootCamp文件夹——这是 Windows 自动搜索驱动的默认目录之一,重装系统后它自己就会装上网卡驱动。
  2. 几乎没有错误处理。项目自己承认了这一点,下载中断、解包失败这类情况可能不会给你友好的提示,跑批量的脚本里最好加上日志和重试机制。
  3. 静默安装在个别机型和驱动组合上可能不够完美。Boot Camp 官方安装器setup.exe除了调用msiexec还做了不少环境准备工作,Brigadier 用简单命令直接调 MSI 不一定每次都能 100% 复现同样的效果。作者甚至在 README 里公开征集熟悉 Windows 安装器逆向的开发者来帮忙改进——这反而说明这个工具值得信任:它不吹牛,只把边界划清楚。

另外,如果你要在没有 Python 的 Windows 机器上分发,仓库自带的 build_windows_exe.py 可以打包出独立的brigadier.exe,分发时只需带上这个单文件。

它值得你放进工具箱的理由

Brigadier 不是那种"一条命令解决所有问题"的神器,它更像一个称职的搬运工:型号识别、多层解包、静默安装、内网适配,把最脏最累的环节全部自动化,然后把决策权留给你——要不要安装、装到哪个目录、留着还是删掉,全部参数可调。

它的适用人群其实很广:个人用户用它免去下午的折腾;IT 管理员用它实现"一个镜像、按需驱动"的批量部署;开发者可以把它当成一个理解 Boot Camp ESD 结构的现成参考,甚至像brigadier.ps1那样直接移植成自己顺手的形式。

上手成本真的不高。克隆下项目后,在 macOS 上给脚本加执行权限直接运行,在 Windows 上用 release 里的现成 exe 即可:

git clone https://gitcode.com/gh_mirrors/bri/brigadier cd brigadier

先不带任何参数跑一次,看看它自动识别出的型号和下载结果,再决定要不要加--install。如果你遇到问题或想补上静默安装这块短板,项目作者一直欢迎有 Windows 内部机制经验的开发者帮忙。

自动化这件事,从来不是让人失业,而是让人从"为什么我还在解 DMG"的崩溃中解脱出来,把精力留给真正需要判断力的事。Brigadier 替你解完了那五层套娃,剩下的时间,拿去喝杯咖啡吧。

【免费下载链接】brigadierFetch and install Boot Camp ESDs with ease.项目地址: https://gitcode.com/gh_mirrors/bri/brigadier

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

← 返回列表