VPL Execution Server for Programming Questions

Prev Next

Key Benefits

Test real skills not merely rote knowledge

As part of our product strategy to bring fit-for-purpose questions that enable assessment of correct application Cirrus' Programming question type enables testing of programming skills using real programming environments.

The programming environments for our programming question type are run on a so called VPL (Virtual Programming Lab) Execution Server. One or more of these VPL servers needs to be set up by the customer's technical staff (IT). Once they're up and running, you can configure them in Cirrus.

Future-proofing VPL

After liasing by Cirrus with the VPL team regarding a future-proof ("non-XML-RPC") version of vpl-jail-system, they released one with 3.0, see https://github.com/jcrodriguez-dis/vpl-xmlrpc-jail/issues/49

The project has moved on considerably since then. Version 5.0 brought stronger isolation of submitted code, and is the release Cirrus now recommends.

How to use

This page contains the technical info on how to install the VPL execution servers and configure them in Cirrus. For information on how to use i.e. how to author programming questions we kindly refer you to our regular knowledge base Programming article (under Library).

Supported Programming Languages

Also for the list of supported programming languages, we kindly refer you to our regular knowledge base Programming - Supported languages in Programming questions

NOTE: Ensure you install all programming languages your authors intend to use.

If you are certain a particular programming language will not be used than you do not have to install it or if installed as part of a set of languages you could uninstall it.

Installing VPL Execution Server on Ubuntu

Cirrus recommended specification for 50 concurrent students using Java: 8 GB RAM, 4 CPU cores.

  • Operating system: Ubuntu Server 24.04 LTS.
  • vpl-jail-system version: 5.0.2 or later.
  • Domain name including TLS Certificate, e.g. programming.yourserver.com
Multiple VPL Execution Servers

For reliability and performance we strongly advice you to provision multiple Ubuntu servers (different machines) with each an VPL Execution Server.

VPL Installation Steps:

  • Install a clean Ubuntu Server 24.04 LTS
  • Login to your clean Ubuntu server provisioned for the VPL Execution Server.
  • Ensure it has a domain name and valid certificate. Alternatively the certificate can also be set up by the installer. (Either way knowledge of certificates and Letsencrypt is required)
  • Download using wget https://vpl.dis.ulpgc.es/releases/vpl-jail-system-5.0.2.tar.gz, always check the releases page for the current version
  • Unpack tar xvf vpl-jail-system-5.0.2.tar.gz
  • cd vpl-jail-system-5.0.2
  • Start the installer as root: sudo ./install-vpl-sh
  • Follow the instructions (Knowledge of certificates and Letsencrypt is required)
  • Choose the full installation when prompted
  • Install any additional language packages your questions require, for example:sudo apt install python-is-python3 sudo apt install mono-complete
  • Stop the service: sudo service vpl-jail-system stop

  • Edit the configuration (using e.g. nano): nano /etc/vpl/vpl-jail-system.conf

    • Adapt MAXFILESIZE, MAXMEMORY, MAXPROCESSES to fit your expected use and server capacity
    • For security disable port 80: PORT=0
    • Set the HTTPS port: SECURE_PORT=443 (a non-standard port such as 9443 also works, but 443 passes through corporate firewalls and proxies more reliably)
    • FIREWALL=3 prevents submitted code from opening outbound network connections.
    • USE_CGROUP=true and USE_NAMESPACE=true — memory limiting and process isolation.
  • Start the service with the command: sudo systemctl start vpl-jail-system

  • Check if it's running by opening your domain at SECURE_PORT in a browser, e.g. https://programming.yourserver.com/OK

  • After succesful test, ensure it's started upon system start: systemctl enable vpl-jail-system

If you run into issues

Please see Troubleshooting below.

Cirrus Admin setup


This is how to set up the execution server in your Cirrus environment:

  • Go to Admin > Global settings > "VPL-tab"
  • Enter the address of your Execution server, something like https://programming.yourserver.com/. There can be multiple execution servers (recommended!), Cirrus will check which execution server will be available.

See Programming - Admin: setup for executing programming questions for more details.

TROUBLESHOOTING

Note installing and maintaining VPL Execution Servers requires technical skills (a.o. Linux, Certificates, Ports, syslog). Do not try to install it yourself if you lack these, instead contact your IT department or a IT contractor/support company.

The VPL (Virtual Programming Lab) software is an open source solution. More information and manuals can be found on the VPL website.

For Troubleshooting, we kindly refer you to the detailed steps maintained by the VPL team at Troubleshooting
In case this link is inadvertently broken navigate to https://vpl.dis.ulpgc.es/ > Support > VPL-Jail-System Manual > Troubleshooting.
There you can find a.o. steps to review the VPL logging (grep vpl /var/log/syslog | less).

Beware of firewalls

Not mentioned in that Troubleshooting nor the installation steps, but please ensure incoming traffic to the port your VPL Execution Server is not blocked by your organisation's network or your Ubuntu server's firewall.
One way of testing this, is to connect to it from home. (And if not working there from your office or within your organisation's network.)