Un script Python compatible con Windows y OS X que obtiene, desde el servidor de actualización de software de Apple o el tuyo, el ESD («Electronic Software Distribution») de Boot Camp para un modelo específico de Mac. Descomprime las múltiples capas de archivos dentro del paquete plano y, si el script se ejecuta en Windows con la opción --install
, también ejecuta el instalador MSI de 64 bits.
En Windows, los archivos se descomprimen utilizando 7-Zip, y el MSI de 7-Zip se descarga e instala, y se elimina posteriormente si Brigadier lo instaló. Esta herramienta solía utilizar dmg2img para realizar la extracción de archivos del archivo WindowsSupport.dmg
de Apple, pero las versiones más recientes de 7-Zip han incluido un soporte más completo para DMGs, por lo que dmg2img parece que ya no es necesario.
Esto fue escrito por dos razones:
- Nos gustaría mantener el menor número de imágenes de sistema de Windows como sea posible, pero normalmente hay 3-5 paquetes BootCampESD disponibles de Apple en un momento dado, dirigidos a conjuntos específicos de modelos. Es posible utilizar la herramienta Orca para editar las propiedades del MSI y desactivar la comprobación del modelo, pero rara vez hay casos en los que un único instalador contenga todos los controladores. Apple ya puede descargar el instalador correcto para un modelo de máquina arrancado en OS X usando el Asistente Boot Camp, así que no hay razón para que no podamos hacer lo mismo dentro de Windows.
- A veces sólo queremos descargar y extraer una copia del instalador para un modelo determinado. Los pasos para hacerlo manualmente son tediosos, y son muchos. A partir de la primavera de 2013, Apple ha puesto a disposición una serie de paquetes de instaladores de Boot Camp en su página de descargas de soporte, pero siguen siendo una división a través de muchos conjuntos diferentes de modelos y sigue siendo un inconveniente para asegurarse de que tiene el paquete correcto.
Originalmente fue diseñado para ser ejecutado como paso posterior a la imagen para las implementaciones de Boot Camp en los Macs, pero como requiere conectividad de red, un controlador de red debe estar ya disponible en el sistema. (Ver advertencias más abajo)
Nota importante (!) sobre el soporte de Brigadier
Brigadier ha producido resultados menos que buenos con algunas combinaciones de paquetes de controladores y modelos de hardware en versiones recientes de Boot Camp 5, y ahora con Boot Camp 6. Algunas personas han confirmado problemas con Boot Camp 6 y Windows 7 en general, por lo que estos pueden no ser totalmente culpa de Brigadier. Un examen del Boot Camp setup.exe
me indica que este ejecutable realiza varias tareas y configura algún entorno para la eventual ejecución de BootCamp.msi
, que no siempre somos capaces de conseguir con la simple invocación de Brigadier de msiexec
para instalar el MSI directamente.
Estoy lejos de saber lo suficiente sobre el interior de Windows para entender cómo ser capaz de realizar una versión totalmente automatizada de lo que sea que setup.exe realmente hace (además de ejecutar eventualmente msiexec /i /qr
en el MSI). Por ejemplo, este PR sugiere que se pueden conseguir mejores resultados utilizando diferentes opciones «silenciosas» para msiexec
, pero un desensamblaje de setup.exe
muestra que en realidad está ejecutando /qr
, al igual que el código en la rama maestra actual. Este tipo de pregunta es una que no siento que tengo suficiente conocimiento para intentar una respuesta.
Ha habido problemas extraños que he experimentado un par de años también. Por ejemplo, un único instalador de controladores (relacionados con el chipset de Intel) que hace aparecer una serie de errores WinRAR SFX debido a que intenta ejecutar secuencialmente todos los archivos de localización del controlador (que ni siquiera son ejecutables). El simple hecho de hacer clic en estos diálogos hace que la instalación continúe, pero hasta que eso ocurra el proceso se bloquea. Este error no se produce cuando un usuario ejecuta manualmente setup.exe
, pero no entiendo por qué.
Aunque mantengo alguna esperanza de poder resolver estos problemas, el caso de uso de mi entorno para los laboratorios de arranque dual se está reduciendo, por lo que es difícil justificar el tiempo necesario para dedicar a seguir investigando estos problemas. Si alguien que tenga conocimientos sobre la inversión de envoltorios de instaladores tipo setup.exe
e instaladores MSI, y la administración de sistemas Windows en general, está interesado en abordar el soporte actualmente algo roto para las instalaciones silenciosas de los controladores Boot Camp en esta herramienta, ¡me encantaría algo de ayuda! Hay varias propiedades del instalador en BootCamp.msi
que pueden ser de alguna ayuda con este problema también.
Uso
Ejecutar brigadier sin opciones para descargar y desempaquetar el ESD que se aplica a este modelo, en el directorio de trabajo actual. En OS X, el ESD se guarda en formato .dmg para facilitar la grabación en un disco; en Windows, se extraen los archivos de los controladores.
Ejecútelo con la opción --model
para especificar un modelo alternativo, de la forma MacPro3,1
, etc.
Ejecútelo con la opción --install
para descargar e instalar, borrando los controladores después de la instalación. Obviamente, esto sólo funciona en Windows. Esta opción se hizo para hacer instalaciones automatizadas de los controladores Boot Camp.
Coloque un archivo brigadier.plist
en la misma carpeta que el script para anular la URL .sucatalog para que apunte a un catálogo interno del Servidor de Actualización de Software (detalles más abajo).
Opciones adicionales que se muestran a continuación.
Conseguirlo
Puede encontrar un binario precompilado para Windows en el área de versiones. Esto puede ser útil si usted no tiene ya Python instalado en Windows. Esto fue construido usando PyInstaller. Más detalles sobre cómo construirlo usted mismo más abajo.
También puede ejecutarse directamente desde un checkout de Git tanto en OS X como en Windows.
Configuración
Además de unas cuantas opciones de línea de comandos:
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.
También puede crear un archivo brigadier.plist
XML plist y colocarlo en el mismo directorio que el script. Actualmente admite una clave: CatalogURL
, una cadena que apunta a una URL del catálogo SUS interno que contiene paquetes BootCampESD. Ver el ejemplo en este repo.
Ejecutando como un Sysprep FirstLogonCommand
Es común realizar los controladores de Boot Camp durante una fase de Sysprep posterior a la creación de la imagen, para que sea posible desplegar la misma imagen en diferentes modelos sin tener en cuenta el modelo y el paquete de Boot Camp requerido. Brigadier parece comportarse en el contexto de un SysPrep FirstLogonCommand.
Hay una solución que realiza el script cuando se ejecuta en este escenario, donde el trabajo actual sería normalmente \windows\system32
. En mis pruebas en un sistema de 64 bits, el MSI se detendría tratando de localizar sus componentes de instalación, debido a la forma en que Windows bifurca su carpeta System32
en SysWoW64
para aplicaciones de 32 bits. Cuando el script detecta este directorio de trabajo sin una opción --output-dir
que lo sustituya, establecerá el directorio de salida en la raíz del sistema, es decir, %SystemRoot%\
.
Por defecto, cuando se utiliza --install
, limpiará sus archivos extraídos después de la instalación, a menos que se dé la opción --keep-files
, por lo que a menos que quiera mantener los archivos alrededor no debería necesitar limpiarlos después.
Ejecutar/construir desde el código fuente en Windows
Si prefiere ejecutarlo como un script de Python estándar, necesitará Python para Windows (esto fue probado con la última versión 2.7) para poder ejecutar el script.
Si prefiere construirlo usted mismo, puede usar el script de construcción incluido. Requiere Python y la versión correspondiente de pywin32. Se encarga de descargar PyInstaller por ti. Simplemente ejecútelo sin argumentos, y construirá un archivo zip en el directorio de trabajo actual:
c:\python27\python build_windows_exe.py
Detalles de desempaquetado en Windows
En OS X, tenemos los comandos nativos hdiutil y pkgutil para hacer el trabajo de desempaquetado de los archivos del controlador. En Windows, nosotros:
- Comprobamos si 7-Zip ya está instalado – si no, lo descargamos e instalamos
- Extraemos el archivo BootCampESD.pkg xar archivo con 7-Zip
- Extraer el archivo Payload con 7-Zip, una vez para descomprimir gzip y otra vez para desempaquetar el archivo cpio
- Utilizar 7-Zip para extraer los archivos del driver desde el archivo
WindowsSupport.dmg
dentro del pkg - Desinstalar 7-Zip si lo hemos instalado
Advertencias
- Requiere una conexión de red, que por tanto requiere que haya un driver de red que funcione. La forma más sencilla que he encontrado para hacer esto es colocar los diversos controladores de red de BootCampESDs dentro de una carpeta «BootCamp» (o similar) dentro de
C:\Windows\INF
en una imagen sysprepped. Esta carpeta es la ubicación de búsqueda por defecto para los controladores de dispositivos, y debería detectar e instalar automáticamente los controladores ubicados aquí para todo el hardware desconocido. También puede modificar la clave de registroDevicePath
para añadir una ubicación personalizada, pero el uso de la carpetaINF
existente significa que no se requieren otros cambios, además de una copia de archivo, para actualizar los controladores de una imagen existente, por lo que esto se puede hacer sin tener que restaurar la imagen y arrancarla sólo para instalar un controlador. El servicio de controladores fuera de línea utilizando Windows y DISM es fácil para las imágenes WIM, pero la mayoría de los administradores probablemente no están desplegando imágenes WIM a los Macs, sino que utilizan herramientas que envuelven ntfsprogs. - Actualmente no realiza casi ningún manejo de errores.
- El 7-Zip descarga desde una URL pública que está codificada en el script. Pronto el
brigadier.plist
soportará anular estas URLs con sus propias copias almacenadas en un servidor web privado. - Después de la instalación, establece la clave de registro
FirstTimeRun
enHKEY_CURRENT_USER\Software\Apple Inc.\Apple Keyboard Support
para desactivar la ventana emergente de ayuda de Boot Camp de primer lanzamiento, y actualmente no hay ninguna opción para desactivar este comportamiento. - Sólo soporta instalaciones en Windows de 64 bits. Vale la pena mencionar que los ESDs de los controladores de Boot Camp de diciembre de 2012 parecen ser sólo de 64 bits, por lo que habría que hacer un trabajo extra para soportar Windows de 32 bits. Si la compatibilidad con Windows de 32 bits es importante para usted, hay un tema creado para seguirlo.