Remotelab

From Robin

(Difference between revisions)
Jump to: navigation, search
Line 1: Line 1:
-
[RemoteLab Handbook]
+
== RemoteLab Handbook ==
8.11.2015, Alexander Wold
8.11.2015, Alexander Wold
-
Introduction
+
== Introduction ==
-
============
+
This document describes the RemoteLab software.
This document describes the RemoteLab software.
The RemoteLab software allows students to upload and interact with lab-excercises though the web browser.
The RemoteLab software allows students to upload and interact with lab-excercises though the web browser.
The document is contains a software quick guide, description of the software architecture, installation instructions, and finally developer notes.
The document is contains a software quick guide, description of the software architecture, installation instructions, and finally developer notes.
-
Software quick guide
+
== Software quick guide ==
-
====================
+
To download the lab text and the project files:
-
To downoad the lab text and the project files:
+
Log on to RemoteLab at  
Log on to RemoteLab at  
Find the lab assigment you want to work on.
Find the lab assigment you want to work on.
Line 29: Line 27:
-
Software architecture
+
 
-
=====================
+
== Software architecture ==
 +
 
The software is written in Python using the Django web framework.
The software is written in Python using the Django web framework.
Users connect to a server which runs the webserver, a proxy, RabbitMQ (message server).
Users connect to a server which runs the webserver, a proxy, RabbitMQ (message server).
Line 48: Line 47:
Det er også satt opp 3 stk pcer  som tar seg av kompileringen med elektronikksoftware, og interface til et fpga-utviklerkort som programmeres av studenten, samt ett webkamera for streaming.
Det er også satt opp 3 stk pcer  som tar seg av kompileringen med elektronikksoftware, og interface til et fpga-utviklerkort som programmeres av studenten, samt ett webkamera for streaming.
-
All kommunikasjon mellom spluf-prod01 og bruker er http.
+
All kommunikasjon mellom server og bruker er http.
Det er *ingen* kommunikasjon mellom node-* og brukerne.
Det er *ingen* kommunikasjon mellom node-* og brukerne.
Kommunikasjon mellom  node-* og server er RabbitMQ meldinger og HTTP.  
Kommunikasjon mellom  node-* og server er RabbitMQ meldinger og HTTP.  
HTTP skal brukes til overføring av filer og streaming av low-latency video.
HTTP skal brukes til overføring av filer og streaming av low-latency video.
-
Oveføring av filer mellom server og node skjer ved at Celery/job-software på node-* logger seg på server1 med eget brukernavn/passord og henter ned bestemte filer.
+
Oveføring av filer mellom server og node skjer ved at Celery/job-software på node-* logger seg på server med eget brukernavn/passord og henter ned bestemte filer.
Det er eget brukernavn/passord på nedlasting av filer.
Det er eget brukernavn/passord på nedlasting av filer.
Brukere kan ikke laste ned filer de har lastet opp.
Brukere kan ikke laste ned filer de har lastet opp.
Line 76: Line 75:
Efter en definert tid (noen minutter) vil brukeren bli logget ut og andre brukere kan få muligheten til å teste sine kompilerte filer.
Efter en definert tid (noen minutter) vil brukeren bli logget ut og andre brukere kan få muligheten til å teste sine kompilerte filer.
 +
 +
== Sikkerhet og skalerbarhet ==
Sikkerhet og skalerbarhet er ivaretatt på følgende måte:
Sikkerhet og skalerbarhet er ivaretatt på følgende måte:
Dersom det viser seg at det er for lite med 3 pcer kan vi enkelt legge til flere pcer uten å endre arkitekturen.
Dersom det viser seg at det er for lite med 3 pcer kan vi enkelt legge til flere pcer uten å endre arkitekturen.
Line 90: Line 91:
-
Software installation
+
 
-
=====================
+
== Software installation ==
-
Software requirements on server
+
 
-
-------------------------------
+
 
 +
== Software requirements on server ==
The following software is required on the server:
The following software is required on the server:
  * rabbitmq
  * rabbitmq
Line 110: Line 112:
-
Python software install on server:
+
 
-
----------------------------------
+
== Python software install on server ==
 +
 
