Заметка про QEMU

Обсуждаем сайт и форум.

Модератор: f0s

Аватара пользователя
InventoR
ст. лейтенант
Сообщения: 1344
Зарегистрирован: 2006-12-10 19:43:25
Контактная информация:

Заметка про QEMU

Непрочитанное сообщение InventoR » 2008-11-17 16:28:12

Не много попробую поделиться личным опытом с обитателями, для кого-то это не что, а кому-то просто интересно.
Суть в том что простаивает фактически у меня роутер для интернета и давно уже хотелось его слегка нагрузить,
выбор пал на установку виртуальной машины qemu, давноу же хотел по настоянию хозейв здешней местности.
поехали:

Установка и запуск QEMU на FREEBSD, для установки FREEBSD

Обновляем дерево портов в системе или качаем новую коллекцию портов.
cd /usr/ports/emulators/qemu
make config
Выбираем

Код: Выделить всё

KQEMU 
RTL8139_TIMER
SDL
GNUTLS
CDROM_DMA

Код: Выделить всё

make install clean

Код: Выделить всё

kldload if_tap if_bridge kqemu aio
это для того чтобы не повторять все после перезапуска сервера делаем:

Код: Выделить всё

echo 'kqemu_load="YES"' >> /boot/loader.conf
echo 'ng_bridge_load="YES"' >> /boot/loader.conf
echo 'if_tap_load="YES"' >> /boot/loader.conf

Код: Выделить всё

mkdir /usr/local/etc/qemu/virtual
создаем образ диска для системы

Код: Выделить всё

qemu-img create /usr/local/etc/qemu/virtual/FreeBSD.7.img 12GB

Сеть для доступа к виртуальной машине:
существуют различные варианты работы с сетью в qemu, я остановился на bridge.

Код: Выделить всё

ifconfig bridge0 create
ifconfig bridge0 addm rl1 addm tap0 up
чтобы работало после перезапуска

Код: Выделить всё

echo 'cloned_interfaces="tap0 bridge0"' >> /etc/rc.conf
echo 'ifconfig_bridge0="addm rl1 addm tap0 up"' >> /etc/rc.conf

Код: Выделить всё

sysctl net.link.tap.up_on_open=1
sysctl net.link.tap.user_open=1 
chmod 666 /dev/tap0
Чтобы tap0 поднимался автоматически надо сделать:

Код: Выделить всё

echo 'net.link.tap.up_on_open=1' >> /etc/sysctl.conf
echo 'net.link.tap.user_open=1' >> /etc/sysctl.conf
echo 'perm tap0 0666' >> /etc/devfs.conf
последнии строчки искать зачем в google
Собственно дальше копируем образ FreeBSD в папку /usr/local/etc/qemu/virtual

Запускаем нашу систему

Код: Выделить всё

cat /usr/local/etc/qemu/start.sh

Код: Выделить всё

qemu -kernel-kqemu \
 -hda /usr/local/etc/qemu/image/FreeBSD.7.img \
 -cdrom /usr/local/etc/qemu/virtual/FreeBSD_Install.iso \
 -boot d \
 -vnc :0
 -net nic
 -net 
 -m 256

Далее:
на рабочую машину скачал и поставил TightVNC Viewer
Подключаемся к нашему серверу 192.168.0.1:5900
и ура, мы видем окно установки нашей любимой системы в системе.
дальше все как обычно вы делаете.

Код: Выделить всё

cat /usr/local/etc/qemu-ifup

Код: Выделить всё

#!/bin/sh
ifconfig $1 0.0.0.0
Мы получаем ip от DHCP сервера установленого в нашей сети
сдесь можно написать

Код: Выделить всё

ifconfig $1 192.168.0.200 netmask 255.255.255.0
и тогда вы получите на гостевой оси ip 192.168.0.200

так. в общем система установлена и работает.
дальше делаем killall qemu
и исправлем наш конфиг на загрузку с жесткого диска
а вернее правим вот этот параметр

Код: Выделить всё

c "-boot d"  на "-boot c"
порядок.
запускаем.

Код: Выделить всё

/usr/local/etc/qemu/start.sh


Собственно все что здесь изложено, это только основа с которой я начал.
Проблемы:
Долго не мог подключится по VNC, realvnc не подключался, случайно попробовал альтернативный клиент и все заработало.
Сеть не работала из-за блокировки интерфейса tap0 фаерволом, решилось добавлением разрешающего правила.
тоже самое касается и dhclient тоже не хотел получать ip из-за ipfw.

В общем итог:

Код: Выделить всё

cat /qemu.sh

Код: Выделить всё

