Um script Python compatível com Windows e OS X que busca, a partir do servidor de atualização de software da Apple ou do seu servidor, o ESD do Boot Camp (“Electronic Software Distribution”) para um modelo específico de Mac. Ele descompacta as múltiplas camadas de arquivos dentro do pacote flat e se o script for executado no Windows com a opção --install
, ele também executa o instalador MSI de 64 bits.
No Windows, os arquivos são descompactados usando o 7-Zip, e o 7-Zip MSI é baixado e instalado, e removido posteriormente se o Brigadier o instalou. Esta ferramenta usava o dmg2img para executar a extração de arquivos do arquivo WindowsSupport.dmg
da Apple, mas as versões mais recentes do 7-Zip incluíram suporte mais completo para DMGs, então o dmg2img parece não ser mais necessário.
Foi escrito por duas razões:
- Gostaríamos de manter o menor número possível de imagens do sistema Windows, mas normalmente há pacotes 3-5 BootCampESD disponíveis da Apple a qualquer momento, visando conjuntos específicos de modelos. É possível usar a ferramenta Orca para editar as propriedades do MSI e desabilitar a verificação de modelos, mas raramente há casos em que um único instalador contém todos os drivers. A Apple já pode baixar o instalador correto para um modelo de máquina inicializada no OS X usando o Assistente do Boot Camp, então não há razão para não podermos fazer o mesmo dentro do Windows.
- Por vezes só queremos baixar e extrair uma cópia do instalador para um determinado modelo. Os passos para fazer isso manualmente são tediosos, e há muitos deles. A partir da Primavera de 2013, a Apple disponibilizou uma série de pacotes de instalação do Boot Camp na sua página de downloads de suporte, mas ainda estão divididos por muitos conjuntos diferentes de modelos e ainda é inconveniente garantir que tem o pacote correcto.
Foi originalmente desenhado para ser executado como passo pós-imagem para implementações do Boot Camp para Macs, mas como requer conectividade de rede, um driver de rede já deve estar disponível no sistema. (Veja Caveats abaixo)
Importante (!) nota sobre suporte para Brigadier
Brigadier produziu resultados menos que grandes com algumas combinações de pacotes de drivers e modelos de hardware em versões recentes do Boot Camp 5, e agora com o Boot Camp 6. Algumas pessoas confirmaram problemas com o Boot Camp 6 e o Windows 7 em geral, portanto estes podem não ser inteiramente culpa do Brigadier. Alguns exames do Boot Camp setup.exe
indicam-me que este executável executa várias tarefas e configura algum ambiente para a eventual execução de BootCamp.msi
, o que nem sempre somos capazes de obter com a simples invocação do Brigadier de msiexec
para instalar o MSI directamente.
Eu estou longe de saber o suficiente sobre os internos do Windows para compreender como ser capaz de executar uma versão totalmente automatizada do que quer que o setup.exe realmente faça (além de eventualmente executar msiexec /i /qr
no MSI). Por exemplo, este PR sugere que melhores resultados podem ser alcançados usando diferentes opções “silenciosas” para msiexec
, mas uma desmontagem de setup.exe
mostra que ele está realmente executando /qr
, assim como o código no ramo mestre atual. Este tipo de pergunta é uma que eu sinto que não tenho conhecimento suficiente para tentar uma resposta.
Têm havido problemas estranhos que eu também tive há alguns anos atrás. Por exemplo, um único instalador de drivers (relacionado com o chipset Intel) que aparece com uma série de erros WinRAR SFX devido à tentativa de executar sequencialmente todos os ficheiros de localização do driver (que nem sequer são executáveis). Basta clicar nestas caixas de diálogo para que a instalação continue, mas até isso acontecer o processo é bloqueado. Este erro não acontece quando um usuário executa manualmente setup.exe
, mas porque eu não entendo.
Embora eu mantenha alguma esperança de ser capaz de resolver estes problemas, o caso de uso do meu ambiente para laboratórios dual-boot está encolhendo e por isso é difícil justificar o tempo necessário para passar mais tempo pesquisando estes problemas. Se alguém que tenha conhecimento em reverter setup.exe
como instaladores de wrappers e instaladores MSI, e administração de sistemas Windows em geral, está interessado em lidar com o suporte atual – e pouco quebrado – para instalações silenciosas dos drivers do Boot Camp nesta ferramenta, eu adoraria alguma ajuda! Existem várias propriedades do instalador em BootCamp.msi
que podem ser de alguma ajuda com este problema também.
Uso
Executar brigadeiro sem opções para baixar e descompactar o ESD que se aplica a este modelo, para o diretório de trabalho atual. No OS X, o ESD é mantido em um formato .dmg para fácil gravação em disco; no Windows, os arquivos do driver são extraídos.
Executar com a opção --model
para especificar um modelo alternativo, no formato MacPro3,1
, etc.
Executar com a opção --install
tanto para download quanto para instalação, apagando os drivers após a instalação. Isto obviamente funciona apenas no Windows. Esta opção foi feita para fazer instalações automáticas dos drivers do Boot Camp.
Colocar um arquivo brigadier.plist
na mesma pasta do script para sobrepor a URL .sucatalog para apontar para um catálogo interno do Software Update Server (detalhes abaixo).
Opções adicionais mostradas abaixo.
Obtendo-o
Você pode encontrar um binário pré-compilado para Windows na área de lançamentos. Isto pode ser útil se você ainda não tiver o Python instalado no Windows. Isto foi construído usando o PyInstaller. Mais detalhes sobre como compilá-lo você mesmo abaixo.
Tambem pode ser executado diretamente de um checkout Git tanto no OS X quanto no Windows.
Configuração
Besides algumas opções de linha de 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.
Você também pode criar um arquivo plist brigadier.plist
XML e colocá-lo no mesmo diretório do script. Atualmente suporta uma chave: CatalogURL
, uma string que aponta para uma URL interna do catálogo SUS que contém pacotes BootCampESD. Veja o exemplo neste repo.
Executando como um Sysprep FirstLogonCommand
É comum executar os drivers do Boot Camp durante uma fase pós-imagem do Sysprep, para que seja possível implementar a mesma imagem para modelos diferentes sem levar em conta o modelo e o pacote Boot Camp requerido. Brigadier parece comportar-se no contexto de um SysPrep FirstLogonCommand.
Existe um workaround executado pelo script quando executado neste cenário, onde o trabalho atual seria normalmente \windows\system32
. Em meus testes em um sistema de 64 bits, o MSI pararia de tentar localizar seus componentes instaladores, devido à forma como o Windows forca sua pasta System32
em SysWoW64
para aplicações de 32 bits. Quando o script detecta este diretório de trabalho sem uma opção --output-dir
sobrepondo-o, ele irá definir o diretório de saída para a raiz do sistema, ou seja, %SystemRoot%\
.
Por padrão, quando --install
é usado, ele irá limpar seus arquivos extraídos após a instalação, a menos que a opção --keep-files
seja dada, então, a menos que você queira manter os arquivos ao seu redor, você não deve precisar limpar depois dele.
Executar/construir a partir do código fonte no Windows
Se preferir executá-lo como um script Python padrão, você precisará do Python para Windows (este foi testado com a última versão 2.7) para executar o script.
Se preferir construí-lo você mesmo, você pode usar o script de construção incluído. Ele requer o Python e a versão correspondente do pywin32. Ele lida com o download do PyInstaller para você. Simplesmente execute-o sem argumentos, e irá construir um ficheiro zip no directório de trabalho actual:
c:\python27\python build_windows_exe.py
Descompacte os detalhes no Windows
No OS X, temos os comandos nativos hdiutil e pkgutil para fazer o trabalho de descompactação dos ficheiros do driver. No Windows, we:
- Verifica se o 7-Zip já está instalado – se não, nós descarregamos e instalamos
- Extrai o BootCampESD.pkg xar arquivo com 7-Zip
- Extrair o arquivo Payload com 7-Zip, uma vez para descomprimir o gzip e novamente para descompactar o arquivo cpio
- Utilizar o 7-Zip para extrair os arquivos de driver do arquivo
WindowsSupport.dmg
dentro do pkg - Desinstalar o 7-Zip se o instalamos
Caveats
- Requer uma conexão de rede, o que requer, portanto, que um driver de rede funcional esteja disponível. A maneira mais simples que encontrei para fazer isto é colocar os vários drivers de rede da BootCampESDs dentro de uma pasta “BootCamp” (ou similar) dentro de
C:\Windows\INF
em uma imagem sysprepped. Esta pasta é o local padrão de pesquisa para drivers de dispositivos, e deve detectar e instalar automaticamente os drivers localizados aqui para todo o hardware desconhecido. Você também pode modificar a chave de registroDevicePath
para adicionar um local personalizado, mas usando a pastaINF
existente significa que nenhuma outra alteração além de uma cópia de arquivo é necessária para atualizar os drivers de uma imagem existente, então isso pode ser feito sem realmente restaurar a imagem e inicializá-la apenas para instalar um driver. A manutenção do driver off-line usando Windows e DISM é fácil para imagens WIM, mas a maioria dos administradores provavelmente não estão implantando imagens WIM para Macs, mas sim usando ferramentas que envolvem ntfsprogs. - Atualmente ele não executa quase nenhum tratamento de erros.
- Os downloads 7-Zip de uma URL pública que é codificada no script. Em breve o
brigadier.plist
irá suportar a sobreposição destas URLs com as suas próprias cópias armazenadas num servidor web privado. - Após a instalação, ele coloca a chave de registo
FirstTimeRun
emHKEY_CURRENT_USER\Software\Apple Inc.\Apple Keyboard Support
para desactivar o popup de ajuda do primeiro lançamento do Boot Camp, e não há actualmente opção para desactivar este comportamento. - Apenas suporta instalações em Windows de 64 bits. Vale a pena mencionar que os ESDs do driver Boot Camp de dezembro de 2012 parecem ser apenas de 64 bits, portanto, trabalho extra precisaria ser feito para suportar Windows de 32 bits. Se o suporte a Windows de 32 bits é importante para você, há um problema criado para rastreá-lo.