В этом howto мы с вами просто и быстро, шаг за шагом, запустим гипервизор Qemu-KVM в debian 8.

image

Будем запускать виртуальную машину в qemu-kvm от пользователя username, используя spice, qxl и virtio.
Предполагается, что установлен Debian 8 amd64, с выбранными в tasksel стандартными утилитами и SSH сервером. Доустановим.

aptitude install -y firmware-linux bridge-utils etckeeper


Проверим, поддерживает ли наш процессор виртуализацию:
egrep '(vmx|svm)' /proc/cpuinfo

Включим форвардинг, net.ipv4.ip_forward=1
vim /etc/sysctl.conf

Создаем мост br0
Примерный вид /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#auto eth0
#allow-hotplug eth0
#iface eth0 inet dhcp

auto br0
iface br0 inet dhcp
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0

/etc/init.d/networking restart

Проверим, должно быть похоже «br0 8000.08608ee7dc58 no eth0»
brctl show 

Используя мост, при старте виртуальной машины будут подниматься vnetX интерфейсы
tcpdump -i vnet0 -n

Устанавливаем kvm:
aptitude install qemu-kvm libvirt-bin

Добавляем пользователя в группы kvm:
adduser username kvm
adduser username libvirt

Разрешим доступ для spice и сменим пользователя, под которым все будет работать:
vim /etc/libvirt/qemu.conf

spice_listen = «0.0.0.0»
user = «username»
group = «username»


По большому счету всего готово к работе.
Без запущенных виртуальных машин хост-система занимает ~150 mb ram

Можно пропустить - вариант для продвинутых
GUI менеджер для выполнения базового ряда задач при работе с kvm.
Создание, запуск/остановка, клонирование — почти :) все, что нужно.

На другом компьютере устанавливаем:
aptitude install ssh-askpass virt-manager virt-viewer spice-client-gtk

Запускаем virt-manager.
Файл -> добавить соединение -> Гипервизор: QEMU/KVM и подключаемся к удаленному хосту под нашим пользователем username. Авторизация использует openssh-askpass.
Правка -> свойства подключения — Хранилище
Тут можно управлять хранилищами — например, создать qemu-iso-storage и положить туда дистрибутивы для дальнейших нужд. Например, gparted

К созданной виртуальной машине можно подключится простым вивером со всем функционалом, что предоставляет spice.
Для этого необходимо узнать URI домена/вирт.машины на kvm
virsh domdisplay corn

На клиенте запустим:
remote-viewer spice://10.1.1.8:5905 


Тоже самое другим вивером, который spice-client-gtk:
spicy -h 10.1.1.8 -p 5905


В продвинутом варианте при создании новой виртуальной машины существует баг.
В настройках, где выбираем spice-сервер или vnc-сервер, нельзя выбрать spice, не включив TLS.
Само по себе TLS в qemu по умолчанию не используется и, соовественно, выключенно.
Если TLS пока не нужно, можно временно запустить вирутальную машину с vnc-сервером, что бы в /etc/libvirt/qemu/ создался corn.xml и заменить в нем секцию <graphics… /> на spice с выключеным TLS.
 <graphics type='spice' port='5905' autoport='no' listen='0.0.0.0'>
      <listen type='address' address='0.0.0.0'/>
 </graphics>

Как подружить TLS написано тут — habrahabr.ru/post/221693


Продолжаем конфигурировать под root

Определяем пулы — где все будет лежать
конфигурации storage хранятся тут /etc/libvirt/storage/
по умолчанию есть default.xml — хранилище на файловой системе в /var/lib/libvirt/images
Добавляем свое qemu-test-storage:
*-as создает хранилище аналогичное дефолту, т.е. по конфигурации такое же как в default.xml
virsh pool-define-as qemu-test-storage dir --target /home/username/qemu-test-storage/

По умолчанию пул не запущен, стартуем:
virsh pool-start qemu-test-storage

Добавляем созданный пул в автостарт:
virsh pool-autostart qemu-test-storage

Посмотреть все пулы:
virsh pool-list --all

Все домены:
virsh list --all


Регистрируем домен (виртуальную машину) с конфигурацией, описанной в файле corn.xml
Создать xml с конфигурацией (например, для шаблона) проще через virt-manager, чем описывать каждую опцию в virt-install.
Все конфигурации виртуальных машин хранятся в /etc/libvirt/qemu/
Вообщем, предполагается, что у нас есть этот файл.
virsh define /home/username/anyfolder/corn.xml

Добавить домен в автозагрузку:
virsh autostart corn

Текущая конфигурация домена:
virsh dumpxml corn

Редактируем домен:
virsh edit corn

Стартуем домен, смотрим URI и подключаемся любым доступным способом.
virsh start corn
virsh domdisplay corn