#!/bin/sh
qemu -localtime -m 512 \
-name "FreeBSD" -kernel-kqemu \
-hda /usr/local/etc/qemu/image/FreeBSD.7.img \
-cdrom /usr/local/etc/qemu/virtual/FreeBSD_Install.iso \
-boot c \
-daemonize \
-net nic \
-net tap,ifname=tap0,script=/usr/local/etc/qemu-ifup

после того как был настроен доступ по ssh, доступ к серверу по vnc был отключен.

p.s. где-то находил информацию к vnc в qemu возможно установить пароль для доступа,
но разбираться нету особо желания, может конечно оно со временем и появится.

Здоровая критика, дополнения приветствуются.
Информация взята с миру по нитке, источники разные.
ну вот и сказочке конец, кто слушал, тот молодец.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
gonzo111
лейтенант
Сообщения: 648
Зарегистрирован: 2007-11-15 16:32:33
Откуда: China
Контактная информация:

Re: Заметка про QEMU

Непрочитанное сообщение gonzo111 » 2008-11-17 16:39:34

Интересно интересно...
Лучше переместить тему в раздел про сайт а после подрихтовки и критики опубликовать
Тяжело в учении легко в РАЮ!
беру зарплату гречкой и сахаром...
Наша комната - lissyara.su@conference.jabber.ru

Аватара пользователя
InventoR
ст. лейтенант
Сообщения: 1344
Зарегистрирован: 2006-12-10 19:43:25
Контактная информация:

Re: Заметка про QEMU

Непрочитанное сообщение InventoR » 2008-11-17 17:30:48

покапавшись еще не много получил такую команду для нормального запуска

Код: Выделить всё

qemu -kernel-kqemu -hda /usr/local/etc/qemu/freebsd.img -boot c -net nic -net tap,ifname=tap0,script=/usr/local/etc/qemu-ifup -daemonize -nographic
таким образом qemu запускается в фоне.
ну вот и сказочке конец, кто слушал, тот молодец.

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Re: Заметка про QEMU

Непрочитанное сообщение LMik » 2008-11-17 17:52:45

InventoR писал(а):покапавшись еще не много получил такую команду для нормального запуска

Код: Выделить всё

qemu -kernel-kqemu -hda /usr/local/etc/qemu/freebsd.img -boot c -net nic -net tap,ifname=tap0,script=/usr/local/etc/qemu-ifup -daemonize -nographic
таким образом qemu запускается в фоне.
Еще ползено былобы мак адрес привязать статично. А то при каждом запуске разные получаются.
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

Аватара пользователя
f_andrey
майор
Сообщения: 2651
Зарегистрирован: 2007-12-26 1:22:58
Откуда: СПб
Контактная информация:

Re: Заметка про QEMU

Непрочитанное сообщение f_andrey » 2008-11-17 18:26:12

InventoR писал(а):таким образом qemu запускается в фоне.
Ну можно и стандартно с помошью & в фон отправить ;)
Если ваша тема перенесена, то смотри http://forum.lissyara.su/viewtopic.php?f=1&t=32308

Аватара пользователя
manefesto
Группенфюррер
Сообщения: 6934
Зарегистрирован: 2007-07-20 8:27:30
Откуда: Пермь
Контактная информация:

Re: Заметка про QEMU

Непрочитанное сообщение manefesto » 2008-11-18 8:05:32

двигаю в статьи("Про сайт")
я такой яростный шо аж пиздеЦ
Изображение

Аватара пользователя
gonzo111
лейтенант
Сообщения: 648
Зарегистрирован: 2007-11-15 16:32:33
Откуда: China
Контактная информация:

Re: Заметка про QEMU

Непрочитанное сообщение gonzo111 » 2008-11-18 9:50:53

:smile:
Тяжело в учении легко в РАЮ!
беру зарплату гречкой и сахаром...
Наша комната - lissyara.su@conference.jabber.ru

Аватара пользователя
InventoR
ст. лейтенант
Сообщения: 1344
Зарегистрирован: 2006-12-10 19:43:25
Контактная информация:

Re: Заметка про QEMU

Непрочитанное сообщение InventoR » 2008-11-18 11:00:29

Привязка мака к интерфейсу осуществляется таким образом:

Код: Выделить всё

qemu -kernel-kqemu -hda /usr/local/etc/qemu/freebsd.img -boot c -net nic,macaddr=00:44:11:44:32:01 -net tap,ifname=tap0,script=/usr/local/etc/qemu-ifup -daemonize -nographic
Разные маки могут понадобиться если вы используете несколько запущеных виртуальных машин, если просто хотите жестко привязать машину к маку, при нескольких сетевых интерфейсах, и т.д.

