3.2 KiB
Development Guide
Structure
krata is composed of three major executables:
Executable | Runs On | User Interaction | Dev Runner | Code Path |
---|---|---|---|---|
kratad | host | backend daemon | ./hack/debug/kratad.sh | crates/kratad |
kratanet | host | backend daemon | ./hack/debug/kratanet.sh | crates/kratanet |
kratactl | host | CLI tool | ./hack/debug/kratactl.sh | crates/kratactl |
krataguest | guest | none, guest init | N/A | crates/krataguest |
You will find the code to each executable available in the bin/ and src/ directories inside it's corresponding code path from the above table.
Environment
Component | Specification | Notes |
---|---|---|
Architecture | x86_64 | aarch64 support is still in development |
Memory | At least 6GB | dom0 will need to be configured will lower memory limit to give krata guests room |
Xen | 4.17 | Temporary due to hardcoded interface version constants |
Debian | stable / sid | Debian is recommended due to the ease of Xen setup |
rustup | any | Install Rustup from https://rustup.rs |
Setup Guide
-
Install the specified Debian version on a x86_64 host capable of KVM (NOTE: KVM is not used, Xen is a type-1 hypervisor).
-
Install required packages:
apt install git xen-system-amd64 flex bison libelf-dev libssl-dev bc
-
Install rustup for managing a Rust environment.
-
Configure
/etc/default/grub.d/xen.cfg
to give krata guests some room:
# Configure dom0_mem to be 4GB, but leave the rest of the RAM for krata guests.
GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=4G,max:4G"
After changing the grub config, update grub: update-grub
Then reboot to boot the system as a Xen dom0.
You can validate that Xen is setup by running xl info
and ensuring it returns useful information about the Xen hypervisor.
- Clone the krata source code:
$ git clone https://github.com/edera-dev/krata.git krata
$ cd krata
- Build a guest kernel image:
$ ./hack/kernel/build.sh -j4
- Copy the guest kernel image at
target/kernel/kernel
to/var/lib/krata/guest/kernel
to have it automatically detected by kratad. - Launch
./hack/debug/kratanet.sh
and keep it running in the foreground. - Launch
./hack/debug/kratad.sh
and keep it running in the foreground. - Run kratactl to launch a guest:
$ ./hack/debug/kratactl.sh launch --attach alpine:latest
To detach from the guest console, use Ctrl + ]
on your keyboard.
To list the running guests, run:
$ ./hack/debug/kratactl.sh list
To destroy a running guest, copy it's UUID from either the launch command or the guest list and run:
$ ./hack/debug/kratactl.sh destroy GUEST_UUID