< img align = "right" width = "300" height = "300" src = "https://git.swarmlab.io:3000/zeus/swarmlab-hybrid/raw/branch/master/docs/images/hybrid-1.png" >
# Swarmlab Hybrid
#### **Welcome to Swarmlab.io**
##### **On demand Labrooms**
##### **Ready-to-Use Virtual Labs one click away.**
### Table of contents
1. [Features ](#introduction )
2. [System requirements ](#systemrequirements )
3. [Prerequisites ](#prerequisites )
4. [Installation ](#installation )
5. [More info ](#moreinfo )
### <a name="introduction"></a>
An open source work/study-from-home application.
Swarmlab provides you with all the required tools, tools to teach work or try out demos in a completely virtual environment.
Swarmlab is a collection of services that aims to:
- provide teachers and professors with online remote tools to do their lessons
- give students the opportunity to study real life examples in their chosen area of expertise
- allow developers to fully test and debug their applications and provide POC’s
Swarmlab, up and running since 2020, is already used for teaching purposes in a university and has proven itself as a powerful tool in the post covid remote-based situation.
Source code is available at https://git.swarmlab.io:3000 under the AGPL licence.
### Ready to run out-of-the-box
As of now the services provided by swarmlab are:
- Labrooms(virtual classrooms in the form of model applications to be tweaked at will)
- linux → base linux system – designed for use as a base to further develop your app
- MPI → Instances of Ubuntu Linux with MPICH — portable implementation of Message Passing Interface (MPI) standard. Designed for MPI program development and deployment.
- Node.js
- sec → a basic linux-based os with security tools – designed as a template for apps
- Storage to automatically create a cluster of databases.
- Proof Of Concept (POC) options
- datacollector → using provided services a fully developed application may collect data from a swarm and use it for further analysis
- Microservices
- Jupyter
- numpy
- scipy
- nodejs
- nginx
- haproxy
- gns3
- wireshark
- snmpsim
- xelatexthesis
- ansible
- etherpad
- codeserver (vscode)
- redisserver
- mongoserver
- mongoclient (GUI)
to be continued…
## System requirements<a name="systemrequirements"></a>
**Before** you create and configure a hybrid deployment using the swarmlab-agent client, your Local Machines need to meet certain requirements.
> If you don't meet those requirements, you won't be able to complete the steps within the swarmlab-agent client and you won't be able to configure a hybrid deployment between your Local Enviroment and Swarmlab Online Enviroment.
- A Linux Server (Virtual or Physical)
- You must have super user privileges (root/sudo)
- Docker Engine- Community version 18 or later is required.
- Docker Engine is supported on x86_64 (or amd64), armhf, and arm64 architectures.
- RAM
- Absolute minimum to run the daemon and some very light containers - 512MB
- Minimum for “comfortable” usage – 2GB
- CPU
- Minimum: 2
- Recommended 4+
- Disk Space
- 10 GB for internal requirements.
- The amount of additional disk space soloemnly depends on you intended use.
:warning: Since Docker uses hypervisor the host NEEDS TO HAVE VIRTUALIZATION ENABLED!
## Prerequisites<a name="prerequisites"></a>
* node version >15
```sh
curl -sL https://deb.nodesource.com/setup_15.x | sudo -E bash -
sudo apt-get install -y nodejs
```
* docker
```sh
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install -y docker-ce
sudo usermod -aG docker [USERNAME] # Please replace [USERNAME] with the user you want to run docker on
```
:information_source: for kali specifically please visit the following link to install docker.
https://linuxhint.com/install_docker_kali_linux/
* docker-compose
```sh
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
```
* pm2
```sh
sudo npm install -g pm2
```
* wireguard
```sh
sudo apt install wireguard jq
```
## Installation<a name="installation"></a>
### for *nix
- Clone the repo
```sh
git clone --recurse-submodules https://git.swarmlab.io:3000/zeus/swarmlab-hybrid.git
```
- Install it!
```sh
cd swarmlab-hybrid
./install.sh < -- run it without root privileges
```
- Open URL __http://localhost:3088__ in browser
- Get a Swarmlab account.
- Get a free API Key at **Settings->Enable the Swarmlab hybrid** Menu
### for windows or if you wish to keep the environment contained
You can find ready to run VM images < a href = "https://uniwagr-my.sharepoint.com/:u:/g/personal/ice19390012_uniwa_gr/EbhjQIeiDeNFkfkSBWczRggBcJq2Pv6lAJs-NKkT4hXg-g?e=0VC0xa" target = "_blank" > here< / a > .
And instructions on how to use them < a href = "https://git.swarmlab.io:3000/zeus/swarmlab-hybrid/src/branch/master/docs/windows_use_vm.md" > here< / a > .
:information_source: Default password: swarmlab
PLEASE CHANGE PASSWORD IMEDIATELLY AFTER FIRST LAUNCH!!!
## First Run
:exclamation: No matter your distribution, upon installing you will HAVE to load settings before the first run!!
This will < b > initialize the configuration< / b > using the < b > system defaults< / b > .
Afterwards you can < b > add custom settings< / b > , or keep using the defaults.
This action does < b > NOT< / b > need to be repeated unless you wish to < b > reset the application< / b > .
>
> Please navigate to the "Profile->Settings" menu and click on the "Load settings" button.
>
After doing this the application < b > MUST< / b > be reastarted! To do that please run the restart script.
inside the root directory of the project run
```sh
./restart.sh
```
### More Info<a name="moreinfo"></a>
You can find our docs in **docs** Directory
The Swarmlab docs are in **AsciiDoc** (similar to markdown), **PDF** and **html** format
For real-time rendering in browser Asciidoc an add-on can be found here:
http://docs.swarmlab.io/SwarmLab-HowTos/labs/Howtos/doclive/asciidoc.adoc.html#_setup_live_preview_using_a_web_browser