The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Устанавливаем Windows в QEMU под FreeBSD (qemu virtual windows freebsd bridge)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: qemu, virtual, windows, freebsd, bridge,  (найти похожие документы)
From: Михаил Иванов <m.ivanych@gmail.com.> Date: Mon, 3 Oct 2008 17:02:14 +0000 (UTC) Subject: Устанавливаем Windows в QEMU под FreeBSD Оригинал: http://m-ivanov.livejournal.com/3384.html Процесс установки QEMU освещен в сети довольно смутно. Все более-менее подробные статьи, которые мне удалось найти, имеют неприятные особенности: Во-первых, эти статьи устарели. Так, например, для поднятия сетевого моста в новой 7-ой FreeBSD вместо устаревшего bridge следует использовать if_bridge. Во-вторых, авторы этих статей как-то невзначай упускают некоторые важные моменты, без которых пошаговое выполнение описываемых процедур не дает эффекта. Например, нет внятного указания на то, что для запуска QEMU нужны либо права root'a, либо настроенный sudo. В третьих, в статьях излагаются какие-то лишние процедуры, не относящиеся напрямую к делу. Например, рассказывается о том, как экспортировать окно QEMU, устанавливаемого на сервере, на локальную Windows. Попросту говоря, эти статьи не работают. Поэтому я решил написать свою статью, с блекджеком и шлюхами. Поехали. 1) Устанавливаем QEMU # cd /usr/ports/emulator/qemu # make -DWITH_KQEMU # make install QEMU легко ставится из портов, нужно только не забыть собрать его с поддержкой модуля акселерации KQEMU. В принципе, этот модуль не обязателен, но с ним QEMU работает гораздо быстрее. 2) Подгружаем модуль акселерации # kldload kqemu Чтобы модуль подгружался при загрузке, нужно добавить строку в конфигурационный файл /boot/loader.conf: kqemu_load="YES" 3) Подгружаем модуль асинхронного ввода-вывода # kldload aio Чтобы модуль подгружался при загрузке, нужно добавить строку в конфигурационный файл /boot/loader.conf: aio_load="YES" 4) Создаем образ жесткого диска, на который далее будем ставить Windows $ mkdir /home/user/qemu $ qemu-img create /home/user/qemu/windows.img 4096M Образ разместим в домашнем каталоге. Впрочем, это не существенно, можно разместить где угодно. Размер образа - 4 гига (для самой Windows и пары установленных программ этого достаточно, если нужно - можете сделать больше). 5) Устанавливаем Windows $ qemu -localtime -m 512 -boot d -cdrom /home/user/windows_install.iso \ -hda /home/user/qemu/windows.img -name "Windows" В данном случае Windows устанавливается с образа компакт-диска. Если Windows устанавливается с настоящего компакт-диска, то вместо образа /home/user/windows_install.iso надо указать устройство /dev/acd0. Что все это значит: -localtime устанавливает время в Windows равным времени FreeBSD -m задает размер памяти в мегабайтах, которая будет выделена для Windows -boot говорит QEMU откуда нужно загружаться (d - компакт-диск, c - жесткий диск) -cdrom указывает путь к компакт-диску -hda указывет путь к жесткому диску -name выводит в заголовке окна QEMU название запущенной в нем операционной системы (необязательная опция, чисто для красоты) 6) Запускаем Windows $ qemu -localtime -m 512 -boot c /home/user/qemu/windows.img -name "Windows" Обратите внимание - загрузка Windows выполняется с образа жесткого диска (опция -boot c). На этом, собственно, все. Windows запущен в QEMU под управлением FreeBSD. Настройка сети Windows, запущенная в QEMU, не имеет выхода в сеть. Для того, чтобы Windows могла выходить в сеть, нужно приложить некоторые усилия. Представьте, что у нас есть два компьютера, один из которых подключен к сети. Мы хотим, чтобы второй компьютер, который не имеет собственного выхода в сеть, тем не менее, тоже мог выходить в сеть. Для этого мы компьютер, не имеющий сети, подключаем к компьютеру, на котором сеть есть. А компьютер, на котором сеть есть, настраиваем так, чтобы он все пакеты, которые ему присылает второй компьютер, пропускал сквозь себя в сеть. Таким образом, первый компьютер становится для второго компьютера своеобразным "мостом", по которому безсетевой компьютер может выйти в сеть. Такая схема подключения называется "сетевой мост". В нашем случае в качестве первого компьютера выступает FreeBSD, имеющая выход в сеть, а в качестве второго компьютера, не имеющего выхода в сеть - Windows, запущенная в QEMU. Соответственно, наша задача заключается в том, чтобы подключить Windows к FreeBSD, а FreeBSD, в свою очередь, настроить так, чтобы она пропускала через себя в сеть пакеты, отправляемые из Windows. Сетевой мост во FreeBSD 7.0 создается с помощью модуля if_bridge. Сетевой мост if_bridge был портирован из NetBSD и, начиная с версии FreeBSD 7.0, заменил устаревший сетевой мост bridge. 0) Выясняем, как называется реальный физический интерфейс, через который во FreeBSD работает сеть У меня он называется em0, у вас это название может быть другим, например, rl0. 1) Создаем виртуальный сетевой интерфейс, к которому будет подключен Windows # ifconfig tap0 create 2) Создаем виртуальный сетевой интерфейс, который будет выполнять функции моста # ifconfig bridge0 create 3) Объединяем интерфейсы в мост # ifconfig bridge0 addm em0 addm tap0 up Чтобы мост создавался при загрузке, нужно добавить две строки в конфигурационный файл /etc/rc.conf: cloned_interfaces="tap0 bridge0" ifconfig_bridge0="addm em0 addm tap0 up" На этом создание сетевого моста завершено. ifconfig должен показывать примерно следующее: $ ifconfig em0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=198<VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4> ether 00:1c:c0:2a:25:3d inet 192.168.216.10 netmask 0xffffff00 broadcast 192.168.216.255 media: Ethernet autoselect (100baseTX <full-duplex>) status: active tap0: flags=8902<BROADCAST,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 00:bd:f3:19:00:00 bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 5e:54:49:fc:f9:f0 id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15 maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200 root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0 member: tap0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP> member: em0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP> Как видите, тут у нас присутствуют реальный физический интерфейс em0, виртуальный интерфейс tap0 и сетевой мост bridge0. Обратите внимание: внутри bridge0 находятся два member - это интерфейсы em0 и tap0, объединенные мостом. Теперь нужно подключить Windows к FreeBSD. 4) Включаем автоматическое поднятие интерфейса tap0 # sysctl net.link.tap.up_on_open=1 Чтобы эта переменная инициализировалась при загрузке, нужно добавить строку в конфигурационный файл /etc/sysctl.conf: net.link.tap.up_on_open=1 5) Разрешаем непривилегированному пользователю соединяться с интерфейсом tap0 # sysctl net.link.tap.user_open=1 Чтобы эта переменная инициализировалась при загрузке, нужно добавить строку в конфигурационный файл /etc/sysctl.conf: net.link.tap.user_open=1 6) Разрешаем непривилегированному пользователю открывать устройство /dev/tap0 # chmod 666 /dev/tap0 Тут тонкий момент - файлы устройств пересоздаются каждый раз при загрузке системы, поэтому права доступа на файл после перезагрузки вернутся в исходное состояние (600). Поэтому следует задавать права доступа к устройству не через chmod, а через правила devfs. Для этого нужно добавить строку в конфигурационный файл /etc/devfs.conf: perm tap0 0666 Ну и, наконец, запускаем Windows. 7) Запускаем Windows с поддержкой сети $ qemu -localtime -m 512 -boot c /home/user/windows.img -name "Windows" \ -net nic -net tap,ifname=tap0 Как видите, к параметрам обычного запуска добавились два параметра -net. Первый -net со значением nic создает "внутри" QEMU сетевую карту, которую дальше увидит и будет использовать Windows. Второй -net со значением tap подключает эту сетевую карту к виртуальному интерфейсу tap0. Указываемая через запятую опция ifname=tap0 говорит о том, что подключиться нужно именно к интерфейсу tap0. В принципе, это не обязательная опция, но иногда, по каким-то своим соображениям, QEMU пытается подключится не с дефолтному tap0, а, скажем, к tap1 или к tap4. В этом случае можно явно указать нужный интерфейс, добавив эту опцию. Все, загрузившись, Windows обнаружит сетевую карту и будет ходить в сеть через нее. Дополнительные материалы про QEMU: http://www.ibm.com/developerworks/ru/library/l-qemu/index.html http://community.livejournal.com/ru_root/710103.html https://www.opennet.ru/base/sys/qemu_win.txt.html http://ru.gentoo-wiki.com http://www.michurin.com.ru/qemu.shtml А также про настройку сетевого моста: https://www.opennet.ru/base/net/net_bridge.txt.html http://www.bsdportal.ru/viewtopic.php?p=93244

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Ce (ok), 09:18, 10/10/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    О! Собрался поиграть с qemu на 7 -ке, а тут статейка в тему. Спасибо, пробуем.
     
  • 1.2, Ce (ok), 14:47, 12/10/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    2000 у меня повисла при установке на стадии определения девайсов, а 2003 заползла без проблем.

    -net nic -net tap,ifname=tap0
    можно указать и при установке.

    Добавял опцию
    -vnc :1 -monitor stdio
    и ловил окошко qemu клиентом vnc.

    По умолчанию qemu эмулирует rlt8029 - 10Mbs
    Изменил опцию на
    -net nic,model=rtl8139
    Вроде винда стала показывать соединение 100Mbs
    Простые тесты дали скорость 15Mbs на приём и 30Mbs на отдачу, и это на родительском интерфейсе em.

    Как бы увеличить пропускную способность сетевого интерфейса qemu раз в пять - десять?

     
  • 1.3, Ce (ok), 08:11, 13/10/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    заменил qemu на qemu-devel, там есть интерфейс e1000.
    Виндоуз определил его как Intel PRO/1000.
    Но пропускную способность показывает такую же как и при rtl8139.
     
  • 1.5, HVVPR7 (?), 19:18, 07/12/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а кто скажет, сколь примерно процентов производительности дает Майкрософтовское чмо на FreeBSD относительно установки на ту же физическую машину ? .. может себе поставлю... (для работы, будь она не ладна)
     
  • 1.6, Ali (??), 13:46, 24/12/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    С опцией -kqemu-kernel постоянно вылетает одно приложение, стабильность никакая. Если же не использовать kqemu работает без проблем, но скорость работы падает раза в два. Много памяти винде не даю 160Мб, так как на самой системе всего лишь 512Мб. У кого есть такие проблемы?
     
  • 1.7, Ali (??), 13:47, 24/12/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    С опцией -kqemu-kernel постоянно вылетает одно приложение, стабильность никакая. Если же не использовать kqemu работает без проблем, но скорость работы падает раза в два. Много памяти винде не даю 160Мб, так как на самой системе всего лишь 512Мб. У кого есть такие проблемы?
     
     
  • 2.8, Michael Quad (?), 23:12, 07/01/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Вы возможно ядро пересобирали.. Кажись в доках написано что при пересборке ядра желательно перекомпилировать QEMU тоже.
     
     
  • 3.9, forest (?), 11:38, 09/01/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Вы возможно ядро пересобирали.. Кажись в доках написано что при пересборке ядра
    >желательно перекомпилировать QEMU тоже.

    такая фигня была и при старом ядре, и куему компилил раза 2-3
    и девелоперскую пробовал

     

  • 1.10, Владислав (??), 17:53, 09/04/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Привет
    Делаю по статье.
    дохожу до шага установки винды.
    команда запускается, в процессах видно что то делается, но окно установки не показывается.


     
  • 1.11, HVVPR7 (?), 18:07, 14/06/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    ..... а хто знает как припарить tun0 к бриджу .... а то там :
    ifconfig: BRDGADD tun0: Invalid argument
    ... спасиба
     
     
  • 2.12, drurus (?), 16:21, 14/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >..... а хто знает как припарить tun0 к бриджу .... а то
    >там :
    >ifconfig: BRDGADD tun0: Invalid argument
    >... спасиба

    нужно делать tap

     

  • 1.13, Игорь (??), 11:39, 10/02/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Все сделал по вашей статье! И все работает!!!
    Но вот вопрос, как запускать автоматом qemu c виндой при старте систему freeBSD?
    Узал гугл, пробывал впихнуть все в /etc/rc.conf, но это результата не дало...
     
  • 1.14, ITJunky (?), 21:10, 26/07/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Подскажите, пожалуйста как побороть сие:

    [root@luky /usr/home/alp]# ifconfig bridge0 addm bge0 addm tap2 up
    ifconfig: BRDGADD bge0: File exists

    В гуглах нашёл фразу о том, что мост нельзя подвесить на интерфейс с реальным IP. Но так и не понял почему и действительно ли в этом проблема.

     

    лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру