# Сборка StratoVirt из исходного кода

## 1. Проверка окружения Rust

Для сборки StratoVirt убедитесь, что среда языка Rust и Cargo уже установлены.
Рекомендуется использовать версию rustc 1.64.0 или более позднюю, иначе компиляция может завершиться неудачно.

```shell
$ rustc --version
rustc 1.64.0
```

Если вы хотите развернуть окружение Rust, вам поможет следующая ссылка:

<https://www.rust-lang.org/tools/install>

## 2. Сборка с glibc

При использовании glibc StratoVirt связывается динамически. Это целевой объект по умолчанию для сборки StratoVirt.

```shell
# Добавьте цепочку инструментов gnu rust, если она установлена, пропустите
$ arch=`uname -m`
$ rustup target add ${arch}-unknown-linux-gnu

# Соберите StratoVirt
$ cargo build --workspace --bins --release --target ${arch}-unknown-linux-gnu
```
Теперь вы можете найти двоичный файл StratoVirt в `target/${arch}-unknown-linux-gnu/release/stratovirt`.

## 3. Сборка с musl-libc

StratoVirt также можно собрать с помощью инструментальных цепочек musl-libc. Таким образом, StratoVirt связан статически и не имеет зависимостей от библиотек.

```shell
# Добавьте цепочку инструментов musl rust, если она установлена, пропустите
$ arch=`uname -m`
$ rustup target add ${arch}-unknown-linux-musl

# Соберите StratoVirt
$ cargo build --workspace --bins --release --target ${arch}-unknown-linux-musl
```
Теперь вы можете найти статический двоичный файл StratoVirt в `target/${arch}-unknown-linux-musl/release/stratovirt`.

## 4. Сборка с функциями

Для различных сценариев StratoVirt предоставляет опции условной компиляции на основе груза `feature`.

Список дополнительных функций:

- scream_alsa: включить виртуальную звуковую карту с интерфейсом ALSA
- scream_pulseaudio: включить виртуальную звуковую карту с интерфейсом PulseAudio
- usb_host: включить устройство USB Host
- usb_camera_v4l2: включить камеру USB с бэкэндом v4l2
- gtk: включить отображение GTK
- vnc: включить отображение VNC
- ramfb: включить устройство отображения ramfb
- virtio_gpu: включить виртуализированную видеокарту virtio-gpu
- pvpanic: включить виртуализированное устройство pvpanic pci

```shell
$ cargo build --workspace --bins --release --features "scream_alsa"
```

## 5. Компиляция версии OpenHarmony OS

Stratovirt теперь может работать на OpenHarmony OS (OHOS). Stratovirt, версия OHOS, скомпилирован для x64 и использует набор инструментов для кросс-компиляции RUST и SDK, предлагаемый OHOS.

Перед компиляцией укажите путь к SDK OHOS в переменной среды OHOS_SDK. Некоторые ящики, необходимые для StratoVirt, теперь не поддерживают платформу OHOS, необходима адаптация.

Вот пример команды:

```
RUSTFLAGS="-C link-arg=--target=aarch64-linux-ohos -C linker={OHOS_SDK}/llvm/bin/clang" cargo build --target aarch64-linux-ohos --features {FEATURES}"
```

# Сборка статического StratoVirt в контейнерах

## 1. Проверьте окружение docker

Чтобы собрать StratoVirt в контейнеры, убедитесь, что программное обеспечение docker установлено. Это можно проверить с помощью следующей команды:

```shell
$ docker -v
Docker version 18.09.0
```

Если вы хотите настроить окружение docker, вам может помочь следующая ссылка:

<https://docs.docker.com/get-docker/>

## 2. Запустите скрипт сборки

Запустите скрипт в каталоге tools/build_stratovirt_static, чтобы автоматически запустить контейнер docker для сборки статически связанного StratoVirt.

```shell
$ cd tools/build_stratovirt_static
# Соберите StratoVirt с вашим custom_image_name
$ sh build_stratovirt_from_docker.sh custom_image_name
```
После завершения сборки вы можете найти статически связанный двоичный файл StratoVirt по пути: `target/${arch}-unknown-linux-musl/release/stratovirt`.