update to distributed core doc
This commit is contained in:
parent
c0ab9ea4cc
commit
d4af459653
1 changed files with 48 additions and 61 deletions
|
@ -9,39 +9,17 @@ A large emulation scenario can be deployed on multiple emulation servers and
|
||||||
controlled by a single GUI. The GUI, representing the entire topology, can be
|
controlled by a single GUI. The GUI, representing the entire topology, can be
|
||||||
run on one of the emulation servers or on a separate machine.
|
run on one of the emulation servers or on a separate machine.
|
||||||
|
|
||||||
Each machine that will act as an emulation server would ideally have the
|
Each machine that will act as an emulation will require the installation of a distributed CORE package and
|
||||||
same version of CORE installed. It is not important to have the GUI component
|
some configuration to allow SSH as root.
|
||||||
but the CORE Python daemon **core-daemon** needs to be installed.
|
|
||||||
|
|
||||||
**NOTE: The server that the GUI connects with is referred to as
|
|
||||||
the master server.**
|
|
||||||
|
|
||||||
## Configuring Listen Address
|
## Configuring SSH
|
||||||
|
|
||||||
First we need to configure the **core-daemon** on all servers to listen on an
|
Distributed CORE works using the python fabric library to run commands on remote servers over SSH.
|
||||||
interface over the network. The simplest way would be updating the core
|
|
||||||
configuration file to listen on all interfaces. Alternatively, configure it to
|
|
||||||
listen to the specific interface you desire by supplying the correct address.
|
|
||||||
|
|
||||||
The **listenaddr** configuration should be set to the address of the interface
|
### Remote GUI Terminals
|
||||||
that should receive CORE API control commands from the other servers;
|
|
||||||
setting **listenaddr = 0.0.0.0** causes the Python daemon to listen on all
|
|
||||||
interfaces. CORE uses TCP port **4038** by default to communicate from the
|
|
||||||
controlling machine (with GUI) to the emulation servers. Make sure that
|
|
||||||
firewall rules are configured as necessary to allow this traffic.
|
|
||||||
|
|
||||||
```shell
|
You need to have the same user defined on each server, since the user used
|
||||||
# open configuration file
|
for these remote shells is the same user that is running the CORE GUI.
|
||||||
vi /etc/core/core.conf
|
|
||||||
|
|
||||||
# within core.conf
|
|
||||||
[core-daemon]
|
|
||||||
listenaddr = 0.0.0.0
|
|
||||||
```
|
|
||||||
|
|
||||||
## Enabling Remote SSH Shells
|
|
||||||
|
|
||||||
### Update GUI Terminal Program
|
|
||||||
|
|
||||||
**Edit -> Preferences... -> Terminal program:**
|
**Edit -> Preferences... -> Terminal program:**
|
||||||
|
|
||||||
|
@ -54,31 +32,51 @@ May need to install xterm if, not already installed.
|
||||||
sudo apt install xterm
|
sudo apt install xterm
|
||||||
```
|
```
|
||||||
|
|
||||||
### Setup SSH
|
### Distributed Server SSH Configuration
|
||||||
|
|
||||||
In order to easily open shells on the emulation servers, the servers should be
|
First the distributed servers must be configured to allow passwordless root login over SSH.
|
||||||
running an SSH server, and public key login should be enabled. This is
|
|
||||||
accomplished by generating an SSH key for your user on all servers being used
|
|
||||||
for distributed emulation, if you do not already have one. Then copying your
|
|
||||||
master server public key to the authorized_keys file on all other servers that
|
|
||||||
will be used to help drive the distributed emulation. When double-clicking on a
|
|
||||||
node during runtime, instead of opening a local shell, the GUI will attempt to
|
|
||||||
SSH to the emulation server to run an interactive shell.
|
|
||||||
|
|
||||||
You need to have the same user defined on each server, since the user used
|
On distributed server:
|
||||||
for these remote shells is the same user that is running the CORE GUI.
|
```shelll
|
||||||
|
|
||||||
```shell
|
|
||||||
# install openssh-server
|
# install openssh-server
|
||||||
sudo apt install openssh-server
|
sudo apt install openssh-server
|
||||||
|
|
||||||
# generate ssh if needed
|
# open sshd config
|
||||||
ssh-keygen -o -t rsa -b 4096
|
vi /etc/ssh/sshd_config
|
||||||
|
|
||||||
|
# verify these configurations in file
|
||||||
|
PermitRootLogin yes
|
||||||
|
PasswordAuthentication yes
|
||||||
|
|
||||||
|
# restart sshd
|
||||||
|
sudo systemctl restart sshd
|
||||||
|
```
|
||||||
|
|
||||||
|
On master server:
|
||||||
|
```shell
|
||||||
|
# install package if needed
|
||||||
|
sudo apt install openssh-client
|
||||||
|
|
||||||
|
# generate ssh key if needed
|
||||||
|
ssh-keygen -o -t rsa -b 4096 -f ~/.ssh/core
|
||||||
|
|
||||||
# copy public key to authorized_keys file
|
# copy public key to authorized_keys file
|
||||||
ssh-copy-id user@server
|
ssh-copy-id -i ~/.ssh/core root@server
|
||||||
# or
|
|
||||||
scp ~/.ssh/id_rsa.pub username@server:~/.ssh/authorized_keys
|
# configure fabric to use the core ssh key
|
||||||
|
sudo vi /etc/fabric.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
On distributed server:
|
||||||
|
```shell
|
||||||
|
# open sshd config
|
||||||
|
vi /etc/ssh/sshd_config
|
||||||
|
|
||||||
|
# change configuration for root login to without password
|
||||||
|
PermitRootLogin without-password
|
||||||
|
|
||||||
|
# restart sshd
|
||||||
|
sudo systemctl restart sshd
|
||||||
```
|
```
|
||||||
|
|
||||||
## Add Emulation Servers in GUI
|
## Add Emulation Servers in GUI
|
||||||
|
@ -155,27 +153,16 @@ The names before the addresses need to match the servers configured in
|
||||||
controlnet = core1:172.16.1.0/24 core2:172.16.2.0/24 core3:172.16.3.0/24 core4:172.16.4.0/24 core5:172.16.5.0/24
|
controlnet = core1:172.16.1.0/24 core2:172.16.2.0/24 core3:172.16.3.0/24 core4:172.16.4.0/24 core5:172.16.5.0/24
|
||||||
```
|
```
|
||||||
|
|
||||||
EMANE appears to require location events for nodes to be sync'ed across
|
|
||||||
all EMANE instances for nodes to find each other. Using an EMANE eel file
|
|
||||||
for your scenario can help clear this up, which might be desired anyway.
|
|
||||||
|
|
||||||
* https://github.com/adjacentlink/emane/wiki/EEL-Generator
|
|
||||||
|
|
||||||
You can also move nodes within the GUI to help trigger location events from
|
|
||||||
CORE when the **core.conf** settings below is used. Assuming the nodes
|
|
||||||
did not find each other by default and you are not using an eel file.
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
emane_event_generate = True
|
emane_event_generate = True
|
||||||
```
|
```
|
||||||
|
|
||||||
## Distributed Checklist
|
## Distributed Checklist
|
||||||
|
|
||||||
1. Install the same version of the CORE daemon on all servers.
|
1. Install CORE on master server
|
||||||
1. Set **listenaddr** configuration in all of the server's core.conf files,
|
1. Install distributed CORE package on all servers needed
|
||||||
then start (or restart) the daemon.
|
|
||||||
1. Installed and configure public-key SSH access on all servers (if you want to use
|
1. Installed and configure public-key SSH access on all servers (if you want to use
|
||||||
double-click shells or Widgets.)
|
double-click shells or Widgets.) for both the GUI user (for terminals) and root for running CORE commands
|
||||||
1. Choose the servers that participate in distributed emulation.
|
1. Choose the servers that participate in distributed emulation.
|
||||||
1. Assign nodes to desired servers, empty for master server.
|
1. Assign nodes to desired servers, empty for master server.
|
||||||
1. Press the **Start** button to launch the distributed emulation.
|
1. Press the **Start** button to launch the distributed emulation.
|
||||||
|
|
Loading…
Add table
Reference in a new issue