Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
This section describes how to configure the Python environment to run experiments and
develop code for the ETSI TeraFlowSDN controller.
In particular, we use [PyEnv](https://github.com/pyenv/pyenv) to install the appropriate
version of Python and manage the virtual environments.
## Upgrade the Ubuntu distribution
Skip this step if you already did it during the installation of your machine.
```bash
sudo apt-get update -y
sudo apt-get dist-upgrade -y
```
## Install PyEnv dependencies
```bash
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget \
curl llvm git libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
```
## Install PyEnv
We recommend installing PyEnv through
[PyEnv Installer](https://github.com/pyenv/pyenv-installer).
Below you can find the instructions, but we refer you to the link for updated
instructions.
```bash
curl https://pyenv.run | bash
# When finished, edit ~/.bash_profile // ~/.profile // ~/.bashrc as the installer proposes.
# In general, it means to append the following lines to ~/.bashrc:
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
```
In case .bashrc is not linked properly to your profile, you may need to append the
following line into your local .profile file:
```bash
# Open ~/.profile and append this line:
+source "$HOME"/.bashrc
```
## Restart the machine
Restart the machine for all the changes to take effect.
```bash
sudo reboot
```
## Install Python 3.9 over PyEnv
ETSI TeraFlowSDN uses Python 3.9 by default.
You should install the latest stable update of Python 3.9, i.e., avoid "-dev" versions.
To find the latest version available in PyEnv, you can run the following command:
```bash
pyenv install --list | grep " 3.9"
```
At the time of writing, this command will output the following list:
```
3.9.0
3.9-dev
3.9.1
3.9.2
3.9.4
3.9.5
3.9.6
3.9.7
3.9.8
3.9.9
3.9.10
3.9.11
3.9.12
3.9.13
3.9.14
3.9.15
3.9.16 ** always select the latest version **
```
Therefore, the latest stable version is Python 3.9.16.
To install this version, you should run:
```bash
pyenv install 3.9.16
# This command might take some minutes depending on your Internet connection speed
# and the performance of your machine.
```
## Create the Virtual Environment for TeraFlowSDN
The following commands create a virtual environment named as `tfs` using Python 3.9 and
associate that environment with the current folder, i.e., `~/tfs-ctrl`.
That way, when you are in that folder, the associated virtual environment will be used,
thus inheriting the Python interpreter, i.e., Python 3.9, and the Python packages
installed on it.
```bash
cd ~/tfs-ctrl
pyenv virtualenv 3.9.16 tfs
pyenv local 3.9.16/envs/tfs
```
After completing these commands, you should see in your prompt that now you're within
the virtual environment `3.9.16/envs/tfs` on folder `~/tfs-ctrl`:
```
(3.9.16/envs/tfs) tfs@tfs-vm:~/tfs-ctrl$
```
In case that the correct pyenv does not get automatically activated when you change to
the tfs-ctrl/ folder, then execute the following command:
```bash
cd ~/tfs-ctrl
pyenv activate 3.9.16/envs/tfs
```
## Install the basic Python packages within the virtual environment
From within the `3.9.16/envs/tfs` environment on folder `~/tfs-ctrl`, run the following
commands to install the basic Python packages required to work with TeraFlowSDN.
```bash
cd ~/tfs-ctrl
./install_requirements.sh
```
Some dependencies require to re-load the session, so log-out and log-in again.
## Generate the Python code from the gRPC Proto messages and services
The components, e.g., microservices, of the TeraFlowSDN controller, in general, use a gRPC-based open API to interoperate.
All the protocol definitions can be found in sub-folder `proto` within the root project folder.
For additional details on gRPC, visit the official web-page [gRPC](https://grpc.io/).
In order to interact with the components, (re-)generate the Python code from gRPC definitions running the following command:
```bash
cd ~/tfs-ctrl
proto/generate_code_python.sh
```