Qemu 0.8.1 on FreeBSD 6.1 + Windows MicroMiniHOWTO


Самая толковая информация по qemu под FreeBSD нашлась здесь:

http://fabrice.bellard.free.fr/qemu/user-doc.html (Офциальная документация)
http://people.freebsd.org/~maho/qemu/qemu.html (Самое толковое описание)
http://qemu.dad-answers.com/


---Задача---

Поставить Windows на qemu-0.8.1 под FreeBSD 6.1 и удаленно ей управлять

---Сборка и установка---

По http://people.freebsd.org/~maho/qemu/qemu.html:

# cd /usr/ports/emulator/qemu
# make -DWITH_KQEMU -DWITH_HACKS && make install clean


---Установка Windows---

Создаем образ жесткого диска для Windows размером 4Гб:

# mkdir /usr/local/win
# qemu-img create /usr/local/win/win.img 4096M

Я поднял для удобства установки и первоначальной настройки Xserver CygWin:
1. Установил его с http://x.cygwin.com/
2. Из прилагаемого bash'a запустил Xserver с отключением access control:
$ X -ac
3. Включил в PuTTY X11 forwarding, залогинился на машину с FreeBSD
4. Там (xxx - мой ip):
# export DISPLAY=xxx.xxx.xxx.xxx:0

Ставим Windows с образа компакт-диска или прямо с диска (тогда -cdrom /dev/acd0):

# qemu -full-screen -localtime -m 512 -cdrom /tmp/win.iso -boot d /usr/local/win/win.img

-full-screen я использовал потому что иначе на cygwin/X не подхватывается мышка нормально
Можно устанавливать и сразу с поддержкой сети, но проще по очереди.


---KQemu---

KQemu - модуль ядра, обеспечивающий акселерацию qemu, без него вся затея имхо теряет смысл. Подгружаем его:

# kldload kqemu

Чтобы подгружался автоматически при старте системы, пишем в /boot/loader.conf:

kqemu_load="YES"


---Сеть---

Как только Windows установлена, сразу хочется увидеть ее работоспособность в сети, для этого:
! Проверяем поддержку ng в ядре, затем:

# cp /usr/share/examples/netgraph/ether.bridge /usr/local/bin/qemu-net.sh

Редактируем qemu-net.sh, изменяем строки BRIDGE_IFACES и LOCAL_IFACES:

BRIDGE_IFACES="em0 tap0"
LOCAL_IFACES="em0"

Где em0 - локальный интерфейс.

# chmod +x /usr/local/bin/qemu-net.sh

Создаем /etc/qemu-ifup (там по умолчанию qemu ищет скрипт для "-net tap"), туда пишем:

#!/bin/sh
ifconfig ${1} yyy.yyy.yyy.yyy netmask 255.255.255.128
/usr/local/bin/qemu-net.sh stop
/usr/local/bin/qemu-net.sh start

IP я брал из моей сети netmask тоже мой соответствующий.
Потом, конечно:

# chmod +x /etc/qemu-ifup

Далее я настроил свой dhcp-сервер на выдачу ip zzz.zzz.zzz.zzz по дефолтному MAC для "-net nic" - 52:54:00:12:34:56.
В принципе MAC можно задавать из строки запуска qemu, можно вообще статически сконфигурировать в Windows - это все дело вкуса.


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

Запускаем qemu:

# qemu -kernel-kqemu -full-screen -localtime -boot c /usr/local/win/win.img -net nic,model=rtl8139 -net tap -m 512

model=rtl8139, потому что с дефолтной почему-то только 10Мб/с получилось.

В Windows я поотключал всякие windows firewall и прочее, дал доступ к Terminal Service и залогинился со своей машины.


---Уводим в бэкграунд---

У меня qemu с Windows запускается при загрузке из rc.local следующей строкой:

/usr/local/bin/screen -dmS qemu /usr/local/bin/qemu -nographic -parallel null -serial null -monitor null -kernel-kqemu -localtime -net nic,model=rtl8139 -net tap -m 512 -boot c /usr/local/win/win.img &

Обновлено: 12.03.2015