QEMU-KVM Реализация виртуальной машины

Ответить
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

QEMU-KVM Реализация виртуальной машины

Сообщение ya »

8 основных команд virsh
https://bugbd.ru/articles/2023/07/31/virsh-manual/

KVM - модуль ядра Linux, обеспечивающий доступ к аппаратной виртуализации на базе intl-vt или amd-svm

QEMU - эмулятор аппаратного обеспечения различных платформ, позволяющий запускать различные гостевые ОС
он может работать отдельно, но может использовать kvm для запуска виртуальных машин с более высокой скоростью;
он так же может выполнять эмуляцию процессов на уровне пользователя, позволяя приложениям, скомпилированным на одной архитектуре, работать на другой

libvirt - свободная реализация API, демон и набор инструментов для управления виртуализацией. Позволяет управлять гипервизорами kvm, qemu и другими

VMM (Virtual Machine Manager) - приложение для управления виртуальными машинами https://virt-manager.org/download.html

Cockpit — это инструмент для администрирования нескольких операционных систем GNU / Linux через удобный веб-интерфейс. Утилита создана для управления серверами, однако с ее помощью очень удобно реализуется управление виртуальными машинами KVM. Cockpit. помимо основного функционала, предлагает широкий выбор различных плагинов. Благодаря чему инструмент можно гибко настраивать в соответствии с Вашими потребностями.

Snapshots — это копии виртуальной машины, в которых сохранены текущее состояние системы, запущенные процессы и службы, работающие приложения. В результате Вы всегда можете развернуть виртуальную машину именно в том состоянии, которое нужно для работы.


Узнаём есть ли поддержка виртуализации просессором:

Код: Выделить всё

 egrep '(vmx|svm)' /proc/cpuinfo
либо установив пакет cpu-checker командой kvm-ok

Если используется процессор intel, то в выводе будет присутствовать vmx. Если вывода у команды не было, возможно камень не поддерживает вируализацию, либо она отключена в биосе

Устанавливаем Cockpit и плагин для работы с виртуальными машинами

Код: Выделить всё

sudo apt install cockpit-machines cockpit cockpit-bridge cockpit-networkmanager cockpit-system cockpit-tests cockpit-ws fonts-b612 cockpit-pcp
доступ через браузер на порт 9090
Далее Вы увидите окно авторизации в панели управления Cockpit. Чтобы войти — вводим логин и пароль учетной записи от той системы, на которой установлена нужная Вам виртуальная машина.
Важно: выполнения ряда операций по администрированию виртуальной машины потребует прав суперпользователя — потому можно сразу авторизоваться как пользователь root.
Также с помощью вкладки «Другие параметры» Вы можете сделать доступным поле «Подключиться к». С его помощью при необходимости можно получить доступ к управлению другими серверами, а не только к тому, на котором непосредственно установлен Cockpit.
В панели управления Cockpit предусмотрена возможность делать снимки системы — snapshots.

Устанавливаем Virtual Machine Manager и пакет, необходимый для аутентификации при подключении утилиты к удаленному серверу

Код: Выделить всё

sudo apt install virt-manager ssh-askpass
Запускать в графической среде:
virt-manager
Установить и настроить selinux
Графический интерфейс настройки selinux:
sepolicy gui
Установка и настройка qemu-kvm

Код: Выделить всё

sudo apt install qemu qemu-kvm libvirt-daemon libvirt-daemon-system libvirt-clients virtinst qemu-system qemu-user-static cloud-init guestfsd  libguestfs-tools 
На время настройки qemu переведём selinux в режим permissive
Не забудьте включить selinux после завершения настройки
Добавить для пользователя в /etc/sudoers

Код: Выделить всё

/usr/bin/sed , /usr/bin/apt , /usr/bin/dnf
sed - потоковый редактор преобразования текста

Код: Выделить всё

sudo apt install selinux-utils policycoreutils-gui policycoreutils policycoreutils-python-utils selinux-policy-default
sudo sed -i "s/SELINUX=enforcing/SELINUX=permissive/" /etc/selinux/config
sudo apt install dnf
sudo dnf install qemu-kvm libvirt virt-install openssh-askpass OVMF boost-random boost-program-options boost-regex
systemctl enable libvirtd && systemctl start libvirtd
lsmod | grep kvm
sudo usermod -a -G libvirt имяпользователя
Создание виртуальной машины:
https://wiki.debian.org/KVM

Код: Выделить всё

