P4-in-a-Bottle/README.md

94 lines
3.1 KiB
Markdown

P4-in-a-Bottle
==============
Ready to use P4 tutorial container.
What is This?
-------------
P4-in-a-Bottle is a simple container workspace intended to replace the
[P4 Guide](https://github.com/jafingerhut/p4-guide) Ubuntu VMs. As of
2023-05-17, It contains all the tools provided in its Ubuntu 23.04 VM.
Why?
----
The provided image in the P4 Guide is specific to VirtualBox, its not the
easiest thing in the world to get it working with libvirt/QEMU/KVM. I thought
I might as well take it a step further ane make it NOT a VM at all. Having
this container also has a few other advantages:
1. It has less overhead than the original VM image.
2. It can run with a variety of setups: Docker, Podman, K8S, OpenShift, etc...
3. It can be used as a basis for other P4 runtime testing suites.
4. It's much smaller than a VM image.
5. When converted into a Apptainer SIF, it can be launched as a single binary
executable.
How to Use
----------
There are two ways of launching P4-in-a-Bottle:
### Apptainer
Apptainer is a container runtime by Sylabs developed specificly for software
that require low-level access to hardware (i.e. NVIDIA drivers, network
devices). This is great for P4-in-a-Bottle, since Mininet requires access to
networking kernel components to work.
Unfortunately, Apptainer only works natively on Linux, so if you're on Mac or
Windows (without WSL), you're out-of-luck here and should proceed to the docker
instructions below.
To use P4-in-a-Bottle with Apptainer:
1. Install Apptainer from [GitHub](https://github.com/apptainer/apptainer/releases).
2. Clone and cd into this repository.
3. Download a pre-built image
[p4iab.sif](https://git.inkweaver.net/inkweaver/P4-in-a-Bottle/releases)
and place it in the same directory alongside `README.md`.
4. Run `make app-run`. A shared directory `shared/` will be created to allow
you to move files between the container and your system.
### Docker
If you are stuck with docker, don't panic! The instructions are longer but
everything should still work.
1. Install docker on your system. This should be pretty self-explanatory.
2. Clone and cd into this repository.
3. Download a pre-built image
[p4iab.tar.gz](https://git.inkweaver.net/inkweaver/P4-in-a-Bottle/releases)
and place it in the same directory alongside `README.md`.
4. Run `docker load -i p4iab.tar.gz` to import the container into docker.
5. Run `make run`. A shared directory `shared/` will be created to allow
you to move files between the container and your system.
Building from Source
--------------------
To those who are building from source, note that this WILL take a significant
amount of time and space to build. If possible, use a pre-built image instead.
Build commands:
```bash
# Building a docker image for local use
$ make .docker_build
# Building a docker image that can be imported on other machines
$ make p4iab.tar.gz
# Building a Apptainer image (This depends on the docker image)
$ make p4iab.sif
# Cleanup any cached artifacts
$ make clean
```
Once you have either `p4iab.tar.gz` or `p4iab.sif`, proceed to follow the
instructions in the "How to Use" section from step 4.