Требования к системе виртуализации

Для установки и функционирования vESBC установленная версия QEMU должна быть не ниже 2.6.2.

Использование командной строки QEMU

Полный список комад QEMU предоставляется в официальной документации.

Создание виртуальной машины

В примере описан процесс создания файла образа диска в формате QCow2 и подключения его в хостовой операционной системе.

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

qemu-img create -f qcow2 -o size=<размер_диска>M <наименование_диска>.qcow2

Пример:

admin@host:~$ qemu-img create -f qcow2 -o size=2000M vesbc.qcow2
admin@host:~$ Formatting 'vesbc.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=393216000 lazy_refcounts=off refcount_bits=16

Установка vESBC

Для запуска установки vESBC необходимо выполнить команду:

sudo qemu-system-x86_64 --enable-kvm -cpu <CPU> -smp <количество_CPU> -m <размер_RAM>G -nic <тип и параметры сетевой карты> <наименование_диска>.qcow2 -boot d -cdrom <имя_ISO-образа>

где:

--enable-kvm — включение полной поддержки виртуализации KVM;

-cpu — модель процессора, например, параметр -cpu host передает виртуальной машине все возможности, флаги и инструкции (например, AES-NI, AVX, VT-x) вашего реального физического процессора;

-smp — включение имитации SMP-системы с n CPU;

-m — выбор размера виртуальной RAM;

-nic — настройки сетевой карты;

-boot — выбор загрузки. Значение d указывает на CD-ROM;

-cdrom — выбор файла ISO-образа.


Пример запуска установки vESBC :

admin@host:~$ sudo qemu-system-x86_64 --enable-kvm -cpu host -smp 4 -m 4G -nic bridge,br=0,model=virtio-net-pci vesbc.qcow2 -boot d -cdrom vesbc-installer.iso

Дальнейшие действия по установке vESBC описаны в разделе Процесс установки vESBC.

После установки необходимо извлечь ISO из виртуального привода, для этого:

  1. Перейдите в консоль QEMU сочетанием клавиш CTRL+ALT+2.
  2. Введите команду выхода quit.

Последующий запуск vESBC необходимо производить без указания ISO (флага -boot).

Пример запуска vESBC :

admin@host:~$  sudo qemu-system-x86_64 --enable-kvm -cpu host -smp 4 -m 4G -nic bridge,br=0,model=virtio-net-pci vesbc.qcow2

Подключение сетевых интерфейсов

В режиме TAP

Для подключения сетевого интерфейса необходимо запустить vESBC на QEMU с указанием настроек сетевой карты -nic tap,ifname=gi1 (если необходимо подключить несколько сетевых интерфейсов, то необходимо их всех указать, например, -nic tap,ifname=gi1 -nic tap,ifname=gi2). На хостовом устройстве необходимо перевести созданный интерфейс в состояние UP и назначить IP-адрес для обеспечения IP-связности vESBC и хостовой операционной системы.

 Пример запуска vESBC с одним сетевым интерфейсом:

sadmin@host:~$ sudo qemu-system-x86_64 --enable-kvm -cpu host -smp 4 -m 4G -nic tap,ifname=gi1 vesbc.qcow2

Перевод созданного интерфейса в состояние UP и назначение IP-адреса на хосте:

admin@host:~$ ip link set gi1 up
admin@host:~$ ip add add 192.168.1.1/24 dev gi1

Настройте IP-адресацию на vESBC и проверьте IP-связность c хостом:

vesbc# config
vesbc(config)# interface gigabitethernet 1/0/1
vesbc(config-if-gi)# ip address 192.168.1.2/24
vesbc(config-if-gi)# exit
vesbc(config)# exit
Warning: you have uncommitted configuration changes.
vesbc# commit 
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc# confirm
Configuration has been confirmed. Commit timer canceled.
vesbc# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56 bytes of data.
!!!
--- 192.168.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.150/0.223/0.313/0.069 ms

Теперь есть прямая IP-связность с хостом, возможность подключения к vESBC по Telnet, SSH, WEB, а также обновления прошивки vESBC, загрузки и выгрузки файлов.

В режиме Linux Bridge

Linux Bridge — это программный сетевой модуль ядра Linux, работающий как виртуальный сетевой коммутатор (switch) на 2-м уровне модели OSI. Он объединяет физические (например, eth0) и виртуальные (veth, TAP) сетевые интерфейсы в один общий сегмент сети (L2-домен), позволяя им обмениваться данными напрямую по MAC-адресам.

При использовании Linux Bridge требуется предварительная конфигурация бриджей в хостовой операционной системе.

Пример конфигурации файла config.yaml при конфигурировании через netplan для ОС Ubuntu 20.04.6 TLS:

network:
  version: 2
  ethernets:
    eno1:                               // eno1 - физический интерфейс хоста, который будет использоваться для подключения виртуальной машины vESBC к сети передачи данных.
      dhcp4: no
      dhcp6: no
    eno2:
      dhcp4: no
      dhcp6: no
    enp24s0f0:
      dhcp4: no
    enp24s0f1:
      dhcp4: no
  bridges:
    br0:                                // br0 - создание бриджа br0.
      interfaces:
        - eno1                          // добавление интерфейса eno1 в бридж.
      addresses:
        - 192.168.113.140/20            // настройка IP-адреса хоста (если необходима IP-связность между хостом и виртуальными машинами).
      routes:
        - to: default                   // настройка шлюза по умолчанию.
          via: 192.168.112.1
      nameservers:                     
        addresses:
          - 8.8.8.8                     // настройка DNS-сервера. 
      parameters:
        stp: false
      dhcp4: no
    br1:
      interfaces: []
      parameters:
        stp: false
      dhcp4: no

Пример запуска виртуальной машины vESBC с сетевым интерфейсом на базе бриджа br0 и драйвером сетевого адаптера virtio:

admin@host:~$  sudo qemu-system-x86_64 --enable-kvm -cpu host -smp 4 -m 4G -nic bridge,br=br0,model=virtio-net-pci vesbc.qcow2

В режиме PCI Passthrough

PCI Passthrough (сквозной проброс PCI) — это технология виртуализации, которая позволяет «отдать» физическое устройство (видеокарту, сетевой адаптер, USB-контроллер) напрямую виртуальной машине.

В этом режиме гостевая ОС работает с устройством так, будто оно вставлено непосредственно в её материнскую плату, минуя уровень эмуляции гипервизора.

Прежде чем запускать QEMU, нужно «отвязать» карту от хоста и передать её драйверу vfio-pci:

  1. Включите IOMMU в BIOS/UEFI (параметры VT-d для Intel или AMD-Vi для AMD).
  2. Добавьте параметры ядра в загрузчик (например, в /etc/default/grub в строку GRUB_CMDLINE_LINUX_DEFAULT):
  3. Узнайте PCI-адрес карты:
    admin@host:~$ lspci -nn | grep -i ethernet
    18:00.0 Ethernet controller [0200]: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ [8086:1572] (rev 01)
    18:00.1 Ethernet controller [0200]: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ [8086:1572] (rev 01)
    Если планируется, например, использование первого интерфейса сетевой кары, то адрес карты: 18:00.0 (ID устройства — [8086:1572])
  4. Привяжите карту к vfio-pci:
    admin@host:~$ modprobe vfio-pci
    admin@host:~$ echo "0000:18:00.0" | sudo tee /sys/bus/pci/devices/0000:18:00.0/driver/unbind
    admin@host:~$ echo "8086 1572" | sudo tee /sys/bus/pci/drivers/vfio-pci/new_id
    
  5. Запустите  виртуальную машину vESBC с проброшенным сетевым интерфейсом Intel X710 for 10GbE SFP+:
    qemu-system-x86_64 --enable-kvm -cpu host -smp 4 -m 4G -device vfio-pci,host=18:00.0 vesbc.qcow2

Использование командной строки VIRSH

Virsh — это интерфейс командной строки для управления виртуальными машинами, сетями и хранилищами. Он работает через библиотеку libvirt и используется для управления гипервизором KVM.

Полный список команд Libvirt предоставляется в официальной документации.

Для отображения графической консоли vESBC рекомендуется установить virt-viewer:

sudo apt update
sudo apt install virt-viewer

Создание виртуальной машины

  1.  Создайте файл образа диска в формате QCow2 аналогично как описано выше.
  2. Укажите требуемые параметры виртуальной машины и выполните установку:
    sudo virt-install   --name <название ВМ>   --ram <азмер_RAM>   --vcpus <количество CPU>   --disk <параметры диска>   --os-variant <тип ОС>   --network <сетевой адаптер>  --graphics <графический вывод> --video <драйвер>   --console <параметры консоли>   --cdrom <образ ISO vESBC>

    где:

    --name  — название виртуальной машины;

    --ram — объем оперативной памяти;

    --vcpus — количество ядер CPU;

    -- disk — путь до файла диска, созданного в п. 1 Обязательно использовать bus=ide.

    --osvariant — тип ОС, использовать generic;

    --network — указание сетевого адаптера;

    --graphics — настройки графического вывода виртуальной машины;

    --video — драйвер видеоадаптера;

    --console — настройка последовательного порта;

     --cdrom — путь к ISO-образу vESBC.

    Дальнейшие действия по установке vESBC описаны в разделе Процесс установки vESBC.

Пример установки:

udo virt-install   --name vesbc   --ram 4096   --vcpus 2   --disk path=/var/lib/libvirt/images/vesbc.qcow2,size=2,format=qcow2,bus=ide   --os-variant generic   --network bridge:br0,model=virtio  --graphics spice,listen=127.0.0.1 --video virtio   --console pty,target_type=serial   --cdrom /var/lib/libvirt/images/vesbc-1.41.x-build89.iso   --check disk_size=off

Дальнейший запуск, остановка и выполнение настроек виртуальной машины осуществляется через командный интерфейс virsh.

Подключение сетевых интерфейсов

В режиме Linux Bridge

Подключение сетевых интерфейсов осуществляется флагом –network при создании виртуальной машины, как описано в разделе выше.

При использовании Linux Bridge требуется предварительная конфигурация бриджей в хостовой операционной системе. Пример настройки приведен выше.

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

--network bridge:br0,model=virtio

где:

br0 — название бриджа в хостовой ОС;

model=virtio — драйвер эмуляции virtio.

Помимо virtio можно использовать драйвер e1000  rtl8138. Драйвер virtio является более предпочтительным.

В режиме PCI Passthrough

PCI Passthrough (сквозной проброс PCI) — это технология виртуализации, которая позволяет «отдать» физическое устройство (видеокарту, сетевой адаптер, USB-контроллер) напрямую виртуальной машине.

В этом режиме гостевая ОС работает с устройством так, будто оно вставлено непосредственно в её материнскую плату, минуя уровень эмуляции гипервизора.

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

  1. Узнайте PCI-адрес карты:
    admin@host:~$ lspci -nn | grep -i ethernet
    18:00.0 Ethernet controller [0200]: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ [8086:1572] (rev 01)
    18:00.1 Ethernet controller [0200]: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ [8086:1572] (rev 01)
    Если планируется, например, использование первого интерфейса сетевой кары, то адрес карты: 18:00.0.
  2. Для проброса интерфейса в виртуальную машину используйте флаг --hostdev при ее создании:
    --hostdev 18:00.0
    где 18:00.0 — адрес сетевой карты. 

Использование приложения Менеджер виртуальных машин (Virtual Machine Manager)

Virtual Machine Manager — это приложение для управления виртуальными машинами в операционных системах Linux при помощи графического интерфейса (GUI).

Создание виртуальной машины

 1. Запустите "Менеджер виртуальных машин". Для создания виртуальной машины нажмите кнопку "Создать виртуальную машину" в главном меню:

2. В окне "Новая виртуальная машина" оставьте метод установки — "Локальный ISO или CDROM" и нажмите кнопку "Forward":

3. Нажмите кнопку "Обзор":

 В открывшимся окне выберите образ ISO vESBC, затем нажмите кнопку "Выбор тома":

Перед выбором образа ISO поместите его в каталог /var/lib/libvirt/images/

4. Деактивируйте чек-бокс "Automatically detect from the installation media / source". В поле "Choose the operating system you are installing" укажите "Generic default" и нажмите кнопку "Forward":

5. Укажите количество ядер CPU и количество RAM в соответствующих полях, нажмите кнопку "Forward":

6. Укажите объем HDD и нажмите кнопку "Forward":

7. Укажите название виртуальной машины и нажмите кнопку "Готово". Также можно сразу указать сетевой адаптер, или настроить сеть позже.

8. После создания виртуальной машины откроется окно установки vESBC. Дальнейшие действия по установке vESBC описаны в разделе Процесс установки vESBC.

9. Если требуется донастройка (добавить/изменить сетевой адаптер, количество CPU, RAM и т. д.) виртуальной машины vESBC, выключите ее и откройте окно настроек кнопкой "Показать виртуальное оборудование"

Подключение сетевых интерфейсов

Перед изменением конфигурации виртуальной машины она должна быть выключена.

1. Запустите "Менеджер виртуальных машин", выберите нужную виртуальную машину и нажмите кнопку "Открыть".

2. Если сетевой адаптер уже был добавлен при создании виртуальной машины и требуется изменить его параметры, следует выбрать его в списке оборудования. 

    Изменение адаптера выполняется в настройке "Создать на базе". Доступны следующие режимы работы адаптера:

В режиме macvtap связи межу хостовой ОС и виртуальной машиной нет. Также данный режим не подходит для организации кластера vESBC (за исключением режима Passthrough), т. к. при использовании протокола VRRP MAC-адрес vESBC будет отличаться отMAC-адреса сетевого интерфейса, и трафик не будет передаваться в виртуальную машину из-за особенностей реализации драйвера macvtap.

3. Для добавления дополнительных сетевых адаптеров нажмите кнопку "Добавить оборудование" в нижнем левом углу (cм. скрин выше). В открывшемся окне выберете раздел "Сеть", укажите параметры адаптера и нажмите кнопку "Готово". Добавленный адаптер появится в списке оборудования виртуальной машины.

4. Для проброса сетевой карты в виртуальную машину следует в окне выбора оборудования (см. предыдущий пункт) выбрать раздел "PCI-устройство узла", в списке устройств выбрать нужный сетевой адаптер и нажать кнопку "Готово". Добавленный адаптер появится в списке оборудования виртуальной машины:

Подключение последовательного порта

С использованием командной строки QEMU

Для подключения последовательного порта vESBC к pty хоста следует добавить опцию к используемой команде запуска эмулятора QEMU:

-serial pty

После запуска команды появится строка с номером pty, на который перенаправлен вывод:

char device redirected to /dev/pts/3 (label serial0)

Команда для подключения к pty с помощью minicom:

sudo minicom -D /dev/pts/3

Либо можно использовать подключение последовательного порта vESBC к pipe в файловой системе хоста. Для этого нужно добавить опцию:

-serial unix:/tmp/vesbc-qemu,server,nowait

Команда для подключения к pipe с помощью minicom:

sudo minicom -D unix#/tmp/vesbc-qemu

С использованием командной строки VIRSH

Для подключения последовательного порта vESBC к pty хоста следует добавить флаг  --console при установке виртуальной машины.

Пример флага для настройки pty:

--console pty,target_type=serial

Для подключения к консоли используйте команду:

virsh console <имя_ВМ>

Для выхода из консоли нажмите комбинацию клавиш Ctrl + ].

С использованием приложения Менеджер виртуальных машин (Virtual Machine Manager)

При создании виртуальной машины виртуальная консоль pty создается автоматически:

Для подключения к консоли запустите виртуальную машину, посмотрите номер pty:

Команда для подключения к pty с помощью minicom:

sudo minicom -D /dev/pts/4