При запуске qemu с vnc сервером при указаной опции

Код: Выделить всё

-nographic
vnc сервер не запускается, необходимо убрать эту опцию из строки запуска.
Для установки или изменения пароля vnc сервера в Qemu необходимо
запустить виртуальную машину с параметрами к примеру:

Код: Выделить всё

qemu -kernel-kqemu -hda /usr/local/etc/qemu/freebsd.img -boot c -net nic,macaddr=00:44:11:44:32:01 -net tap,ifname=tap0,script=/usr/local/etc/qemu-ifup -vnc :0,password -monitor stdio
после чего будет запущено окно qemu монитора и выполнить такую команду:

Код: Выделить всё

(qemu) change vnc password
Password: ********
готово (ограничение на размер пароля 8 символов)
После этого подключаемся через vnc viewer, он просит пароль, вводим его и работаем.
но есть проблема: если после этого остановить виртуальную машину запустить её заново, то уже в систему не впускает по vnc.

В обще использование monitor предоставляет довольно обширные опции для управления виртуальной машиной, достаточно набрать help

p.s. не могу разобраться, возможно ли к рабочей виртуальной машине зацепится monitorом и управлять, а то там есть такая полезная вещь, как создание "снимка" машины.
ну вот и сказочке конец, кто слушал, тот молодец.

Гость
проходил мимо

Re: Заметка про QEMU

Непрочитанное сообщение Гость » 2008-11-19 8:24:43

мне больше нравится -nographic (вывод в stdio с переключением target <-> monitor) чем -vnc. Напоминает работу в screen(1) после того как добавишь `-h -S115200' в /boot.config.

вместо -localtime лучше использовать симлинк:

Код: Выделить всё

> ll /etc/localtime
lrwxr-xr-x  1 root  wheel    33B Aug  2 12:42 /etc/localtime@ -> /usr/share/zoneinfo/Europe/Moscow
а часики держать в UTC.

Кстати, есть какой-нибудь способ получить вывод POST в stdio, т.е. не используя SDL, VNC и ncurses интерфейсы, только serial?
InventoR писал(а):p.s. не могу разобраться, возможно ли к рабочей виртуальной машине зацепится
monitorом и управлять, а то там есть такая полезная вещь, как создание "снимка"
машины.
-serial mon:... или -monitor ...? Например, -serial mon:unix:/tmp/qemu,server,nowait отправит target и monitor в /tmp/qemu. Пообщаться с ними можно, если сделать nc -U /tmp/qemu. -monitor unix:/tmp/qemu,server,nowait отправит только monitor туда без возможности переключение target <-> monitor.
Или я не понял вопроса.

Аватара пользователя
InventoR
ст. лейтенант
Сообщения: 1344
Зарегистрирован: 2006-12-10 19:43:25
Контактная информация:

Re: Заметка про QEMU

Непрочитанное сообщение InventoR » 2008-11-19 11:36:31

вопрос в том что, при запуске через вот этот набор команд:

Код: Выделить всё

qemu -kernel-kqemu -hda /usr/local/etc/qemu/freebsd.img -boot c -net nic,macaddr=00:44:11:44:32:01 -net tap,ifname=tap0,script=/usr/local/etc/qemu-ifup -daemonize -nographic
возможно ли подключиться к работающей машине через monitor и сделать допустим снимок работающей машины или по управлять ею?
сейчас попробую пережевать все что написано, чтобы понять для себя о чем конкретно написано было Гостем.
ну вот и сказочке конец, кто слушал, тот молодец.

Гость
проходил мимо

Re: Заметка про QEMU

Непрочитанное сообщение Гость » 2008-11-21 13:10:59

InventoR писал(а):возможно ли подключиться к работающей машине через monitor и сделать допустим снимок работающей машины или по управлять ею?
да, если заранее перенаправить monitor в socket/stdio/fifo/pty/etc

как в из монитора включить перенаправления я хз. Единственное что там можно включить во время сеанса - gdbserver.

SergeyJ2
рядовой
Сообщения: 28
Зарегистрирован: 2008-08-11 14:21:18

Re: Заметка про QEMU

Непрочитанное сообщение SergeyJ2 » 2009-01-15 19:40:58

Народ, так ни у кого и не получилось разобраться с возможностью перехода в командную оболочку виртуальной машины?
Возможно ли вообще такое?

Гость
проходил мимо

Re: Заметка про QEMU

Непрочитанное сообщение Гость » 2009-01-16 3:23:35

SergeyJ2 писал(а):Народ, так ни у кого и не получилось разобраться с возможностью перехода в командную оболочку виртуальной машины?
Возможно ли вообще такое?
добавь `-h' в /boot.config или `boot_serial=YES' в /boot/loader.conf на гостевой ОСе и запусти qemu с `-nographic'. Или я не понимаю о чем вопрос...

SergeyJ2
рядовой
Сообщения: 28
Зарегистрирован: 2008-08-11 14:21:18

Re: Заметка про QEMU

Непрочитанное сообщение SergeyJ2 » 2009-01-16 9:29:24

Гость писал(а):
SergeyJ2 писал(а):Народ, так ни у кого и не получилось разобраться с возможностью перехода в командную оболочку виртуальной машины?
Возможно ли вообще такое?
добавь `-h' в /boot.config или `boot_serial=YES' в /boot/loader.conf на гостевой ОСе и запусти qemu с `-nographic'. Или я не понимаю о чем вопрос...
в общем что делаю:
1. на гостевой машине прописал в /boot/loader.conf указание boot_serial="YES"
2. запускаю qemu таким образом:

Код: Выделить всё

qemu -kernel-kqemu -hda ~/freebsd.raw -boot c -net nic -net tap -m 256 -daemonize -nographic -serial unix:/tmp/qemu,server,nowait
пробовал и без kqemu, уже думал что может он глючит
3. делаю nc -U /tmp/qemu
некоторое время висит, потом qemu вываливается в корку...

А если использовать vnc, то все ок, вьевиром успешно цепляюсь и могу работать в системе...

Вот такие дела... :(

Гость
проходил мимо

Re: Заметка про QEMU

Непрочитанное сообщение Гость » 2009-01-16 11:19:45

У тя просто

Код: Выделить всё

qemu -m 256 -nographic -hda ~/freebsd.raw
работает? Получаешь на стандартный вывод загрузку ядра? Если да, то добавляй опции постепенно. Сначала замени `-nographic' на `-vnc none' и поставь `-serial mon:telnet::4444,server,nowait'. Проверь соединение по `telnet 0 4444'. Попробуй добавить -kernel-kqemu и только в самом конце -daemonize.

