Виртуальные машины. libvirt и QEMU
Установка
Заголовок раздела «Установка»Требуется установить пакет libvirt
и один из гипервизоров. Я
выбрал QEMU (пакет qemu-full
). Для
добавление виртуальных машин требуется virt-install
.
sudo pacman -S libvirt virt-install qemu-full
Если виртуальные машины будут запускаться с графической сессией, можно
использовать virt-viewer
:
sudo pacman -S virt-viewer
Включите и запустите службу libvirtd
sudo systemctl enable libvirtdsudo systemctl enable libvirtd
Чтобы предоставить пользователю доступ к демону libvirt, проще всего добавить
его в группу libvirt
:
sudo usermod -aG libvirt $(whoami)
Создание ВМ
Заголовок раздела «Создание ВМ»Скачайте ISO-образ операционной системы, которая будет использоваться в ВМ. В таблице ниже перечислены ссылки на некоторые ОС.
ОС | Ссылка |
---|---|
Arch Linux | https://archlinux.org/download/ |
Linux Mint | https://linuxmint.com/download.php |
Ubuntu | https://ubuntu.com/download/desktop |
Windows 10 | https://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 .
virtiofs
Заголовок раздела «virtiofs»Необходимо отредактировать конфигурацию ВМ. Чтобы открыть конфигурацию для редактирования, выполните команду:
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 .
Подключение по SSH. Port forwarding.
Заголовок раздела «Подключение по SSH. Port forwarding.»Самый простой способ настройки 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 <название снапшота>
Настройка ВМ с Windows 10
Заголовок раздела «Настройка ВМ с Windows 10»Включите возможность “OpenSSH Server”.
В настройках перейдите в Settings > Apps > Apps & features > Optional features, нажмите “Add a feature” и установите “OpenSSH Server”.
В качестве альтернативы, выполните команду:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Возможно, после включения возможности потребуется перезагрузка.
Включите и запустите службу sshd:
Start-Service sshdSet-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 .