Если вы пытались установить под VMWare Fusion или Parallels Mac OS X, то сталкивались с отказом – есть возможность установить только Mac OS X Server. Это связано с лицензионным ограничением Apple, и, конечно же, ни VMWare, ни Parallels не хотят подвергать себя риску быть обвинёнными в нарушении Software License Agreement.

Интересно самому взглянуть на соглашение, а не просто принять это на веру – все Hardware и Software Product Agreements есть на сайте Apple. Смотрим раздел 2 “Permitted License Uses and Restrictions”, жирным текстом я выделил главное.

Mac OS X (Snow Leopard)

A. Single Use License. Subject to the terms and conditions of this License, unless you have purchased a Family Pack or Upgrade license for the Apple Software, you are granted a limited non-exclusive license to install, use and run one (1) copy of the Apple Software on a single Apple-branded computer at a time.

Mac OS X Server (Snow Leopard)

A. Mac OS X Server Software. Subject to the terms and conditions of this License, you are granted a limited non-exclusive license to install and use one copy of the Mac OS X Server software (the “Mac OS X Server Software”) on a single Apple-branded computer. You may also install and use other copies of Mac OS X Server Software on the same Apple-branded computer, provided that you acquire an individual and valid license from Apple for each of these other copies of Mac OS X Server Software.

Различие налицо. Можно использовать только одну копию Mac OS X на одном компьютере одновременно, а Mac OS X Server – несколько копий. Именно это и даёт возможность легальной виртуализации Mac OS X Server.

А теперь уйдём на тёмную сторону силы – рассмотрим, что и почему нужно делать для запуска Mac OS X в виртуальной машине (давайте сделаем вид, что не поняли пункт SLA “You agree not to install, use or run the Apple Software on any non-Apple-branded computer, or to enable others to do so” – ведь мы же работаем на родном Маке, а не Хакинтоше).

Сразу уточню – для установки под VMWare нужна Retail-версия Mac OS X. Версия, идущая с ноутбуком или же iMac, не подходит – Installer Mac OS X проверяет аппаратную часть, и не разрешает установку на другом оборудовании (а Model name “VMware Virtual Platform” – это совсем не “MacBook Pro”).

Предупреждение. Я показываю принцип поиска, а готовый рецепт есть в статье “Hack VMWare Fusion 2 – Virtualize Tiger/Leopard“. Я попытался пофантазировать, как происходило нахождение этого рецепта.

Итак, приступим. В наличии – VMWare Fusion 2.0 (заметьте – лицензионная, а не “лицензионная”) и DVD с Mac OS X 10.5 Retail вставлен в привод.

Создаём виртуальную машину “Mac OS X Server 10.5″ (все параметры стандартные). Запускаем в Terminal.app dtrace для проверки, к каким файлам обращается VMWare для проверки, сервер ли это. Нужен именно dtrace, fseventer не подходит – он не показывает открываемые файлы.

sudo dtrace -n 'syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }' > vmware-10.5.txt

Стартуем виртуальную машину, и получаем назидательное сообщение о том, что DVD не совсем тот:

Останавливаем dtrace и смотрим, к каким файлам обратился VMWare на DVD:

$ cat vmware-10.5.txt | grep "Install DVD"
  0  18474                       open:entry mds /Volumes/Mac OS X Install DVD/
  0  18474                       open:entry mds Mac OS X Install DVD
  1  19260              open_nocancel:entry diskarbitration /Volumes/Mac OS X Install DVD/.autodiskmounted
  1  18474                       open:entry mds /Volumes/Mac OS X Install DVD
  1  18474                       open:entry Finder /Volumes/Mac OS X Install DVD/System/Library/CoreServices/SystemVersion.plist
  1  18474                       open:entry Finder /Volumes/Mac OS X Install DVD/System/Library/CoreServices/SystemVersion.plist

Содержимое файла SystemVersion.plist явно не указывает, что для проверки используется информация из него:

Думаем, как заставить думать VMWare, что у нас серверная версия. Для запуска системы с DVD у VMWare должен быть загрузчик. Анализируя захваченные данные dtrace (отфильтровываем по vmware), в итоге находим интересные строки:

  0  19260              open_nocancel:entry vmware-vmx /Library/Application Support/VMware Fusion/isoimages/tools-key.pub
  0  19260              open_nocancel:entry vmware-vmx /Library/Application Support/VMware Fusion/isoimages/darwin.iso.sig
  0  19260              open_nocancel:entry vmware-vmx /Library/Application Support/VMware Fusion/isoimages/darwin.iso

Загрузчик – в iso-образе darwin.iso. Второй вариант – можно было изучить каталоги VMWare и найти iso.

cd "/Library/Application Support/VMware Fusion/isoimages/"

Открываем darwin.iso в hex-viewer’е “Hex Fiend“. Как обычно пишется код? Просто: сделали проверку – выдали сообщение. Если есть сравнение строк, обращение к файлам, и они не прописаны в отдельном блоке как переменные, то есть вероятность, что в ресурсах программы будет идти проверяемая строка, а затем – сообщение об ошибке.
Пытаемся найти строку сообщения “The operating system is not Mac OS X Server”. И мы его находим, причём рядом видим имя файла ServerVersion.plist:

Делаем бекап всех файлов:

sudo bash
cd "/Library/Application Support/VMware Fusion/isoimages"
mkdir original
mv darwin.iso tools-key.pub *.sig original

На установочном диске в каталоге /System/Library/CoreServices файла ServerVersion.plist нет. Может стоит его подменить на SystemVersion.plist? Правим iso в Hex Fiend (бекапы!), благо количество букв совпадает. Другой вариант, без редактирования в hexeditor’е:

perl -n -p -e 's/ServerVersion.plist/SystemVersion.plist/g' < original/darwin.iso > darwin.iso

Загружаем, ошибка:

Вспоминаем о обращении к tools-key.pub и darwin.iso.sig перед открытием darwin.iso и понимаем, что файл изменился, и нужно перегенерировать цифровую подпись. Выходим из VMWare. В каталоге “/Library/Application Support/VMware Fusion/isoimages” видим не только публичный ключ tools-key.pub, но и приватный tools-priv.pem, которым производится подписывание (это не оплошность, так производится подписывание загружаемых образов). Смотрим документацию по OpenSSL и генерируем подпись (напоминаю, эти команды я взял из “Hack VMWare Fusion 2 – Virtualize Tiger/Leopard“):

sudo -s
cd "/Library/Application Support/VMware Fusion/isoimages"
openssl genrsa -out tools-priv.pem 2048
openssl rsa -in tools-priv.pem -pubout -out tools-key.pub
openssl dgst -sha1 -sign tools-priv.pem < darwin.iso > darwin.iso.sig
for A in *.iso ; do openssl dgst -sha1 -sign tools-priv.pem < $A > $A.sig ; done

Запускаем виртуальную машину. Вуаля! Установщик загрузился:

Наслаждаемся.