virt-install --virt-type kvm --name bullseye-amd64 \
--location http://deb.debian.org/debian/dists/bullseye/main/installer-amd64/ \
--os-variant debian11 \
--disk size=10 --memory 1000 \
--graphics none \
--console pty,target_type=serial \
--extra-args "console=ttyS0"
https://sumit-ghosh.com/posts/create-vm-using-libvirt-cloud-images-cloud-init/
https://computingforgeeks.com/how-to-install-kvm-virtualization-on-debian/

Качаем образ для виртуалки:
http://archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/current/legacy-images/
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.240-1/virtio-win-0.1.240.iso

Код: Выделить всё

wget -P /var/lib/libvirt/images https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.217-2/virtio-win-0.1.217.iso
Устанавливаем инструмент создания виртуалок

Код: Выделить всё

sudo apt install virt-manager
Создаём виртуалку win:

Код: Выделить всё

#!/bin/bash

sudo qemu-img create -f qcow2 -o preallocation=metadata /var/lib/libvirt/images/vm-rdp.qcow2 100G
sudo qemu-img create -f qcow2 -o preallocation=metadata /var/lib/libvirt/images/tmp.qcow2 2M

sudo virt-install \
--connect=qemu:///system \
--virt-type=kvm \
--accelerate \
--hvm \
--vcpus=16 \
--ram=16384 \
--video=cirrus \
--graphics vnc,listen=0.0.0.0,password=cisco \
--os-type=windows \
--os-variant=win2k22 \
--boot hd,cdrom,menu=on \
--disk device=cdrom,perms=ro,format=raw,path=/var/lib/libvirt/images/ru-ru_windows_server_2022_updated_may2022_x64_dvd_202336d4.iso \
--disk device=disk,bus=sata,cache=none,format=qcow2,path=/var/lib/libvirt/images/vm-rdp.qcow2 \
--disk device=disk,bus=virtio,cache=none,format=qcow2,path=/var/lib/libvirt/images/tmp.qcow2 \
--name=vm-rdp
Содзаём виртуалку nix

Код: Выделить всё

#!/bin/bash
sudo qemu-img create -f qcow2 -o preallocation=metadata /var/lib/libvirt/images/vm-hosting.qcow2 25G

sudo virt-install \
	--connect=qemu:///system \
	--virt-type=kvm \
	--accelerate \
	--hvm \
	--vcpus=8 \
	--ram=8192 \
	--video=cirrus \
	--graphics vnc,listen=0.0.0.0,password=cisco \
	--noautoconsole \
	--network network=default,model=virtio \
	--os-variant=ubuntu22.04 \
	--boot hd,cdrom,menu=on \
	--disk device=cdrom,perms=ro,format=raw,patch=/var/lib/libvirt/images/ubuntu-22.04-live-server-amd64.iso \
	--disk device=disk,bus=virtio,cache=none,format=qcow2,patch=/var/lib/libvirt/images/vm-hosting.qcow2 \
	--name=vm-hosting
Работа с виртуальной машиной:

Вывести список запущенных виртуальных хостов:

Код: Выделить всё

sudo virsh list
Вывести список всех имеющихся виртуальных хостов:

Код: Выделить всё

sudo virsh list --all
Перезагрузить машину:

Код: Выделить всё

sudo virsh reboot $ИМЯ_ВИРТУАЛЬНОЙ МАШИНЫ
Немедленно остановить машину:

Код: Выделить всё

sudo virsh destroy $ИМЯ_ВИРТУАЛЬНОЙ МАШИНЫ
Запустить машину:

Код: Выделить всё

sudo virsh start $ИМЯ_ВИРТУАЛЬНОЙ МАШИНЫ
Безопасно завершить работу машины:

Код: Выделить всё

sudo virsh shutdown $ИМЯ_ВИРТУАЛЬНОЙ МАШИНЫ
Добавить машину в автозапуск:

Код: Выделить всё

sudo virsh autostart $ИМЯ_ВИРТУАЛЬНОЙ МАШИНЫ
Посмотреть справку:

Код: Выделить всё

virsh --help
Примонтировать диск на запущенной виртуалке:

Код: Выделить всё

virsh attach-disk vm-rdp /var/lib/libvirt/images/virtio-win-0/1/127.iso sda --type cdrom --mode readonly


Как настроить сетевой мост:
https://blog.sedicomm.com/2018/03/14/kak-nastroit-setevoj-most-na-debian-linux/
Текстовая утилита для настройки мостов
nmtui
На вкладке Виртуальных Машин выбрать Директ аттачмент на реальный сетевой интерфйс
Без мостов будет редиректиться на локальную сетку этого интерфейса



Сброс пароля на виртуалку:
https://wiki.debian.org/ThomasChung/CloudImage
Загрузите образ nocloud. Просто введите root для входа в систему, и вы автоматически войдете в систему без пароля.
Я бы не рекомендовал использовать cloud-init. Это займет время, чтобы войти в систему, и, возможно, это не то, что вы ищете.
To install virt-customize:

