Программирование
On-line приложения
Почитать
Web-сервер Apache
Печать и форматирование
MySQL
Разные рецепты
Сборка/установка
Справки
Философия
Мой опыт
Скачать
Программы на Tcl/Tk (GUI)
Программы на Python/Tk (GUI)
Программы (CLI)
Help
Хобби
Фракталы
on-line
Язык для рисования фракталов
Гиперкуб
Теория относительности
Ампуллярии
Преподавание
Студенту/абитуриенту
Мой опыт
Автора!

Qemu: Windows под UNIX

Какие задачи решаем (запуск Winodws под FreeBSD)

Qemu — универсальное средство (официальный сайт Qemu). Он создаёт виртуальные машину, на которой можно запустить любую ОС. Я его использую для запуска Windows (XP) на FreeBSD. Как это сделать я и собираюсь вкратце рассказать.

Установка qemu под FreeBSD

Сборка qemu

Начиная с FreeBSD 6.3 qemu можно просто поставить из бинарных пакетов. Но для более ранних версий, вам придётся собрать qemu самостоятельно.

Qemu развивается очень быстро и я настоятельно рекомендую перед установкой обновить порты. Детальный рассказ о том, как обновить порты, пользуясь CVSup можно найти в документации на FreeBSD. Коротко расскажу последовательность действий.

Создаём файл supfile. Я в него пишу вот что:

# ближайшее ко мне зеркало, можете выбрать другое
*default host=cvsup2.ru.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=.
*default delete use-rel-suffix
# разрешаем компрессию при передаче данных
*default compress
# обновляем все порты
# можно обновлять только часть, на пример ports-emulators
ports-all

Разместить это файл можно где угодно и назвать его можно как угодно.

Далее запускаем процесс обновления:

cvsup -g -L 2 supfile

Ждём некоторое время, всё, порты обновлены. На текущий момент самая свежая версия qemu — 0.9.0 (в начале 2008 года появилась значительно улучшенная версия 0.9.1, но в портах её пока нет).

Дальше собираем qemu из портов по традиционной схеме:

cd /usr/ports/emulators/qemu
make

Вам будет задан вопрос, какие компоненты qemu необходимы. Я включаю поддержку kqemu — специального модуля ядра, значительно ускоряющего работу эмулятора.

После сборки делаем

make install

Осталось сконфигурировать систему.

Конфигурирование FreeBSD для использования qemu

Для успешного запуска вам понадобятся два модуля ядра: во-первых, загружаем модуль kqemu:

kldload kqemu.ko

во-вторых, загружаем модуль асинхронного ввода/вывода:

kldload aio.ko

Без него qemu будет выдавать загадочное сообщение:

Bad system call (core dumped)

(или типа того, разные версии ругаются чуть по разному, но одинаково загадочно) и падать.

Загрузка следующих модулей нужна только если вы хотите выдать эмулятору реальный IP-адрес.

Для этого, вам понадобится мост.

Загружаем модуль:

kldload bridge.ko

Настраиваем мост:

sysctl net.link.ether.bridge_cfg=bge0,tap0
sysctl net.link.ether.bridge.enable=1

Здесь bge0 — мой сетевой интерфейс, у вас скорее всего будет другой.

Кроме того понадобится устройство tap0, оно поддерживается модулем if_tap.ko, но скорее всего это устройство у вас уже есть.

Файл диска виртуальной машины

Виртуальная машина, конечно, имеет жёсткий диск. На самом деле это просто файл, объём которого и определяет объём диска. Я создаю файл на 12 гигабайт, для моих целей этого более чем достаточно.

qemu-img create win12G 12G

Теперь у нас имеется файл win12G, который будет образом диска виртуальной машины.

Конфигурирование сети для виртуальной машины qemu в режиме NAT

Qemu может сам эмулировать NAT. Запускаем так:

qemu -m 512 \
     -hda /root/qemu/win12G \
     -net nic \
     -net user \
     -localtime

Обратите внимание на опции -net nic и -net user. Благодаря им виртуальная машина сможет сама получить по DHCP (встроен в qemu) все настройки сети.

Никаких дополнительных модулей ядра в этом режиме не требуется.

Конфигурирование сети для виртуальной машины qemu с реальным IP-адресом

В этом случае вам как раз понадобится мост (bridge.ko) и устройство tap0. (Как их настроить я уже рассказал.)

Чтобы qemu смогло поднять сетевой интерфейс, ему нужен up-скрипт. Назовём его qemu-ifup.

Я получаю данные по DHCP, поэтому скрипт не велик:

#!/bin/sh
ifconfig $1 0.0.0.0

Всё, виртуальная машина готова к запуску.

qemu -m 512 \
     -hda /root/qemu/win12G \
     -net nic \
     -net tap,script=/root/qemu/qemu-ifup \
     -localtime

Установка Windows на виртуальную машину

Образ загрузочного диска

Первым делом я создаю образ загрузочного диска Windows. Этого можно и не делать, для установки можно использовать полноценный диск, но как показывает практика, образ не повредит.

dd if=/dev/acd0 of=WXP.iso bs=2048

Я делаю образ из двух соображений: первое — элементарная запасливость, второе — из файла установка идёт быстрее потому, что диск то раскручивается, то останавливается, а файл всегда доступен по первому требованию.

Установка Windows, шаг первый

