Installation¶
Nitro is a complex piece of software and, unfortunatelly, requires quite a bit of setup work to get everything up and running. Hopefully the process of installing Nitro will eventually get simpler, but for now, this document tries to provide enough information for you to succesfully setup the framework. Additional instruction can be found on the projects README.
Unfortunatelly, it is not feasable to explain everything here about how to compile and install custom kernels or how to neatly install software from sources as these may depend on the target system in question. For this reason, this chapter requires a certain level of technical expertise. While not everything is explained, hopefully this chapter still contains enough pointers for someone wishing to install the system.
Installing the Kernel¶
Nitro depends on a modified version of the Linux kernel with additional functionality added to the KVM. The sources for this custom release of Linux can be found on the projects GitHub repository.
Setting up QEMU¶
Nitro uses for QEMU for executing virtual machines. Unfortunately, the upstream QEMU does not currently provide means for efficiently accessing virtual machines’ memory from the host. For this reason, Nitro requires a custom version of the QEMU virtualization platform. Sources can be found on the projects GitHub repository.
Getting libvmi¶
Libvmi library offers building blocks for virtual machine introspection by providing an unified API for accessing virtual machine state such as memory and registers. Nitro requires a custom version of this library. You can find the sources for this from the projects GitHub repository.
Libvmi requires a configuration file describing the properties of virtual
machines to be present before it can be used. This requirement applies to Nitro
as well because it uses libvmi internally. Nitro’s repository contains an
example libvmi.conf
file configuring the library for use with Windows
guests, however, the exact configuration may vary between operating system
releases. Libvmi documentation
describes how to obtaining the correct configuration values in more detail.
Setting up libvirt¶
Nitro uses the libvirt toolkit for setting up and
managing virtual machines and their associated resources. Be sure to
additionally install the python bindings for the libvirt API. For Ubuntu, they
are in the python3-libvirt
package.
Python Dependencies¶
After external dependencies have been installed, Nitro itself has to be
installed, along with the python libraries it depends on. Like other Python
projects, this can be handled using the included setup.py
script.
sudo ./setup.py install
This will install the package for all users. However, for development, it might make more sense to install Nitro in “development” mode and only for a single user:
./setup.py develop --user