Или можно посадить qemu (с -nographic) в screen(1) как это делают в случае rtorrent и microdc и не париться.

SergeyJ2
рядовой
Сообщения: 28
Зарегистрирован: 2008-08-11 14:21:18

Re: Заметка про QEMU

Непрочитанное сообщение SergeyJ2 » 2009-01-16 12:01:42

Гость писал(а):У тя просто

Код: Выделить всё

qemu -m 256 -nographic -hda ~/freebsd.raw
работает? Получаешь на стандартный вывод загрузку ядра? Если да, то добавляй опции постепенно. Сначала замени `-nographic' на `-vnc none' и поставь `-serial mon:telnet::4444,server,nowait'. Проверь соединение по `telnet 0 4444'. Попробуй добавить -kernel-kqemu и только в самом конце -daemonize.

Или можно посадить qemu (с -nographic) в screen(1) как это делают в случае rtorrent и microdc и не париться.
Гость, спасибо, все получилось.

Andy
ст. лейтенант
Сообщения: 1117
Зарегистрирован: 2007-03-04 7:48:58
Откуда: Mytischi

Re: Заметка про QEMU

Непрочитанное сообщение Andy » 2009-01-17 22:09:33

Только у одного меня сеть не работает в qemu?
Jul 16 19:37:15 freebsd sshd[4152]: Invalid user idiot from 210.75.200.104

Аватара пользователя
InventoR
ст. лейтенант
Сообщения: 1344
Зарегистрирован: 2006-12-10 19:43:25
Контактная информация:

Re: Заметка про QEMU

Непрочитанное сообщение InventoR » 2009-01-17 22:55:03

Конечно, потому что у Всех других работает без проблем.
Как настраивали сеть?
ну вот и сказочке конец, кто слушал, тот молодец.

Andy
ст. лейтенант
Сообщения: 1117
Зарегистрирован: 2007-03-04 7:48:58
Откуда: Mytischi

Re: Заметка про QEMU

Непрочитанное сообщение Andy » 2009-01-17 23:25:47

InventoR писал(а):Конечно, потому что у Всех других работает без проблем.
Как настраивали сеть?
Конкретно интересуют проблемы на этой команде:

Код: Выделить всё

powercharge# ifconfig bridge0 addm re0 addm tap0 up
ifconfig: BRDGADD tap0: Invalid argument
powercharge#
Причем интерфейсы созданы.
Более подробная информация
http://forum.lissyara.su/viewtopic.php?p=128899#p128899
Jul 16 19:37:15 freebsd sshd[4152]: Invalid user idiot from 210.75.200.104

Аватара пользователя
InventoR
ст. лейтенант
Сообщения: 1344
Зарегистрирован: 2006-12-10 19:43:25
Контактная информация:

Re: Заметка про QEMU

Непрочитанное сообщение InventoR » 2009-01-17 23:32:21

я конечно не силен в этом всем, но можно:
kldstat
и потом, заново по этапно вручную создать интерфейсы.
еще было бы интересно tcpdump -i brigde0 и посмотреть что просходит во время пинга
да, а в ядре tap
ну вот и сказочке конец, кто слушал, тот молодец.

Andy
ст. лейтенант
Сообщения: 1117
Зарегистрирован: 2007-03-04 7:48:58
Откуда: Mytischi

Re: Заметка про QEMU

Непрочитанное сообщение Andy » 2009-01-17 23:49:21

InventoR писал(а):я конечно не силен в этом всем, но можно:
kldstat
и потом, заново по этапно вручную создать интерфейсы.
еще было бы интересно tcpdump -i brigde0 и посмотреть что просходит во время пинга
да, а в ядре tap
А зачем в ядре, когда модулем его загрузить можно?

Код: Выделить всё

powercharge# kldstat
Id Refs Address    Size     Name
 1   24 0xc0400000 97f830   kernel
 2    1 0xc0d80000 5844     if_tap.ko
 3    1 0xc0d86000 155e4    snd_hda.ko
 4    2 0xc0d9c000 4a64c    sound.ko
 5    1 0xc0de7000 4d20     atapicam.ko
 6    1 0xc0dec000 711bb8   nvidia.ko
 7    3 0xc14fe000 284a4    linux.ko
 8    1 0xc1527000 a704     if_bridge.ko
 9    2 0xc1532000 62b0     bridgestp.ko
10    1 0xc1539000 6a2c4    acpi.ko
11    1 0xc636f000 8000     aio.ko
12    1 0xc637e000 20000    kqemu.ko
13    1 0xc6448000 2000     rtc.ko
14    1 0xccb86000 2000     cd9660_iconv.ko
15    1 0xccc5b000 4000     libiconv.ko
powercharge#
Причем интересен тот факт, что руками интефейсы в бридж неполучается добавить, а вот
ежели команды присутствуют в скрипт qemu-ifup, то все прекрасно добавляется.
Jul 16 19:37:15 freebsd sshd[4152]: Invalid user idiot from 210.75.200.104

Аватара пользователя
Neus
майор
Сообщения: 2006
Зарегистрирован: 2008-09-08 21:59:56

Re: Заметка про QEMU

Непрочитанное сообщение Neus » 2009-01-19 9:54:51

а у меня пишет что нет такой опции '-kernel-kqemu'
смотрел в мане - нет такой...

Аватара пользователя
InventoR
ст. лейтенант
Сообщения: 1344
Зарегистрирован: 2006-12-10 19:43:25
Контактная информация:

Re: Заметка про QEMU

Непрочитанное сообщение InventoR » 2009-01-19 10:30:26

соизвольте батенька прочитать начало темы и вы увидите от куда берется kqemu
ну вот и сказочке конец, кто слушал, тот молодец.

Аватара пользователя
Neus
майор
Сообщения: 2006
Зарегистрирован: 2008-09-08 21:59:56

Re: Заметка про QEMU

Непрочитанное сообщение Neus » 2009-01-19 10:41:46

InventoR писал(а):соизвольте батенька прочитать начало темы и вы увидите от куда берется kqemu
соизволил, батенька :)
собрал так как написано
модуль kqemu загружен
команда qemu -kernel-kqemu и т.д. выдает - неизвестная опция
еще есть что сказать?

Гость
проходил мимо

Re: Заметка про QEMU

Непрочитанное сообщение Гость » 2009-01-19 19:11:25

Neus писал(а):а у меня пишет что нет такой опции '-kernel-kqemu'
смотрел в мане - нет такой...
у тя emulators/qemu или emulators/qemu-devel? Собраны с поддержкой KQEMU? Что выдает

Код: Выделить всё

qemu --help | fgrep kqemu
?

emulators/qemu-devel/Makefile:

Код: Выделить всё

.if defined(WITH_KQEMU)
BUILD_DEPENDS+= kqemu-kmod-devel>=1.4.0pre1:${PORTSDIR}/emulators/kqemu-kmod-devel
.else
CONFIGURE_ARGS+=        --disable-kqemu
.endif
Вот после --disable-kqemu вполне может отсутствовать опция -kernel-kqemu в qemu.

Кстати, в мане упоминаний о -kernel-kqemu все равно не будет.

ps, -kernel-kqemu на amd64-хосте не работает