Теперь нам надо загрузить виртуальную машину с CD-ROM и установить Windows:

qemu -m 512 \
     -win2k-hack \
     -cdrom /root/qemu/WXP.iso \
     -boot d \
     -hda /root/qemu/win12G \
     -net nic \
     -net tap,script=/root/qemu/qemu-ifup \
     -localtime

Виртуальная машина будет иметь 512Mb оперативной памяти (-m 512), жёсткий диск (-hda /root/qemu/win12G), CD-ROM (-cdrom /root/qemu/WXP.iso, если вы используете реальное физическое устройство для чтения дисков, то укажите не файл, а это устройство; например /dev/acd0), сеть (интерфейс tap, скрипт для инициализации интерфейс /root/qemu/qemu-ifup) и загружаться всё это будет с CD-ROM (-boot d).

После запуска Windows предложит вам разбить новый диск на разделы и начнёт установку. Тут нет ничего необычного, Windows живёт на виртуальной машине точно так же, как и на реальной.

Установка Windows, шаг второй

На втором шаге установки вам надо загрузиться с диска, но CD-ROM должен быть по прежнему доступен:

qemu -m 512 \
     -win2k-hack \
     -cdrom /root/qemu/WXP.iso \
     -hda win12G \
     -net nic \
     -net tap,script=/root/qemu/qemu-ifup \
     -localtime

Завершаем установку и настройку Winodws.

Использование.

Запуск Windows

Теперь, чтобы запустить Windows, достаточно выполнить команду вида:

qemu -m 512 \
     -hda /root/qemu/win12G \
     -hdb /root/qemu/win8G-d \
     -net nic \
     -net tap,script=/root/qemu/qemu-ifup \
     -localtime

Обратите внимание, здесь я ещё добавил в систему второй диск (D:) на 8 гигабайт.

Несколько простых инструкций

  • Чтобы работать в Windows, просто щёлкните по окну.
  • Чтобы qemu «отпустил» мышь, нажмите Ctrl-Alt.
  • Чтобы перейти в консоль управления виртуальной машиной нажмите Ctrl-Alt-2.
  • Чтобы вернуться в основное окно — Ctrl-Alt-1

Возможности консоли qemu

Все возможности можно узнать по команде help (и конечно из документации file:///usr/local/share/doc/qemu/qemu-doc.html). Перечислю основные.

Остановка машины — quit или просто q.

Остановить эмуляцию (остановить процессор машины) — stop.

Запустить процессор снова — cont или c.

Вытащить виртуальный CD-диск — eject.

Сохранить или загрузить состояние виртуальной машины — savevm/loadvm. То есть вы можете запустить Windows, начать там что-то делать, потом зайти в консоль, остановить эмуляцию, сохранить состояние машины и выключить машину (stop, savevm, quit). Потом, вы можете снова запустить эмулятор, восстановить состояние машины и запустить её снова (loadvm, cont). В результате вы получите уже загруженную систему в том состоянии, в каком вы её покинули.

Единственная «неприятность» связана с часами. Системе будет казаться, что часы сделали резкий скачок, что может привести к некоторым недоразумения. Впрочем, не фатальным.

Кроме того из консоли вы можете делать много другое: управлять мышью и клавиатурой, смотреть регистры процессора и состояние памяти, эмитировать нажатия кнопок «reset» и «power», добавлять и удалять USB-устройства, делать снимок экрана и многое другое.

Работа с Windows через rdesktop

Преимущества

На мой взгляд, при запуске Windows в эмуляторе с ним проще и удобней работать через rdesktop. Основные преимущества:

  • rdesktop позволяет «расшаривать» такие полезные ресурсы, как, на пример, буфер обмена; то есть вы получаете возможность копировать данные между windows и хост-ОС просто через клипборд, что очень удобно
  • rdesktop не так навязчиво захватывает мышь
  • графика работает несколько быстрее

Запуск

Если вы используете NAT-конфигурацию Qemu, то для того, чтобы пропустить «наружный» трафик, вам следует создать канал, добавив опцию -redir tcp:3389::3389. Например так:

qemu -m 512 -hda win12G -net nic -net user -localtime -redir tcp:3389::3389

Вот, собственно, и всё. Теперь весь трафик, входящий на порт 3389 вашей виртуальной машины, будет пропущен внутрь. Больше нам ничего и не надо.

Запускаем rdesktop:

rdesktop -k en-us -r clipboard -u winuser 127.0.0.1

Утилита rdesktop позволяет сделать очень многое, здесь я привёл пример использования только трёх опций:

  • -k — выбор языка
  • -r clipboard — буфер обмена Windows будет «виден» во FreeBSD (и наоборот)
  • -u winuser — имя пользователя при логне будет уже набрано

Подключаемся мы на локальный хост, но никто не мешает подключиться и с удалённой машины, кроме, возможно, firewall-a.

Эта страница набрала не малую популярность, её посещает множество людей, поэтому я решил провести небольшое исследование. Если у вас есть комментарий, если вы сочли полученную информацию полезной, не полной, или вообще бесполезной, вы можете высказать своё мнение, пожелания, дополнения.

Если вы ожидаете получить от меня ответ или разъяснение, пожалуйста укажите e-mail, ICQ или другую контактную информацию.
Ваше сообщение не появится на странице, а просто отправится мне.

© 1999 − 2008 Мичурин Алексей — http://www.michurin.com.ru/