Skip to content

urunc-dev/urunc

urunc

OpenSSF Best Practices

Welcome to urunc, the "runc for unikernels".

Table of Contents

  1. Introduction
  2. Quick start
  3. Installation guide
  4. Documentation
  5. Supported platforms
  6. Publications and talks
  7. Bug Reporting
  8. Community & Meetings
  9. Roadmap
  10. Contributing
  11. Security Policy
  12. Changelog
  13. License
  14. Contact

Introduction

The main goal of urunc is to bridge the gap between traditional unikernels and containerized environments, enabling seamless integration with cloud-native architectures. Designed to fully leverage the container semantics and benefits from the OCI tools and methodology, urunc aims to become “runc for unikernels”, while offering compatibility with the Container Runtime Interface (CRI). Unikernels are packaged inside OCI-compatible images and urunc launces the unikernel on top of the underlying Virtual Machine or seccomp monitors. Thus, developers and administrators can package, deliver, deploy and manage unikernels using familiar cloud-native practices.

For the above purpose urunc acts as any other OCI runtime. The main difference of urunc with other container runtimes is that instead of spawning a simple process, it uses a Virtual Machine Monitor (VMM) or a Sandbox Monitor to run the unikernel. It is important to note that urunc does not require any particular software running alongside the user's application, inside or outside the unikernel. As a result, urunc manages the user's application running inside the unikernel through the respective VM process.

demo

Quick start

The easiest and fastest way to try out urunc would be with docker Before doing so, please make sure that the host system satisfies the following dependencies:

  • docker
  • Qemu
  • urunc and containerd-shim-urunc-v2 binaries.

Install Docker:

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
$ rm get-docker.sh
$ sudo groupadd docker
$ sudo usermod -aG docker $USER

Install urunc:

$ sudo apt-get install -y git
$ git clone https://github.com/urunc-dev/urunc.git
$ docker run --rm -ti -v $PWD/urunc:/urunc -w /urunc golang:latest bash -c "git config --global --add safe.directory /urunc && make"
$ sudo make -C urunc install

Install QEMU:

$ sudo apt install -y qemu-kvm

Now we are ready to run nginx as a Unikraft unikernel using Docker and urunc:

$ docker run --rm -d --runtime io.containerd.urunc.v2 harbor.nbfc.io/nubificus/urunc/nginx-qemu-unikraft-initrd:latest 
67bec5ab9a748e35faf7c2079002177b9bdc806220e59b6b413836db1d6e4018

We can inspect the container and get its IP address:

$ docker inspect 67bec5ab9a748e35faf7c2079002177b9bdc806220e59b6b413836db1d6e4018 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",

At last we can curl the Nginx server running inside Unikraft with:

$ curl 172.17.0.2
<!DOCTYPE html>
<html>
<head>
  <title>Hello, world!</title>
</head>
<body>
  <h1>Hello, world!</h1>
  <p>Powered by <a href="http://unikraft.org">Unikraft</a>.</p>
</body>
</html>

Installation guide

For a detailed installation guide please check Documentation and particularly the installation guide page.

Documentation

We keep an up to date documentation for urunc at https://urunc.io/ . We use mkdocs to render urunc's documentation. Hence, you can also have a local preview of documentation by running either make docs or make docs_container.

In the first case, make docs will execute mkdocs serve. Take a note of the url, where the docs will be served in the output of the command (i.e. http://127.0.0.1:8000). It is important to note, that material-mkdocs must be installed. For more information, please check the installation guide. Moreover, the pip packages mkdocs-literate-nav and mkdocs-section-index should also be installed.

In the second case, a container with all dependencies will start serving the documentation at http://127.0.0.1:8000.

Supported platforms

At the moment, urunc is available on GNU/Linux for x86_64 and arm64 architectures. In addition, the following table provides an overview of the currently supported VM/Sandbox monitors and unikernels:

Unikernel VM/Sandbox Monitor Arch Storage
Rumprun Solo5-hvt, Solo5-spt x86,aarch64 Block/Devmapper
Unikraft QEMU, Firecracker x86 Initrd, 9pfs
MirageOS QEMU, Solo5-hvt, Solo5-spt x86,aarch64 Block/Devmapper
Mewz QEMU x86 In-memory
Linux QEMU, Firecracker x86 Initrd, Block/Devmapper, 9pfs, Virtiofs

We plan to add support for more unikernel frameworks and other platforms too. Feel free to contact us for a specific unikernel framework or similar technologies that you would like to see in urunc.

Running on k8s

To use urunc with an existing Kubernetes cluster, please follow the instructions in the docs.

Publications and talks

A part of our work in urunc has been published in EuroSys'24 SESAME workshop, under the title Sandboxing Functions for Efficient and Secure Multi-tenant Serverless Deployments. Feel free to ask us if you can not have access to the paper.

Furthermore, urunc has appeared in various open source summits and events, such as:

Bug reporting

Please use github issues to report any bug. For more info please check the reporting bugs section in the Contributing guide.

Roadmap

We track planned features, improvements, and milestones using GitHub Issues. You can view the Roadmap for each one of the next (or previous) releases by filtering based on the respective milestone.

Have a feature in mind or want to contribute? Open an issue or fire-up a discussion!

Community and Meetings

Join us for our monthly open meetings, held every last Wednesday of the month. These sessions are a great opportunity to share ideas, ask questions, and stay connected with the project team and other contributors.

Contributing

We will be very happy to receive any feedback and any kind of contributions for urunc. For more details please take a look in urunc's contributing document.

Security policy

In case of a security vulnerability, please refer to the Security Policy document. for guidelines on how to report it responsibly.

Changelog

See CHANGELOG.md for more information on what changed in the latest and previous releases.

License

Apache License 2.0

Contact

We kindly invite everyone interested in urunc to join our Slack channel. To directly communicate with the maintainers, feel free to drop an email At urunc's maintainers' mailing list

About

a simple container runtime that aspires to become `runc` for unikernels

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Contributors 10