Un script Python compatible avec Windows et OS X qui récupère, depuis le serveur de mise à jour logicielle d’Apple ou le vôtre, l’ESD (« Electronic Software Distribution ») de Boot Camp pour un modèle spécifique de Mac. Il décompose les multiples couches d’archives dans le paquet plat et si le script est exécuté sur Windows avec l’option --install, il exécute également l’installateur MSI 64 bits.

Sur Windows, les archives sont décompressées à l’aide de 7-Zip, et le MSI 7-Zip est téléchargé et installé, et supprimé plus tard si Brigadier l’a installé. Cet outil avait l’habitude d’utiliser dmg2img pour effectuer l’extraction des fichiers du fichier WindowsSupport.dmg d’Apple, mais des versions plus récentes de 7-Zip ont inclus un support plus complet des DMG, donc dmg2img semble ne plus être nécessaire.

Ceci a été écrit pour deux raisons :

  1. Nous aimerions maintenir le moins d’images système Windows possible, mais il y a généralement 3 à 5 paquets BootCampESD disponibles chez Apple à tout moment, ciblant des ensembles spécifiques de modèles. Il est possible d’utiliser l’outil Orca pour modifier les propriétés du MSI et désactiver la vérification du modèle, mais il est rare qu’un seul installateur contienne tous les pilotes. Il est déjà possible de télécharger le programme d’installation correct pour un modèle de machine démarrée dans OS X à l’aide de l’assistant Boot Camp, il n’y a donc aucune raison pour que nous ne puissions pas faire de même dans Windows.
  2. Parfois, nous voulons simplement télécharger et extraire une copie du programme d’installation pour un modèle donné. Les étapes pour le faire manuellement sont fastidieuses, et elles sont nombreuses. Depuis le printemps 2013, Apple a mis à disposition un certain nombre de paquets d’installation de Boot Camp sur sa page de téléchargements de support, mais ils sont encore divisés en de nombreux ensembles de modèles différents et il est encore peu pratique de s’assurer que vous avez le bon paquet.

Il a été conçu à l’origine pour être exécuté comme étape post-image pour les déploiements de Boot Camp sur les Macs, mais comme il nécessite une connectivité réseau, un pilote réseau doit être déjà disponible sur le système. (Voir Caveats ci-dessous)

Note importante ( !) sur la prise en charge de Brigadier

Brigadier a produit des résultats moins que bons avec certaines combinaisons de paquets de pilotes et de modèles de matériel dans les versions récentes de Boot Camp 5, et maintenant avec Boot Camp 6. Certaines personnes ont confirmé des problèmes avec Boot Camp 6 et Windows 7 en général, donc ceux-ci ne sont peut-être pas entièrement la faute de Brigadier. Un certain examen de Boot Camp setup.exe m’indique que cet exécutable effectue plusieurs tâches et met en place un certain environnement pour l’exécution éventuelle de BootCamp.msi, que nous ne sommes pas toujours en mesure d’obtenir avec la simple invocation de Brigadier de msiexec pour installer directement le MSI.

Je suis loin d’être assez bien informé sur les internes de Windows pour comprendre comment être en mesure d’effectuer une version entièrement automatisée de tout ce que setup.exe fait réellement (en plus d’exécuter éventuellement msiexec /i /qr sur le MSI). Par exemple, ce PR suggère que de meilleurs résultats peuvent être obtenus en utilisant différentes options « silencieuses » à msiexec, mais un désassemblage de setup.exe montre qu’il exécute en fait /qr, comme le fait le code dans la branche maîtresse actuelle. Ce genre de question, je ne pense pas avoir suffisamment de connaissances pour tenter d’y répondre.

Il y a eu des problèmes étranges que j’ai rencontrés il y a quelques années également. Par exemple, un seul installateur de pilote (lié au chipset Intel) qui fait apparaître une série d’erreurs SFX WinRAR en raison de sa tentative d’exécuter séquentiellement tous les fichiers de localisation du pilote (qui ne sont même pas exécutables). Il suffit de cliquer sur ces boîtes de dialogue pour que l’installation se poursuive, mais en attendant, le processus est bloqué. Cette erreur ne se produit pas lorsqu’un utilisateur exécute manuellement setup.exe, mais pourquoi je ne comprends pas.

Bien que je maintienne un certain espoir de pouvoir résoudre ces problèmes, le cas d’utilisation de mon environnement pour les laboratoires de double démarrage se réduit et il est donc difficile de justifier le temps nécessaire pour consacrer davantage de recherches à ces problèmes. Si quelqu’un qui a des connaissances sur l’inversion des wrappers d’installation de type setup.exe et des installateurs MSI, ainsi que sur l’administration des systèmes Windows en général, est intéressé à s’attaquer au support actuellement un peu cassé des installations silencieuses des pilotes Boot Camp dans cet outil, j’aimerais avoir de l’aide ! Il y a plusieurs propriétés d’installation dans BootCamp.msi qui peuvent être d’une certaine aide avec ce problème aussi.

Utilisation

Lancer brigadier sans options pour télécharger et décompresser l’ESD qui s’applique à ce modèle, dans le répertoire de travail actuel. Sous OS X, l’ESD est conservé au format .dmg pour une gravure facile sur un disque ; sous Windows, les fichiers de pilotes sont extraits.

Lancez-le avec l’option --model pour spécifier un modèle alternatif, sous la forme MacPro3,1, etc.

Lancez-le avec l’option --install pour à la fois télécharger et installer, en supprimant les pilotes après l’installation. Ceci ne fonctionne évidemment que sous Windows. Cette option a été faite pour faire des installations automatisées des pilotes Boot Camp.

