2020-07-16 00:22:03 +01:00
|
|
|
# Installation
|
2018-07-31 20:57:30 +01:00
|
|
|
* Table of Contents
|
|
|
|
{:toc}
|
|
|
|
|
2020-03-05 23:04:29 +00:00
|
|
|
## Overview
|
2020-09-26 17:42:15 +01:00
|
|
|
CORE provides a script to help automate the installation of dependencies,
|
|
|
|
build and install, and either generate a CORE specific python virtual environment
|
|
|
|
or build and install a python wheel.
|
2018-07-31 20:57:30 +01:00
|
|
|
|
2020-09-29 07:14:20 +01:00
|
|
|
> **WARNING:** if Docker is installed, the default iptable rules will block CORE traffic
|
|
|
|
|
2020-12-02 17:40:49 +00:00
|
|
|
### Requirements
|
|
|
|
Any computer capable of running Linux should be able to run CORE. Since the physical machine will be hosting numerous
|
|
|
|
containers, as a general rule you should select a machine having as much RAM and CPU resources as possible.
|
|
|
|
|
|
|
|
* Linux Kernel v3.3+
|
|
|
|
* iproute2 4.5+ is a requirement for bridge related commands
|
2021-05-10 23:07:42 +01:00
|
|
|
* nftables compatible kernel and nft command line tool
|
2020-12-02 17:40:49 +00:00
|
|
|
|
|
|
|
### Supported Linux Distributions
|
|
|
|
Plan is to support recent Ubuntu and CentOS LTS releases.
|
|
|
|
|
|
|
|
Verified:
|
|
|
|
* Ubuntu - 18.04, 20.04
|
2021-05-10 23:07:42 +01:00
|
|
|
* CentOS - 7.8, 8.0
|
2020-12-02 17:40:49 +00:00
|
|
|
|
|
|
|
> **NOTE:** CentOS 8 does not have the netem kernel mod available by default
|
|
|
|
|
|
|
|
CentOS 8 Enabled netem:
|
|
|
|
```shell
|
|
|
|
sudo yum update
|
|
|
|
# restart into updated kernel
|
|
|
|
sudo yum install -y kernel-modules-extra
|
|
|
|
sudo modprobe sch_netem
|
|
|
|
```
|
|
|
|
|
2020-09-26 17:42:15 +01:00
|
|
|
### Tools Used
|
2020-07-14 18:42:24 +01:00
|
|
|
The following tools will be leveraged during installation:
|
|
|
|
|
|
|
|
|Tool|Description|
|
|
|
|
|---|---|
|
2020-07-16 00:22:03 +01:00
|
|
|
|[pip](https://pip.pypa.io/en/stable/)|used to install pipx|
|
|
|
|
|[pipx](https://pipxproject.github.io/pipx/)|used to install standalone python tools (invoke, poetry)|
|
2020-09-26 17:42:15 +01:00
|
|
|
|[invoke](http://www.pyinvoke.org/)|used to run provided tasks (install, uninstall, reinstall, etc)|
|
|
|
|
|[poetry](https://python-poetry.org/)|used to install python virtual environment or building a python wheel|
|
|
|
|
|
|
|
|
### Files
|
|
|
|
The following is a list of files that would be installed after running the automated installation.
|
|
|
|
|
|
|
|
> **NOTE:** the default install prefix is /usr/local, but can be changed as noted below
|
|
|
|
|
|
|
|
* executable files
|
2020-12-02 17:40:49 +00:00
|
|
|
* `<prefix>/bin/{core-daemon, core-gui, vcmd, vnoded, etc}`
|
2020-09-26 17:42:15 +01:00
|
|
|
* tcl/tk gui files
|
2020-12-02 17:40:49 +00:00
|
|
|
* `<prefix>/lib/core`
|
|
|
|
* `<prefix>/share/core/icons`
|
2020-09-26 17:42:15 +01:00
|
|
|
* example imn files
|
2020-12-02 17:40:49 +00:00
|
|
|
* `<prefix>/share/core/examples`
|
2020-09-26 17:42:15 +01:00
|
|
|
* python files
|
|
|
|
* poetry virtual env
|
|
|
|
* `cd <repo>/daemon && poetry env info`
|
2020-12-02 17:40:49 +00:00
|
|
|
* `~/.cache/pypoetry/virtualenvs/`
|
2020-09-26 17:42:15 +01:00
|
|
|
* local python install
|
|
|
|
* default install path for python3 installation of a wheel
|
|
|
|
* `python3 -c "import core; print(core.__file__)"`
|
|
|
|
* configuration files
|
2020-12-02 17:40:49 +00:00
|
|
|
* `/etc/core/{core.conf, logging.conf}`
|
2020-09-26 17:42:15 +01:00
|
|
|
* ospf mdr repository files
|
2020-12-02 17:40:49 +00:00
|
|
|
* `<repo>/../ospf-mdr`
|
2020-09-26 17:42:15 +01:00
|
|
|
* emane repository files
|
2020-12-02 17:40:49 +00:00
|
|
|
* `<repo>/../emane`
|
2020-09-26 17:42:15 +01:00
|
|
|
|
|
|
|
### Installed Executables
|
|
|
|
After the installation complete it will have installed the following scripts.
|
2018-07-31 20:57:30 +01:00
|
|
|
|
2020-09-26 17:42:15 +01:00
|
|
|
| Name | Description |
|
|
|
|
|---|---|
|
|
|
|
| core-cleanup | tool to help removed lingering core created containers, bridges, directories |
|
|
|
|
| core-cli | tool to query, open xml files, and send commands using gRPC |
|
|
|
|
| core-daemon | runs the backed core server providing TLV and gRPC APIs |
|
|
|
|
| core-gui | runs the legacy tcl/tk based GUI |
|
|
|
|
| core-imn-to-xml | tool to help automate converting a .imn file to .xml format |
|
|
|
|
| core-manage | tool to add, remove, or check for services, models, and node types |
|
|
|
|
| core-pygui | runs the new python/tk based GUI |
|
|
|
|
| core-python | provides a convenience for running the core python virtual environment |
|
|
|
|
| core-route-monitor | tool to help monitor traffic across nodes and feed that to SDT |
|
|
|
|
| core-service-update | tool to update automate modifying a legacy service to match current naming |
|
|
|
|
| coresendmsg | tool to send TLV API commands from command line |
|
2018-07-31 20:57:30 +01:00
|
|
|
|
2020-09-26 17:42:15 +01:00
|
|
|
## Upgrading from Older Release
|
|
|
|
Please make sure to uninstall any previous installations of CORE cleanly
|
2020-07-16 00:22:03 +01:00
|
|
|
before proceeding to install.
|
|
|
|
|
|
|
|
Previous install was built from source:
|
|
|
|
```shell
|
2020-07-22 00:52:17 +01:00
|
|
|
cd <CORE_REPO>
|
2020-07-16 00:22:03 +01:00
|
|
|
sudo make uninstall
|
|
|
|
make clean
|
|
|
|
./bootstrap.sh clean
|
|
|
|
```
|
|
|
|
|
|
|
|
Installed from previously built packages:
|
|
|
|
```shell
|
|
|
|
# centos
|
|
|
|
sudo yum remove core
|
|
|
|
# ubuntu
|
|
|
|
sudo apt remove core
|
|
|
|
```
|
|
|
|
|
2020-09-26 17:42:15 +01:00
|
|
|
## Automated Install
|
|
|
|
The automated install will do the following:
|
2020-09-12 00:26:13 +01:00
|
|
|
* install base tools needed for installation
|
|
|
|
* python3, pip, pipx, invoke, poetry
|
|
|
|
* installs system dependencies for building core
|
2020-09-26 17:42:15 +01:00
|
|
|
* clone/build/install working version of [OPSF MDR](https://github.com/USNavalResearchLaboratory/ospf-mdr)
|
2020-09-12 00:26:13 +01:00
|
|
|
* installs core into poetry managed virtual environment or locally, if flag is passed
|
2020-09-26 17:42:15 +01:00
|
|
|
* installs scripts pointing pointing to appropriate python location based on install type
|
|
|
|
* installs systemd service pointing to appropriate python location based on install type
|
|
|
|
|
|
|
|
After installation has completed you should be able to run `core-daemon` and `core-gui`.
|
2020-04-10 05:42:04 +01:00
|
|
|
|
2020-09-26 17:42:15 +01:00
|
|
|
> **NOTE:** installing locally comes with its own risks, it can result it potential
|
|
|
|
> dependency conflicts with system package manager installed python dependencies
|
2020-04-10 05:42:04 +01:00
|
|
|
|
2020-09-26 17:42:15 +01:00
|
|
|
> **NOTE:** provide a prefix that will be found on path when running as sudo,
|
|
|
|
> if the default prefix /usr/local will not be valid
|
2020-07-16 00:22:03 +01:00
|
|
|
|
2020-09-26 17:42:15 +01:00
|
|
|
`install.sh` will attempt to determine your OS by way of `/etc/os-release`, currently it supports
|
|
|
|
attempts to install OSs that are debian/redhat like (yum/apt).
|
2020-04-10 05:42:04 +01:00
|
|
|
```shell
|
2021-04-16 05:46:55 +01:00
|
|
|
# make sure pip is the latest version before moving forward
|
|
|
|
python3 -m pip install -U pip
|
|
|
|
|
2020-07-14 18:42:24 +01:00
|
|
|
# clone CORE repo
|
2020-04-10 05:42:04 +01:00
|
|
|
git clone https://github.com/coreemu/core.git
|
|
|
|
cd core
|
2020-07-14 18:42:24 +01:00
|
|
|
|
2020-09-12 00:26:13 +01:00
|
|
|
# script usage: install.sh [-v] [-d] [-l] [-p <prefix>]
|
2020-07-14 18:42:24 +01:00
|
|
|
#
|
|
|
|
# -v enable verbose install
|
|
|
|
# -d enable developer install
|
2020-09-12 00:26:13 +01:00
|
|
|
# -l enable local install, not compatible with developer install
|
2020-07-14 18:42:24 +01:00
|
|
|
# -p install prefix, defaults to /usr/local
|
2020-04-10 05:42:04 +01:00
|
|
|
|
2020-09-26 17:42:15 +01:00
|
|
|
# install core to virtual environment
|
|
|
|
./install.sh -p <prefix>
|
2019-10-03 20:11:12 +01:00
|
|
|
|
2020-09-26 17:42:15 +01:00
|
|
|
# install core locally
|
|
|
|
./install.sh -p <prefix> -l
|
|
|
|
```
|
2020-07-14 18:42:24 +01:00
|
|
|
|
2021-05-12 04:52:10 +01:00
|
|
|
### Enabling Service
|
|
|
|
After installation, the core service is not enabled by default. If you desire to use the
|
|
|
|
service, run the following commands.
|
|
|
|
|
|
|
|
```shell
|
|
|
|
sudo systemctl enable core-daemon
|
|
|
|
sudo systemctl start core-daemon
|
|
|
|
```
|
|
|
|
|
2020-09-26 17:42:15 +01:00
|
|
|
### Unsupported Linux Distribution
|
|
|
|
For unsupported OSs you could attempt to do the following to translate
|
|
|
|
an installation to your use case.
|
2019-06-10 21:15:34 +01:00
|
|
|
|
2020-09-26 17:42:15 +01:00
|
|
|
* make sure you have python3.6+ with venv support
|
|
|
|
* make sure you have python3 invoke available to leverage `<repo>/tasks.py`
|
2020-07-15 08:08:22 +01:00
|
|
|
|
2020-09-26 17:42:15 +01:00
|
|
|
```shell
|
|
|
|
cd <repo>
|
2020-07-15 08:08:22 +01:00
|
|
|
|
2020-09-26 17:42:15 +01:00
|
|
|
# Usage: inv[oke] [--core-opts] install [--options] [other tasks here ...]
|
|
|
|
#
|
|
|
|
# Docstring:
|
|
|
|
# install core, poetry, scripts, service, and ospf mdr
|
|
|
|
#
|
|
|
|
# Options:
|
|
|
|
# -d, --dev install development mode
|
|
|
|
# -i STRING, --install-type=STRING
|
|
|
|
# -l, --local determines if core will install to local system, default is False
|
|
|
|
# -p STRING, --prefix=STRING prefix where scripts are installed, default is /usr/local
|
|
|
|
# -v, --verbose enable verbose
|
|
|
|
|
|
|
|
# install virtual environment
|
|
|
|
inv install -p <prefix>
|
|
|
|
|
|
|
|
# indstall locally
|
|
|
|
inv install -p <prefix> -l
|
|
|
|
|
|
|
|
# this will print the commands that would be ran for a given installation
|
|
|
|
# type without actually running them, they may help in being used as
|
|
|
|
# the basis for translating to your OS
|
|
|
|
inv install --dry -v -p <prefix> -i <install type>
|
|
|
|
```
|
2020-07-15 08:08:22 +01:00
|
|
|
|
2020-07-16 00:22:03 +01:00
|
|
|
## Running User Scripts
|
|
|
|
If you create your own python scripts to run CORE directly or using the gRPC/TLV
|
|
|
|
APIs you will need to make sure you are running them within context of the
|
2020-08-08 06:04:34 +01:00
|
|
|
installed virtual environment. To help support this CORE provides the `core-python`
|
|
|
|
executable. This executable will allow you to enter CORE's python virtual
|
|
|
|
environment interpreter or to run a script within it.
|
2018-07-31 20:57:30 +01:00
|
|
|
|
2020-09-26 17:42:15 +01:00
|
|
|
For installations installed to a virtual environment:
|
2018-07-31 20:57:30 +01:00
|
|
|
```shell
|
2020-08-08 06:04:34 +01:00
|
|
|
core-python <script>
|
2018-07-31 20:57:30 +01:00
|
|
|
```
|
|
|
|
|
2020-09-26 17:42:15 +01:00
|
|
|
For local installations:
|
2020-09-12 00:26:13 +01:00
|
|
|
```shell
|
|
|
|
python3 <script>
|
|
|
|
```
|
|
|
|
|
|
|
|
## Installing EMANE
|
|
|
|
> **NOTE:** installng emane for the virtual environment is known to work for 1.21+
|
|
|
|
> **NOTE:** automated install currently targets 1.25
|
2018-07-31 20:57:30 +01:00
|
|
|
|
2020-09-12 00:26:13 +01:00
|
|
|
There is an invoke task to help with installing EMANE, which attempts to
|
|
|
|
build EMANE from source, but has issue on systems with older protobuf-compilers.
|
2020-07-16 17:26:08 +01:00
|
|
|
|
2018-10-18 18:56:41 +01:00
|
|
|
```shell
|
2020-07-22 00:52:17 +01:00
|
|
|
cd <CORE_REPO>
|
2020-09-12 00:26:13 +01:00
|
|
|
|
|
|
|
# install to virtual environment
|
2020-07-16 17:26:08 +01:00
|
|
|
inv install-emane
|
2020-09-12 00:26:13 +01:00
|
|
|
|
|
|
|
# install locally to system python3
|
|
|
|
inv install-emane -l
|
2020-07-16 17:26:08 +01:00
|
|
|
```
|
|
|
|
|
2020-09-12 00:26:13 +01:00
|
|
|
Alternatively EMANE can be installed from deb or RPM packages or from source. See the
|
|
|
|
[EMANE GitHub](https://github.com/adjacentlink/emane) for full details.
|
|
|
|
With the caveat that the python bindings need to be installed into CORE's
|
|
|
|
virtualenv, unless installed locally.
|
|
|
|
|
|
|
|
### Installing EMANE Python Bindings for Virtual Environment
|
|
|
|
|
|
|
|
If you need to just install the EMANE python bindings to the CORE virtual
|
|
|
|
environment, since you are installing EMANE itself from pre-built packages.
|
|
|
|
You can run the following
|
|
|
|
|
|
|
|
Leveraging the following wiki:
|
2020-07-16 17:26:08 +01:00
|
|
|
[build EMANE](https://github.com/adjacentlink/emane/wiki/Build)
|
2020-07-15 08:08:22 +01:00
|
|
|
|
2020-07-16 17:26:08 +01:00
|
|
|
The following would install the EMANE python bindings after being
|
|
|
|
successfully built.
|
|
|
|
```shell
|
2020-09-12 00:26:13 +01:00
|
|
|
# clone and build emane python bindings
|
|
|
|
git clone https://github.com/adjacentlink/emane.git
|
|
|
|
cd emane
|
|
|
|
./autogen.sh
|
|
|
|
PYTHON=python3 ./configure --prefix=/usr
|
|
|
|
cd src/python
|
|
|
|
make
|
|
|
|
|
|
|
|
# install to core virtual environment
|
2020-07-22 00:52:17 +01:00
|
|
|
cd <CORE_REPO>/daemon
|
|
|
|
poetry run pip install <EMANE_REPO>/src/python
|
2018-10-18 18:56:41 +01:00
|
|
|
```
|
|
|
|
|
2020-07-14 18:42:24 +01:00
|
|
|
## Using Invoke Tasks
|
|
|
|
The invoke tool installed by way of pipx provides conveniences for running
|
|
|
|
CORE tasks to help ensure usage of the create python virtual environment.
|
2018-07-31 20:57:30 +01:00
|
|
|
|
|
|
|
```shell
|
2020-07-16 16:47:18 +01:00
|
|
|
inv --list
|
|
|
|
|
2020-07-14 18:42:24 +01:00
|
|
|
Available tasks:
|
2018-07-31 20:57:30 +01:00
|
|
|
|
2020-07-14 18:42:24 +01:00
|
|
|
daemon start core-daemon
|
2020-07-16 16:47:18 +01:00
|
|
|
install install core, poetry, scripts, service, and ospf mdr
|
|
|
|
install-emane install emane and the python bindings
|
2020-07-14 18:42:24 +01:00
|
|
|
install-scripts install core script files, modified to leverage virtual environment
|
|
|
|
install-service install systemd core service
|
|
|
|
test run core tests
|
|
|
|
test-emane run core emane tests
|
|
|
|
test-mock run core tests using mock to avoid running as sudo
|
2020-07-16 16:47:18 +01:00
|
|
|
uninstall uninstall core, scripts, service, virtual environment, and clean build directory
|
|
|
|
```
|
|
|
|
|
|
|
|
Print help for a given task:
|
|
|
|
```shell
|
|
|
|
inv -h install
|
|
|
|
|
|
|
|
Usage: inv[oke] [--core-opts] install [--options] [other tasks here ...]
|
|
|
|
|
|
|
|
Docstring:
|
|
|
|
install core, poetry, scripts, service, and ospf mdr
|
|
|
|
|
|
|
|
Options:
|
|
|
|
-d, --dev install development mode
|
|
|
|
-p STRING, --prefix=STRING prefix where scripts are installed, default is /usr/local
|
|
|
|
-v, --verbose enable verbose
|
2018-07-31 20:57:30 +01:00
|
|
|
```
|