**StratoVirt**

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

У StratoVirt есть конкурентные преимущества в лёгкости и низком уровне шума, координации программного и аппаратного обеспечения, а также безопасности на уровне языка Rust.

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

**Как начать**

*Подготовка*
Перед сборкой StratoVirt убедитесь, что язык Rust и Cargo уже установлены. Если нет, вы можете найти руководство по установке по следующей ссылке:
https://www.rust-lang.org/tools/install.
И у вас будет меньше накладных расходов памяти, если вы подготовите набор инструментов musl для Rust.

*Сборка StratoVirt*
Чтобы собрать StratoVirt, сначала клонируйте проект и соберите его:
```sh
$ git clone https://gitee.com/openeuler/stratovirt.git
$ cd stratovirt
$ make build
```
Теперь вы можете найти двоичный файл StratoVirt в target/release/stratovirt.

*Запуск виртуальной машины с помощью StratoVirt*
Для быстрого запуска StratoVirt требуется:
* ядро Linux формата PE или bzImage (только x86_64);
* образ диска корневой файловой системы EXT4 в формате raw.

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

https://repo.openeuler.org/openEuler-22.03-LTS/stratovirt_img/.

Для стандартной виртуальной машины требуется файл прошивки EDK2, который соответствует UEFI.

```shell
# Если сокет qmp существует, удалите его сначала.

# Запустите microvm
$ ./target/release/stratovirt \
    -machine microvm \
    -kernel /path/to/kernel \
    -append "console=ttyS0 root=/dev/vda reboot=k panic=1" \
    -drive file=/path/to/rootfs,id=rootfs,readonly=off \
    -device virtio-blk-device,drive=rootfs,id=rootfs \
    -qmp unix:/path/to/socket,server,nowait \
    -serial stdio

# Запустите стандартную виртуальную машину на x86_64
$ ./target/release/stratovirt \
    -machine q35 \
    -kernel /path/to/kernel \
    -append "console=ttyS0 root=/dev/vda reboot=k panic=1" \
    -drive file=/path/to/firmware,if=pflash,unit=0,readonly=true \
    -device pcie-root-port,port=0x0,addr=0x1.0x0,bus=pcie.0,id=pcie.1 \
    -drive file=/path/to/rootfs,id=rootfs,readonly=off \
    -device virtio-blk-pci,drive=rootfs,bus=pcie.1,addr=0x0.0x0,id=blk-0 \
    -qmp unix:/path/to/socket,server,nowait \
    -serial stdio
```

Подробное руководство по созданию корневой файловой системы, компиляции ядра и сборке StratoVirt можно найти в [QuickStart StratoVirt](./docs/quickstart.md).

StratoVirt поддерживает гораздо больше функций, подробное руководство можно найти в [Configuration Guidebook](docs/config_guidebook.md).

**Дизайн**

Чтобы узнать больше о базовой архитектуре дизайна StratoVirt, обратитесь к [StratoVirt design](./docs/design.md).

**Вклад**
Мы приветствуем новых участников! И мы рады предоставить руководство и помощь новым участникам. StratoVirt следует соглашениям о форматировании Rust, которые можно найти по адресу:

https://github.com/rust-dev-tools/fmt-rfcs/tree/master/guide
https://github.com/rust-lang/rust-clippy.

Дополнительную информацию о StratoVirt вы можете получить по адресу:

https://gitee.com/openeuler/stratovirt/wikis.

Если вы обнаружите ошибку или у вас есть идеи, отправьте электронное письмо на [список рассылки virt](https://mailweb.openeuler.org/postorius/lists/virt.openeuler.org/) или создайте [проблему](https://gitee.com/openeuler/stratovirt/issues).

**Лицензия**
StratoVirt лицензирован под Mulan PSL v2.