Linux, Mac OS X и Windows - вместе!
Решил поделиться своим опытом установки на компьютер с материнкой, поддерживающей аппаратное разделение ресурсов (Intel VT-d) между виртуальными машинами, трех операционных систем. Если заметите какие-то недочеты, ошибки пожалуйста, сообщите об этом. Копипастить можно куда угодно , если найдете тут что-то полезное.
Зачем оно надо? Ну, к примеру, хочется иметь привычный Linux в качестве основной операционной системы, а вокруг полно всяких устройств, которые хотят либо Windows, либо Mac, а под Linux наотрез отказываются работать.
Ставить все это на разные разделы не хочется, поскольку это крайне неудобно, ибо поддержка чужих файловых систем в этих ОС оставляет желать лучшего. Да и привыкаешь к одному окружению. Также, иногда хотелось бы, чтобы закрытая проприетарная система выполнялась в песочнице, а не диктовала пользователю свои условия использования PC, но это уже вопрос не технический.
К счастью, Intel дала нам возможность создавать не просто виртуальные машины, а такие "полувиртуальные", когда ОС может работать напрямую с теми железками, котоые ей определит пользователь. Называется такая технология "виртуализацией вводв-вывода" (Virtualization Technology for directed I/O), и доступна не только в Hi-End сегментах рынка, как можно бы было подумать, но и на самых обычных бюджетных китайско-тайваньских "мамках" наподобие Gigabyte GA-Q35M-S2.
В плане софта дело обстоит несколько хуже: не так уж много ОС поддерживают нормальную работу такого "зоопапрка" на одном компьютере. Из свободного ПО можно на данный момент выделить 2 продукта:
VirtualBox, VMWare и другие широкоизвестные виртуализаторы пока не научились делить железо, хотя есть информация, что поддержка VT-d имеется в Parallels Workstation под Mac.
На момент написания статьи лучшим "делителем железа" является Xen. По крайне мере, в отличие от KVM в нем более корректно пробрасываются USB-шины, что важно для работы с Windows-only и Mac OS X-only устройствами. О нем дальше и поведем речь.
Xen представляет собой гипервизор - маленькое ядро, работающее в привелигированном режиме, и разделяющие ресурсы компьютера между различными доменами (виртуальными машинами).
Домены бывают двух типов: ведущий (Dom0, он всегда один в системе) и ведомые (DomU, их может быть несколько). Ведущий домен загружается в первую очередь и управляет ведомыми доменами, а также самим Xen, содержит драйвера устройств, которыми пользуется Xen, чтобы выделять ведомым доменам часть ресурсов, предоставляемых ведущим доменом. Поэтому, зачастую, ведущий домен отождествляется с хост-системой в традиционных системах виртуализации, хотя на самом деле, он представляет собой виртуальную машину.
Xen поддерживает две технологии виртуализации:
Этап первый - установка гипервизора Xen.
1) Скачиваем дистрибутив Xen версии 3.4.2 или новее. Настоятельно рекомендуется ставить из исходников, поскольку, возможно, возникнут проблемы, описанные ниже и гипервизор придется патчить.
2) Устанавливаем dev86 и bin86:
3) Собираем Xen. В папке с исходниками даем команду "make xen". Если сборка прошла удачно, устанавливаем гипервизор командой "make install-xen".
4) Собираем xen-tools. В папке с исходниками даем команду "make tools". Если сборка прошла удачно, устанавливаем тулзы командой "make install-tools".
5) Скачиваем development-снапшот ядра Linux с поддержкой ведущего домена Xen (обычные ядра могут быть только ведомыми, поддержка ведущих планируется в ближайших версиях основной ветки ядра). Ядро доступно через git-репозитарий:
Если нет желания возиться с git'ом, можно просто взять здесь снапшот от середины ноября 2009 года.
6) Конфигурируем ядро, включаем нужные опции для Xen:





