Remotelab

From Robin

(Difference between revisions)
Jump to: navigation, search
Line 51: Line 51:
All kommunikasjon mellom spluf-prod01 og bruker er http.
All kommunikasjon mellom spluf-prod01 og bruker er http.
-
Det er *ingen* kommunikasjon mellom splufpc-* og brukerne.
+
Det er *ingen* kommunikasjon mellom node-* og brukerne.
-
Kommunikasjon mellom  splufpc-* og spluf-prod01 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å server1 med eget brukernavn/passord og henter ned bestemte filer.
Line 60: Line 60:
Følgende skjer med når en student bruker systemet:
Følgende skjer med når en student bruker systemet:
Bruker laster opp fil etter å ha logget seg på.
Bruker laster opp fil etter å ha logget seg på.
-
Det opprettes en ny jobb, og en leding  spluf-pc tar denne jobben.
+
Det opprettes en ny jobb, og en leding  node tar denne jobben.
Spluf-pc leser inn jobben, som inneholder filnavnet.
Spluf-pc leser inn jobben, som inneholder filnavnet.
-
Spluf-pc logger seg inn på spluf-prod01 og henter filen brukeren lastet opp.  
+
Spluf-pc logger seg inn på server og henter filen brukeren lastet opp.  
-
Filen slettes samtidig fra spluf-prod01.
+
Filen slettes samtidig fra server.
Spluf-pc sjekker med fasit hvilke filer som skal hentes ut av filen brukeren lastet opp.
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.
Spluf-pc kompilerer. Dette er en CPU og IO intensiv jobb.
-
Kompileringsloggen blir sendt som RabbitMQ-meldinger til spluf-prod01.
+
Kompileringsloggen blir sendt som RabbitMQ-meldinger til server.
-
Spluf-prod01 viser kompileringsloggen efterhvert som den blir motatt fra spluf-pc.
+
Spluf-prod01 viser kompileringsloggen efterhvert som den blir motatt fra node.
-
Etter kompilering laster spluf-pc opp en kompilert fil til spluf-prod01.  
+
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).
(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 spluf-prod01.
+
En ny jobb genereres av server.
En leding spluf-pc starter den nye jobben ved å hente kompilert fil.
En leding spluf-pc starter den nye jobben ved å hente kompilert fil.
Spluf-pc programmerer den kompilerte filen inn på utviklerkortet.
Spluf-pc programmerer den kompilerte filen inn på utviklerkortet.
Spluf-prod01 starter å vise HTTP-streaming av utviklerkort til bruker.
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 spluf-prod01 og spluf-pc.
+
Bruker får knapper å trykke på. Status og endringer på knappene blir sendt som RabbitMQ-meldinger mellom server og node.
-
Spluf-prod01 rendrer for bruker via JSON/ajax.
+
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.
Efter en definert tid (noen minutter) vil brukeren bli logget ut og andre brukere kan få muligheten til å teste sine kompilerte filer.
Line 81: Line 81:
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.
Brukerne kobler seg bare til server
Brukerne kobler seg bare til server
-
Splufpc-* er isolert fra bruker.
+
node er isolert fra bruker.
Brukerne laster opp zip/tar.gz filer.  
Brukerne laster opp zip/tar.gz filer.  
-
Disse filene blir distribuert til splufpc-* som tar seg av utpakking av *bestemte* filer i arkivet.
+
Disse filene blir distribuert til node som tar seg av utpakking av *bestemte* filer i arkivet.
splufpc står får kompilering.
splufpc står får kompilering.
Filene som komplieres er vhdl-tekstfiler.
Filene som komplieres er vhdl-tekstfiler.
Line 147: Line 147:
-
 
-
FTP:
 
-
====
 
-
useradd ftpuser
 
-
passwd ftpuser
 
-
chsh -s /sbin/nologin ftpuser
 
-
chcon -t httpd_sys_content_t ftpuser # to ftp directory
 
-
setsebool -P httpd_can_network_connect 1
 
SELinux
SELinux
Line 180: Line 172:
Celery runs on compute nodes.
Celery runs on compute nodes.
To start Celery:
To start Celery:
-
 
-
``celery -A remotelab worker -b amqp://guest:guest@spluf-prod01.uio.no//``
 
-
start one concurrent celery process to handle zedboard:
 
-
``celery -Q zedboard -c 1 -A remotelab worker -b amqp://guest:guest@spluf-prod01.uio.no``
 
-
 
-
start ten concurrent celery processes to handle vivado:
 
-
``celery -Q vivado -c 10 -A remotelab worker -b amqp://guest:guest@spluf-prod01.uio.no``
 
-
 
-
MJPG-Streamer
 
-
-------------
 
-
Download MJPG-Streamer from:
 
-
 
-
``https://github.com/jacksonliam/mjpg-streamer``
 
-
 
-
To compile:
 
-
Move the library last in the make file.
 
-
Then
 
-
``cd /usr/include/linux``
 
-
``sudo ln -s ../libv4l1-videodev.h videodev.h``
 
-
``ln -s /usr/include/libv4l1-videodev.h /usr/include/linux/videodev.h``
 
-
compile with -ldl last
 
-
``gcc -O2 -DLINUX -D_GNU_SOURCE -Wall -ldl -lpthread  mjpg_streamer.o utils.o -o mjpg_streamer -ldl -lpthread``
 
-
``export LD_LIBRARY_PATH=.``
 
-
``./mjpg_streamer -o "output_http.so -w ./www -p 8090" -i "input_uvc.so --device /dev/video0 --fps 30 --resolution 640x480"``
 
-
``./mjpg_streamer -o "output_http.so -w ./www -p 8080 -n" -i "input_uvc.so --device /dev/video0 --fps 30 --resolution 640x480"``
 
-
 
-
 
-
Starting AV
 
-
-----------
 
-
AVConv runs on nodes with connected board and webcam.
 
-
``./avserver.sh``
 
-
``./avconv.sh``
 
-
 
-
Possible problems
 
-
------------------
 
-
        avconf problems with usb, to remove webcam:
 
-
                ``echo 1 > /sys/bus/usb/drivers/usb/usb2/2-7/remove``
 
-
 
-
        djtgcfg crashes with segmentation fault:                               
 
-
                plug in zedboard prog usb BEFORE usbswitchsimboardusb
 
-
 
-
     
 
-
Other problems
 
-
--------------
 
-
      if ipv6 is slow, edit /etc/gai.conf, uncommen this line:
 
-
      ``precedence ::ffff:0:0/96  100``
 
-
 
-
      make sure /boot is not full
 
-
      if /var is full, check rabbitmq directory
 
-
 
-
      add user to dialout group for access to /dev/ttyUSBx:
 
-
      ``usermod -a -G dialout spluf``
 
-
 
-
      problem with serial board not working:
 
-
      disconnected from fpga board, and reconnected to fpga-board seems to work.
 
-
 
-
      video: uvcdynctrl gucview
 
-
 
-
 
-
``ffmpeg -f video4linux2 -i /dev/video0 -qmin 0 -qmax 50 http://127.0.0.1:8090/feed1.ffm``
 
-
 
-
``avconv -f video4linux2 -framerate 10 -video_size 640x480 -i /dev/video0 http://127.0.0.1:8090/feed1.ffm``
 
-
 
-
 
-
Development Plan
 
-
================
 
-
menus:
 
-
        index
 
-
        login
 
-
        about
 
-
 
-
        logged in:
 
-
              select task
 
-
              upload file
 
-
              compile file (with progress)
 
-
              observe results (with input)
 
-
                         
 
-
plan:
 
-
        on upload:
 
-
                fixed project vivado template file.
 
-
                upload zip with vhdl files
 
-
                sanity check of zip file
 
-
                check file names
 
-
                copy only file names on list (template)
 
-
 
-
        on compile:
 
-
                compile file with progress output
 
-
               
 
-
task table in database:
 
-
    task id
 
-
    task name
 
-
    task description
 
-
    task files
 

Revision as of 13:53, 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 downoad 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 spluf-prod01 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å server1 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 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