# Начало работы со StratoVirt

## 1. Подготовка

* **Хостовая ОС**

   Вы можете запускать StratoVirt на платформах x86_64 и aarch64.

   Также StratoVirt основан на KVM, поэтому убедитесь, что у вас установлен модуль KVM на вашей платформе.

* **Права доступа**

    У вас должны быть права на чтение и запись в `/dev/kvm`. Если нет, вы можете получить их с помощью:

    ```shell
    $ sudo setfacl -m u:${USER}:rw /dev/kvm
    ```

## 2. Получение бинарного файла StratoVirt

StratoVirt предлагается openEuler 20.09 или более поздней версией. Вы можете установить его напрямую через yum.

```shell
$ sudo yum install stratovirt
```

Теперь вы можете найти бинарный файл StratoVirt по пути: `/usr/bin/stratovirt`.

Если вы хотите собрать StratoVirt самостоятельно, ознакомьтесь с [build_guide](./build_guide.md).

## 3. Запуск StratoVirt

С бинарным файлом StratoVirt (установленным через yum или собранным из исходного кода) мы можем загрузить гостевую Linux-машину. Сейчас StratoVirt предоставляет два типа машин: microvm и standard_vm («q35» на платформе x86_64 и «virt» на платформе aarch64). В качестве быстрого старта мы покажем, как запустить виртуальную машину с microvm.

Сначала вам понадобится двоичный файл ядра Linux в формате PE и образ файловой системы ext4 (в качестве rootfs).
* Источник загрузки для x86_64: [ядро](https://repo.openeuler.org/openEuler-22.03-LTS/stratovirt_img/x86_64/vmlinux.bin) и [rootfs](https://repo.openeuler.org/openEuler-22.03-LTS/stratovirt_img/x86_64/openEuler-22.03-LTS-stratovirt-x86_64.img.xz).
* Источник загрузки для aarch64: [ядро](https://repo.openeuler.org/openEuler-22.03-LTS/stratovirt_img/aarch64/vmlinux.bin) и [rootfs](https://repo.openeuler.org/openEuler-22.03-LTS/stratovirt_img/aarch64/openEuler-22.03-LTS-stratovirt-aarch64.img.xz).

Или получите ядро и rootfs с помощью оболочки:

```shell
arch=`uname -m`
dest_kernel="vmlinux.bin"
dest_rootfs="rootfs.ext4"
image_bucket_url="https://repo.openeuler.org/openEuler-22.03-LTS/stratovirt_img"

if [ ${arch} = "x86_64" ] || [ ${arch} = "aarch64" ]; then
    kernel="${image_bucket_url}/${arch}/vmlinux.bin"
    rootfs="${image_bucket_url}/${arch}/openEuler-22.03-LTS-stratovirt-${arch}.img.xz"
else
    echo "Cannot run StratoVirt on ${arch} architecture!"
    exit 1
fi

echo "Downloading $kernel..."
wget ${kernel} -O ${dest_kernel} --no-check-certificate

echo "Downloading $rootfs..."
wget ${rootfs} -O ${dest_rootfs}.xz --no-check-certificate
xz -d ${dest_rootfs}.xz

echo "kernel file: ${dest_kernel} and rootfs image: ${dest_rootfs} download over."
```

Запустите гостевую Linux-машину с помощью StratoVirt:

```shell
socket_path=`pwd`"/stratovirt.sock"
kernel_path=`pwd`"/vmlinux.bin"
rootfs_path=`pwd`"/rootfs.ext4"

# Убедитесь, что QMP можно создать.
rm -f ${socket_path}

# Запустите Linux VM с типом машины «microvm» с помощью StratoVirt.
/usr/bin/stratovirt \
    -machine microvm \
    -kernel ${kernel_path} \
    -smp 1 \
    -m 1024 \
    -append "console=ttyS0 pci=off reboot=k quiet panic=1 root=/dev/vda" \
    -drive file=${rootfs_path},id=rootfs,readonly=off,direct=off \
    -device virtio-blk-device,drive=rootfs,id=rootfs \
    -qmp unix:${socket_path},server,nowait \
    -serial stdio
```

Вы должны увидеть последовательный вывод в stdio, предлагающий вам войти в гостевую машину. Если вы использовали наш образ `openEuler-22.03-LTS-stratovirt.img`, вы можете войти как `root`, используя пароль `openEuler12#$`.

Если вы хотите завершить работу гостевой машины, использование команды `reboot` внутри гостевой машины фактически приведёт к выключению StratoVirt. Это связано с тем, что StratoVirt не реализовал управление питанием гостя в типе microvm.

Если вы хотите узнать больше информации о запуске StratoVirt, перейдите в [Руководство по настройке](./config_guidebook.md).