7) Собираем ядро. Если все прошло удачно, устанавливаем модули командой "make modules-install". Файл ядра arch/boot/x86/bzImage кладем в папку /boot под именем vmlinuz-xen.
8) Настраиваем GRUB:
Разумеется, настройки файловых систем, и параметров ядра нужно поставить свои .
9) По умолчанию при старте xend упорно пытается перевести сетевую карту в режим моста,но, при наличии нескольких сетевушек, делает это довольно криво. Запретим эту возможность, заменив содержимое скриптов network-bridge, network-nat, network-route, vif-bridge, vif-nat, vif-route в /etc/xen/scripts на строки:
#!/bin/sh
exit 0
Впоследствии мы cможем наполнить их чем-нибудь полезным, а сеть настроим собственными силами с помощь все тех же bridge-utils.
10) В обязательном порядке запрещаем автозапуск любой графической оболочки при загрузке ОС. Это необходимо, чтобы избежать возможных проблем с переключением в графический режим под Xen (актуально для некоторых бортовых карт Intel).
11) Перезагружаемся. Если все пройдет удачно, то наш Linux работает под управлением Xen в ведущем домене, и у нас появилась возможность создавать ведомые домены.
12) Если вы используете бортовую видеокарту от Intel, то, возможно, столкнетесь со следующей проблемой: после загрузки Xen с iommu=1 экран становится зелено-полосатым (или показывает любой другой мусор) и будет настойчиво отказываться показывать что-либо еще (в адресах 0B8000h-0BFFFFh обнаруживаются неизменяемые байты 0FFh, что говорит о том, что видеопямять отобразили куда-то "не туда"). В этом случае придется патчить Xen на предмет запрета отображения DMA для бортовой видеокарты. Будем использовать то же метод, что и использует обычный Linux, поддерживающий DMAR.
Берем вот этот патч. Прежде чем применять его к дереву исходников Xen, ищем в нем строку "/* UGLY HACK */", и, в строке ниже if ((bus == X) && (path->dev == Y) && (path->fn == Z)) вместо X:Y.Z вписываем номера шины, слота и функции нашей видеокарты, которые можно узнать с помощью утилиты lspci. Там стоят 0:2.0, ибо бортовая карта почти всегда размещена во втором слоте, тогда заменять ничего не нужно . После этого применяем патч и пересобираем Xen. Проблема должна исчезнуть, и Linux должен нормально загрузиться.
13) Пытаемся запустить X Window и графическую оболочку. Если она запустилось нормально, то у нас все замечательно, восстановим автозагрузку, и можно переходить к пункту 17. Если нет, то пытаемся запустить иксы в режиме VESA. Разумеется, со всеми аппаратными ускорениями придется расстаться, но, если вы пользуетесь набортной картой, то, вероятнее всего, они вам и не особо нужны.
14) Если у вас бортовая карта от Intel, а монитор широкоформатный и иксы никак не желают стартовать, а в режиме VESA наблюдаются диспропорции экрана, то ищем утилиту 915resolution. К сожалению, автор ее забросил, но есть сторонние патчи для поддержки новых чипсетов. Уже пропатченную версию можно взять тут. Собираем утилиту.
15) Возможно, потребуется удалить драйвер intel-agp. Если он собран модулем, просто удаляем файл модуля, иначе исключаем драйвер из конфигурации и пересобираем ядро.
16) Запускаем "915resolution -l". Видим список режимов, поддерживаемых BIOS. Теперь выбираем наиболее близкий режим к желаемому и выполняем команду "915resolution <режим> <ширина> <высота>". Пропатчатся также все остальные режимы с разрешением изменяемого режима на выбранное. Ничего бояться не следует, ибо эта утилита патчит не саму BIOS, а ее образ в ОЗУ. Соответственно, и запускать ее надо всякий раз при загрузке компьютера. Запускаем иксы, и проверяем, что все работает как надо.
17) Настраиваем список устройств для основного домена (нашего Arch Linux). По умолчанию основному домену выделяются все ресурсы компьютера. Часть их можно исключить. Во-первых, можно лимитировать Linux по памяти, передав Xen параметр "dom0_mem=XXXX". Во-вторых можно отключить часть PCI(-E) устройств, передав ядру Linux (именно ядру, а не Xen!) параметр "pciback.hide=(B1:D1.F1)(B2:D2.F2)...", эти устройства Linux будет игнорировать и драйвера для них не загрузит. В последствии мы можем их отдать другим доменам. Итак, смотрим список PCI-устройств командой "lspci" и правим конфигурацию GRUB:
В данном примере мы скрыли от Linux сетевую карту (0:19.0), один из контроллеров USB (0:1a.0, 0:1a.1, 0:1a.2 и 0:1a.7), и бортовую звуковую карту (0:1b.0). Второй же контроллер USB, звуковая карта, стоящая в слоте PCI и вся остальная периферия осталась в ведении Linux. Для удобства вывод бортового звука можно направить на ввод основной звуковой карты, как это раньше делали с TV-тюнерами, имеющими только аналоговый звуковой выход и слушать в одних наушниках звук от всех доменов. Память урезать не будем, положимся на balloon-драйвер, динамически отдающий память от Dom0 к Xen по запросу.
18) Перезагружаемся, и видим, что отключенные устройства в системе не видны (хотя их по-прежнему можно посмотреть командой lspci).
19) Настраиваем на Linux интерфейсы-мосты с помощью bridge-utils. Делаем основной интерфейс мостом. Скрипты Xen будут работать с ним автоматически, достаточно прописать имя интерфейса (br0, к примеру) в файле конфигурации домена.
20) Монтируем файловую систему /proc/xen (а как все настроим, пропишем в /etc/fstab) и запускаем xend:
Все. Наш Xen готов к работе!
1) Берем инсталляционный диск Mac OS X Leopard для Хакинтоша. В примере использован релиз 10.5.6 от XxX.
2) Выделяем дисковое пространство для домена. Рекомендуется выделить отдельный том или раздел, но можно это сделать и в просто большом файле, но будет некоторая потеря производительности дисковых операций.
3) Выделяем физические устройства для домена. В нашем примере мы выделим одну из шин USB и бортовую звуковую карту.
4) Отключаем эти устройства от ведущего домена (если не сделали это на предыдущем этапе), как описано выше. Перезагружаемся (если меняли конфигурацию).
5) Создаем конфигурационный файл домена (к примеру, /etc/xen/leo):
6) Запускаем домен и приступаем к процессу инсталляции: xm create leo.
7) Подключаемся по vnc к домену:
И запускаем обычную процедуру инсталляции Леопарда. Для XxX 10.5.6 выбираем следующее:
8) Если все прошло удачно, устанавливаем русификатор и скачиваем пакет обновлений до 10.5.8 от iDeneb, но обновления пока не накатываем.
9) Обязательно сохраняем папку /System/Library/Extensions а также /mach_kernel, скопировав их куда-нибудь в отдельную папку.
10) Накатываем обновление (iDeneb.MacOSx86ComboUpd10.5.8.pkg), но не перезагружаемся. Удаляем IOATAFamily.kext и заменяем его на старый, из папки Extensions, сохраненной в предыдущем пункте. Кекст от обновления неработоспособен под Xen. Не перезагружаемся. Запускаем iDeneb.Tool.v10.5.8.mpkg и устанавливаем ядро от AnV. Ни в коем случае не обновляем буты, иначе все слетит, и придется их восстанавливать с диска XxX.
11) Перезагружаемся с параметрами -f -v. Система загрузится, но автоматически уйдет в перезагрузку. Потом загрузится нормально.
12) Накатываем обновления от Apple (кроме системных).
Все, Mac OS X установлена!
На текущий момент проверена работоспособность одной из бортовых USB-шин. А, значит, у нас есть, сканеры, камеры, iPhone. Со звуком (ALC888) пока проблемы - карта опознается, но звук получается рваный. Скорее всего, проблема в некорректной работе одного из таймеров (APIC или HPET). Решение проблемы пока ищется. Возможно, поможет использование других драйверов (пока используется патченый AppleHDA от Taruga).
Тут особой премудрости нет, все делаем аналогично пердыдущему этапу, даже гораздо проще. Благо, всевозможных руководств по этому в Интернете море. В отличие от Mac OS X, под Windows прекрасно работает бортовой звук со всеми предоставляемыми драйвером прелестями. Однако, до первой загрузки Mac OS X. После чего работать перестает и требуется перезагрузка компьютера. Пока решения этой проблемы не найдено.
Что можно еще сделать с VT-d? Ну, к примеру, создать еще один маленький домен с какой-нибудь FreeBSD, отдать ей сетевую карту, а Linux, Windows и Mac OS X пустить через этот шлюз. А там - всякие фаерволы, апачи, и прочая шелуха, смотрящая голым задом в Интернет без возможности легкого доступа во внутренние домены. В общем, большой простор для полета фантазии .
Также, сейчас сообществом разработчиков Xen ведется работа по пробрасыванию видеокарт в DomU-домены, что может дать возможность запускать 3D-игры без какой-либо перезагрузки и переразбивки диска! Уже даже есть некоторые успехи, но пока только в очень ранней стадии в тестовых версиях Xen. Однако, у кого есть конфигурация, похожая на ту, что использовал автор ролика, может даже попробовать сам. Желаю удачи!
Зачем оно надо? Ну, к примеру, хочется иметь привычный Linux в качестве основной операционной системы, а вокруг полно всяких устройств, которые хотят либо Windows, либо Mac, а под Linux наотрез отказываются работать.
Ставить все это на разные разделы не хочется, поскольку это крайне неудобно, ибо поддержка чужих файловых систем в этих ОС оставляет желать лучшего. Да и привыкаешь к одному окружению. Также, иногда хотелось бы, чтобы закрытая проприетарная система выполнялась в песочнице, а не диктовала пользователю свои условия использования PC, но это уже вопрос не технический.
К счастью, Intel дала нам возможность создавать не просто виртуальные машины, а такие "полувиртуальные", когда ОС может работать напрямую с теми железками, котоые ей определит пользователь. Называется такая технология "виртуализацией вводв-вывода" (Virtualization Technology for directed I/O), и доступна не только в Hi-End сегментах рынка, как можно бы было подумать, но и на самых обычных бюджетных китайско-тайваньских "мамках" наподобие Gigabyte GA-Q35M-S2.
В плане софта дело обстоит несколько хуже: не так уж много ОС поддерживают нормальную работу такого "зоопапрка" на одном компьютере. Из свободного ПО можно на данный момент выделить 2 продукта:
- Linux KVM - встроенная система виртуализации Linux. Начиная с версии 2.6.28 ядро научилось работать с отображением DMA, являющимся основой виртуалтизации периферии.
- Xen - гипервизор с открытыми исходными кодами, отличие от KVM не требующий т.н. "хостовой ОС", а работает непосредственно на аппаратном обеспечении, разделяя ресурсы одного физического компьютера на несколько виртуальных машин, называемых доменами.
VirtualBox, VMWare и другие широкоизвестные виртуализаторы пока не научились делить железо, хотя есть информация, что поддержка VT-d имеется в Parallels Workstation под Mac.
На момент написания статьи лучшим "делителем железа" является Xen. По крайне мере, в отличие от KVM в нем более корректно пробрасываются USB-шины, что важно для работы с Windows-only и Mac OS X-only устройствами. О нем дальше и поведем речь.
Xen представляет собой гипервизор - маленькое ядро, работающее в привелигированном режиме, и разделяющие ресурсы компьютера между различными доменами (виртуальными машинами).
Домены бывают двух типов: ведущий (Dom0, он всегда один в системе) и ведомые (DomU, их может быть несколько). Ведущий домен загружается в первую очередь и управляет ведомыми доменами, а также самим Xen, содержит драйвера устройств, которыми пользуется Xen, чтобы выделять ведомым доменам часть ресурсов, предоставляемых ведущим доменом. Поэтому, зачастую, ведущий домен отождествляется с хост-системой в традиционных системах виртуализации, хотя на самом деле, он представляет собой виртуальную машину.
Xen поддерживает две технологии виртуализации:
- Паравиртуализация, это когда операционные системы специально адаптируются для работы в Xen. На сегодня имеются Xen-версии ОС Linux, NetBSD и Solaris (OpenSolaris) и ведутся работы по переносу других свободных ОС.
- Аппаратная виртуализация, это виртуализация на уровне самого "железа". Большинство современных компьютеров имеют процессоры с встроенной поддержкой виртуальных машин, но материнских плат с поддержкой виртуализации периферии пока немного. Но, при желании, такую всегда можно найти даже, как было сказано выше, среди бюджетных моделей.
Итак, что нам потребуется:
- Компьютер с материнской платой, поддерживающей технологию Intel VT-d. Без VT-d также все будет работать, но не будет возможности разделять физические устройства между доменами. Будут доступны только виртуальные устройства, эмулируемые qemu-dm, эмулятором периферии, входящим в поставку Xen. AMD IOMMU не тестировался, но официально поддерживается Xen. В нашем примере использовалась материнка Gigabyte GA-Q35M-S2 с последней версией BIOS (F7). Версии ниже F4 не содержат таблиц DMAR, соответственно, виртуализация периферии недоступна.
- Процессор Intel с поддержкой технологии VT (Vanderpool). Без VT не будет возможности устанавливать "обычные" ОС (типа Mac OS X или Windows), а только паравиртуальные машины. AMD Pacifica не тестировалась, возможно и будет работать.
- Установленный дистрибутив ОС Linux. По вашему вкусу. В данном примере будем использовать Arch Linux x86-64 (Arch64).
Этап первый - установка гипервизора Xen.
1) Скачиваем дистрибутив Xen версии 3.4.2 или новее. Настоятельно рекомендуется ставить из исходников, поскольку, возможно, возникнут проблемы, описанные ниже и гипервизор придется патчить.
2) Устанавливаем dev86 и bin86:
pacman -S dev86
pacman -S bin86
pacman -S bin86
3) Собираем Xen. В папке с исходниками даем команду "make xen". Если сборка прошла удачно, устанавливаем гипервизор командой "make install-xen".
4) Собираем xen-tools. В папке с исходниками даем команду "make tools". Если сборка прошла удачно, устанавливаем тулзы командой "make install-tools".
5) Скачиваем development-снапшот ядра Linux с поддержкой ведущего домена Xen (обычные ядра могут быть только ведомыми, поддержка ведущих планируется в ближайших версиях основной ветки ядра). Ядро доступно через git-репозитарий:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git linux-2.6-xen
Если нет желания возиться с git'ом, можно просто взять здесь снапшот от середины ноября 2009 года.
6) Конфигурируем ядро, включаем нужные опции для Xen:





