Ett Windows- och OS X-kompatibelt Pythonskript som hämtar Boot Camp ESD (”Electronic Software Distribution”) för en viss Mac-modell från Apples eller din programuppdateringsserver. Det packar upp de flera lager av arkiv i det platta paketet och om skriptet körs på Windows med alternativet --install körs även 64-bitars MSI-installationsprogrammet.

På Windows packas arkiven upp med hjälp av 7-Zip, och 7-Zip MSI hämtas och installeras, och tas bort senare om Brigadier har installerat det. Det här verktyget använde tidigare dmg2img för att utföra extraheringen av filer från Apples WindowsSupport.dmg-fil, men nyare versioner av 7-Zip har inkluderat ett mer fullständigt stöd för DMG:er, så dmg2img verkar inte längre behövas.

Det här skrevs av två anledningar:

  1. Vi vill gärna underhålla så få Windows-systemavbildningar som möjligt, men det finns vanligtvis 3-5 BootCampESD-paket som finns tillgängliga från Apple vid varje tillfälle, som är inriktade på specifika uppsättningar av modeller. Det är möjligt att använda Orca-verktyget för att redigera MSI:s egenskaper och inaktivera modellkontrollen, men det finns sällan fall där ett enda installationsprogram innehåller alla drivrutiner. Apple kan redan ladda ner rätt installationsprogram för en uppstartad maskinmodell i OS X med hjälp av Boot Camp-assistenten, så det finns ingen anledning till att vi inte kan göra samma sak i Windows.
  2. Ibland vill vi bara ladda ner och extrahera en kopia av installationsprogrammet för en viss modell. Stegen för att göra detta manuellt är tråkiga, och det finns många av dem. Från och med våren 2013 har Apple gjort ett antal Boot Camp-installationspaket tillgängliga på sin sida för supportnedladdningar, men de är fortfarande uppdelade på många olika olika uppsättningar av modeller och det är fortfarande besvärligt att försäkra sig om att man har rätt paket.

Det var ursprungligen utformat för att köras som ett steg efter bildbehandling för Boot Camp-implementeringar på Macs, men eftersom det kräver nätverksanslutning måste en nätverksdrivrutin redan finnas tillgänglig på systemet. (Se Caveats nedan)

Viktigt (!) meddelande om stöd för Brigadier

Brigadier har gett mindre bra resultat med vissa kombinationer av drivrutinspaket och maskinvarumodeller i senare versioner av Boot Camp 5, och nu med Boot Camp 6. Vissa personer har bekräftat problem med Boot Camp 6 och Windows 7 i allmänhet, så dessa är kanske inte helt och hållet Brigadiers fel. En viss undersökning av Boot Camp setup.exe visar mig att denna körbara fil utför flera uppgifter och skapar en viss miljö för det eventuella utförandet av BootCamp.msi, vilket vi inte alltid kan få med Brigadiers enkla åberopande av msiexec för att installera MSI direkt.

Jag är långt ifrån tillräckligt insatt i Windows interna system för att förstå hur man ska kunna utföra en helt automatiserad version av det som setup.exe faktiskt gör (förutom att så småningom köra msiexec /i /qr på MSI). Till exempel föreslår denna PR att bättre resultat kan uppnås genom att använda olika ”tysta” alternativ till msiexec, men en demontering av setup.exe visar att den i själva verket utför /qr, vilket även koden i den aktuella mastergrenen gör. Den här typen av frågor känner jag inte att jag har tillräckligt med kunskap för att försöka besvara.

Det har funnits märkliga problem som jag har upplevt för ett par år sedan också. Till exempel ett enda installationsprogram för drivrutiner (Intel-chipset-relaterat) som visar en rad WinRAR SFX-fel på grund av att det försöker att sekventiellt exekvera alla drivrutinens lokaliseringsfiler (som inte ens är körbara). Att bara klicka sig igenom dessa dialogrutor får så småningom installationen att fortsätta, men tills dess är processen blockerad. Detta fel inträffar inte när en användare manuellt kör setup.exe, men varför förstår jag inte.

Men även om jag behåller en viss förhoppning om att kunna lösa dessa problem, så krymper min miljös användningsområde för labb med dubbla startsystem och därför är det svårt att motivera den tid som krävs för att ytterligare undersöka dessa problem. Om någon som har kunskap om att vända setup.exe-liknande installationsprogram och MSI-installationer, och Windows-systemadministration i allmänhet, är intresserad av att ta itu med det för närvarande något trasiga stödet för tysta installationer av Boot Camp-drivrutiner i det här verktyget, så skulle jag gärna vilja ha hjälp! Det finns flera egenskaper för installationsprogrammet i BootCamp.msi som också kan vara till hjälp i den här frågan.

Användning

Kör brigadier utan alternativ för att ladda ner och packa upp ESD:n som gäller för den här modellen, till den aktuella arbetskatalogen. På OS X hålls ESD:n i ett .dmg-format för att enkelt brännas till en skiva; på Windows extraheras drivrutinsfilerna.

Kör den med --model-alternativet för att ange en alternativ modell, i form av MacPro3,1 osv.

Kör den med --install-alternativet för att både hämta och installera, och radera drivrutinerna efter installationen. Detta fungerar naturligtvis bara på Windows. Det här alternativet gjordes för att göra automatiska installationer av Boot Camp-drivrutinerna.

