Setting up the Controller - 5g-empower/5g-empower.github.io GitHub Wiki
Table of Contents
Hardware Requirements
One PC running a recent Linux distribution. There are no particular hardware requirements. Any reasonably recent laptop/desktop should be able to run the controller.
The reference operating system for this guide is Ubuntu 20.04 LTS Server.
Software Requirements
The controller requires Python 3.8.
The following commands will update the package repository and install some dependencies:
sudo apt-get install python3-pip
We recommend to use pip to install the python dependencies:
sudo pip3 install empower-core tornado construct pymodm influxdb python-stdnum
Running the Controller from the command line
The controller depends on MongoDB to store its configuration and on InfluxDB to store network monitoring information. Moreover, if you want to visualize the various network monitoring information stored in InfluxDB you may also want to install Grafana.
You can install those dependencies any way you like and the controller will try by default to reach them on localhost on their default ports. However, the easiest way to install and run them is by using Docker. This guide assumes that you have Docker installed and configured in your system.
Before starting the containers you must create the directories to be mounted as volumes:
mkdir -p ~/Docker/mongodb
mkdir -p ~/Docker/influxdb
mkdir -p ~/Docker/grafana
You can install and run MongoDB, InfluxDB, and Grafana with the following commands:
sudo docker run -d --restart always -p 27017:27017 --name=mongo -v ~/Docker/mongodb:/data/db mongo
sudo docker run -d --restart always -p 8086:8086 --name=influxdb -v ~/Docker/influxdb:/var/lib/influxdb influxdb:1.8
sudo docker run -d --restart always -p 3000:3000 --name=grafana --user 1000:1000 -v ~/Docker/grafana:/var/lib/grafana grafana/grafana
This will download and run MongoDB, InfluxDB, and Grafana as daemons. The commands above will also expose the default ports of the two services to the host and will mount the specified directories as volumes inside the containers. This last operation is needed to ensure persistence.
Clone the empower-runtime repository:
git clone https://github.com/5g-empower/empower-runtime.git
This will create a directory named empower-runtime which from now on will be referred to as $TOPDIR. By default, the controller looks for its configuration files in /etc/empower/.
The repository you just cloned already contains some basic configuration files, you just need to create a symbolic link to the conf directory in etc:
sudo ln -sf $TOPDIR/conf/ /etc/empower
If you plan using the Web UI you need also to link it under /var/www/empower/. In order to do so first create the /var/www/ directory (if it does not exists already):
sudo mkdir -p /var/www/
Then create a symbolic link to the webui directory in www:
sudo ln -s $TOPDIR/webui/ /var/www/empower
Make sure to replace $TOPDIR with the full path to the directory where you cloned the empower-runtime repository.
Change to the controller directory:
cd empower-runtime
and start the controller:
./empower-runtime.py
If all the python dependencies are satisfied you should the following output:
2019-10-20 11:47:59,160 - root - INFO - Importing module: empower.managers.envmanager.envmanager
2019-10-20 11:47:59,234 - root - INFO - Importing module: empower.managers.apimanager.apimanager
2019-10-20 11:47:59,234 - root - INFO - Importing module: empower.managers.accountsmanager.accountsmanager
2019-10-20 11:47:59,235 - root - INFO - Importing module: empower.managers.projectsmanager.projectsmanager
2019-10-20 11:47:59,236 - root - INFO - Importing module: empower.managers.ranmanager.lvapp.lvappmanager
2019-10-20 11:47:59,240 - root - INFO - Importing module: empower.managers.ranmanager.vbsp.vbspmanager
2019-10-20 11:47:59,242 - root - INFO - Importing module: empower.managers.timeseriesmanager.timeseriesmanager
2019-10-20 11:47:59,324 - root - INFO - Registering service: empower.managers.envmanager.envmanager
2019-10-20 11:47:59,324 - root - INFO - Registering service: empower.managers.apimanager.apimanager
2019-10-20 11:47:59,326 - root - INFO - Registering service: empower.managers.accountsmanager.accountsmanager
2019-10-20 11:47:59,326 - root - INFO - Registering service: empower.managers.projectsmanager.projectsmanager
2019-10-20 11:47:59,327 - root - INFO - Registering service: empower.managers.ranmanager.lvapp.lvappmanager
2019-10-20 11:47:59,327 - root - INFO - Registering service: empower.managers.ranmanager.vbsp.vbspmanager
2019-10-20 11:47:59,327 - root - INFO - Registering service: empower.managers.timeseriesmanager.timeseriesmanager
2019-10-20 11:47:59,327 - root - INFO - Starting service: empower.managers.envmanager.envmanager
2019-10-20 11:47:59,327 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/workers/?
2019-10-20 11:47:59,328 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/workers/([a-zA-Z0-9-]*)/?
2019-10-20 11:47:59,328 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/catalog/?
2019-10-20 11:47:59,328 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/env/?
2019-10-20 11:47:59,340 - root - INFO - Starting service: empower.managers.apimanager.apimanager
2019-10-20 11:47:59,340 - empower.managers.apimanager.apimanager - INFO - Registering URL: /
2019-10-20 11:47:59,340 - empower.managers.apimanager.apimanager - INFO - Registering URL: /index.html
2019-10-20 11:47:59,341 - empower.managers.apimanager.apimanager - INFO - Registering URL: /auth/login
2019-10-20 11:47:59,341 - empower.managers.apimanager.apimanager - INFO - Registering URL: /auth/logout
2019-10-20 11:47:59,341 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/doc/?
2019-10-20 11:47:59,343 - empower.managers.apimanager.apimanager - INFO - Listening on port 8888
2019-10-20 11:47:59,343 - root - INFO - Starting service: empower.managers.accountsmanager.accountsmanager
2019-10-20 11:47:59,343 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/accounts/?
2019-10-20 11:47:59,344 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/accounts/([a-zA-Z0-9:.]*)/?
2019-10-20 11:47:59,346 - root - INFO - Starting service: empower.managers.projectsmanager.projectsmanager
2019-10-20 11:47:59,346 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/projects/catalog/?
2019-10-20 11:47:59,347 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/projects/([a-zA-Z0-9-]*)/apps/?
2019-10-20 11:47:59,347 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/projects/([a-zA-Z0-9-]*)/apps/([a-zA-Z0-9-]*)/?
2019-10-20 11:47:59,348 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/projects/([a-zA-Z0-9-]*)/lvaps/?
2019-10-20 11:47:59,348 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/projects/([a-zA-Z0-9-]*)/lvaps/([a-zA-Z0-9:]*)/?
2019-10-20 11:47:59,348 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/projects/?
2019-10-20 11:47:59,349 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/projects/([a-zA-Z0-9-]*)/?
2019-10-20 11:47:59,349 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/projects/([a-zA-Z0-9-]*)/wifi_acl/?
2019-10-20 11:47:59,349 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/projects/([a-zA-Z0-9-]*)/wifi_acl/([a-zA-Z0-9:]*)/?
2019-10-20 11:47:59,350 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/projects/([a-zA-Z0-9-]*)/wifi_slices/?
2019-10-20 11:47:59,350 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/projects/([a-zA-Z0-9-]*)/wifi_slices/([0-9]*)/?
2019-10-20 11:47:59,351 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/projects/([a-zA-Z0-9-]*)/lte_slices/?
2019-10-20 11:47:59,351 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/projects/([a-zA-Z0-9-]*)/lte_slices/([0-9]*)/?
2019-10-20 11:47:59,356 - root - INFO - Starting service: empower.managers.ranmanager.lvapp.lvappmanager
2019-10-20 11:47:59,357 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/lvaps/?
2019-10-20 11:47:59,357 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/lvaps/([a-zA-Z0-9:]*)/?
2019-10-20 11:47:59,357 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/wtps/?
2019-10-20 11:47:59,357 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/wtps/([a-zA-Z0-9:]*)/?
2019-10-20 11:47:59,360 - empower.managers.ranmanager.lvapp.lvappmanager - INFO - Listening on port 4433
2019-10-20 11:47:59,361 - root - INFO - Starting service: empower.managers.ranmanager.vbsp.vbspmanager
2019-10-20 11:47:59,361 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/vbses/?
2019-10-20 11:47:59,361 - empower.managers.apimanager.apimanager - INFO - Registering URL: /api/v1/vbses/([a-zA-Z0-9:]*)/?
2019-10-20 11:47:59,364 - empower.managers.ranmanager.vbsp.vbspmanager - INFO - Listening on port 5533
2019-10-20 11:47:59,364 - root - INFO - Starting service: empower.managers.timeseriesmanager.timeseriesmanager
2019-10-20 11:47:59,382 - empower.managers.timeseriesmanager.timeseriesmanager - INFO - Connected to InfluxDB database empower
...