Skrip Python yang kompatibel dengan Windows dan OS X yang mengambil, dari server pembaruan perangkat lunak Apple atau Anda, Boot Camp ESD ("Distribusi Perangkat Lunak Elektronik") untuk model Mac tertentu. Ini membongkar beberapa lapisan arsip dalam paket flat dan jika skrip dijalankan pada Windows dengan opsi --install
, skrip ini juga menjalankan penginstal MSI 64-bit.
Di Windows, arsip dibongkar menggunakan 7-Zip, dan MSI 7-Zip diunduh dan diinstal, dan kemudian dihapus jika Brigadir menginstalnya. Alat ini dulunya menggunakan dmg2img untuk melakukan ekstraksi berkas dari berkas WindowsSupport.dmg
milik Apple, namun versi 7-Zip yang lebih baru telah menyertakan dukungan yang lebih lengkap untuk DMG, sehingga dmg2img tampaknya tidak diperlukan lagi.
Ini ditulis karena dua alasan:
Awalnya dirancang untuk dijalankan sebagai langkah pasca-pencitraan untuk penerapan Boot Camp ke Mac, namun karena memerlukan konektivitas jaringan, driver jaringan harus sudah tersedia di sistem. (Lihat Peringatan di bawah)
Brigadir memberikan hasil yang kurang bagus dengan beberapa kombinasi paket driver dan model perangkat keras di versi terbaru Boot Camp 5, dan sekarang dengan Boot Camp 6. Beberapa orang telah mengonfirmasi adanya masalah dengan Boot Camp 6 dan Windows 7 secara umum, jadi ini mungkin bukan sepenuhnya salah Brigadir. Beberapa pemeriksaan pada Boot Camp setup.exe
menunjukkan kepada saya bahwa executable ini melakukan beberapa tugas dan menyiapkan beberapa lingkungan untuk eksekusi akhir BootCamp.msi
, yang tidak selalu bisa kita dapatkan dengan pemanggilan sederhana Brigadir ke msiexec
untuk menginstal MSI secara langsung.
Saya jauh dari pengetahuan yang cukup tentang internal Windows untuk memahami cara menjalankan versi otomatis penuh dari apa pun yang sebenarnya dilakukan setup.exe (selain akhirnya menjalankan msiexec /i /qr
di MSI). Misalnya, PR ini menyarankan bahwa hasil yang lebih baik dapat dicapai dengan menggunakan opsi "tenang" yang berbeda msiexec
, tetapi pembongkaran setup.exe
menunjukkan bahwa ia benar-benar mengeksekusi /qr
, seperti halnya kode di cabang master saat ini. Pertanyaan semacam ini adalah pertanyaan yang saya rasa saya tidak memiliki cukup pengetahuan untuk mencoba menjawabnya.
Ada juga masalah aneh yang saya alami beberapa tahun lalu. Misalnya, penginstal driver tunggal (terkait chipset Intel) yang memunculkan serangkaian kesalahan WinRAR SFX karena mencoba mengeksekusi semua file lokalisasi driver secara berurutan (yang bahkan tidak dapat dieksekusi). Cukup mengklik dialog-dialog ini pada akhirnya akan menyebabkan instalasi dilanjutkan, namun hingga hal itu terjadi, prosesnya diblokir. Kesalahan ini tidak terjadi ketika pengguna menjalankan setup.exe
secara manual, tetapi mengapa saya tidak mengerti.
Meskipun saya masih memiliki harapan untuk dapat menyelesaikan masalah ini, kasus penggunaan lingkungan saya untuk laboratorium dual-boot semakin menyusut sehingga sulit untuk menentukan waktu yang diperlukan untuk meneliti lebih lanjut masalah ini. Jika ada orang yang memiliki pengetahuan tentang membalikkan pembungkus installer seperti setup.exe
dan installer MSI, dan administrasi sistem Windows secara umum, tertarik untuk menangani dukungan yang saat ini agak rusak untuk instalasi diam driver Boot Camp di alat ini, saya akan melakukannya suka bantuan! Ada beberapa properti penginstal di BootCamp.msi
yang mungkin juga dapat membantu mengatasi masalah ini.
Jalankan brigadir tanpa opsi untuk mengunduh dan membongkar ESD yang berlaku untuk model ini, ke direktori kerja saat ini. Pada OS X, ESD disimpan dalam format .dmg agar mudah dibakar ke disk; di Windows, file driver diekstraksi.
Jalankan dengan opsi --model
untuk menentukan model alternatif, dalam bentuk MacPro3,1
, dll.
Jalankan dengan opsi --install
untuk mengunduh dan menginstal, menghapus driver setelah instalasi. Ini jelas hanya berfungsi pada Windows. Opsi ini dibuat untuk melakukan instalasi otomatis driver Boot Camp.
Tempatkan file brigadier.plist
di folder yang sama dengan skrip untuk mengganti URL .sucatalog agar mengarah ke katalog Server Pembaruan Perangkat Lunak internal (detailnya di bawah).
Opsi tambahan ditunjukkan di bawah.
Anda dapat menemukan biner yang telah dikompilasi sebelumnya untuk Windows di area rilis. Ini berguna jika Anda belum menginstal Python di Windows. Ini dibangun menggunakan PyInstaller. Detail lebih lanjut tentang membangunnya sendiri di bawah.
Itu juga dapat dijalankan langsung dari checkout Git di OS X atau Windows.
Selain beberapa opsi baris perintah:
Usage: brigadier [options]
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.
Anda juga dapat membuat file plist XML brigadier.plist
dan menempatkannya di direktori yang sama dengan skrip. Saat ini mendukung satu kunci: CatalogURL
, string yang menunjuk ke URL katalog SUS internal yang berisi paket BootCampESD. Lihat contoh di repo ini.
Driver Boot Camp biasanya dijalankan selama fase Sysprep pasca-pencitraan, sehingga memungkinkan untuk menyebarkan gambar yang sama ke model yang berbeda tanpa memperhitungkan model dan paket Boot Camp yang diperlukan. Brigadir tampaknya berperilaku dalam konteks SysPrep FirstLogonCommand.
Ada satu solusi yang dilakukan oleh skrip ketika menjalankan skenario ini, di mana pekerjaan saat ini biasanya adalah windowssystem32
. Dalam pengujian saya pada sistem 64-bit, MSI akan berhenti mencoba menemukan komponen penginstalnya, karena cara Windows membagi folder System32
nya ke SysWoW64
untuk aplikasi 32-bit. Ketika skrip mendeteksi direktori kerja ini tanpa opsi --output-dir
yang menimpanya, skrip akan mengatur direktori output ke root sistem, yaitu. %SystemRoot%
.
Secara default, ketika --install
digunakan, ia akan membersihkan file yang diekstraksi setelah instalasi, kecuali opsi --keep-files
diberikan, jadi kecuali Anda ingin menyimpan file tersebut, Anda tidak perlu membersihkannya setelah itu .
Jika Anda lebih suka menjalankannya sebagai skrip Python standar, Anda memerlukan Python untuk Windows (ini telah diuji dengan rilis 2.7 terbaru) untuk menjalankan skrip.
Jika Anda lebih suka membuatnya sendiri, Anda dapat menggunakan skrip build yang disertakan. Ini membutuhkan Python dan versi pywin32 yang cocok. Ini menangani pengunduhan PyInstaller untuk Anda. Cukup jalankan tanpa argumen, dan itu akan membuat file zip di direktori kerja saat ini:
c:python27python build_windows_exe.py
Di OS X, kami memiliki perintah hdiutil dan pkgutil asli untuk melakukan pekerjaan membongkar file driver. Di Windows, kami:
WindowsSupport.dmg
di dalam pkgC:WindowsINF
pada gambar sysprepped. Folder ini adalah lokasi pencarian default untuk driver perangkat, dan folder ini akan secara otomatis mendeteksi dan menginstal driver yang terletak di sini untuk semua perangkat keras yang tidak dikenal. Anda juga dapat memodifikasi kunci registri DevicePath
untuk menambahkan lokasi khusus, namun menggunakan folder INF
yang ada berarti tidak ada perubahan lain selain salinan file yang diperlukan untuk memperbarui driver gambar yang ada, jadi ini dapat dilakukan tanpa benar-benar memulihkan gambar dan mem-bootnya hanya untuk menginstal driver. Servis driver offline menggunakan Windows dan DISM mudah dilakukan untuk image WIM, namun sebagian besar admin kemungkinan besar tidak menyebarkan image WIM ke Mac, melainkan menggunakan alat yang membungkus ntfsprogs.brigadier.plist
akan segera mendukung penggantian URL ini dengan salinan Anda sendiri yang disimpan di server web pribadi.FirstTimeRun
di HKEY_CURRENT_USERSoftwareApple Inc.Apple Keyboard Support
untuk menonaktifkan popup bantuan Boot Camp peluncuran pertama, dan saat ini tidak ada opsi untuk menonaktifkan perilaku ini.