Remotelab
From Robin
Line 1: | Line 1: | ||
- | + | == RemoteLab Handbook == | |
8.11.2015, Alexander Wold | 8.11.2015, Alexander Wold | ||
- | + | == 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 | + | |
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 == |
+ | |||
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 | + | 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å | + | 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 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 == |
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 |
+ | == | ||
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 == |
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
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: