This is the source distribution of Praktomat, a programming course manager.
In case of bugs or feature requests, please use the Bug tracker. There is also a moderated mailing list for Praktomat administrators: [email protected].
You need Python 3.5 and a recent version of pip. I also highly recommend to use virtualenv so your system Python installation remains clean.
We recommend to run Praktomat within Apache, using Postgresql as database.
On a Debian or Ubuntu System, install the packages
postgresql
apache2-mpm-worker
In ubuntu 16 the package apache2-mpm-worker
has been merged into apache2
.
Praktomat requires some 3rd-Party libraries programs to run. On a Ubuntu/Debian System, these can be installed by installing the following packages:
libpq-dev
zlib1g-dev
libmysqlclient-dev
libsasl2-dev
libssl-dev
swig
libapache2-mod-xsendfile
libapache2-mod-wsgi
sun-java6-jdk (from the "Canonical Parner" Repository)
junit
junit4
dejagnu
gcj-jdk (gcj compiler)
git-core
If youre going to use Praktomat to check Haskell submissions, you will also require the packages:
ghc libghc-test-framework-dev libghc-test-framework-hunit-dev libghc-test-framework-quickcheck2-dev
For Checkstyle, we recommend getting checkstyle-all-4.4.jar
http://sourceforge.net/projects/checkstyle/files/checkstyle/4.4/
If you want your users to submit Isabelle theories, add the following line to /etc/mime.types:
text/x-isabelle thy
The Praktomat currently requires Python 3.5
On Ubuntu 16.04, Python3.5 is installed by default, but you may need to install the packages
python-setuptools
python-psycopg2
python-virtualenv
Clone this repo and install the required python libs to either your system-wide Python installation or inside a designated virtualenv (recommended). The following describes a recommended setup using virtualenv.
git clone --recursive git://github.com/KITPraktomatTeam/Praktomat.git
virtualenv -p python3 --system-site-packages env/
. env/bin/activate
pip install -r Praktomat/requirements.txt
The initial database setup follows.
cd Praktomat
mkdir data
./src/manage-devel.py migrate --noinput
./src/manage-devel.py createsuperuser
Start the development server.
./src/manage-devel.py runserver
Like for the development version, clone the Praktomat and install its dependencies:
git clone --recursive git://github.com/KITPraktomatTeam/Praktomat.git
virtualenv -p python3 --system-site-packages env/
. env/bin/activate
pip install -r Praktomat/requirements.txt
Now create a database. Using postgres on Ubuntu, this might work for creating
a database "praktomat_default". Also edit pg_hba.conf
to allow the access.
sudo -u postgres createuser -DRS praktomat
sudo -u postgres createdb -O praktomat praktomat_default
Configure Praktomat in Praktomat/src/settings/local.py
, to set data base
names and paths.
Create the upload directory, populate the database:
mkdir PraktomatSupport
./Praktomat/src/manage-local.py collectstatic --noinput --link
./Praktomat/src/manage-local.py migrate --noinput
It should now be possible to start the deployment server with:
./Praktomat/src/manage-local.py runserver
If you want to deploy the project using mod_wsgi in apache you could use documentation/apache_praktomat_wsgi.conf
as a starting point. Don't forget to install mod_xsendfile
to serve uploaded files.
If you use django for authentification, you might want to add a first user using
./Praktomat/src/manage-local.py createsuperuser -
If you use single-sign-on via Shibboleth, you can already log in. After you have logged in, you can assign super user rights to yourself using
./Praktomat/src/manage-local.py makesuperuser --username=<the_user_name>
The username is visible under “View Account”; by default it is the e-mail address submitted by the Shibboleth server.
-
update the source with git from github
-
backup your database (seriously!)
-
update the static files and the database:
./Praktomat/src/manage-local.py migrate --noinput
./Praktomat/src/manage-local.py collectstatic --noinput --link
Besides the security provided by Java (via the Security Manager Profiles found
in src/checker/scripts/
), the praktomat supports two way to insulate student
submissions from the system:
-
With
USEPRAKTOMATTESTER = True
in the settings, external commands are prefixed withsudo -u tester --
. For this to work you need to add a usertester
which is also a member of the default group of the user that runs the praktomat (usuallypraktomat
). -
With
USESAFEDOCKER = True
, external commands are prefixed withsafe-docker
, which you need to have installed. You can fetch it from http://github.com/nomeata/safe-dockerFor this to work you need to have a docker image named
safe-docker
installed, which needs to have all required dependencies installed. A suggested docker image is available indocker-image
, so to get started simply runsudo docker build -t safe-docker docker-image
We recommend USESAFEDOCKER
, as that is what we test in practice.
The Praktomat tries to limit the resources available to the student submissions:
- The runtime of the submission can be limited (setting
TEST_TIMEOUT
) - The maximum amount of memory used can be limited (setting
TEST_MAXMEM
, only supported withUSESAFEDOCKER
). - The maximum size of a file produced by a user submission (setting
TEST_MAXFILESIZE
, currently not supported withUSESAFEDOCKER
, until http://stackoverflow.com/questions/25789425 is resolved)
At the time of writing, the amount of diskspace available to the user is unlimited, which can probably be exploited easily.
Praktomat provides a rudimentary, but convenient integration of the plagiarism detection program jPlag. Do enable this support, you have to do these two steps:
- Download the latest jPlag release (latest tested version: v2.11.8)
- Copy the resulting
.jar
file somewhere on the Praktomat server. - In the settings, set
JPLAGJAR = /full/path/to/jplag.jar
To access the praktomat usersessions from an phpBB folow the instructions in src/sessionprofile/phpbb/README.txt
.