Перейти к содержимому

Виртуальные машины. libvirt и QEMU

Требуется установить пакет libvirt и один из гипервизоров. Я выбрал QEMU (пакет qemu-full). Для добавление виртуальных машин требуется virt-install.

Окно терминала
sudo pacman -S libvirt virt-install qemu-full
Статус сборки (libvirt) Статус сборки (libvirt)
Статус сборки (qemu) Статус сборки (qemu)

Если виртуальные машины будут запускаться с графической сессией, можно использовать virt-viewer:

Окно терминала
sudo pacman -S virt-viewer
Статус сборки пакетов Статус сборки пакетов

Включите и запустите службу libvirtd

Окно терминала
sudo systemctl enable libvirtd
sudo systemctl enable libvirtd

Чтобы предоставить пользователю доступ к демону libvirt, проще всего добавить его в группу libvirt:

Окно терминала
sudo usermod -aG libvirt $(whoami)

Скачайте ISO-образ операционной системы, которая будет использоваться в ВМ. В таблице ниже перечислены ссылки на некоторые ОС.

ОССсылка
Arch Linuxhttps://archlinux.org/download/
Linux Minthttps://linuxmint.com/download.php
Ubuntuhttps://ubuntu.com/download/desktop
Windows 10https://www.microsoft.com/en-us/software-download/windows10ISO

Для установки ВМ выполните команду ниже, указав необходимые параметры:

Окно терминала
virt-install \
--name <имя ВМ> \
--memory <размер оперативной памяти> \
--vcpus <количество виртуальных ядер> \
--cpu host \
--cdrom <путь до ISO-образа> \
--disk size=<размер диска в ГБ>,format=qcow2 \
--network user \
--virt-type kvm \
--graphics vnc

После чего необходимо установить операционную систему виртуальной машины в открывшемся окне. Если окно не открылось, можно использовать virt-viewer напрямую (здесь и далее <имя ВМ> совпадает с именем, указанным при установке):

Окно терминала
virt-viewer <имя ВМ>
Окно терминала
virsh start <имя ВМ>
virt-viewer <имя ВМ>

Добавьте (или раскомментируйте) следующую опцию в файле /etc/libvirt/qemu.conf:

vnc_allow_host_audio = 1

В качестве альтернативы можно использовать SPICE .

Необходимо отредактировать конфигурацию ВМ. Чтобы открыть конфигурацию для редактирования, выполните команду:

Окно терминала
virsh edit <имя ВМ>

Добавить параметры в соответствующих секциях конфигурации:

<domain type='kvm'>
[...]
<memoryBacking>
<source type='memfd'/>
<access mode='shared'/>
</memoryBacking>
[...]
<devices>
[...]
<filesystem type='mount' accessmode='passthrough'>
<driver type='virtiofs'/>
<source dir='<путь на хосте>'/>
<target dir='host'/>
</filesystem>
[...]
</devices>
[...]
</devices>

Замените <путь на хосте> на путь до директории, которая будет доступна из виртуальной машины.

Внутри ВМ примонтируйте директорию командой:

Окно терминала
mount -t virtiofs host /mnt

См. также: Sharing files between the host and its virtual machines by using virtiofs .

Самый простой способ настройки port forwarding — выполнить команду ниже, когда ВМ запущена:

Окно терминала
virsh qemu-monitor-command --hmp <имя ВМ> 'hostfwd_add ::<порт на хосте>-:<порт на ВМ>'

Замените выделенные параметры на необходимые значения, например:

Окно терминала
virsh qemu-monitor-command --hmp my-vm 'hostfwd_add ::2222-:22'

В примере выше 22 порт виртуальной машины “my-vm” будет доступен как 2222 порт на хосте.

Эту команду необходимо выполнять после каждой остановки/запуска ВМ. Можно автоматизировать этот процесс при помощи хуков libvirt.

Убедитесь, что на виртуальной машине настроен и запущен sshd. Подключитесь к ВМ командой:

Окно терминала
ssh <пользователь на ВМ>@127.0.0.1 -p <порт на хосте>

Для передачи файлов между ВМ и хостом можно использовать scp или настроить SSHFS.

Окно терминала
virsh destroy <имя ВМ>
virsh undefine <имя ВМ> --remove-all-storage

Если для указанной ВМ создавались снапшоты, их необходимо удалить:

Окно терминала
virsh snapshot-delete <название снапшота>

Включите возможность “OpenSSH Server”.

В настройках перейдите в Settings > Apps > Apps & features > Optional features, нажмите “Add a feature” и установите “OpenSSH Server”.

Установка возможности libvirt

В качестве альтернативы, выполните команду:

Окно терминала
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Возможно, после включения возможности потребуется перезагрузка.

Включите и запустите службу sshd:

Окно терминала
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'

Обычно, система автоматически создаст правило для фаерволла, позволяющее подключаться по ssh, используя порт 22. Если правило не было создано (т.е. подключение не удаётся) или требуется использовать другой порт, добавьте его командой:

Окно терминала
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 -Program "C:\Windows\System32\OpenSSH\sshd.exe"

По умолчанию, подключение по ssh будет запускать cmd.exe. Чтобы поменять оболочку на PowerShell, выполните команду от имени администратора:

Окно терминала
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

Скопируйте свой публичный SSH ключ в C:\Users\<имя пользователя>\.ssh\authorized_keys.

Настройте port forwarding для ВМ и подключитесь к ней командой:

Окно терминала
ssh <пользователь на ВМ>@127.0.0.1 -p 2222

См. также: Key-based authentication in OpenSSH for Windows .