As user create a virtualenv
As user create a virtualenv
After installation of python software with
After installation of python software with
Line 118: Line 121:
Copy this directory to remotelab/site-packages
Copy this directory to remotelab/site-packages
-
Software requirements on clients
+
== Software requirements on clients ==
-
--------------------------------
+
 
The following software is required on the compute nodes:
The following software is required on the compute nodes:
  * digilent utils
  * digilent utils
Line 128: Line 131:
  * pyserial
  * pyserial
-
Software development
+
 
-
====================
+
== Software development ==
If the server is using SELinux, use  
If the server is using SELinux, use  
``chcon -Rv -t httpd_sys_content_t *``  
``chcon -Rv -t httpd_sys_content_t *``  
to update files after they have been checked out of subversion repo.
to update files after they have been checked out of subversion repo.
-
Collecting static files
+
 
-
-----------------------
+
== Collecting static files ==
 +
 
In redhat enterprise linux to collect static files:
In redhat enterprise linux to collect static files:
First enable rh-python3:
First enable rh-python3:
Line 146: Line 150:
-
SELinux
+
 
-
=======
+
== SELinux
 +
==
setsebool -P httpd_can_network_connect 1
setsebool -P httpd_can_network_connect 1
chcon -Rv -t httpd_sys_content_t # python-directory
chcon -Rv -t httpd_sys_content_t # python-directory
-
Starting Remotelab
+
 
-
==================
+
== Starting Remotelab ==
Remotelab consists of different subsystems.
Remotelab consists of different subsystems.
-
Starting Django
+
 
-
------------------
+
== Starting Django
 +
==
To start the webserver
To start the webserver
On RHEL, first SCL
On RHEL, first SCL
Line 166: Line 172:
``python manage.py runserver``
``python manage.py runserver``
-
Starting Celery
+
 
-
---------------
+
== Starting Celery
 +
==
Celery runs on compute nodes.
Celery runs on compute nodes.
To start Celery:
To start Celery:

Revision as of 13:59, 15 June 2017

Contents

RemoteLab Handbook

8.11.2015, Alexander Wold

Introduction

This document describes the RemoteLab software. The RemoteLab software allows students to upload and interact with lab-excercises though the web browser. The document is contains a software quick guide, description of the software architecture, installation instructions, and finally developer notes.

Software quick guide

To download the lab text and the project files: Log on to RemoteLab at Find the lab assigment you want to work on. Download the lab text and then download the project files. Develop and simulate the lab using Vivado Webpack.

When the lab simulates correcly, you can upload the project and test in on an FPGA-board. First create a tar.gz file of the vhdl files in your project folder. Log on to RemoteLab at Select Submit. Select Choose File, and select the tar.gz file containing the vhdl files. Select Upload. After the project has been implemented correctly, you can select Run. You can the interact with the board to test your solution.

After some time, the session will expire to allow other users to test their projects. You can test your solution multiple times by refreshing the browser after the session has expired.


Software architecture

The software is written in Python using the Django web framework. Users connect to a server which runs the webserver, a proxy, RabbitMQ (message server). Users only connect to the webserver. Lab excercises are executed on compute nodes. Messages are sent/received using Celery/RabbitMQ to the compute nodes. This allows students to interact with FPGA-hardware through the server. The compute nodes run Xilinx Vivado, Celery, and a live video stream of the FPGA board. Files are transmitted over HTTP, alternatively SFTP using certificate credentials.

Hensikten er å kunne tilby laboppsett gjennom nettleseren. Brukerne skal logge seg inn og kunne laste opp kildekode (vhdl) som kompileres, og deretter kan studentene kontrollere brytere gjennom nettleseren. Nettleseren viser video som streames slik at det er sanntids feedback på hva som skjer når en bruker trykker på en knapp. Dette systemet kan tilby mer kompliserte laboppsett, for eksempel styring av robotarm og lignende.

Systemet består av 1 stk spluf-prod01 som brukerne kobler seg til. Det er også satt opp 3 stk pcer som tar seg av kompileringen med elektronikksoftware, og interface til et fpga-utviklerkort som programmeres av studenten, samt ett webkamera for streaming.