Placez un fichier brigadier.plist dans le même dossier que le script pour remplacer l’URL .sucatalog afin de pointer vers un catalogue interne du Software Update Server (détails ci-dessous).

Options supplémentaires présentées ci-dessous.

L’obtenir

Vous pouvez trouver un binaire pré-compilé pour Windows dans la zone des versions. Cela peut être utile si vous n’avez pas déjà installé Python sur Windows. Il a été construit à l’aide de PyInstaller. Plus de détails sur sa construction vous-même ci-dessous.

Il peut également être exécuté directement à partir d’un checkout Git sur OS X ou Windows.

Configuration

En plus de quelques options de ligne de commande :

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.

Vous pouvez également créer un fichier plist XML brigadier.plist et le placer dans le même répertoire que le script. Il prend actuellement en charge une seule clé : CatalogURL, une chaîne qui pointe vers une URL de catalogue SUS interne qui contient des paquets BootCampESD. Voir l’exemple dans ce repo.

Exécution en tant que commande Sysprep FirstLogonCommand

Il est courant d’effectuer les pilotes Boot Camp pendant une phase Sysprep post-image, afin qu’il soit possible de déployer la même image sur différents modèles sans tenir compte du modèle et du paquet Boot Camp requis. Brigadier semble se comporter dans le contexte d’un SysPrep FirstLogonCommand.

Il y a une solution de contournement effectuée par le script lorsqu’il est exécuté dans ce scénario, où le travail actuel serait normalement \windows\system32. Dans mes tests sur un système 64 bits, le MSI s’arrêtait en essayant de localiser ses composants d’installation, en raison de la façon dont Windows bifurque son dossier System32 en SysWoW64 pour les applications 32 bits. Lorsque le script détecte ce répertoire de travail sans qu’une option --output-dir ne le remplace, il définira le répertoire de sortie à la racine du système, c’est-à-dire %SystemRoot%\.

Par défaut, lorsque --install est utilisé, il nettoiera ses fichiers extraits après l’installation, à moins que l’option --keep-files ne soit donnée, donc à moins que vous ne vouliez garder les fichiers autour, vous ne devriez pas avoir besoin de nettoyer après.

Exécution/construction à partir des sources sous Windows

Si vous préférez l’exécuter comme un script Python standard, vous aurez besoin de Python pour Windows (cela a été testé avec la dernière version 2.7) afin d’exécuter le script.

Si vous préférez le construire vous-même, vous pouvez utiliser le script de construction inclus. Il nécessite Python et la version correspondante de pywin32. Il gère le téléchargement de PyInstaller pour vous. Exécutez-le simplement sans arguments, et il construira un fichier zip dans le répertoire de travail actuel :

c:\python27\python build_windows_exe.py

Détails du déballage sur Windows

Sur OS X, nous avons les commandes natives hdiutil et pkgutil pour faire le travail de déballage des fichiers du pilote. Sur Windows, nous :

  1. Vérifions si 7-Zip est déjà installé – si ce n’est pas le cas, nous le téléchargeons et l’installons
  2. Extrayons le BootCampESD.pkg xar archive avec 7-Zip
  3. Extraire l’archive Payload avec 7-Zip, une fois pour décompresser gzip et une autre fois pour décompresser l’archive cpio
  4. Utiliser 7-Zip pour extraire les fichiers du pilote à partir du fichier WindowsSupport.dmg dans le pkg
  5. Désinstaller 7-Zip si nous l’avons installé

Caveats

  • Il faut une connexion réseau, ce qui nécessite donc qu’un pilote réseau fonctionnel soit disponible. La façon la plus simple que j’ai trouvée pour le faire est de placer les différents pilotes réseau de BootCampESDs à l’intérieur d’un dossier « BootCamp » (ou similaire) dans C:\Windows\INF sur une image sysprepped. Ce dossier est l’emplacement de recherche par défaut des pilotes de périphériques, et il devrait automatiquement détecter et installer les pilotes situés ici pour tout matériel inconnu. Vous pouvez également modifier la clé de registre DevicePath pour ajouter un emplacement personnalisé, mais l’utilisation du dossier INF existant signifie qu’aucune autre modification qu’une copie de fichier n’est nécessaire pour mettre à jour les pilotes d’une image existante, de sorte que cela peut être fait sans restaurer l’image et la démarrer juste pour installer un pilote. La gestion des pilotes hors ligne en utilisant Windows et DISM est facile pour les images WIM, mais la plupart des administrateurs ne déploient probablement pas d’images WIM sur les Mac, mais utilisent plutôt des outils qui enveloppent ntfsprogs.
  • Il n’effectue actuellement presque aucune gestion des erreurs.
  • Le 7-Zip télécharge à partir d’une URL publique qui est codée en dur dans le script. Bientôt, le brigadier.plist supportera le remplacement de ces URL avec vos propres copies stockées sur un serveur web privé.
  • Après l’installation, il définit la clé de registre FirstTimeRun à HKEY_CURRENT_USER\Software\Apple Inc.\Apple Keyboard Support pour désactiver la popup d’aide Boot Camp de premier lancement, et il n’y a actuellement aucune option pour désactiver ce comportement.
  • Seulement les installations sur Windows 64 bits. Il convient de mentionner que les ESD du pilote Boot Camp de décembre 2012 semblent être uniquement 64 bits, donc un travail supplémentaire devrait être effectué pour prendre en charge Windows 32 bits. Si la prise en charge de Windows 32 bits est importante pour vous, il y a un problème créé pour en assurer le suivi.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.