Preparing the Environment
Usage Instructions
- StratoVirt can run on VMs with the x86_64 or AArch64 processor architecture.
- You are advised to compile, commission, and deploy StratoVirt on openEuler 21.09.
- StratoVirt can run with non-root permissions.
Environment requirements
The following are required in the environment for running StratoVirt:
- /dev/vhost-vsock device (for implementing the MMIO)
- nmap tool
- Kernel and rootfs images
Preparing Devices and Tools
To run StratoVirt, the MMIO device must be implemented. Therefore, before running StratoVirt, ensure that the
/dev/vhost-vsock
device exists.Check whether the device exists.
$ ls /dev/vhost-vsock /dev/vhost-vsock
If the device does not exist, run the following command to generate it:
$ modprobe vhost_vsock
To use QMP commands, install the nmap tool first. After configuring the yum source, run the following command to install the tool:
# yum install nmap
Preparing Images
Creating the Kernel Image
StratoVirt of the current version supports only the PE kernel image of the x86_64 and AArch64 platforms. The kernel image in PE format can be generated by using the following method:
Run the following commands to obtain the kernel source code of openEuler:
$ git clone https://gitee.com/openeuler/kernel $ cd kernel
Run the following command to check and switch the kernel version to 5.10:
$ git checkout kernel-5.10
Configure and compile the Linux kernel. It is better to use the recommended configuration file (Obtain configuration file). Copy it to the kernel directory, and rename it as
.config
. You can also run the following command to configure the kernel as prompted:$ make menuconfig
Run the following command to create and convert the kernel image to the PE format. The converted image is
vmlinux.bin
.$ make -j vmlinux && objcopy -O binary vmlinux vmlinux.bin
If you want to use the kernel in bzImzge format on the x86 platform, run the following command:
$ make -j bzImage
Creating the Rootfs Image
The rootfs image is a file system image. When StratoVirt is started, the ext4 image with init can be loaded. To create an ext4 rootfs image, perform the following steps:
Prepare a file with a proper size (for example, create a file with the size of 10 GiB in
/home
).$ cd /home $ dd if=/dev/zero of=./rootfs.ext4 bs=1G count=10
Create an empty ext4 file system on this file.
$ mkfs.ext4 ./rootfs.ext4
Mount the file image. Create the
/mnt/rootfs
directory and mountrootfs.ext4
to the directory as userroot
.$ mkdir /mnt/rootfs # Return to the directory where the file system is created, for example, **/home**. $ cd /home $ sudo mount ./rootfs.ext4 /mnt/rootfs && cd /mnt/rootfs
Obtain the latest alpine-mini rootfs of the corresponding processor architecture.
- If the AArch64 processor architecture is used, run the following command:
$ wget http://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/aarch64/alpine-minirootfs-3.12.0-aarch64.tar.gz $ tar -zxvf alpine-minirootfs-3.12.0-aarch64.tar.gz $ rm alpine-minirootfs-3.12.0-aarch64.tar.gz
- If the x86_64 processor architecture is used, run the following command:
$ wget http://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/x86_64/alpine-minirootfs-3.12.0-x86_64.tar.gz $ tar -zxvf alpine-minirootfs-3.12.0-x86_64.tar.gz $ rm alpine-minirootfs-3.12.0-x86_64.tar.gz
Run the following command to create a simple /sbin/init for the ext4 file image:
$ rm sbin/init; touch sbin/init && cat > sbin/init <<EOF #! /bin/sh mount -t devtmpfs dev /dev mount -t proc proc /proc mount -t sysfs sysfs /sys ip link set up dev lo exec /sbin/getty -n -l /bin/sh 115200 /dev/ttyS0 poweroff -f EOF sudo chmod +x sbin/init
Uninstall the rootfs image.
$ cd /home; umount /mnt/rootfs
The rootfs is created successfully. You can use the ext4 rootfs image file
rootfs.ext4
, which is stored in the/home
directory.
Obtaining Firmware Required for Standard Boot
Firmware refers to the device driver stored in the device. An OS can be booted in standard boot mode only through firmware. Currently, StratoVirt supports standard boot based on the Unified Extensible Firmware Interface (UEFI) only in the x86_64 and aarch64 architectures.
EDK II is open source software that implements the UEFI standard. StratoVirt uses EDK II as the standard boot firmware. Therefore, you need to obtain the EDK II firmware file. You can run the yum commands to install the EDK II firmware:
Run the following command in the x86_64 architecture:
$ sudo yum install -y edk2-ovmf
Run the following command in the AArch64 architecture:
$ sudo yum install -y edk2-aarch64
The EDK II firmware contains two files: one is used to save executable code, and the other is used to save boot configuration information. After the installation is complete, in the x86_64 architecture, the firmware file OVMF_CODE.fd
and firmware configuration file OVMF_VARS.fd
are saved in the /usr/share/edk2/ovmf
directory. In the AArch64 architecture, the firmware file QEMU_EFI-pflash.raw
and firmware configuration file vars-template-pflash.raw
are saved in the /usr/share/edk2/aarch64
directory.