Virtualizace OS X

Neustále se dostávám do situací, kdy potřebuju na Macu něco otestovat, ale následky testování se mohou pohybovat v intervalu od přebytečných souborů až do zničeného systému. Běžného uživatele by jistě napadla řešení jako obnova z Time Machine zálohy nebo instalace testovacího OS X na externí disk. Lze na to jít lepší cestou. Testovací OS X virtualizovat.

V příspěvku se podívám na instalaci nového virtuálního stroje (VM) s OS X ve VMware Fusion (Basic: 64 EUR, Pro: 139 EUR) a VirtualBoxu (zdarma).

Budeme potřebovat:

  • Mac (provoz OS X ve VM je v souladu s licencí možný pouze na Apple HW);
  • dostatek RAM (OS X vyžaduje minimálně 2GB RAM, virtualizovat OS X na MacBooku Air s 4GB RAM není optimální);
  • instalátor OS X (aktuální verze dostupná zdarma na Mac App Store);

VMware Fusion

Testováno s VMware Fusion 7.1.1 a OS X 10.10.3.

  • Ve VMware Fusion -> File -> New.
    newvm
  • Přetáhněte na okno instalátor Install OS X Yosemite.app.
    newyoyo
  • Můžete upravit nastavení VM (Customize Settings) nebo prozatím použít výchozí nastavení (Finish).
    newvm_settings
  • VM je třeba uložit někam na disk jako .vmware bundle aresář. Pro testovací VM ideálně vybrat místo, které se nezálohuje. Obraz disku o několika desítkách GB v TimeMachine záloze opravdu nechcete.
  • Fusion začne vytvářet instalační médium.
    newvm_installmedia

Uvnitř adresáře s VM (.vmware bundle) je vytvořen dočasný virtuální disk s instalátorem.
newvm_tempimg
Nabízí se otázka proč Fusion nepoužije původní instalátor a vytváří si vlastní instalační image. Toto souvisí s podobou instalátoru od verze OS X 10.9 Mavericks.

Uvnitř aplikace Install OS X Yosemite.app stažené z Mac App Store najdeme image InstallESD.dmg. Když tento obraz přimontujeme, vidíme v něm adresář Packages s instalačními balíčky a další image – BaseSystem.dmg. Ten obsahuje minimální podobu operačního systému nutnout k provedení instalace.

ls -laO
-rw-r--r--@ 1 - 6148 Apr 4 13:03 .DS_Store
-rw-r--r--@ 1 hidden 2056 Apr 4 13:00 BaseSystem.chunklist
-rw-r--r--@ 1 hidden 504780125 Apr 4 11:54 BaseSystem.dmg
drwxr-xr-x 20 - 680 Apr 4 16:50 Packages/

Až do OS X 10.8 se obsah obrazu BaseSystem.dmg nacházel v kořenovém adresáři InstallESD.dmg. Nebyl tedy problém InstallESD.dmg nahrát na flash disk a vyrobit si tak USB instalátor. Podobně snadno se InstallESD.dmg předhodil virtualizačnímu programu (připojení image ve virtuální mechanice) a ten z něj mohl rovnou nastartovat instalátor. Od OS X 10.9 Mavericks je třeba být lehce kreativnější.

Fusion vytváří nový dočasný image. Do něj nakopíruje instalátor (Install OS X Yosemite.app), bootloader (boot.efi), kernel (kernelcache) a soubor s přepínači pro kernel (com.apple.Boot.plist).

installer_anatomy

Plist com.apple.Boot.plist kernelu říká, kde má hledat operační systém instalátoru – ve vnořeném obrazu BaseSystem.dmg.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Kernel Cache</key>
  <string>/.IABootFiles/kernelcache</string>
  <key>Kernel Flags</key>
  <string>container-dmg=file:///Install%20OS%20X%20Yosemite.app/Contents/SharedSupport/InstallESD.dmg root-dmg=file:///BaseSystem.dmg</string>
</dict>
</plist>

S vysvětleným problémem instalačního image se můžeme konečně vrhnout na instalaci OS X 10.10 Yosemite.

  • Spusťte nově vytvořený VM.
    vmstart
  • Proklikejte se instalátorem. Není třeba formátovat disk. To už Fusion udělal automaticky za vás.
    vminstall
  • Běžte si uvařit čaj, dokud se OS X nenainstaluje.
    osxinstall
  • Po instalaci se proklikejte úvodním setupem (nastavení jazyka, nového uživatele, atd.).
    yoyo_setup
  • Hurá! Máte funkční testovací OS X 10.10 Yosemite VM.
    yoyo_finished
  • Nezapomeňte nainstalovat VMware Tools. Umožní mimo jiné drag&drop souborů z/do okna VM.
    vm_tools
    vmtools_installed
  • S vysokou pravděpodobností narazíte na problém s ukrutně pomalými reakcemi uživatelského rozhraní. Quartz debug hlasí framerate v jednotkách vykreslených snímků za vteřinu.
    osx_slow_gui
  • Telefony a maily s VMware podporou problém nevyřešily. Mac admini naštěstí řešení našli. Vypnutím beam sync získáme relativně plynulé vykreslování okének. Doporučuji jít cestou LaunchAgent popsaném v linkovaném řešení. Ten spouští program, jenž vypne beam sync při každém přihlášení uživatele.
    vm_gui_fast

VirtualBox

Velmi pěkně popsaný postup najdete na blogu bittorrentu 🙂

Na rozdíl od VMware Fusion si VirtualBox nedokáže poradit s aktuální podobou OS X instalátoru. Musíme vyrobit jednoúrovňový image s instalátorem. Naštěstí si tím už někdo dal práci a můžeme použít nástroje iESD nebo skript create_os_x_vm_install_dmg.

sudo gem install iesd
iesd -i "/Applications/Install OS X Yosemite.app" -o yoyo_flattened.dmg -t BaseSystem

Před instalací OS X nezapomeňte v instalátoru pomocí Disk Utility (nebo terminálu) zformátovat disk na HFS+. VirtualBox to za vás neudělá.

Nechtělo se mi instalovat vedle VMware Fusion další virtualizační software. Použil jsme proto virtuální stroj ve VMware Fusion. Stačí mu přidělit více paměti a zapnout podporu VT-x/EPT uvnitř VM.
vm_inception2

Výsledek není zrovna prakticky použitelný, ale funguje to 🙂
vm_inception_box