Requirements

  • gcc and g++ 8 or newer, clang 10 or newer, or other compiler with C++11 plus designated initializers support from C++20
  • CMake
  • liburing, jerasure headers and libraries
  • ISA-L, libibverbs headers and libraries (optional)
  • tcmalloc (google-perftools-dev)

Basic instructions

Download source, for example using git: git clone --recurse-submodules https://git.yourcmc.ru/vitalif/vitastor/

Get fio source and symlink it into <vitastor>/fio. If you don’t want to build fio engine, you can disable it by passing -DWITH_FIO=no to cmake.

Build and install Vitastor:

cd vitastor
mkdir build
cd build
cmake .. && make -j8 install

QEMU Driver

It’s recommended to build the QEMU driver (qemu_driver.c) in-tree, as a part of QEMU build process. To do that:

  • Install vitastor client library headers (from source or from vitastor-client-dev package)
  • Take a corresponding patch from patches/qemu-*-vitastor.patch and apply it to QEMU source
  • Copy src/client/qemu_driver.c to QEMU source directory as block/vitastor.c
  • Build QEMU as usual

But it is also possible to build it out-of-tree. To do that:

  • Get QEMU source, begin to build it, stop the build and copy headers:
    • <qemu>/include<vitastor>/qemu/include
    • Debian:
      • Use qemu packages from the main repository
      • <qemu>/b/qemu/config-host.h<vitastor>/qemu/b/qemu/config-host.h
      • <qemu>/b/qemu/qapi<vitastor>/qemu/b/qemu/qapi
    • CentOS 8:
      • Use qemu packages from the Advanced-Virtualization repository. To enable it, run yum install centos-release-advanced-virtualization.noarch and then yum install qemu
      • <qemu>/config-host.h<vitastor>/qemu/b/qemu/config-host.h
      • For QEMU 3.0+: <qemu>/qapi<vitastor>/qemu/b/qemu/qapi
      • For QEMU 2.0+: <qemu>/qapi-types.h<vitastor>/qemu/b/qemu/qapi-types.h
    • config-host.h and qapi are required because they contain generated headers
  • Configure Vitastor with WITH_QEMU=yes and, if you’re on RHEL, also with QEMU_PLUGINDIR=qemu-kvm: cmake .. -DWITH_QEMU=yes.
  • After that, Vitastor will build block-vitastor.so during its build process.
  • This way you can use the driver even with unmodified QEMU, but you’ll need to set environment variable LD_PRELOAD=/usr/lib/x86_64-linux-gnu/qemu/block-vitastor.so and Vitastor disks won’t work in QAPI and in “new” JSON syntax -blockdev in this case.