Ein Windows- und OS X-kompatibles Python-Skript, das die Boot Camp ESD („Electronic Software Distribution“) für ein bestimmtes Mac-Modell von Apples oder Ihrem Software-Aktualisierungsserver abruft. Es entpackt die verschiedenen Archivschichten innerhalb des flachen Pakets, und wenn das Skript unter Windows mit der Option --install
ausgeführt wird, führt es auch das 64-Bit-MSI-Installationsprogramm aus.
Unter Windows werden die Archive mit 7-Zip entpackt, und das 7-Zip-MSI wird heruntergeladen und installiert, und später wieder entfernt, wenn Brigadier es installiert hat. Dieses Tool hat früher dmg2img verwendet, um die Dateien aus Apples WindowsSupport.dmg
Datei zu extrahieren, aber neuere Versionen von 7-Zip haben eine vollständigere Unterstützung für DMGs enthalten, so dass dmg2img nicht mehr benötigt zu werden scheint.
Dies wurde aus zwei Gründen geschrieben:
- Wir möchten so wenige Windows-System-Images wie möglich pflegen, aber es gibt typischerweise 3-5 BootCampESD-Pakete von Apple zu jeder Zeit, die auf bestimmte Modelle ausgerichtet sind. Es ist möglich, das Orca-Tool zu verwenden, um die MSI-Eigenschaften zu bearbeiten und die Modellprüfung zu deaktivieren, aber es gibt selten Fälle, in denen ein einziges Installationsprogramm alle Treiber enthält. Apple kann bereits das richtige Installationsprogramm für ein gebootetes Computermodell in OS X mit dem Boot Camp-Assistenten herunterladen, also gibt es keinen Grund, warum wir nicht dasselbe unter Windows tun können.
- Manchmal möchten wir nur eine Kopie des Installationsprogramms für ein bestimmtes Modell herunterladen und extrahieren. Die Schritte, um dies manuell zu tun, sind mühsam, und es gibt viele davon. Seit dem Frühjahr 2013 hat Apple eine Reihe von Boot Camp-Installationspaketen auf seiner Support-Download-Seite zur Verfügung gestellt, aber sie sind immer noch auf viele verschiedene Modelle aufgeteilt und es ist immer noch umständlich, sicherzustellen, dass Sie das richtige Paket haben.
Es wurde ursprünglich entwickelt, um als Post-Imaging-Schritt für Boot Camp-Installationen auf Macs ausgeführt zu werden, aber da es eine Netzwerkverbindung erfordert, muss ein Netzwerktreiber bereits auf dem System vorhanden sein. (Siehe Caveats unten)
Wichtiger (!) Hinweis zur Unterstützung von Brigadier
Brigadier hat mit einigen Kombinationen von Treiberpaketen und Hardwaremodellen in den letzten Versionen von Boot Camp 5 und jetzt auch mit Boot Camp 6 nicht ganz so gute Ergebnisse erzielt. Einige Benutzer haben Probleme mit Boot Camp 6 und Windows 7 im Allgemeinen bestätigt, so dass diese möglicherweise nicht ausschließlich Brigadiers Schuld sind. Eine Untersuchung von Boot Camp setup.exe
deutet für mich darauf hin, dass diese ausführbare Datei mehrere Aufgaben ausführt und eine Umgebung für die letztendliche Ausführung von BootCamp.msi
einrichtet, die wir mit Brigadiers einfachem Aufruf von msiexec
zur direkten Installation der MSI nicht immer erreichen können.
Ich bin bei weitem nicht gut genug über die Interna von Windows informiert, um zu verstehen, wie man eine vollautomatische Version von dem ausführen kann, was setup.exe tatsächlich tut (abgesehen von der letztendlichen Ausführung von msiexec /i /qr
auf der MSI). Dieser PR schlägt zum Beispiel vor, dass bessere Ergebnisse erzielt werden können, indem man verschiedene „leise“ Optionen für msiexec
verwendet, aber eine Disassemblierung von setup.exe
zeigt, dass es tatsächlich /qr
ausführt, wie auch der Code im aktuellen Master-Zweig. Ich habe nicht das Gefühl, dass ich über genügend Wissen verfüge, um eine Antwort auf diese Frage zu geben.
Es gab auch seltsame Probleme, die ich vor ein paar Jahren erlebt habe. Zum Beispiel ein einzelnes Treiber-Installationsprogramm (Intel-Chipsatz-bezogen), das eine Reihe von WinRAR SFX-Fehlern anzeigt, weil es versucht, alle Lokalisierungsdateien des Treibers (die nicht einmal ausführbar sind) nacheinander auszuführen. Durch einfaches Anklicken dieser Dialogfelder wird die Installation schließlich fortgesetzt, aber bis dahin ist der Prozess blockiert. Dieser Fehler tritt nicht auf, wenn ein Benutzer setup.exe
manuell ausführt, aber ich verstehe nicht, warum.
Ich habe zwar die Hoffnung, diese Probleme lösen zu können, aber der Anwendungsfall meiner Umgebung für Dual-Boot-Labore schrumpft, und daher ist es schwierig, die Zeit zu rechtfertigen, die für die weitere Erforschung dieser Probleme erforderlich ist. Wenn jemand, der sich mit der Umkehrung von setup.exe
-ähnlichen Installer-Wrappern und MSI-Installern und der Windows-Systemadministration im Allgemeinen auskennt, daran interessiert ist, die derzeit etwas lückenhafte Unterstützung für Silent-Installationen von Boot Camp-Treibern in diesem Tool anzugehen, würde ich mich über Hilfe freuen! Es gibt mehrere Installer-Eigenschaften in BootCamp.msi
, die auch bei diesem Problem hilfreich sein könnten.
Verwendung
Brigadier ohne Optionen ausführen, um die ESD, die für dieses Modell gilt, in das aktuelle Arbeitsverzeichnis herunterzuladen und zu entpacken. Unter OS X wird die ESD in einem .dmg-Format aufbewahrt, um sie einfach auf einen Datenträger zu brennen; unter Windows werden die Treiberdateien extrahiert.
Ausführen mit der Option --model
, um ein alternatives Modell in der Form MacPro3,1
usw. anzugeben.
Ausführen mit der Option --install
, um sowohl herunterzuladen als auch zu installieren, wobei die Treiber nach der Installation gelöscht werden. Dies funktioniert natürlich nur unter Windows. Diese Option wurde für automatisierte Installationen der Boot Camp-Treiber entwickelt.
Fügen Sie eine brigadier.plist
-Datei in den gleichen Ordner wie das Skript ein, um die .sucatalog-URL zu überschreiben und auf einen internen Software Update Server-Katalog zu verweisen (Details siehe unten).
Zusätzliche Optionen siehe unten.
Getting it
Sie finden eine vorkompilierte Binärdatei für Windows im Bereich Releases. Dies kann nützlich sein, wenn Sie Python noch nicht auf Windows installiert haben. Es wurde mit PyInstaller erstellt. Mehr Details zum Selberbauen weiter unten.
Es kann auch direkt von einem Git-Checkout auf OS X oder Windows ausgeführt werden.
Konfiguration
Neben ein paar Kommandozeilenoptionen:
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.
Sie können auch eine brigadier.plist
XML plist-Datei erstellen und diese im selben Verzeichnis wie das Skript ablegen. Derzeit wird ein Schlüssel unterstützt: CatalogURL
, ein String, der auf eine interne SUS-Katalog-URL verweist, die BootCampESD-Pakete enthält. Siehe das Beispiel in diesem Repo.
Ausführen als Sysprep FirstLogonCommand
Es ist üblich, die Boot Camp-Treiber während einer Sysprep-Phase nach dem Image auszuführen, so dass es möglich ist, dasselbe Image auf verschiedene Modelle zu verteilen, ohne das Modell und das erforderliche Boot Camp-Paket zu berücksichtigen. Brigadier scheint sich im Kontext eines SysPrep FirstLogonCommand zu verhalten.
Es gibt eine Umgehung, die das Skript durchführt, wenn es in diesem Szenario ausgeführt wird, wobei die aktuelle Arbeit normalerweise \windows\system32
wäre. Bei meinen Tests auf einem 64-Bit-System blieb das MSI beim Versuch, seine Installationskomponenten zu finden, stehen, da Windows seinen Ordner System32
für 32-Bit-Anwendungen in SysWoW64
verzweigt. Wenn das Skript dieses Arbeitsverzeichnis erkennt, ohne dass eine --output-dir
-Option es überschreibt, setzt es das Ausgabeverzeichnis auf das Stammverzeichnis des Systems, d.h. %SystemRoot%\
.
Wenn --install
verwendet wird, bereinigt es standardmäßig die extrahierten Dateien nach der Installation, es sei denn, die --keep-files
-Option wird angegeben, d.h. wenn Sie die Dateien nicht behalten wollen, sollten Sie sie nicht bereinigen müssen.
Ausführen/Bauen aus dem Quellcode unter Windows
Wenn Sie es lieber als Standard-Python-Skript ausführen möchten, benötigen Sie Python für Windows (dies wurde mit der neuesten Version 2.7 getestet), um das Skript auszuführen.
Wenn Sie es lieber selbst bauen möchten, können Sie das mitgelieferte Build-Skript verwenden. Es benötigt Python und die passende Version von pywin32. Es übernimmt das Herunterladen von PyInstaller für Sie. Führen Sie es einfach ohne Argumente aus, und es wird eine Zip-Datei im aktuellen Arbeitsverzeichnis erstellen:
c:\python27\python build_windows_exe.py
Details zum Entpacken unter Windows
Unter OS X haben wir die nativen Befehle hdiutil und pkgutil, um die Arbeit des Entpackens der Treiberdateien zu erledigen. Unter Windows:
- Prüfen Sie, ob 7-Zip bereits installiert ist – wenn nicht, laden Sie es herunter und installieren Sie es
- Entpacken Sie das BootCampESD.pkg xar Archiv mit 7-Zip
- Entpacken Sie das Payload Archiv mit 7-Zip, einmal, um gzip zu dekomprimieren und ein zweites Mal, um das cpio-Archiv zu entpacken
- Verwenden Sie 7-Zip, um die Treiberdateien aus der Datei
WindowsSupport.dmg
innerhalb des pkg zu extrahieren - Deinstallieren Sie 7-Zip, falls Sie es installiert haben
Caveats
- Es erfordert eine Netzwerkverbindung, weshalb ein funktionierender Netzwerktreiber verfügbar sein muss. Der einfachste Weg, dies zu tun, besteht darin, die verschiedenen Netzwerktreiber von BootCampESDs in einem „BootCamp“-Ordner (oder ähnlichem) innerhalb von
C:\Windows\INF
auf einem sysprepped-Image abzulegen. Dieser Ordner ist der Standard-Suchort für Gerätetreiber, und es sollten automatisch Treiber für alle unbekannte Hardware erkannt und installiert werden, die sich hier befinden. Sie können auch den RegistrierungsschlüsselDevicePath
ändern, um einen benutzerdefinierten Speicherort hinzuzufügen, aber die Verwendung des vorhandenen OrdnersINF
bedeutet, dass außer einer Dateikopie keine weiteren Änderungen erforderlich sind, um die Treiber eines vorhandenen Abbilds zu aktualisieren, so dass dies möglich ist, ohne das Abbild wiederherzustellen und zu booten, um einen Treiber zu installieren. Die Offline-Treiberwartung mit Windows und DISM ist für WIM-Images einfach, aber die meisten Administratoren stellen wahrscheinlich keine WIM-Images auf Macs bereit, sondern verwenden Tools, die ntfsprogs umhüllen. - Es führt derzeit fast keine Fehlerbehandlung durch.
- Das 7-Zip lädt von einer öffentlichen URL herunter, die im Skript hart kodiert ist. In Kürze wird
brigadier.plist
das Überschreiben dieser URLs mit eigenen Kopien, die auf einem privaten Webserver gespeichert sind, unterstützen. - Nach der Installation wird der
FirstTimeRun
-Registrierungsschlüssel aufHKEY_CURRENT_USER\Software\Apple Inc.\Apple Keyboard Support
gesetzt, um das Boot Camp-Hilfe-Popup beim ersten Start zu deaktivieren, und es gibt derzeit keine Option, um dieses Verhalten zu deaktivieren. - Es unterstützt nur Installationen auf 64-Bit-Windows. Es ist erwähnenswert, dass die Boot Camp-Treiber-ESDs vom Dezember 2012 anscheinend nur 64-Bit sind, so dass zusätzliche Arbeit geleistet werden müsste, um 32-Bit-Windows zu unterstützen. Wenn die Unterstützung von 32-Bit-Windows für Sie wichtig ist, gibt es eine Ausgabe, um dies zu verfolgen.