Что бы установить windows на VirtIO раздел, установщику требуется драйвер из папки viostor комплекта драйверов virtio for windows.
На linux-kvm.org лежат исходники, на fedoraproject.org можно найти собраные virt-win.iso
После установки вам, скорее всего, понадобятся spice windows guest tools

Теперь расширим том домена.
Воспользуемся qemu-img — QEMU disk image utility. В нашем случае том corn.qcow2
Наблюдение — windows 7 мало 10GB, что бы разом выкачать все из центра обновлений и корректно их установить.
Бывает полезно сначало установить «Обновление для Windows 7 (KB2852386)» — позволяет худо-бедно (читай, никак) очищать C:\Windows\winxsx через стандартную «очистку диска» и между перезагрузками, а после использовать центр обновлений.

Проверим раздел:
cd  /home/username/qemu-qcow2-storage/
qemu-img info corn.qcow2
qemu-img check corn.qcow2

Минимально достаточно следующего:
qemu-img resize corn.qcow2 +10GB

Затем добавляем устройство CD-ROM, «вставляем туда gparted» и все как обычно. Русский язык — 24.
По хорошему надо использовать libguestfs-tools или resize2fs

Для Windows 8.1 нужен wddm драйвер, QXL будет очень медленно, лучше пробросить видекарту хоста
Про OEM-активация Windows очень хорошо написано тут — habrahabr.ru/post/247597

Всем спасибо.

Комментарии (18)


  1. Jodes
    21.06.2015 23:14

    Не нужно юзать aptitude в чем то отличном от Debian 6.


    1. la0
      21.06.2015 23:52

      И в 5 и 6 не использовал aptitude.
      А в чем с ним проблема и почему в 6 нужно?
      Просто интересно для очщего развития


      1. Jodes
        21.06.2015 23:54

        apt-get до Debian 6 ломал пакетную базу. aptitude ломает ее после Debian 6.
        На сей счет даже были рекомендации от разработчиков дистрибутива.


        1. jsirex
          22.06.2015 00:36
          +3

          Всю жизнь пользуюсь aptitude.
          Нигде ничего не сломалось. ЧЯДНТ?


          1. icCE
            22.06.2015 02:17
            -2

            Оно официально признано ненужным. Лучше на лор зайти и почитать коменты срачи на эту тему.
            Но в общем целом я согласен, что оно не нужно и будет выпиливаться.


            1. JIghtuse
              22.06.2015 03:48
              +2

              aptitude is the recommended package manager for Debian GNU/Linux systems
              Debian FAQ, Keeping your Debian system up-to-date. Официальные доводы экспертов LOR не интересуют.

              Насколько помню, сейчас только не рекомендуют делать aptitiude dist-upgrade при переезде на новый релиз.


              1. icCE
                22.06.2015 04:07
                +1

                Debian Jessie 8.0

                The recommended way to upgrade from previous Debian releases is to use the package management tool apt-get. In previous releases, aptitude was recommended for this purpose, but recent versions of apt-get provide equivalent functionality and also have shown to more consistently give the desired upgrade results.

                Проблема в том, что aptitude сейчас плохо разрабатывается и не успевает за apt. Искать тред по переписки в 4 утра как то лениво, вы уж извините.

                и да, если вы будите более внимательны то в jessie понизили приоритет aptitude с important до standard, так что она теперь не входит в базовую систему.


  1. la0
    21.06.2015 23:57

    Спасибо за статью.
    Я вижу, что используется в основном virsh/libvirt. И по идее описанное вами решение имеет шансы быть относительно универсальным хотья для kvm, хоть для ovz, хоть для чего угодно что умеет libvirt.
    Не пробовали повторить то же самое с другими вируализаторами?


    1. icCE
      22.06.2015 02:22

      Да работает оно все ок. Да же zen, но то оно и писалось. Другое дело, что если у вас нет причин использовать libvrt, то лучше его не использовать.
      Вы начинаете загонять в определенные рамки по настройкам и правки руками xml файла, когда надо будет что-то эдакое.
      kvm, openvz и lxc прекрасно админится и без libvrt.
      Да от себя я еще скажу, что bridge-utils то же уже не нужно.Open vSwitch решает все эти задачи эффективние и не только их.


      1. pavelsh
        22.06.2015 10:04

        Каким образом еще можно админить kvm? Ручной вызов qemu?


  1. icCE
    22.06.2015 05:52
    +1

    >Про OEM-активация Windows очень хорошо написано тут — habrahabr.ru/post/247597

    От этого OEM активация не станет лицензионной с точки зрение если к вам прийдут.
    Я на всякий случай.


  1. Meklon
    22.06.2015 08:42

    Спасибо. Может кто-то может помочь? У меня после обновления десктопа до Kubuntu 15.04 сломался virt-manager, которым я управлял виртуальными машинами на домашнем сервере. Ни локально не создаёт, ни к удалённым подключиться не может.