- docker, mainly for a unified and compact runtime environment that scales easily
- node.js with express.js as web server for job management
- isolate for sandboxing
The commands to do this are in run.sh.
Requirements:
node.js
, version >= 16git
- for c:
make gcc clang libcunit1 libcunit1-dev
- https://github.com/ioi/isolate.git
- for python:
- some
python3
- some
The Dockerfile contains all instructions for a debian based installation.
The container listens (on port 3000). It expects POST-requests on /evaluate
with a JSON body that respect the format specified as evaluateInputSchema
in src/helpers/schemas.js. It produces outputs that respect evaluateOutputSchema
.
- the Docker container must (ironically) be started with elevated privileges (
priviledged
) for the security mechanisms ofisolate
to work (e.g. control groups) - the Docker container sometimes seems not to want to respond to
SIGINT
. However,docker stop
always does. isolate
allows a maximum of 999 environments at a time. For their management a semaphore is usedisolate
is very restrictive by default. If something does not work, this is a good starting point. Examples: multiple processes, RAM, access to other programs/devices- this repo is a (mostly anonymized) public release copy. The real repo is not public and this repo might not always be up to date.