All kommunikasjon mellom server og bruker er http. Det er *ingen* kommunikasjon mellom node-* og brukerne. Kommunikasjon mellom node-* og server er RabbitMQ meldinger og HTTP. HTTP skal brukes til overføring av filer og streaming av low-latency video. Oveføring av filer mellom server og node skjer ved at Celery/job-software på node-* logger seg på server med eget brukernavn/passord og henter ned bestemte filer. Det er eget brukernavn/passord på nedlasting av filer. Brukere kan ikke laste ned filer de har lastet opp.

Følgende skjer med når en student bruker systemet: Bruker laster opp fil etter å ha logget seg på. Det opprettes en ny jobb, og en leding node tar denne jobben. Spluf-pc leser inn jobben, som inneholder filnavnet. Spluf-pc logger seg inn på server og henter filen brukeren lastet opp. Filen slettes samtidig fra server. Spluf-pc sjekker med fasit hvilke filer som skal hentes ut av filen brukeren lastet opp. Spluf-pc kompilerer. Dette er en CPU og IO intensiv jobb. Kompileringsloggen blir sendt som RabbitMQ-meldinger til server. Spluf-prod01 viser kompileringsloggen efterhvert som den blir motatt fra node. Etter kompilering laster node opp en kompilert fil til server. (Den kompilerte filen er laget for en FPGA-krets og er ikke det samme som en kompilert fil for pc). En ny jobb genereres av server. En leding spluf-pc starter den nye jobben ved å hente kompilert fil. Spluf-pc programmerer den kompilerte filen inn på utviklerkortet. Spluf-prod01 starter å vise HTTP-streaming av utviklerkort til bruker. Bruker får knapper å trykke på. Status og endringer på knappene blir sendt som RabbitMQ-meldinger mellom server og node. server rendrer for bruker via JSON/ajax. Efter en definert tid (noen minutter) vil brukeren bli logget ut og andre brukere kan få muligheten til å teste sine kompilerte filer.


Sikkerhet og skalerbarhet

Sikkerhet og skalerbarhet er ivaretatt på følgende måte: Dersom det viser seg at det er for lite med 3 pcer kan vi enkelt legge til flere pcer uten å endre arkitekturen. Brukerne kobler seg bare til server node er isolert fra bruker. Brukerne laster opp zip/tar.gz filer. Disse filene blir distribuert til node som tar seg av utpakking av *bestemte* filer i arkivet. splufpc står får kompilering. Filene som komplieres er vhdl-tekstfiler. Kommentarer/pragrmas blir scrubbet før kompilering. Kataloger i zip/tar.gz-filen blir ikke ivaretatt (vi bryr oss bare om basename). Enkelte detaljer fra kompileringsloggen som sendes til bruker blir slettet (hostnames, lisensserver som er brukt, katalognavn). HTTP streaming skal settes opp til å forwarde bestemte stier: /video-01. /video-01/noe forwardes ikke.


Software installation

Software requirements on server

The following software is required on the server:

* rabbitmq
* apache (proxy/webserver)
* python 3.4

In additon, the follewing python packages are required:

* django
* celery
* django-file-form
* django-bootstrap-toolkit
* django-celery
* django-crispy-forms
* django-async-messages
* django-cors-headers


Python software install on server

As user create a virtualenv After installation of python software with Install python software with: ``pip install -r requirements.txt`` Copy this directory to remotelab/site-packages

Software requirements on clients

The following software is required on the compute nodes:

* digilent utils
* vivado
* avconv,ffmpeg or MJPG-Streamer

In additon, the follewing python packages are required:

* pyserial


Software development

If the server is using SELinux, use ``chcon -Rv -t httpd_sys_content_t *`` to update files after they have been checked out of subversion repo.


Collecting static files

In redhat enterprise linux to collect static files: First enable rh-python3: ``scl enable rh-python34 bash`` then enable virtualenv ``source ~/opt/virtualenv/bin/activate`` then collect static files ``python manage.py collectstatic``



== SELinux

==

setsebool -P httpd_can_network_connect 1 chcon -Rv -t httpd_sys_content_t # python-directory


Starting Remotelab

Remotelab consists of different subsystems.


== Starting Django

==

To start the webserver On RHEL, first SCL ``scl enable rh-python34 bash`` ``source ~/opt/rh-python34/bin/activate`` ``python manago.py migrate`` ``python manago.py createsuperuser``

``python manage.py runserver``


== Starting Celery

==

Celery runs on compute nodes. To start Celery:

Personal tools
Front page