Будем запускать виртуальную машину в 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
Создание, запуск/остановка, клонирование — почти :) все, что нужно.
На другом компьютере устанавливаем:
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)
la0
21.06.2015 23:57Спасибо за статью.
Я вижу, что используется в основном virsh/libvirt. И по идее описанное вами решение имеет шансы быть относительно универсальным хотья для kvm, хоть для ovz, хоть для чего угодно что умеет libvirt.
Не пробовали повторить то же самое с другими вируализаторами?icCE
22.06.2015 02:22Да работает оно все ок. Да же zen, но то оно и писалось. Другое дело, что если у вас нет причин использовать libvrt, то лучше его не использовать.
Вы начинаете загонять в определенные рамки по настройкам и правки руками xml файла, когда надо будет что-то эдакое.
kvm, openvz и lxc прекрасно админится и без libvrt.
Да от себя я еще скажу, что bridge-utils то же уже не нужно.Open vSwitch решает все эти задачи эффективние и не только их.
icCE
22.06.2015 05:52+1>Про OEM-активация Windows очень хорошо написано тут — habrahabr.ru/post/247597
От этого OEM активация не станет лицензионной с точки зрение если к вам прийдут.
Я на всякий случай.
Meklon
22.06.2015 08:42Спасибо. Может кто-то может помочь? У меня после обновления десктопа до Kubuntu 15.04 сломался virt-manager, которым я управлял виртуальными машинами на домашнем сервере. Ни локально не создаёт, ни к удалённым подключиться не может.
Jodes
Не нужно юзать aptitude в чем то отличном от Debian 6.
la0
И в 5 и 6 не использовал aptitude.
А в чем с ним проблема и почему в 6 нужно?
Просто интересно для очщего развития
Jodes
apt-get до Debian 6 ломал пакетную базу. aptitude ломает ее после Debian 6.
На сей счет даже были рекомендации от разработчиков дистрибутива.
jsirex
Всю жизнь пользуюсь aptitude.
Нигде ничего не сломалось. ЧЯДНТ?
icCE
Оно официально признано ненужным. Лучше на лор зайти и почитать коменты срачи на эту тему.
Но в общем целом я согласен, что оно не нужно и будет выпиливаться.
JIghtuse
Насколько помню, сейчас только не рекомендуют делать
aptitiude dist-upgrade
при переезде на новый релиз.icCE
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, так что она теперь не входит в базовую систему.