суббота, 21 апреля 2012 г.

Виртуализация в openSUSE 12.1 с помощью kvm

Многие пользователи Linux используют виртуальные машины и у каждого свои причины. Выбор инструментов для этого только падает зачастую по принципу популярности, наличия под рукой простой инструкции. Я и сам раньше использовал VirtualBox именно по причине кажущейся простоты. Чего там... скачать и установить средства разработки типа gcc, make, исходников ядра и чего-нибудь вместе с самим VirtualBox и надеяться, что проблем не возникнет. Но в openSUSE благодаря YaST2, и модулю yast2-vm существует способ работы с виртуальными машинами намного проще, не прибегая к помощи консоли и страшных команд.

Почему kvm, а не VirtualBox

  • kvm уже в ядре Linux и поэтому вам не нужно компилировать модули стороннего производителя типа Oracle
  • kvm поддерживает аппаратную виртуализацию, которая существует в процессорах довольно давно, что позволяет достичь следующего пункта
  • Производительность использования процессора, которая заметна сразу "не вооружённым взлядом"
  • KSM, снижающий использование оперативной памяти хоста гостевыми операционными системами
  • Возможность выбора клиента для графики (qemu-kvm, spicy, spice-client, клиенты к vnc)

Установка и первый запуск

Сразу после установки модуля yast2-vm, в меню приложений появится подменю "Виртуализация" с такими пунктами как:

  1. Relocation Server Configuration (примечание: перенос конфигурации сервера)
  2. Установить гипервизор и инструменты
  3. Создание виртуальных машин

Это меню KDE. Легко можно обойтись и без него, так как всё это доступно и в YaST:

Что ж, установим таки гипервизор и инструменты.
Но прежде чем начинать, подключите репозиторий Virtualization, так как на данный момент только в нём libvirt имеет поддержку Spice. Если вы работаете в XFCE, то убедитесь, что в автозагрузке у вас есть агент аутентификации PolicyKit или он хотя бы просто запущен. Следующий скриншот должен помочь вам в решении этой задачи:
В ином случае вы получите сообщение об ошибке о невозможности авторизации пользователя.
YaST даёт на выбор KVM и Xen. Я выбрал KVM просто потому что, мне не хотелось переустанавливать модуль ядра для видеокарты от Nvidia, так как при выборе Xen устанавливается другое ядро. После выбора гипервизора, YaST предложит установить необходимые пакеты для работы, на что, естественно, стоит согласиться. По завершении установки пакетов YaST предложит настроить сетевой мост. Вся настройка опять же заключается в ответе "Да" на заданный вопрос. Также от вас потребуется (о, ужас!) - перезагрузить систему:
Собственно, после перезагрузки система будет готова заводить виртуальные машины. Что тоже является достаточно тривиальной задачей:
Для того, чтобы создать виртуальную машину, выберем в меню пункт "Создание виртуальных машин" и после ввода пароля запустится помощник создания виртуальных машин, который сразу расскажет зачем он вообще нужен:
Следующим шагом будет выбор существующего образа или же установка ОС с нуля:
Поскольку предполагается, что мы это делаем впервые, то логично выбрать именно первый пункт, то есть "Мне необходимо установить операционную систему."
После чего помощник предлагает выбрать ОС, которую вы собираетесь устанавливать. В качестве примера я выбрал openSUSE 12, а устанавливать буду openSUSE 12.2 Milestone 3.

В следующем (последнем) окне производятся окончательные настройки, такие как имя и описание виртуальной машины, начальный и максимальный объём памяти, количество процессоров для виртуальной машины и другие параметры, в том числе и указание источника загрузки:
Вот и всё. После нажатия на кнопку "ОК" начинается волшебство и запускается собственно загрузка с образа (или что вы там указали загружать ;))

В случае чего, настройки виртуальной машины доступны в virt-manager. А о том как использовать SPICE с виртуальной машиной хорошо описано здесь.

  Интеграция мыши и общий буфер обмена

К сожалению, данный функционал не активируется по умолчанию, хотя пользователи VirtualBox, например, к такому наверняка уже привыкли и относятся как к чему-то обыденному. Начнём с первого. На данный момент единственным способом получить "интеграцию мыши" с kvm является использование SPICE, о котором я кратко упомянул выше. И именно поэтому установка kvm, virt-manager и прочего должна производиться из репозитория Virtualization. В openSUSE 12.2 этого делать скорее всего не придётся, так как поддержка SPICE будет уже интегрирована. Также потребуется spice-vdagent, который обеспечивает механизм для взаимодействия ресурсов гостевой ОС и хоста (такие как интеграция мыши и общий буфер). Взять его можно в репозитории домашнего проекта robverduijn. На всякий случай упомяну и про spice-xpi - плагин для браузеров совместимых с Mozilla plugin API (например Firefox и Chromium): его вы можете найти в репозитории у jasonbrooks. Итак, собственно, как использовать чудо SPICE?
Установите клиент из репозитория Virtualization:
zypper in -r Virtualization spice-client


В менеджере виртуальных машин (virt-manager) откройте виртуальную машину и в меню вид выберите пункт "Подробности". Здесь добавьте в список оборудования графический сервер SPICE:
После чего добавьте канальное устройство spicevmc:

После запуска виртуальной машины, к ней будет можно подключиться с помощью одного из клиентов spice. Выбор не велик: это либо консольный spice-client, либо spicy из пакета spice-gtk. Подключение с помощью первого осуществляется посредством команды
spicec --host 0.0.0.0 -p 5900

Подсказка: возврат мыши от гостевой ОС к хосту делается сочетанием клавиш Shift+F12.

Подключение с помощью графического клиента из spice-gtk осуществляется из его (spicy) окна в котором остаётся прописать только порт:
Обратите внимание, что в spicy меню "Options" присутствуют пункты о мыши, буфере обмена, размере экрана и т.д., однако, на данный момент они мало чем полезны, так как гостевой ОС нужен агент spice. Установим и добавим его в автозагрузку:
zypper in -r 'Spice (openSUSE_12.1)' spice-vdagent

chkconfig spice-vdagentd on

Рекомендую сделать перезагрузку. При следующей загрузке в статусной строке spicy вы должны увидеть сообщение mouse: client, agent: yes
А элементарная проверка покажет совместную работу хоста и гостя с буфером обмена:

Общие папки

Общие папки достаточно просто добавляются с помощью virt-manager:
В виртуальной машине вам останется только смонтировать каталог командой
mount -t 9p -otrans=virtio,version=9p2000.L /hostshare_name /destination_folder

Где /hostshare_name - название каталога, который вы выбрали на хосте, а /destination_folder - пункт назначения в гостевой системе. Результат сих операций таков:

Дополнительная полезная информация и использованные ресурсы:

1 комментарий: