# Лабораторная работа 5. Основы виртуализации в Linux. Libvirt.

Цель<br>
Научиться работать с Libvirt и Virsh

Задачи
   1) Установить Libvirt.
   2) Настроить сетевой мост.
   0) Создать виртуальную машину.
   0) Провести базовые операции с виртуальной машиной.
    
<b>Note: Авторизация на всех узлах<br>
Логин:</b> labuser<br>
<b>Пароль:</b> labpass1!<br><br>
Схема виртуального лабораторного стенда

<div drawio-diagram="356"><img src="https://docs.resds.ru/uploads/images/drawio/2022-11/oqg0KgzofcyaL9VE-drawing-3-1669800184.png"></div>

#### Задание 1. Установка Libvirt и Virsh.

Необходимо установить несколько пакетов для виртуализации, которые не входят в базовую комплектацию системы. В проекте [GROUP]:[team]-lab:4-7, на labnode-1 нужно выполнить следующую команду:
```sh
sudo yum install -y libvirt virt-install
```
#### Задание 2. Настройка моста.

Установить пакет <b>bridge-utils</b>:
```sh
sudo yum install -y bridge-utils
```
Вывести на экран имеющиеся интерфейсы:
```sh
ip -c address
```
Открыть файл <b>/etc/sysconfig/network-scripts/ifcfg-br0</b>:
```sh
sudo vi /etc/sysconfig/network-scripts/ifcfg-br0
```
И добавить в него следующее содержимое:
```
TYPE=Bridge
DEVICE=br0
BOOTPROTO=static
ONBOOT=yes
IPADDR=10.0.12.21
PREFIX=24
GATEWAY=10.0.12.1
```
А в файл <b>/etc/sysconfig/network-scripts/ifcfg-eth0</b> добавить параметр `BRIDGE`, убрать `BOOTPROTO` и `ONBOOT`,`GATEWAY`,`IPADDR`,`NETMASK`:
```
DEVICE=eth0
BRIDGE=br0
USERCTL=no
```
Перезагрузить сервер:
```sh
sudo reboot
```
#### Задание 3. Создание виртуальной машины.
Переместить образ <b>cirros</b> в <b>/var/lib/libvirt/images/</b>
```sh
sudo mv /tmp/cirros.img /var/lib/libvirt/images/
```
Следующая команда создаст новую KVM виртуальную машину
```sh
sudo virt-install --name cirros \
--ram 1024 \
--disk path=/var/lib/libvirt/images/cirros.img,cache=none \
--boot hd \
--vcpus 1 \
--network bridge:br0 \
--graphics spice,listen=0.0.0.0 \
--wait 0
```

<i>Символ \ - обратная косая черта используется для экранирования специальных
символов в строковых и символьных литералах. В данном случае нужна, чтобы
переместить каретку на новую строку, для наглядности. После ее добавления в команду
можно нажать Enter, но строка не отправится на выполнение, а ввод команды
продолжится.</i>
При ошибке в наборе команды, можно не набирать ее заново, а нажать стрелку вверх,
исправить ее, и снова нажать `Enter`
Подробнее о параметрах:

| Название парметра  | Описание параметра  |
|---|---|
|name | Имя виртуальной машины, которое будет отображаться в virsh|
|  ram |  Размер оперативной памяти в МБ | 
|  disk |  Диск, который будет создан и подключен к виртуальной машине |  
| vcpus | Количество виртуальных процессоров, которые нужно будет настроить для гостя | 
| os-type | Тип операционной системы |
| os-variant | Название операционной системы| 
| network | Определение сетевого интерфейса, который будет подключен к виртуальной машине | 
| graphics | Определяет графическую конфигурацию дисплея. |
| cdrom | CD ROM устройство |

Далее необходимо подключиться из виртуальной машине virt_viewer (Пользователь - `labuser`, пароль -
`labpass1!`) к виртуальной машине через программу <b>Remmina</b>.

Открыть её (название - Remmina). Подключиться по адресу <b>10.0.12.21:5900</b>, выбрав протокол SPICE
Вернуться в консоль <b>labnode-1</b>. Проверить состояние гостевой системы, используя команду
(Если в консоли написано “Domain installation still in progress”, то нажмите `^C`):
```sh
sudo virsh list --all
```
#### Задание 4. Операции с виртуальной машиной.

<div drawio-diagram="135"><img src="https://docs.resds.ru/uploads/images/drawio/2022-02/Rn8o4dU7mK6tKZ1T-drawing-3-1645729456.png"></div>

Рассмотрим работу утилиты <b>virsh</b>. Чтобы подключиться к ВМ по протоколу удаленного доступа, используется следующая команда:
```sh
sudo virsh domdisplay cirros
```
Результатом исполнения этой команды будет адрес для подключения к графическому
интерфейсу ВМ, с указанием номера порта.
Получить информацию о конкретной ВМ можно так:
```sh
sudo virsh dominfo cirros
```
В результате чего будет выведена информация, об основных параметрах виртуальной машины.
Выключить/включить ВМ можно с помощью команды:
```sh
sudo virsh destroy cirros
sudo virsh start cirros
```
Добавление ВМ в автозапуск происходит следующим образом:
```sh
sudo virsh autostart cirros
```
Теперь, виртуальная машина будет автоматически запускаться, после перезагрузки сервера.
Кроме того, может потребоваться отредактировать XML конфигурацию ВМ:
```sh
sudo virsh edit cirros
```
<i>* Чтобы выйти из редактора без сохранения - :q!</i>

Необходимо выгрузить конфигурацию ВМ в XML в файл, используя команду:
```sh
sudo virsh dumpxml cirros | tee cirros.xml
```
Необходимо удалить ВМ, и убедиться, что её нет в списке виртуальных машин:
```sh
sudo virsh undefine cirros
sudo virsh destroy cirros
sudo virsh list --all
```
Для создания ВМ из XML существует следующая команда:

```sh
sudo virsh define cirros.xml
sudo virsh list --all
```