7) Собираем ядро. Если все прошло удачно, устанавливаем модули командой "make modules-install". Файл ядра arch/boot/x86/bzImage кладем в папку /boot под именем vmlinuz-xen.
8) Настраиваем GRUB:
title Arch Xen
root (hd0,1)
kernel /boot/xen.gz iommu=1
module /boot/vmlinuz-xen root=/dev/sda2 ro nomodeset
root (hd0,1)
kernel /boot/xen.gz iommu=1
module /boot/vmlinuz-xen root=/dev/sda2 ro nomodeset
Разумеется, настройки файловых систем, и параметров ядра нужно поставить свои .
9) По умолчанию при старте xend упорно пытается перевести сетевую карту в режим моста,но, при наличии нескольких сетевушек, делает это довольно криво. Запретим эту возможность, заменив содержимое скриптов network-bridge, network-nat, network-route, vif-bridge, vif-nat, vif-route в /etc/xen/scripts на строки:
#!/bin/sh
exit 0
Впоследствии мы cможем наполнить их чем-нибудь полезным, а сеть настроим собственными силами с помощь все тех же bridge-utils.
10) В обязательном порядке запрещаем автозапуск любой графической оболочки при загрузке ОС. Это необходимо, чтобы избежать возможных проблем с переключением в графический режим под Xen (актуально для некоторых бортовых карт Intel).
11) Перезагружаемся. Если все пройдет удачно, то наш Linux работает под управлением Xen в ведущем домене, и у нас появилась возможность создавать ведомые домены.
12) Если вы используете бортовую видеокарту от Intel, то, возможно, столкнетесь со следующей проблемой: после загрузки Xen с iommu=1 экран становится зелено-полосатым (или показывает любой другой мусор) и будет настойчиво отказываться показывать что-либо еще (в адресах 0B8000h-0BFFFFh обнаруживаются неизменяемые байты 0FFh, что говорит о том, что видеопямять отобразили куда-то "не туда"). В этом случае придется патчить Xen на предмет запрета отображения DMA для бортовой видеокарты. Будем использовать то же метод, что и использует обычный Linux, поддерживающий DMAR.
Берем вот этот патч. Прежде чем применять его к дереву исходников Xen, ищем в нем строку "/* UGLY HACK */", и, в строке ниже if ((bus == X) && (path->dev == Y) && (path->fn == Z)) вместо X:Y.Z вписываем номера шины, слота и функции нашей видеокарты, которые можно узнать с помощью утилиты lspci. Там стоят 0:2.0, ибо бортовая карта почти всегда размещена во втором слоте, тогда заменять ничего не нужно . После этого применяем патч и пересобираем Xen. Проблема должна исчезнуть, и Linux должен нормально загрузиться.
13) Пытаемся запустить X Window и графическую оболочку. Если она запустилось нормально, то у нас все замечательно, восстановим автозагрузку, и можно переходить к пункту 17. Если нет, то пытаемся запустить иксы в режиме VESA. Разумеется, со всеми аппаратными ускорениями придется расстаться, но, если вы пользуетесь набортной картой, то, вероятнее всего, они вам и не особо нужны.
14) Если у вас бортовая карта от Intel, а монитор широкоформатный и иксы никак не желают стартовать, а в режиме VESA наблюдаются диспропорции экрана, то ищем утилиту 915resolution. К сожалению, автор ее забросил, но есть сторонние патчи для поддержки новых чипсетов. Уже пропатченную версию можно взять тут. Собираем утилиту.
15) Возможно, потребуется удалить драйвер intel-agp. Если он собран модулем, просто удаляем файл модуля, иначе исключаем драйвер из конфигурации и пересобираем ядро.
16) Запускаем "915resolution -l". Видим список режимов, поддерживаемых BIOS. Теперь выбираем наиболее близкий режим к желаемому и выполняем команду "915resolution <режим> <ширина> <высота>". Пропатчатся также все остальные режимы с разрешением изменяемого режима на выбранное. Ничего бояться не следует, ибо эта утилита патчит не саму BIOS, а ее образ в ОЗУ. Соответственно, и запускать ее надо всякий раз при загрузке компьютера. Запускаем иксы, и проверяем, что все работает как надо.
17) Настраиваем список устройств для основного домена (нашего Arch Linux). По умолчанию основному домену выделяются все ресурсы компьютера. Часть их можно исключить. Во-первых, можно лимитировать Linux по памяти, передав Xen параметр "dom0_mem=XXXX". Во-вторых можно отключить часть PCI(-E) устройств, передав ядру Linux (именно ядру, а не Xen!) параметр "pciback.hide=(B1:D1.F1)(B2:D2.F2)...", эти устройства Linux будет игнорировать и драйвера для них не загрузит. В последствии мы можем их отдать другим доменам. Итак, смотрим список PCI-устройств командой "lspci" и правим конфигурацию GRUB:
title Arch Xen
root (hd0,1)
kernel /boot/xen.gz iommu=1
module /boot/vmlinuz-xen pciback.hide=(0:19.0)(0:1a.0)(0:1a.1)(0:1a.2)(0:1a.7)(0:1b.0) root=/dev/sda2 ro nomodeset
root (hd0,1)
kernel /boot/xen.gz iommu=1
module /boot/vmlinuz-xen pciback.hide=(0:19.0)(0:1a.0)(0:1a.1)(0:1a.2)(0:1a.7)(0:1b.0) root=/dev/sda2 ro nomodeset
В данном примере мы скрыли от Linux сетевую карту (0:19.0), один из контроллеров USB (0:1a.0, 0:1a.1, 0:1a.2 и 0:1a.7), и бортовую звуковую карту (0:1b.0). Второй же контроллер USB, звуковая карта, стоящая в слоте PCI и вся остальная периферия осталась в ведении Linux. Для удобства вывод бортового звука можно направить на ввод основной звуковой карты, как это раньше делали с TV-тюнерами, имеющими только аналоговый звуковой выход и слушать в одних наушниках звук от всех доменов. Память урезать не будем, положимся на balloon-драйвер, динамически отдающий память от Dom0 к Xen по запросу.
18) Перезагружаемся, и видим, что отключенные устройства в системе не видны (хотя их по-прежнему можно посмотреть командой lspci).
19) Настраиваем на Linux интерфейсы-мосты с помощью bridge-utils. Делаем основной интерфейс мостом. Скрипты Xen будут работать с ним автоматически, достаточно прописать имя интерфейса (br0, к примеру) в файле конфигурации домена.
20) Монтируем файловую систему /proc/xen (а как все настроим, пропишем в /etc/fstab) и запускаем xend:
mount -t xenfs none /proc/xen
xend start
xend start
Все. Наш Xen готов к работе!
Этап второй - установка Mac OS X Leopard в домен.
1) Берем инсталляционный диск Mac OS X Leopard для Хакинтоша. В примере использован релиз 10.5.6 от XxX.
2) Выделяем дисковое пространство для домена. Рекомендуется выделить отдельный том или раздел, но можно это сделать и в просто большом файле, но будет некоторая потеря производительности дисковых операций.
3) Выделяем физические устройства для домена. В нашем примере мы выделим одну из шин USB и бортовую звуковую карту.
4) Отключаем эти устройства от ведущего домена (если не сделали это на предыдущем этапе), как описано выше. Перезагружаемся (если меняли конфигурацию).
5) Создаем конфигурационный файл домена (к примеру, /etc/xen/leo):
#Загрузчик домена
kernel = "/usr/lib/xen/boot/hvmloader"
builder='hvm'
# Объем памяти
memory = 1024
# Имя домена
name = "leo"
# Выделяем 1 процессор, с несколькими процессорами ядро AnV не работает
vcpus=1
# Можем жестко повесить единственный CPU домена на ядро #2
cpus=['2']
# Расширение PAE должно быть включено обязательно
pae=1
# ACPI должен быть включен обязательно
acpi=1
# APIC должен быть включен обязательно
apic=1
# HPET нужен, но пока Mac OS X выдает ошибку.
hpet=1
# Задаем максимальный "вес". Он может быть от 0 до 65535. Параметр означает
# приоритет домена у планировщика. Чем он выше, тем больше процессорного времени Xen
# выделит домену в единицу времени.
cpu_weight=65535
# Режим таймера 0 - "плавающий", 1 - внутренние часы домена привязаны к реальному времени
timer_mode=0
# Упорядочение прерываний таймера. Похоже, в Mac OS X этот параметр ни на что не влияет.
vpt_align=0
# Маска доступности процессоров. Аналогично предыдущему пункту видимых изменений параметр не дает.
vcpus_avail=1
# Сетевой интрефейс. br0 - имя мостового интерфейса. mac-адрес нужно обязательно указывать статически,
# иначе при каждой загрузке в Mac OS X нужно будет по новой настраивать сеть.
vif = [
'type=ioemu, bridge=br0, mac=00:20:A0:AD:9F:00'
]
# Дисковая подсистема. Выделим домену RAID-том md3 и подключим образ с дистрибутивом:
disk = [
'phy:/dev/md3,ioemu:hda,w',
'file:/export/distr/MacOSX/Leopard/XxX_10.5.6_Leo_Install_Disc.iso,ioemu:hdc:cdrom,r'
]
# Эмулятор устройств
device_model = '/usr/lib64/xen/bin/qemu-dm'
# Грузиться будем с образа DVD
boot='d'
# Пробрасываем в домен MSI
pci_msitranslate=1
# Разрешим домену управлять питанием PCI-устройств
pci_power_mgmt=1
# Список PCI-устройств для домена: первые 4 - одна шина USB, последнее - бортовая звуковая карта
pci=[ '0:1a.0', '0:1a.1', '0:1a.2', '0:1a.7', '0:1b.0']
# SDL не используем
sdl=0
# Используем VNC
vnc=1
# VNC клиента автоматом не запускаем
vncviewer=0
# Слушаем VNC на всех интерфейсах
vnclisten="0.0.0.0"
# Пароль для VNC
vncpasswd="secret"
# Стандартный VGA. У него есть VESA, а c Cirrus'ом Mac OS X работает некорректно
stdvga=1
# Последовательный порт переназначим на виртуальный терминал
serial='pty'
# BIOS Xen живет по местному времени
localtime=1
# Виртуальную NE2000 не используем
ne2000=0
kernel = "/usr/lib/xen/boot/hvmloader"
builder='hvm'
# Объем памяти
memory = 1024
# Имя домена
name = "leo"
# Выделяем 1 процессор, с несколькими процессорами ядро AnV не работает
vcpus=1
# Можем жестко повесить единственный CPU домена на ядро #2
cpus=['2']
# Расширение PAE должно быть включено обязательно
pae=1
# ACPI должен быть включен обязательно
acpi=1
# APIC должен быть включен обязательно
apic=1
# HPET нужен, но пока Mac OS X выдает ошибку.
hpet=1
# Задаем максимальный "вес". Он может быть от 0 до 65535. Параметр означает
# приоритет домена у планировщика. Чем он выше, тем больше процессорного времени Xen
# выделит домену в единицу времени.
cpu_weight=65535
# Режим таймера 0 - "плавающий", 1 - внутренние часы домена привязаны к реальному времени
timer_mode=0
# Упорядочение прерываний таймера. Похоже, в Mac OS X этот параметр ни на что не влияет.
vpt_align=0
# Маска доступности процессоров. Аналогично предыдущему пункту видимых изменений параметр не дает.
vcpus_avail=1
# Сетевой интрефейс. br0 - имя мостового интерфейса. mac-адрес нужно обязательно указывать статически,
# иначе при каждой загрузке в Mac OS X нужно будет по новой настраивать сеть.
vif = [
'type=ioemu, bridge=br0, mac=00:20:A0:AD:9F:00'
]
# Дисковая подсистема. Выделим домену RAID-том md3 и подключим образ с дистрибутивом:
disk = [
'phy:/dev/md3,ioemu:hda,w',
'file:/export/distr/MacOSX/Leopard/XxX_10.5.6_Leo_Install_Disc.iso,ioemu:hdc:cdrom,r'
]
# Эмулятор устройств
device_model = '/usr/lib64/xen/bin/qemu-dm'
# Грузиться будем с образа DVD
boot='d'
# Пробрасываем в домен MSI
pci_msitranslate=1
# Разрешим домену управлять питанием PCI-устройств
pci_power_mgmt=1
# Список PCI-устройств для домена: первые 4 - одна шина USB, последнее - бортовая звуковая карта
pci=[ '0:1a.0', '0:1a.1', '0:1a.2', '0:1a.7', '0:1b.0']
# SDL не используем
sdl=0
# Используем VNC
vnc=1
# VNC клиента автоматом не запускаем
vncviewer=0
# Слушаем VNC на всех интерфейсах
vnclisten="0.0.0.0"
# Пароль для VNC
vncpasswd="secret"
# Стандартный VGA. У него есть VESA, а c Cirrus'ом Mac OS X работает некорректно
stdvga=1
# Последовательный порт переназначим на виртуальный терминал
serial='pty'
# BIOS Xen живет по местному времени
localtime=1
# Виртуальную NE2000 не используем
ne2000=0
6) Запускаем домен и приступаем к процессу инсталляции: xm create leo.
7) Подключаемся по vnc к домену:
vncviewer 127.0.0.1:5900
И запускаем обычную процедуру инсталляции Леопарда. Для XxX 10.5.6 выбираем следующее:
- Essential System Software;
- Optional Bootloaders -> ChameleonSMBIOS
- System Kexts -> Essential System Kexts
- Optional Kernel -> 9.5.0 Voodoo XNU -> Voodoo 9.5.0 1.0 (Intel/AMD)
- Chipset Support -> ICHx Chipset Support
- NetworkDrivers -> OCGenericRealtek8139 Ethernet
8) Если все прошло удачно, устанавливаем русификатор и скачиваем пакет обновлений до 10.5.8 от iDeneb, но обновления пока не накатываем.
9) Обязательно сохраняем папку /System/Library/Extensions а также /mach_kernel, скопировав их куда-нибудь в отдельную папку.
10) Накатываем обновление (iDeneb.MacOSx86ComboUpd10.5.8.pkg), но не перезагружаемся. Удаляем IOATAFamily.kext и заменяем его на старый, из папки Extensions, сохраненной в предыдущем пункте. Кекст от обновления неработоспособен под Xen. Не перезагружаемся. Запускаем iDeneb.Tool.v10.5.8.mpkg и устанавливаем ядро от AnV. Ни в коем случае не обновляем буты, иначе все слетит, и придется их восстанавливать с диска XxX.
11) Перезагружаемся с параметрами -f -v. Система загрузится, но автоматически уйдет в перезагрузку. Потом загрузится нормально.
12) Накатываем обновления от Apple (кроме системных).
Все, Mac OS X установлена!
На текущий момент проверена работоспособность одной из бортовых USB-шин. А, значит, у нас есть, сканеры, камеры, iPhone. Со звуком (ALC888) пока проблемы - карта опознается, но звук получается рваный. Скорее всего, проблема в некорректной работе одного из таймеров (APIC или HPET). Решение проблемы пока ищется. Возможно, поможет использование других драйверов (пока используется патченый AppleHDA от Taruga).
Этап третий - установка Microsoft Windows в домен.
Тут особой премудрости нет, все делаем аналогично пердыдущему этапу, даже гораздо проще. Благо, всевозможных руководств по этому в Интернете море. В отличие от Mac OS X, под Windows прекрасно работает бортовой звук со всеми предоставляемыми драйвером прелестями. Однако, до первой загрузки Mac OS X. После чего работать перестает и требуется перезагрузка компьютера. Пока решения этой проблемы не найдено.
Что можно еще сделать с VT-d? Ну, к примеру, создать еще один маленький домен с какой-нибудь FreeBSD, отдать ей сетевую карту, а Linux, Windows и Mac OS X пустить через этот шлюз. А там - всякие фаерволы, апачи, и прочая шелуха, смотрящая голым задом в Интернет без возможности легкого доступа во внутренние домены. В общем, большой простор для полета фантазии .
Также, сейчас сообществом разработчиков Xen ведется работа по пробрасыванию видеокарт в DomU-домены, что может дать возможность запускать 3D-игры без какой-либо перезагрузки и переразбивки диска! Уже даже есть некоторые успехи, но пока только в очень ранней стадии в тестовых версиях Xen. Однако, у кого есть конфигурация, похожая на ту, что использовал автор ролика, может даже попробовать сам. Желаю удачи!
Метки: Linux, windows, XEN, хакинтош, mac os x, виртуальная машина, Виртуализация, информационные технологии, компьютеры, интернет


