Давно витала в голове идея запускать несколько полноценных десктопных систем на одном железе одновременно. К сожалению на практике без софта для виртуализации никуда. Одно огорчает в этом случае: виртуальные машины запускаются на хосте и доступ к их консолям можно получить исключительно через софтовую оболочку виртульной машины, что несколько портит впечатление о «полноценности и независимости».
У меня дома есть Acer Aspire Revo 3610, на нем установлена Ubuntu Server 10.10 и медиацентр XBMC. Хотя у меня вдобавок есть ноутбук, периодически возникает необходимость поработать на винде, с большим экраном, и сидя за столом. Перезагрузиться? Но так не интересно. К тому же Ubuntu еще и интернеты по WiFi раздает соседям на халяву и i2p узлом работает.
Итак, определимся с целями:
1. Хост-система должна быть маленькой и незаметной;
2. Платформа для виртуализации должна разворачиваться на любом железе, в т.ч. без аппаратной виртуализации;
3. Виртуальные машины должны стартовать автоматически, при этом нужна возможность в любой момент переключаться на их консоли находясь перед монитором хоста;
4. Все должно быть бесплатно.
Первое что приходит в голову — воспользоваться готовой бесплатной платформой для виртуализации, например Citrix Xen Server или VMware ESXi. Однако эти продукты нацелены на серверный сегмент и неудовлетворяют второе и третье условия. Бесплатные платформы Microsoft Virtual PC и VMware Server не удовлетворяют первое и третье условия. QEMU мощная вещь, однако мне не удалось запустить виртуальные машины без аппаратной виртуализации. В результате мой выбор пал на Oracle VirtualBox.
Как я уже сказал у меня установлена Ubuntu Server 10.10 и XBMC на ней. Следовательно у меня уже установлены драйвера видео и звука: http://wiki.xbmc.org.
Установим VirtualBox, по инструкции с оф. сайта: http://www.virtualbox.org.
Поскольку графической среды у нас нет, создавать машины придется руками. Однако после я пришел к выводу, что проще создать машину используя GUI на другом компьютере и скопировать ее на хост. Конфигурация машины хранится в XML-файле, ее легко править руками, однако, если возникает такая необходимость машину надо сначала остановить, разрегистрировать
При создании виртуалок необходимо включить встроенный RDP сервер
Поскольку виртуалки будут запускаться в качестве службы, все манипуляции с ними надо делать под рутом.
Для автоматического запуска вуртуальной машины создадим службу. Для этого надо написать конфигурационный файл с ".conf" на конце и положить его в "/etc/init". Отличный мануал по upstart: http://upstart.ubuntu.com.
Мой конфиг выглядит следующим образом:
Итак у нас уже есть виртуальная машина, которая автоматически стартует при запуске хоста и так же автоматически корректно завершает работу. Осталось всего ничего — наладить консоль. Для автоматической инициализации консоли при старте виртуалки также зарегистрируем службу.
Можно заметить что консоль виртуальной машины — это ни что иное как запущеный RDP-клиент в виртуальной консоли хоста. Можно использовать rdesktop, однако из коробки у него проблемы с русской раскладкой. xfreerdp можно поставить из репозитория Ubuntu, однако там не самая свежая версия и у меня она никак не хотела разворачиваться на все 1920x1200 моего монитора. Вылечилось установкой последней версии из репов Debian.
В целом получилось неплохо и почти то, что я хотел. Почти, потому как видео через RDP всеже тормозит (хотя может все потому, что у меня Atom, а не Core i7?). Ctrl-Alt-F7 = XBMC, Ctrl-Alt-F8 = Винда. Товарищ подкинул идею брать картинку виртуалки через API VirtualBox по VNC. Однако я пока ничего не накопал в этом направлении.
Планирую разобраться как выводить консоль виртуалки на один монитор, а XBMC на другой. Об этом в следующий раз.
Зачем это все?
У меня дома есть Acer Aspire Revo 3610, на нем установлена Ubuntu Server 10.10 и медиацентр XBMC. Хотя у меня вдобавок есть ноутбук, периодически возникает необходимость поработать на винде, с большим экраном, и сидя за столом. Перезагрузиться? Но так не интересно. К тому же Ubuntu еще и интернеты по WiFi раздает соседям на халяву и i2p узлом работает.
Итак, определимся с целями:
1. Хост-система должна быть маленькой и незаметной;
2. Платформа для виртуализации должна разворачиваться на любом железе, в т.ч. без аппаратной виртуализации;
3. Виртуальные машины должны стартовать автоматически, при этом нужна возможность в любой момент переключаться на их консоли находясь перед монитором хоста;
4. Все должно быть бесплатно.
Выбор платформы
Первое что приходит в голову — воспользоваться готовой бесплатной платформой для виртуализации, например Citrix Xen Server или VMware ESXi. Однако эти продукты нацелены на серверный сегмент и неудовлетворяют второе и третье условия. Бесплатные платформы Microsoft Virtual PC и VMware Server не удовлетворяют первое и третье условия. QEMU мощная вещь, однако мне не удалось запустить виртуальные машины без аппаратной виртуализации. В результате мой выбор пал на Oracle VirtualBox.
Настройка хост-системы
Как я уже сказал у меня установлена Ubuntu Server 10.10 и XBMC на ней. Следовательно у меня уже установлены драйвера видео и звука: http://wiki.xbmc.org.
Установим VirtualBox, по инструкции с оф. сайта: http://www.virtualbox.org.
Поскольку графической среды у нас нет, создавать машины придется руками. Однако после я пришел к выводу, что проще создать машину используя GUI на другом компьютере и скопировать ее на хост. Конфигурация машины хранится в XML-файле, ее легко править руками, однако, если возникает такая необходимость машину надо сначала остановить, разрегистрировать
VBoxManage unregistervm name
, а затем зарегистрировать вновь VBoxManage registervm filename
. Иначе изменения внесенные вручную не сохранятся.При создании виртуалок необходимо включить встроенный RDP сервер
VBoxManage modifyvm --vrde on --vrdeport hostport [--vrdeaddress hostip]
.Поскольку виртуалки будут запускаться в качестве службы, все манипуляции с ними надо делать под рутом.
Создаем службы
Для автоматического запуска вуртуальной машины создадим службу. Для этого надо написать конфигурационный файл с ".conf" на конце и положить его в "/etc/init". Отличный мануал по upstart: http://upstart.ubuntu.com.
Мой конфиг выглядит следующим образом:
#/etc/init/vbox-winxp.conf
description "VBox VM WinXP"
author "EoF"
start on filesystem
stop on runlevel [!2345]
pre-stop script
VBoxManage controlvm WinXP acpipowerbutton
sleep 30
end script
exec VBoxHeadless --startvm WinXP
Консоль
Итак у нас уже есть виртуальная машина, которая автоматически стартует при запуске хоста и так же автоматически корректно завершает работу. Осталось всего ничего — наладить консоль. Для автоматической инициализации консоли при старте виртуалки также зарегистрируем службу.
#/etc/init/vcon-winxp.conf
description "Сonsole for VBox VM WinXP"
author "EoF <>"
start on started vbox-winxp
respawn
exec xinit /usr/bin/xfreerdp 127.0.0.1:3389 -f -- :2
Можно заметить что консоль виртуальной машины — это ни что иное как запущеный RDP-клиент в виртуальной консоли хоста. Можно использовать rdesktop, однако из коробки у него проблемы с русской раскладкой. xfreerdp можно поставить из репозитория Ubuntu, однако там не самая свежая версия и у меня она никак не хотела разворачиваться на все 1920x1200 моего монитора. Вылечилось установкой последней версии из репов Debian.
Заключение
В целом получилось неплохо и почти то, что я хотел. Почти, потому как видео через RDP всеже тормозит (хотя может все потому, что у меня Atom, а не Core i7?). Ctrl-Alt-F7 = XBMC, Ctrl-Alt-F8 = Винда. Товарищ подкинул идею брать картинку виртуалки через API VirtualBox по VNC. Однако я пока ничего не накопал в этом направлении.
Планирую разобраться как выводить консоль виртуалки на один монитор, а XBMC на другой. Об этом в следующий раз.