Неделю назад я хотел проверить, как будет проходить обновление Mac OS X Server 10.6 на OS X Lion Server 10.7. Всё оказалось гораздо сложнее, чем я думал – процесс установки 10.7 в VMWare Fusion был мучительным. Ни VMWare Fusion, ни Parallels Desktop не поддерживают пока гостевую OS X Lion, ни десктопную, ни серверную.
Я пробовал разные варианты. И в конце-концов всё заработало. Когда вы прочитаете инструкцию, то вам может показаться, что вопрос и яйца выеденного не стоит, но эта простота стоила больших усилий. И если бы не nvram-файл, то так бы ничего не получилось.
Установка базируется на уже канонической статье об установке OS X 10.7 Developer Preview 2 в VMWare Fusion. Fusion – последний. Хостовая система – OS X Lion.
Беру установочный образ OS X Lion из раздела Recovery HD.
$ diskutil list /dev/disk0 #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *160.0 GB disk0 1: EFI 209.7 MB disk0s1 2: Apple_HFS Lion 159.2 GB disk0s2 3: Apple_Boot Recovery HD 650.0 MB disk0s3 $ diskutil mount /dev/disk0s3 Volume Recovery HD on /dev/disk0s3 mounted
Монтирую образ:
$ open /Volumes/Recovery\ HD/com.apple.recovery.boot/BaseSystem.dmg
Захожу в Disk Utility, File/New/Blank Disk Image. Параметры взял из статьи (обратите внимание на “Image Format: DVD/CD master”):
Клонирую установочный образ из Recovery HD в свежесозданный образ через Disk Utility:
“Erase” приводит к тому, что появляется два “Mac OS X Base System”. Второй из Finder переименовываю обратно в “MyInstaller”:
Теперь нужно скопировать необходимые для установки файлы из релиза OS X Lion. Списываю повторно установочный пакет из App Store по рецепту, описанному в “Re-Download Mac OS X Lion from the App Store“. По непонятной причине я не смог просто загрузиться с этого образа, поэтому иду на такие ухищрения.
Монтирую полный установочный образ:
$ open /Applications/Install\ Mac\ OS\ X\ Lion.app/Contents/SharedSupport/InstallESD.dmg
Теперь открыто три образа:
- Mac OS X Base System – из Recovery HD
- Mac OS X Install ESD – из установочного пакета OS X Lion
- MyInstaller – пакет, который мы формируем.
Копирую kernelcache, в котором скомпонованы kext’ы (kernel extension) для ускорения загрузки:
$ sudo cp "/Volumes/Mac OS X Install ESD/kernelcache" /Volumes/MyInstaller/kernelcache
Для простоты копирую существующий com.apple.Boot.plist и удаляю строку с “root-dmg=file:///BaseSystem.dmg”:
$ sudo vim /Volumes/MyInstaller/Library/Preferences/SystemConfiguration/com.apple.Boot.plist <?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 Flags</key> <key>Kernel Cache</key> <string>\kernelcache</string> </dict> </plist>
Копирую установочные пакеты (1.5 GB), предварительно удаляя нерабочий симлинк:
$ sudo rm /Volumes/MyInstaller/System/Installation/Packages $ sudo cp -Rv "/Volumes/Mac OS X Install ESD/Packages" /Volumes/MyInstaller/System/Installation/Packages
Можно приступать к VMWare Fusion. Модифицируем VMWare Fusion, чтобы она не проверяла “серверность”:
$ sudo bash # cd "/Library/Application Support/VMware Fusion/isoimages" # mkdir original # mv darwin.iso tools-key.pub *.sig original # perl -n -p -e 's/ServerVersion.plist/SystemVersion.plist/g' < original/darwin.iso > darwin.iso # 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
Тут начинается путаница, этот вариант у меня в итоге не сработал, поэтому добавляю второй костыль для “серверности” в образ MyInstaller.cdr:
$ sudo touch /Volumes/MyInstaller/System/Library/CoreServices/ServerVersion.plist
Образ готов, eject:
$ diskutil eject /Volumes/MyInstaller
Создаю новую виртуальную машину, “Continue without disc” (кстати, знаете, чем отличается disc от disk?). В “Use operating system installation disc image file” подставляю свежесозданный диск. Тип операционной системы понятен. Mac OS X Server 10.6 64 bit.
Customize Settings. Сохраняю VM с именем Lion. В секции “Hard Disks” снимаю галочку с “Split into 2 GB files”, Apply. В “Processors & RAM” ставлю память 2048 – да, при меньшем количестве памяти система не стартует (можно правда поправить OSInstall.mpkg, но это отдельная тема). Остальное не трогаю, разве что меняю сетевое подключение с NAT на Bridged, это касается моей конфигурации сети.
В инструкции ищу ссылку на файл nvram.zip и списываю его. Нахожу в Finder виртуальную машину, Secondary Click, “Show Package Content”. Переношу куда-нибудь старый файл Lion.nvram, забрасываю списанный файл и переименовываю по имени виртуальной машины:
Без замены файла nvram VM не запустится. Как сделать этот файл “с нуля”, я не знаю, может кто-то просветит?
Запускаю виртуальную машину. После двух костылей “серверности” процесс начался:
Но в установленной системе файла ServerVersion.plist нет, и при старте выдаётся ошибка:
Есть два варианта:
- Загрузиться с установочного образа. Предпочтительнее, так как нужно сделать ещё одну дополнительную операцию (об этом ниже).
- Смонтировать диск виртуальной машины через MacFUSE.
Загрузка с установочного образа
Запускаю виртуальную машину, сразу же нажимаю пробел, вызывается BIOS (не уверен, что это не EFI/etc, но это несущественно):
Boot Manager. Выбираю первый из “EFI SCSI Device”. Не получится – повторяю и выбираю второй:
Запускаю Utilities/Terminal.app:
Делаю “серверность”:
$ sudo touch /Volumes/Macintosh\ HD/System/Library/CoreServices/ServerVersion.plist
Обычно грустно смотреть на серый экран виртуальной машины, если она не запускается уже десятую минуту. Для придания осмысленности процессу нужно включить загрузку операционной системы в Verbose mode. Однако клавиатурная комбинация Command+V у меня почему-то не работает в Fusion…
В том же терминале выполняю команду:
# nvram boot-args="-v"
“-x” тоже держу наготове, если VM зависнет на сообщении вида “Sandbox: sandboxd(125) deny distributed-notification-post”. Тогда снова загрузка с образа, включение Safe mode:
# nvram boot-args="-x -v"
Но не забудьте после успешного запуска системы отключить Safe Mode, оставив Verbose:
$ sudo nvram boot-args="-v"
или вернуть всё к обычному состоянию
$ sudo nvram boot-args=""
Вот сеанс:
В конце – рестарт системы через “shutdown -r now”.
Монтирование диска через MacFUSE
Версия MacFuse с Google Code не поддерживает Lion, в этом я убедился после его установки. Нашёл новую версию на сайте Tuxera: macfuse-core-10.5-2.1.9.dmg. После установки vmware-vmdkMounter начинает работать.
Монтирую образ:
$ sudo /Library/Application\ Support/VMware\ Fusion/VMDKMounter.app/Contents/MacOS/vmware-vmdkMounter /Volumes/Data/Virtual\ Machines.localized/Lion.vmwarevm/Lion.vmdk $ sudo touch /Volumes/Lion.vmdk/System/Library/CoreServices/ServerVersion.plist
Не помешает примонтированный образ добавить в исключения Spotlight, иначе индексирование зря нагрузит систему.
Отмонтировать можно традиционно через Finder, а потом нужно прервать запущенный ранее vmware-vmdkMounter.
Финиш
Вуаля! Система запустилась и можно приступать к настройке:
Кстати, на будущее не помешает на этой стадии сделать Shutdown VM, смонтировать диск через MacFUSE описанным выше методом и сделать dmg-файл, чтобы можно было быстро откатиться в случае необходимости или же начать новые эксперименты, не проделывая указанные выше операции. Disk Utility, выбрать смонтированный в vmware-vmdkMounter раздел, New/Disk Image from Macintosh HD:
Почему не Take Snapshot? А потому что vmware-vmdkMounter не может смонтировать образ со снепшотами.
Всё. Терпение, труд и Google всё перетрут.