Placera en brigadier.plist-fil i samma mapp som skriptet för att åsidosätta .sucatalog-URL:n så att den pekar på en intern Software Update Server-katalog (detaljer nedan).

Olika alternativ visas nedan.

Få tag på den

Du hittar en förkompilerad binär fil för Windows i området för releaser. Detta kan vara användbart om du inte redan har Python installerat på Windows. Den har byggts med hjälp av PyInstaller. Mer information om hur du bygger den själv nedan.

Det kan också köras direkt från en Git-checkout på antingen OS X eller Windows.

Konfigurering

Förutom några få kommandoradsalternativ:

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.

Du kan också skapa en brigadier.plist XML plist-fil och placera den i samma katalog som skriptet. Den har för närvarande stöd för en nyckel: CatalogURL, en sträng som pekar på en URL för en intern SUS-katalog som innehåller BootCampESD-paket. Se exemplet i den här repo:n.

Körs som ett Sysprep FirstLogonCommand

Det är vanligt att utföra Boot Camp-drivrutinerna under en Sysprep-fas efter avbildningen, så att det är möjligt att distribuera samma avbildning till olika modeller utan att ta hänsyn till modellen och det Boot Camp-paket som krävs. Brigadier verkar bete sig i samband med ett SysPrep FirstLogonCommand.

Det finns en lösning som utförs av skriptet när det körs i det här scenariot, där det aktuella arbetet normalt skulle vara \windows\system32. I mina tester på ett 64-bitarssystem stannade MSI:en när den försökte hitta sina installationskomponenter på grund av att Windows förgrenar mappen System32 till SysWoW64 för 32-bitarsprogram. När skriptet upptäcker denna arbetskatalog utan att ett --output-dir-alternativ åsidosätter den, kommer det att ställa in utdatakatalogen till systemets rot, dvs. %SystemRoot%\.

Som standard, när --install används, kommer det att städa upp de extraherade filerna efter installationen, om inte --keep-files-alternativet anges, så om du inte vill ha kvar filerna bör du inte behöva städa upp efter det.

Köra/bygga från källkod på Windows

Om du hellre kör det som ett standard Python-skript behöver du Python för Windows (detta testades med den senaste 2.7-versionen) för att kunna köra skriptet.

Om du hellre bygger det själv kan du använda det medföljande byggskriptet. Det kräver Python och den matchande versionen av pywin32. Det sköter nedladdningen av PyInstaller åt dig. Kör det helt enkelt utan argument så bygger det en zip-fil i den aktuella arbetskatalogen:

c:\python27\python build_windows_exe.py

Uppackningsdetaljer på Windows

På OS X har vi de inbyggda kommandona hdiutil och pkgutil för att göra arbetet med att packa upp drivrutinsfilerna. På Windows gör vi:

  1. Kontrollera om 7-Zip redan är installerat – om inte laddar vi ner och installerar det
  2. Extrahera BootCampESD.pkg xar arkiv med 7-Zip
  3. Extrahera nyttolastarkivet med 7-Zip, en gång för att dekomprimera gzip och en gång till för att packa upp cpio-arkivet
  4. Använd 7-Zip för att extrahera drivrutinsfilerna från WindowsSupport.dmg-filen i pkg
  5. Avinstallera 7-Zip om vi har installerat det

Caveats

  • Det kräver en nätverksanslutning, vilket därför förutsätter att en fungerande nätverksdrivrutin är tillgänglig. Det enklaste sättet jag har hittat för att göra detta är att placera de olika nätverksdrivrutinerna från BootCampESDs i en mapp ”BootCamp” (eller liknande) inom C:\Windows\INF på en sysprepped image. Den här mappen är standardsökplatsen för enhetsdrivrutiner, och den bör automatiskt upptäcka och installera drivrutiner som finns här för all okänd maskinvara. Du kan också ändra registernyckeln DevicePath för att lägga till en egen plats, men om du använder den befintliga mappen INF krävs inga andra ändringar förutom en filkopia för att uppdatera en befintlig avbildnings drivrutiner, så detta kan göras utan att faktiskt återställa avbildningen och starta upp den bara för att installera en drivrutin. Offline-drivrutinservice med hjälp av Windows och DISM är enkelt för WIM-avbildningar, men de flesta administratörer distribuerar troligen inte WIM-avbildningar till Macs, utan använder snarare verktyg som omsluter ntfsprogs.
  • Det utför för närvarande nästan ingen felhantering.
  • Den 7-Zip hämtar från en offentlig URL som är hårdkodad i skriptet. Snart kommer brigadier.plist att ha stöd för att åsidosätta dessa URL:er med egna kopior som lagras på en privat webbserver.
  • Efter installationen ställer det in registernyckeln FirstTimeRunHKEY_CURRENT_USER\Software\Apple Inc.\Apple Keyboard Support för att inaktivera den första Boot Camp-hjälppopupen vid första starten, och det finns för närvarande inget alternativ för att inaktivera detta beteende.
  • Det finns endast stöd för installationer på 64-bitars Windows. Det är värt att nämna att ESD:erna för Boot Camp-drivrutinen från december 2012 endast verkar vara 64-bitars, så extra arbete skulle behöva göras för att stödja 32-bitars Windows. Om stöd för 32-bitars Windows är viktigt för dig har det skapats en fråga för att spåra detta.

Lämna ett svar

Din e-postadress kommer inte publiceras.