2020-03-08 15:12:28 +01:00
|
|
|
# lxc-network
|
|
|
|
|
2020-03-12 11:52:07 +01:00
|
|
|
A network of LXC containers, managed through libvirt
|
|
|
|
|
|
|
|
## Dependencies
|
|
|
|
|
|
|
|
This script will most probably break on any other system than Linux, and will
|
|
|
|
definitely break on anything non-UNIX.
|
|
|
|
|
2020-03-21 13:43:58 +01:00
|
|
|
It relies on `libvirt`, `overlayfs` and `sudo` (to gain the required privileges
|
|
|
|
to use overlayfs).
|
2020-03-12 11:52:07 +01:00
|
|
|
|
|
|
|
## Setup
|
|
|
|
|
|
|
|
It is recommended to set up `lxc-network` within a *virtualenv*:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
virtualenv -p python3 venv
|
|
|
|
source venv/bin/activate
|
|
|
|
pip install -r requirements.txt
|
|
|
|
```
|
|
|
|
|
|
|
|
Furthermore, you are expected to set up a system root tree within the directory
|
|
|
|
of your choice, and put its path in `lxc_net/settings.py`. This can be done eg.
|
|
|
|
in ArchLinux with
|
|
|
|
|
|
|
|
```bash
|
|
|
|
pacstrap [your_root_directory] base
|
|
|
|
```
|
|
|
|
|
|
|
|
or the equivalent `debootstrap` command on Debian.
|
|
|
|
|
|
|
|
This system is expected to use `systemd`, and to have enabled
|
|
|
|
`systemd-networkd` to setup its IP addresses.
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
You can spawn a network using
|
|
|
|
|
|
|
|
```bash
|
|
|
|
./spawn_network.py topology_description.yml
|
|
|
|
```
|
|
|
|
|
|
|
|
where `topology_description.yml` is a valid topology description file (see
|
|
|
|
below).
|
|
|
|
|
2020-03-21 13:43:58 +01:00
|
|
|
When the network is spawned, you will get a (very basic) prompt. The available
|
|
|
|
commands are:
|
|
|
|
|
|
|
|
* `help`: display a list of available commands;
|
|
|
|
* `exit`: cleanup the network and quit the program;
|
|
|
|
* `dom`:
|
|
|
|
* `dom down`: keep the networks up, but cleanup the containers. Useful to
|
|
|
|
reset the containers or update binaries and settings.
|
|
|
|
* `dom up`: spawn the containers, if they were cleaned up beforehand.
|
|
|
|
* `dom restart`: equivalent to `dom down ; dom up`.
|
|
|
|
|
2020-03-12 11:52:07 +01:00
|
|
|
## Topology description file
|
|
|
|
|
|
|
|
A topology is described in a [YAML](https://en.wikipedia.org/wiki/YAML) file
|
|
|
|
looking like this:
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
---
|
|
|
|
links:
|
|
|
|
- domains: ['a', 'b']
|
|
|
|
- domains: ['b', 'c']
|
|
|
|
domains:
|
|
|
|
b:
|
|
|
|
enable_v4: false
|
|
|
|
```
|
|
|
|
|
|
|
|
The `links` element is mandatory, each link containing a mandatory `domains`
|
|
|
|
attribute, the list of domains (containers) connected to it. A domain is
|
|
|
|
described by an arbitrary name. Domains will be spawned (and indexed) in
|
|
|
|
alphabetical order.
|
|
|
|
|
|
|
|
A `domains` root element is optional, and may be used to specify
|
|
|
|
domain-specific options.
|
|
|
|
|
|
|
|
The valid options are:
|
|
|
|
* `enable_v4`: boolean, specifies whether the domain has an IPv4 address.
|