Код: Выделить всё

$ sudo apt update
$ sudo apt install libguestfs-tools
$ which virt-customize
/usr/bin/virt-customize
To reset root password, set hostname and apply new host SSH-key with virt-customize:

Код: Выделить всё

$ virt-customize --add "PathToTagetDisk" \
--root-password password:MyRootPW \
--hostname "VMName" \ 
--firstboot-command 'ssh-keygen -A && systemctl restart sshd'
and if you want to allow SSH login with password for root (WARNING, only for test-servers!)

Код: Выделить всё

$ virt-customize --add "PathToTagetDisk" \
--root-password password:MyRootPW \
--append-line "/etc/ssh/sshd_config.d/rootlogin.conf":"PermitRootLogin yes" \
--append-line "/etc/ssh/sshd_config.d/rootlogin.conf":"PasswordAuthentication yes" \
--hostname "VMName" \ 
--firstboot-command 'ssh-keygen -A && systemctl restart sshd'
Запуск Debian 11 (Bullseye) на KVM с помощью облачного образа Qcow2
https://techviewleo.com/run-debian-11-bullseye-on-kvm-using-qcow2-cloud-image/

Дополнительно:
virt-p2v - physical-to-virtual machine converter
virt-what - определение контекста (виртуальный или реальный компьютер)
https://github.com/libvirt
Последний раз редактировалось ya 10 май 2024, 08:32, всего редактировалось 1 раз.
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

Починить позиционирование курсора мыши для qemu

Сообщение ya »

В коммандной строке запуска:
-usbdevice tablet

Или в xml-файле, через virt-manager на странице планшет
<input type='tablet' bus='usb'/>
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

Re: QEMU-KVM Реализация виртуальной машины

Сообщение ya »

Для выбора другого VNC-сервера для использования с QEMU, вам необходимо указать путь к исполняемому файлу VNC-сервера при запуске виртуальной машины. Например, если у вас есть VNC-сервер TigerVNC, вы можете указать путь к его исполняемому файлу при запуске QEMU с помощью следующей команды:

Код: Выделить всё

qemu-system-x86_64 -vnc :1 -k en-us -m 1024 -hda disk.img -vga std -net user -net nic -device usb-tablet -soundhw hda -enable-kvm -vncviewer /usr/bin/vncserver
Замените путь /usr/bin/vncserver на путь к исполняемому файлу вашего VNC-сервера. После этого QEMU будет использовать указанный вами VNC-сервер при запуске виртуальной машины.
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

Re: QEMU-KVM Реализация виртуальной машины

Сообщение ya »

Чтобы изменить VNC-сервер в QEMU на RealVNC сервер, выполните следующие шаги:
Сначала установите RealVNC сервер на вашем компьютере. Вы можете скачать и установить RealVNC с официального сайта: https://www.realvnc.com/en/connect/download/vnc/
После установки RealVNC сервера на вашем компьютере, откройте терминал и запустите QEMU с использованием следующей команды:

Код: Выделить всё

qemu-system-x86_64 -vnc your_IP_address:1,password -monitor stdio
где your_IP_address - это IP-адрес вашего компьютера.

Теперь вам нужно войти в RealVNC сервер на вашем компьютере, используя VNC-клиент. Введите IP-адрес вашего компьютера и номер порта (в данном случае 1), затем введите пароль, который вы указали в команде QEMU.
После этого вы должны увидеть виртуальную машину QEMU через RealVNC сервер.
Это все, теперь вы используете RealVNC сервер для подключения к виртуальной машине QEMU.
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

Re: QEMU-KVM Реализация виртуальной машины

Сообщение ya »

Для изменения VNC-сервера в QEMU на TigerVNC server, вам потребуется выполнить следующие шаги:

Установите TigerVNC server на вашей системе. Вы можете сделать это, используя менеджер пакетов вашего дистрибутива Linux, например:
sudo apt install tigervnc-server
Отредактируйте параметры виртуальной машины QEMU, чтобы указать использовать TigerVNC server вместо стандартного VNC сервера. Для этого добавьте следующие параметры при запуске виртуальной машины:

Код: Выделить всё

-display vnc=:0
-vnc :0 -monitor stdio
Перезапустите виртуальную машину QEMU с новыми параметрами, и она должна использовать TigerVNC server для подключения по VNC.
Теперь вы используете TigerVNC server вместо стандартного VNC сервера в QEMU.
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

Re: QEMU-KVM Реализация виртуальной машины

Сообщение ya »

создание виртуального диска
https://sys.hardprivate.com/viewtopic.php?f=7&t=610
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

