Een Windows- en OS X-compatibel Python script dat, van Apple’s of jouw software update server, de Boot Camp ESD (“Electronic Software Distribution”) ophaalt voor een specifiek model van Mac. Het pakt de meerdere lagen van archieven binnen het platte pakket uit en als het script wordt uitgevoerd op Windows met de --install
optie, voert het ook de 64-bit MSI installer uit.
Op Windows, worden de archieven uitgepakt met 7-Zip, en de 7-Zip MSI wordt gedownload en geïnstalleerd, en later verwijderd als Brigadier het heeft geïnstalleerd. Deze tool gebruikte vroeger dmg2img om de extractie van bestanden uit Apple’s WindowsSupport.dmg
bestand uit te voeren, maar recentere versies van 7-Zip hebben meer volledige ondersteuning voor DMG’s opgenomen, dus dmg2img lijkt niet langer nodig te zijn.
Dit is geschreven om twee redenen:
- We willen graag zo min mogelijk Windows systeem-images onderhouden, maar er zijn meestal 3-5 BootCampESD pakketten beschikbaar van Apple op elk gegeven moment, gericht op specifieke sets van modellen. Het is mogelijk om de Orca-tool te gebruiken om de eigenschappen van de MSI te bewerken en de modelcontrole uit te schakelen, maar er zijn zelden gevallen waarin een enkele installer alle stuurprogramma’s bevat. Apple kan al het juiste installatieprogramma downloaden voor een opgestart machinemodel in OS X met behulp van de Boot Camp Assistant, dus er is geen reden waarom we niet hetzelfde kunnen doen binnen Windows.
- Soms willen we gewoon een kopie van het installatieprogramma voor een bepaald model downloaden en uitpakken. De stappen om dit handmatig te doen zijn vervelend, en er zijn er veel van. Vanaf het voorjaar van 2013 heeft Apple een aantal Boot Camp-installatiepakketten beschikbaar gemaakt op hun ondersteuningsdownloadpagina, maar ze zijn nog steeds verdeeld over veel verschillende modelsets en het is nog steeds lastig om ervoor te zorgen dat u het juiste pakket hebt.
Het was oorspronkelijk ontworpen om te worden uitgevoerd als post-imaging stap voor Boot Camp-implementaties op Macs, maar omdat het netwerkconnectiviteit vereist, moet er al een netwerkstuurprogramma beschikbaar zijn op het systeem. (Zie Caveats hieronder)
Belangrijke (!) opmerking over ondersteuning voor Brigadier
Brigadier heeft minder-dan-goede resultaten opgeleverd met sommige combinaties van driver pakketten en hardware modellen in recente versies van Boot Camp 5, en nu met Boot Camp 6. Sommige mensen hebben problemen met Boot Camp 6 en Windows 7 in het algemeen bevestigd, dus deze zijn misschien niet helemaal de schuld van Brigadier. Enig onderzoek van de Boot Camp setup.exe
geeft mij aan dat deze executable verschillende taken uitvoert en een omgeving opzet voor de uiteindelijke uitvoering van BootCamp.msi
, die we niet altijd kunnen krijgen met Brigadier’s eenvoudige aanroep van msiexec
om de MSI direct te installeren.
Ik ben verre van goed genoeg op de hoogte van Windows internals om te begrijpen hoe een volledig geautomatiseerde versie van wat setup.exe eigenlijk doet (naast het uiteindelijk uitvoeren van msiexec /i /qr
op de MSI), kan worden uitgevoerd. Bijvoorbeeld, dit PR suggereert dat betere resultaten kunnen worden bereikt door verschillende “stille” opties te gebruiken voor msiexec
, maar een demontage van setup.exe
laat zien dat het eigenlijk /qr
uitvoert, net als de code in de huidige master branch. Dit soort vragen is er een waarvan ik niet het gevoel heb dat ik genoeg kennis heb om te proberen een antwoord te geven.
Er zijn ook vreemde problemen geweest die ik een paar jaar geleden heb meegemaakt. Bijvoorbeeld, een enkele driver installer (Intel chipset-gerelateerd) die een serie WinRAR SFX fouten laat verschijnen omdat het probeert alle lokalisatie bestanden van de driver achter elkaar uit te voeren (die niet eens uitvoerbaar zijn). Simpelweg door deze dialogen klikken zorgt er uiteindelijk voor dat de installatie verder gaat, maar totdat dat gebeurt is het proces geblokkeerd. Deze fout treedt niet op wanneer een gebruiker handmatig setup.exe
uitvoert, maar waarom begrijp ik niet.
Hoewel ik nog enige hoop heb om deze problemen op te kunnen lossen, is het gebruik van dual-boot labs in mijn omgeving aan het afnemen en dus is het moeilijk om de tijd te rechtvaardigen die nodig is om verder onderzoek te doen naar deze problemen. Als iemand met kennis over het omkeren van setup.exe
-achtige installatiewrappers en MSI-installatieprogramma’s, en Windows systeembeheer in het algemeen, geïnteresseerd is in het aanpakken van de momenteel enigszins afgebroken ondersteuning voor stille installaties van Boot Camp stuurprogramma’s in deze tool, zou ik graag wat hulp krijgen! Er zijn verschillende installatie-eigenschappen in BootCamp.msi
die ook van pas kunnen komen bij dit probleem.
Gebruik
Run brigadier zonder opties om de ESD die van toepassing is op dit model te downloaden en uit te pakken naar de huidige werkmap. Op OS X wordt de ESD bewaard in een .dmg formaat om gemakkelijk op een schijf te branden; op Windows worden de stuurprogrammabestanden uitgepakt.
Run het met de --model
optie om een alternatief model op te geven, in de vorm MacPro3,1
, enz.
Run het met de --install
optie om zowel te downloaden als te installeren, waarbij de stuurprogramma’s na de installatie worden verwijderd. Dit werkt uiteraard alleen onder Windows. Deze optie is gemaakt voor het doen van geautomatiseerde installaties van de Boot Camp drivers.
Plaats een brigadier.plist
bestand in dezelfde map als het script om de .sucatalog URL te overschrijven om naar een interne Software Update Server catalogus te verwijzen (details hieronder).
Aanvullende opties hieronder.
Krijgen
U kunt een voor-gecompileerde binary voor Windows vinden in het releases gebied. Dit kan handig zijn als u Python nog niet op Windows heeft geïnstalleerd. Deze is gebouwd met PyInstaller. Meer details over het zelf bouwen hieronder.
Het kan ook direct vanuit een Git checkout op OS X of Windows worden uitgevoerd.
Configuratie
Naast een paar command-line opties:
Usage: brigadier 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.
Je kunt ook een brigadier.plist
XML plist bestand maken en in dezelfde directory plaatsen als het script. Het ondersteunt momenteel één sleutel: CatalogURL
, een string die verwijst naar een interne SUS catalogus URL die BootCampESD pakketten bevat. Zie het voorbeeld in deze repo.
Uitvoeren als een Sysprep FirstLogonCommand
Het is gebruikelijk om de Boot Camp drivers uit te voeren tijdens een post-imaging Sysprep fase, zodat het mogelijk is om hetzelfde image uit te rollen naar verschillende modellen zonder rekening te houden met het model en het benodigde Boot Camp pakket. Brigadier lijkt zich te gedragen in de context van een SysPrep FirstLogonCommand.
Er is een workaround uitgevoerd door het script wanneer het wordt uitgevoerd in dit scenario, waar de huidige werken normaal \windows\system32
zou zijn. In mijn tests op een 64-bit systeem, zou de MSI stoppen met het zoeken naar de installatiecomponenten, vanwege de manier waarop Windows de System32
map verdeelt naar SysWoW64
voor 32-bit applicaties. Wanneer het script deze werkdirectory detecteert zonder een --output-dir
optie, zal het de uitvoermap instellen op de root van het systeem, dat wil zeggen %SystemRoot%\
.
Als --install
wordt gebruikt, zal het standaard de uitgepakte bestanden opruimen na de installatie, tenzij de --keep-files
optie is gegeven, dus tenzij u de bestanden in de buurt wilt houden, zou het niet nodig moeten zijn om het daarna op te ruimen.
Uitvoeren/bouwen vanaf broncode op Windows
Als u het liever als een standaard Python script uitvoert, heeft u Python voor Windows nodig (dit is getest met de laatste 2.7 versie) om het script uit te voeren.
Als u het liever zelf bouwt, kunt u het bijgeleverde bouw script gebruiken. Het vereist Python en de bijbehorende versie van pywin32. Het regelt het downloaden van PyInstaller voor je. Start het zonder argumenten, en het zal een zip bestand bouwen in de huidige werk directory:
c:\python27\python build_windows_exe.py
Details uitpakken op Windows
Op OS X, hebben we de native hdiutil en pkgutil commando’s om het werk te doen van het uitpakken van de driver bestanden. Op Windows, moeten we:
- Controleren of 7-Zip al geinstalleerd is – zo niet, dan downloaden en installeren we het
- Uitpakken van het BootCampESD.pkg xar archief met 7-Zip
- Uitpakken van het Payload archief met 7-Zip, een keer om gzip te decomprimeren en nog een keer om het cpio archief uit te pakken
- Gebruik 7-Zip om de driver bestanden uit te pakken van het
WindowsSupport.dmg
bestand in de pkg - Uninstalleer 7-Zip als we het geinstalleerd hebben
Caveats
- Het vereist een netwerk verbinding, wat dus vereist dat er een werkend netwerk stuurprogramma aanwezig is. De eenvoudigste manier die ik heb gevonden om dit te doen is om de verschillende netwerk drivers van BootCampESDs in een “BootCamp” (of vergelijkbare) map te plaatsen binnen
C:\Windows\INF
op een gesysprepped image. Deze map is de standaard zoeklocatie voor apparaatstuurprogramma’s, en het zou automatisch stuurprogramma’s moeten detecteren en installeren die zich hier bevinden voor alle onbekende hardware. U kunt ook deDevicePath
registersleutel wijzigen om een aangepaste locatie toe te voegen, maar het gebruik van de bestaandeINF
map betekent dat er geen andere wijzigingen dan een bestandskopie nodig zijn om de stuurprogramma’s van een bestaande image te updaten, dus dit kan gedaan worden zonder de image te herstellen en te booten alleen om een stuurprogramma te installeren. Offline driver servicing met Windows en DISM is eenvoudig voor WIM images, maar de meeste beheerders implementeren waarschijnlijk geen WIM images naar Macs, maar gebruiken liever tools die ntfsprogs omhullen. - Het voert momenteel bijna geen foutafhandeling uit.
- De 7-Zip downloadt van een publieke URL die hard gecodeerd is in het script. Binnenkort zal het
brigadier.plist
ondersteunen om deze URL’s te overschrijven met uw eigen kopieën die zijn opgeslagen op een prive webserver. - Na de installatie, zet het de
FirstTimeRun
registersleutel opHKEY_CURRENT_USER\Software\Apple Inc.\Apple Keyboard Support
om de Boot Camp help popup bij de eerste start uit te schakelen, en er is momenteel geen optie om dit gedrag uit te schakelen. - Ondersteunt alleen installaties op 64-bit Windows. Het is vermeldenswaard dat de Boot Camp driver ESD’s van december 2012 alleen 64-bits lijken te zijn, dus er zou extra werk moeten worden verricht om 32-bits Windows te ondersteunen. Als 32-bits Windows-ondersteuning belangrijk voor u is, is er een probleem gemaakt om dit bij te houden.