Skrypt Pythona kompatybilny z systemami Windows i OS X, który pobiera z serwera aktualizacji oprogramowania Apple lub Twojego, Boot Camp ESD („Electronic Software Distribution”) dla określonego modelu komputera Mac. Rozpakowuje wiele warstw archiwów w płaskim pakiecie, a jeśli skrypt jest uruchamiany w systemie Windows z opcją --install
, uruchamia także 64-bitowy instalator MSI.
W systemie Windows archiwa są rozpakowywane za pomocą programu 7-Zip, a MSI 7-Zip jest pobierany i instalowany, a później usuwany, jeśli zainstalował go Brigadier. To narzędzie używało dmg2img do wyodrębniania plików z pliku WindowsSupport.dmg
firmy Apple, ale nowsze wersje 7-Zip zawierały pełniejsze wsparcie dla DMG, więc dmg2img wydaje się już niepotrzebne.
To zostało napisane z dwóch powodów:
- Chcielibyśmy utrzymywać jak najmniej obrazów systemu Windows, ale jest zazwyczaj 3-5 pakietów BootCampESD dostępnych od Apple w danym momencie, przeznaczonych dla konkretnych zestawów modeli. Możliwe jest użycie narzędzia Orca do edycji właściwości MSI i wyłączenia sprawdzania modelu, ale rzadko zdarzają się przypadki, w których pojedynczy instalator zawiera wszystkie sterowniki. Apple potrafi już pobrać poprawny instalator dla uruchomionego modelu maszyny w OS X za pomocą Asystenta Boot Camp, więc nie ma powodu, żebyśmy nie mogli zrobić tego samego w Windows.
- Czasami chcemy po prostu pobrać i rozpakować kopię instalatora dla danego modelu. Kroki, aby zrobić to ręcznie są żmudne, a jest ich wiele. Od wiosny 2013 roku, Apple udostępnił kilka pakietów instalatora Boot Camp na ich stronie pobierania wsparcia, ale nadal są one podzielone na wiele różnych zestawów modeli i nadal jest niewygodne, aby upewnić się, że masz poprawny pakiet.
To był pierwotnie zaprojektowany do uruchomienia jako post-imaging krok dla wdrożeń Boot Camp do komputerów Mac, ale ponieważ wymaga łączności sieciowej, sterownik sieciowy musi być już dostępny w systemie. (Zobacz zastrzeżenia poniżej)
Ważna (!) uwaga na temat wsparcia dla Brigadiera
Brigadier dał mniej niż dobre wyniki z niektórymi kombinacjami pakietów sterowników i modeli sprzętu w ostatnich wersjach Boot Camp 5, a teraz z Boot Camp 6. Niektórzy ludzie potwierdzili problemy z Boot Camp 6 i Windows 7 w ogóle, więc to może nie być całkowicie wina Brigadiera. Niektóre badania Boot Camp setup.exe
wskazują mi, że ten plik wykonywalny wykonuje kilka zadań i ustawia pewne środowisko dla ostatecznego wykonania BootCamp.msi
, które nie zawsze jesteśmy w stanie uzyskać za pomocą prostego wywołania msiexec
przez Brigadiera, aby zainstalować MSI bezpośrednio.
Jestem daleki od wystarczającej wiedzy na temat wewnętrznych aspektów Windows, aby zrozumieć, jak być w stanie wykonać w pełni zautomatyzowaną wersję tego, co setup.exe faktycznie robi (poza ostatecznym uruchomieniem msiexec /i /qr
na MSI). Na przykład, ten PR sugeruje, że lepsze wyniki można osiągnąć używając różnych „cichych” opcji do msiexec
, ale demontaż setup.exe
pokazuje, że w rzeczywistości wykonuje /qr
, podobnie jak kod w obecnej gałęzi głównej. Tego rodzaju pytanie jest jednym z tych, na które nie czuję, że mam wystarczającą wiedzę, aby spróbować odpowiedzieć.
Były też dziwne problemy, których doświadczyłem kilka lat temu. Na przykład, jeden instalator sterownika (związany z chipsetem Intela), który wyskakuje z serią błędów WinRAR SFX z powodu próby sekwencyjnego wykonania wszystkich plików lokalizacyjnych sterownika (które nie są nawet wykonywalne). Po prostu kliknięcie przez te okna dialogowe w końcu powoduje kontynuację instalacji, ale dopóki to się nie stanie, proces jest zablokowany. Ten błąd nie występuje, gdy użytkownik ręcznie uruchamia setup.exe
, ale dlaczego nie rozumiem.
Podtrzymuję pewną nadzieję, że będę w stanie rozwiązać te problemy, ale przypadek użycia laboratorium dual-boot w moim środowisku kurczy się, więc trudno jest uzasadnić czas wymagany do spędzenia dalszych badań nad tymi kwestiami. Jeśli ktoś, kto zna się na odwracaniu setup.exe
-podobnych instalatorów i instalatorów MSI oraz ogólnie na administrowaniu systemami Windows, jest zainteresowany rozwiązaniem problemu obecnie nieco zepsutej obsługi cichej instalacji sterowników Boot Camp w tym narzędziu, będę wdzięczny za pomoc! Istnieje kilka właściwości instalatora w BootCamp.msi
, które mogą być również pomocne w tej kwestii.
Użycie
Uruchom brygadiera bez opcji, aby pobrać i rozpakować ESD, który ma zastosowanie do tego modelu, do bieżącego katalogu roboczego. W systemie OS X dokument ESD jest przechowywany w formacie .dmg, co ułatwia wypalenie go na płycie; w systemie Windows pliki sterowników są rozpakowywane.
Uruchom go z opcją --model
, aby określić alternatywny model, w postaci MacPro3,1
itd.
Uruchom go z opcją --install
, aby zarówno pobrać, jak i zainstalować, usuwając sterowniki po instalacji. To oczywiście działa tylko w systemie Windows. Ta opcja została stworzona z myślą o automatycznej instalacji sterowników Boot Camp.
Zamieść plik brigadier.plist
w tym samym folderze co skrypt, aby zastąpić adres URL .sucatalog i wskazać wewnętrzny katalog Software Update Server (szczegóły poniżej).
Dodatkowe opcje pokazane poniżej.
Pobieranie
W obszarze releases można znaleźć prekompilowane binaria dla Windows. Może to być przydatne, jeśli nie masz jeszcze zainstalowanego Pythona w Windows. Został on zbudowany przy użyciu PyInstallera. Więcej szczegółów na temat samodzielnego budowania poniżej.
Można go również uruchomić bezpośrednio z Git checkout na OS X lub Windows.
Konfiguracja
Poza kilkoma opcjami wiersza poleceń:
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.
Możesz również utworzyć plik brigadier.plist
XML plist i umieścić go w tym samym katalogu co skrypt. Obecnie obsługuje on jeden klucz: CatalogURL
, łańcuch wskazujący na wewnętrzny adres URL katalogu SUS, który zawiera pakiety BootCampESD. Zobacz przykład w tym repo.
Uruchamianie jako Sysprep FirstLogonCommand
Powszechne jest wykonywanie sterowników Boot Camp podczas fazy Sysprep po obrazowaniu, tak aby możliwe było wdrożenie tego samego obrazu do różnych modeli bez uwzględniania modelu i wymaganego pakietu Boot Camp. Brygadier wydaje się zachowywać w kontekście SysPrep FirstLogonCommand.
Jest jedno obejście wykonywane przez skrypt podczas uruchamiania w tym scenariuszu, gdzie normalnie bieżący roboczy byłby \windows\system32
. W moich testach na systemie 64-bitowym MSI zawiesiłby się, próbując zlokalizować komponenty instalatora, ze względu na sposób, w jaki Windows rozwidla folder System32
na SysWoW64
dla aplikacji 32-bitowych. Gdy skrypt wykryje ten katalog roboczy bez nadrzędnej opcji --output-dir
, ustawi katalog wyjściowy na korzeń systemu, czyli %SystemRoot%\
.
Domyślnie, gdy używana jest opcja --install
, wyczyści on wyodrębnione pliki po instalacji, chyba że podano opcję --keep-files
, więc jeśli nie chcesz zachować plików, nie powinieneś mieć potrzeby sprzątania po nim.
Uruchamianie/budowanie ze źródła w systemie Windows
Jeśli wolisz uruchomić go jako standardowy skrypt Pythona, będziesz potrzebował Pythona dla Windows (testowano z najnowszym wydaniem 2.7), aby wykonać skrypt.
Jeśli wolisz zbudować go samodzielnie, możesz użyć dołączonego skryptu budującego. Wymaga on Pythona i pasującej wersji pywin32. Obsługuje on pobieranie PyInstallera za ciebie. Po prostu uruchom go bez argumentów, a on zbuduje plik zip w bieżącym katalogu roboczym:
c:\python27\python build_windows_exe.py
Szczegóły rozpakowywania w Windows
Na OS X mamy natywne polecenia hdiutil i pkgutil do rozpakowywania plików sterowników. W systemie Windows:
- Sprawdzamy, czy program 7-Zip jest już zainstalowany – jeśli nie, pobieramy go i instalujemy
- Wyodrębniamy archiwum BootCampESD.pkg xar archive with 7-Zip
- Wyciągamy archiwum Payload za pomocą 7-Zip, raz do dekompresji gzip i ponownie do rozpakowania archiwum cpio
- Użyj 7-Zip do rozpakowania plików sterownika z pliku
WindowsSupport.dmg
wewnątrz pkg - Uninstaluję 7-Zip, jeśli go zainstalowaliśmy
Caveats
- Wymaga połączenia sieciowego, co wymaga dostępności działającego sterownika sieciowego. Najprostszym sposobem, jaki znalazłem, aby to zrobić, jest umieszczenie różnych sterowników sieciowych z BootCampESDs wewnątrz folderu „BootCamp” (lub podobnego) w
C:\Windows\INF
na obrazie sysprepowanym. Ten folder jest domyślną lokalizacją wyszukiwania sterowników urządzeń i powinien automatycznie wykryć i zainstalować sterowniki znajdujące się tutaj dla wszystkich nieznanych urządzeń. Można również zmodyfikować klucz rejestruDevicePath
, aby dodać lokalizację niestandardową, ale użycie istniejącego folderuINF
oznacza, że do aktualizacji sterowników istniejącego obrazu nie są wymagane żadne inne zmiany poza kopią pliku, więc można to zrobić bez przywracania obrazu i uruchamiania go tylko w celu zainstalowania sterownika. Obsługa sterowników w trybie offline przy użyciu Windows i DISM jest łatwa dla obrazów WIM, ale większość administratorów prawdopodobnie nie wdraża obrazów WIM na Macach, ale raczej używa narzędzi, które owijają ntfsprogs. - Obecnie nie wykonuje prawie żadnej obsługi błędów.
- Skrypt 7-Zip pobiera z publicznego adresu URL, który jest zakodowany w skrypcie. Wkrótce
brigadier.plist
będzie obsługiwać zastępowanie tych adresów URL własnymi kopiami przechowywanymi na prywatnym serwerze WWW. - Po instalacji ustawia klucz rejestru
FirstTimeRun
naHKEY_CURRENT_USER\Software\Apple Inc.\Apple Keyboard Support
, aby wyłączyć popup pomocy Boot Camp przy pierwszym uruchomieniu, a obecnie nie ma opcji wyłączenia tego zachowania. - Wspiera tylko instalacje w 64-bitowych systemach Windows. Warto wspomnieć, że dyski ESD sterownika Boot Camp z grudnia 2012 wydają się być tylko 64-bitowe, więc trzeba by wykonać dodatkową pracę, aby obsłużyć 32-bitowy system Windows. Jeśli wsparcie dla 32-bitowego Windowsa jest dla Ciebie ważne, stworzono problem, aby to śledzić.