Qemu подключить физический диск

Сообщение ya »

Для подключения физического диска к QEMU, вам потребуется использовать опцию `-drive` при запуске виртуальной машины. Для этого выполните следующую команду:

```
qemu-system-x86_64 -drive file=/dev/sdX,format=raw
```

Где `/dev/sdX` - путь к вашему физическому диску, который вы хотите подключить. Убедитесь, что выбранный диск не содержит важные данные, так как он будет использоваться QEMU как обычный файл.

Также обратите внимание, что при использовании этой опции QEMU получает полный доступ к физическому диску, поэтому будьте осторожны, чтобы не повредить данные на нем.
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

Re: QEMU-KVM Реализация виртуальной машины

Сообщение ya »

Для подключения физического диска к виртуальной машине с помощью QEMU необходимо сделать следующее:

1. Определите путь к физическому диску, который вы хотите подключить к виртуальной машине.

2. Используйте команду qemu-img для создания образа диска, который будет отображать физический диск:

```bash
qemu-img convert -f /dev/sdX -O qcow2 mydisk.qcow2
```

3. Запустите виртуальную машину с помощью команды вроде этой:

```bash
qemu-system-x86_64 -hda mydisk.qcow2 -boot c
```

где mydisk.qcow2 - это путь к созданному образу диска.

4. Ваша виртуальная машина теперь должна быть запущена с подключенным физическим диском.

Пожалуйста, обратите внимание, что для работы с физическими дисками в QEMU может потребоваться выполнение от имени суперпользователя (sudo). Перед подключением физического диска убедитесь, что вы понимаете, какие диски вы подключаете к виртуальной машине, чтобы избежать нежелательных изменений или потери данных.
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

Re: QEMU-KVM Реализация виртуальной машины

Сообщение ya »

Для подключения физического диска к виртуальной машине с помощью утилиты virsh необходимо выполнить следующие шаги:

1. Определить диск с помощью команды `lsblk` или `fdisk -l`. Найдите путь к диску (например, /dev/sdb).

2. Создайте XML-файл с описанием устройства диска. Например, назовите его disk.xml и заполните следующим содержимым:

```xml
<disk type='block' device='lun'>
<source dev='/dev/sdb'/>
<target dev='vdb' bus='virtio'/>
</disk>
```

3. Добавьте диск к виртуальной машине с помощью команды virsh attach-device:

```
virsh attach-device <VM_name> /path/to/disk.xml
```

Где `<VM_name>` - имя вашей виртуальной машины.

4. Перезагрузите виртуальную машину или выполните команду `virsh reboot <VM_name>`, чтобы увидеть подключенный внешний диск.

После выполнения этих шагов физический диск должен быть успешно подключен к виртуальной машине через утилиту virsh.
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

Re: QEMU-KVM Реализация виртуальной машины

Сообщение ya »

cockpit - Управление терминалом через веб на порт 9090

Поменять группу
chown -R :libvirt-qemu путь_к файлу_или каталогу
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

Re: QEMU-KVM Реализация виртуальной машины

Сообщение ya »

Журнал ошибок
journalctl -u libvirtd.service -b

Код: Выделить всё

sudo apt -y install libguestfs-tools libosinfo-bin qemu-system virt-manager
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

Re: QEMU-KVM Реализация виртуальной машины

Сообщение ya »

Бинарник для win
https://qemu.weilnetz.de/w64/
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

Re: QEMU-KVM Реализация виртуальной машины

Сообщение ya »

spice-vdagent, netcat
https://askubuntu.com/questions/858649/how-can-i-copypaste-from-the-host-to-a-kvm-guest

Код: Выделить всё

sudo apt install spice-vdagent netcat

Код: Выделить всё

qemu-system-x86_64 [ ... ] \
  -chardev qemu-vdagent,id=ch1,name=vdagent,clipboard=on \
  -device virtio-serial-pci \
  -device virtserialport,chardev=ch1,id=ch1,name=com.redhat.spice.0
ui/vnc-clipboard: fix integer underflow in vnc_client_cut_text_ext
https://www.mail-archive.com/qemu-devel@nongnu.org/msg914895.html
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

Re: QEMU-KVM Реализация виртуальной машины

Сообщение ya »

Покажет VNC на котором запущена виртуалка:

Код: Выделить всё

sudo virsh dumpxml имя_виртуалки | grep vnc
Отобразит:

Код: Выделить всё

<graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0'>
Покажет только порт VNC для виртуалки:

Код: Выделить всё

virsh dumpxml имя_виртуалки | grep vnc | grep -o "port='[0-9]*'" | sed "s/port='//; s/'//"
Ответить