Uno script Python compatibile con Windows e OS X che recupera, dal server di aggiornamento software di Apple o dal tuo, il Boot Camp ESD (“Electronic Software Distribution”) per uno specifico modello di Mac. Spacchetta i molteplici strati di archivi all’interno del pacchetto piatto e, se lo script viene eseguito su Windows con l’opzione --install
, esegue anche il programma di installazione MSI a 64 bit.
Su Windows, gli archivi vengono spacchettati usando 7-Zip, e l’MSI 7-Zip viene scaricato e installato, e rimosso successivamente se Brigadier lo ha installato. Questo strumento utilizzava dmg2img per eseguire l’estrazione dei file dal file WindowsSupport.dmg
di Apple, ma versioni più recenti di 7-Zip hanno incluso un supporto più completo per i DMG, quindi dmg2img sembra non essere più necessario.
Questo è stato scritto per due motivi:
- Vorremmo mantenere il minor numero possibile di immagini di sistema Windows, ma ci sono tipicamente 3-5 pacchetti BootCampESD disponibili da Apple in qualsiasi momento, destinati a specifici set di modelli. È possibile utilizzare lo strumento Orca per modificare le proprietà dell’MSI e disabilitare il controllo del modello, ma raramente ci sono casi in cui un singolo installer contiene tutti i driver. Apple può già scaricare il programma di installazione corretto per un modello di macchina avviata in OS X usando l’Assistente Boot Camp, quindi non c’è motivo per cui non si possa fare lo stesso in Windows.
- A volte vogliamo solo scaricare ed estrarre una copia del programma di installazione per un dato modello. I passi per farlo manualmente sono noiosi, e ce ne sono molti. A partire dalla primavera del 2013, Apple ha reso disponibile un certo numero di pacchetti di installazione di Boot Camp sulla loro pagina di download di supporto, ma sono ancora divisi in diversi gruppi di modelli ed è ancora scomodo assicurarsi di avere il pacchetto corretto.
E’ stato originariamente progettato per essere eseguito come passo post-imaging per le implementazioni di Boot Camp sui Mac, ma poiché richiede connettività di rete, un driver di rete deve essere già disponibile sul sistema. (Vedi Caveats qui sotto)
Nota importante (!) sul supporto per Brigadier
Brigadier ha prodotto risultati non proprio ottimi con alcune combinazioni di pacchetti di driver e modelli di hardware nelle ultime versioni di Boot Camp 5, e ora con Boot Camp 6. Alcune persone hanno confermato problemi con Boot Camp 6 e Windows 7 in generale, quindi questi potrebbero non essere interamente colpa di Brigadier. Qualche esame del Boot Camp setup.exe
mi indica che questo eseguibile esegue diversi compiti e imposta qualche ambiente per l’eventuale esecuzione di BootCamp.msi
, che non siamo sempre in grado di ottenere con la semplice invocazione di Brigadier di msiexec
per installare direttamente l’MSI.
Sono lontano dal conoscere abbastanza gli interni di Windows per capire come essere in grado di eseguire una versione completamente automatizzata di qualsiasi cosa faccia effettivamente setup.exe (oltre ad eseguire eventualmente msiexec /i /qr
sull’MSI). Per esempio, questo PR suggerisce che si possono ottenere risultati migliori usando diverse opzioni “tranquille” per msiexec
, ma un disassemblaggio di setup.exe
mostra che sta effettivamente eseguendo /qr
, come fa il codice nell’attuale ramo master. Questo tipo di domanda è una di quelle che non sento di avere abbastanza conoscenze per tentare una risposta.
Ci sono stati strani problemi che ho sperimentato anche un paio di anni fa. Per esempio, un singolo installatore di driver (relativo al chipset Intel) che fa apparire una serie di errori WinRAR SFX dovuti al tentativo di eseguire in sequenza tutti i file di localizzazione del driver (che non sono nemmeno eseguibili). Semplicemente cliccando attraverso queste finestre di dialogo alla fine l’installazione continua, ma finché ciò non accade il processo è bloccato. Questo errore non si verifica quando un utente esegue manualmente setup.exe
, ma non capisco perché.
Mentre mantengo qualche speranza di poter risolvere questi problemi, il caso d’uso del mio ambiente per i laboratori dual-boot si sta riducendo e quindi è difficile giustificare il tempo necessario per spendere ulteriori ricerche su questi problemi. Se qualcuno che ha conoscenze sull’inversione dei wrapper dell’installatore di tipo setup.exe
e degli installatori MSI, e sull’amministrazione dei sistemi Windows in generale, è interessato ad affrontare il supporto attualmente un po’ rotto per le installazioni silenziose dei driver di Boot Camp in questo strumento, mi piacerebbe avere un aiuto! Ci sono diverse proprietà del programma di installazione in BootCamp.msi
che possono essere di aiuto anche per questo problema.
Uso
Esegui brigadier senza opzioni per scaricare e scompattare l’ESD che si applica a questo modello, nella directory di lavoro corrente. Su OS X, l’ESD è tenuto in un formato .dmg per una facile masterizzazione su disco; su Windows, i file dei driver sono estratti.
Eseguilo con l’opzione --model
per specificare un modello alternativo, nella forma MacPro3,1
, ecc.
Eseguilo con l’opzione --install
per scaricare e installare, cancellando i driver dopo l’installazione. Questo ovviamente funziona solo su Windows. Questa opzione è stata fatta per fare installazioni automatiche dei driver di Boot Camp.
Posiziona un file brigadier.plist
nella stessa cartella dello script per sovrascrivere l’URL .sucatalog per puntare a un catalogo interno del Software Update Server (dettagli sotto).
Opzioni aggiuntive mostrate sotto.
Ottenere
Puoi trovare un binario precompilato per Windows nell’area delle versioni. Questo può essere utile se non hai già Python installato su Windows. Questo è stato costruito usando PyInstaller. Maggiori dettagli su come costruirlo da soli sono riportati di seguito.
Può anche essere eseguito direttamente da un checkout Git sia su OS X che su Windows.
Configurazione
Oltre ad alcune opzioni della riga di comando:
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.
Puoi anche creare un file plist brigadier.plist
XML e metterlo nella stessa directory dello script. Attualmente supporta una sola chiave: CatalogURL
, una stringa che punta ad un URL del catalogo SUS interno che contiene i pacchetti BootCampESD. Vedere l’esempio in questo repo.
Esecuzione come Sysprep FirstLogonCommand
È comune eseguire i driver Boot Camp durante una fase Sysprep post-imaging, in modo che sia possibile distribuire la stessa immagine su diversi modelli senza tener conto del modello e del pacchetto Boot Camp richiesto. Brigadier sembra comportarsi nel contesto di un FirstLogonCommand di SysPrep.
C’è un workaround eseguito dallo script quando viene eseguito in questo scenario, dove l’attuale funzionamento sarebbe normalmente \windows\system32
. Nei miei test su un sistema a 64 bit, l’MSI si fermerebbe cercando di localizzare i suoi componenti di installazione, a causa del modo in cui Windows biforca la sua cartella System32
in SysWoW64
per le applicazioni a 32 bit. Quando lo script rileva questa directory di lavoro senza un’opzione --output-dir
che la sostituisca, imposterà la directory di output alla radice del sistema, cioè %SystemRoot%\
.
Di default, quando viene usato --install
, pulirà i file estratti dopo l’installazione, a meno che non venga data l’opzione --keep-files
, quindi a meno che non vogliate tenere i file in giro non dovreste aver bisogno di pulire dopo.
Esecuzione/costruzione dai sorgenti su Windows
Se preferisci eseguirlo come uno script Python standard, avrai bisogno di Python per Windows (questo è stato testato con l’ultima versione 2.7) per eseguire lo script.
Se preferisci costruirlo da solo, puoi usare lo script di costruzione incluso. Richiede Python e la versione corrispondente di pywin32. Gestisce il download di PyInstaller per te. Eseguilo semplicemente senza argomenti e costruirà un file zip nella directory di lavoro corrente:
c:\python27\python build_windows_exe.py
Dettagli di spacchettamento su Windows
Su OS X, abbiamo i comandi nativi hdiutil e pkgutil per fare il lavoro di spacchettamento dei file dei driver. Su Windows, noi:
- Controlliamo se 7-Zip è già installato – se no, lo scarichiamo e lo installiamo
- Estraiamo l’archivio BootCampESD.pkg xar archive con 7-Zip
- Estrarre l’archivio Payload con 7-Zip, una volta per decomprimere gzip e di nuovo per scompattare l’archivio cpio
- Utilizza 7-Zip per estrarre i file del driver dal file
WindowsSupport.dmg
all’interno del pkg - Disinstalla 7-Zip se lo abbiamo installato
Caveats
- Richiede una connessione di rete, che quindi richiede che sia disponibile un driver di rete funzionante. Il modo più semplice che ho trovato per fare questo è mettere i vari driver di rete da BootCampESDs dentro una cartella “BootCamp” (o simile) all’interno di
C:\Windows\INF
su un’immagine sysprepped. Questa cartella è il luogo di ricerca predefinito per i driver dei dispositivi, e dovrebbe rilevare e installare automaticamente i driver situati qui per tutto l’hardware sconosciuto. Potete anche modificare la chiave di registroDevicePath
per aggiungere una posizione personalizzata, ma usare la cartellaINF
esistente significa che non sono necessari altri cambiamenti oltre alla copia di un file per aggiornare i driver di un’immagine esistente, quindi questo può essere fatto senza ripristinare effettivamente l’immagine e avviarla solo per installare un driver. La manutenzione offline dei driver usando Windows e DISM è facile per le immagini WIM, ma la maggior parte degli amministratori probabilmente non distribuisce immagini WIM su Mac, ma piuttosto usa strumenti che avvolgono ntfsprogs. - Al momento non esegue quasi nessuna gestione degli errori.
- Il 7-Zip scarica da un URL pubblico che è hardcoded nello script. Presto il
brigadier.plist
supporterà la sovrascrittura di questi URL con le proprie copie memorizzate su un webserver privato. - Dopo l’installazione, imposta la chiave di registro
FirstTimeRun
aHKEY_CURRENT_USER\Software\Apple Inc.\Apple Keyboard Support
per disabilitare il popup di aiuto di Boot Camp al primo avvio, e attualmente non c’è alcuna opzione per disabilitare questo comportamento. - Solo supporta installazioni su Windows a 64 bit. Vale la pena menzionare che gli ESD dei driver di Boot Camp di dicembre 2012 sembrano essere solo a 64 bit, quindi sarebbe necessario un lavoro extra per supportare Windows a 32 bit. Se il supporto di Windows a 32 bit è importante per te, c’è un problema creato per tenerne traccia.