Next
Previous
Contents
DOMjudge discerns the following kinds of hosts:
- Team computer
-
Workstation for a team, where they develop their
solutions and from which they submit them to the jury system.
The only part of DOMjudge that runs here is the optional
command line submit client; all other interaction by teams is
done with a browser via the web interface.
- DOMjudge server
-
A host that receives the submissions, runs the
database and serves the web pages. This host will run Apache,
and MySQL.
Also called domserver for brevity.
- Judgehosts
-
A number of hosts, at least one, that will retrieve
submitted solutions from the DOMjudge server, compile and run
them and send the results back to the server.
They will run the judgedaemon
from DOMjudge.
- Jury / admin workstations
-
The jury members (persons) that want to monitor the contest need
just any workstation with a web browser to access the web interface.
No DOMjudge software runs on these machines.
One (virtual) machine is required to run the DOMserver. The minimum amount of
judgehosts is also one, but preferably more: depending on configured timeouts,
judging one solution can tie up a judgehost for several minutes, and if there's
a problem with one judgehost it can be resolved while judging continues on the
others.
As a rule of thumb, we recommend one judgehost per 20 teams.
However, overprovisioning does not hurt: DOMjudge scales easily in the
number of judgehosts, so if hardware is available, by all means use it. But
running a contest with fewer machines will equally work well, only the waiting
time for teams to receive an answer may increase.
Each judgehost should be a dedicated (virtual) machine that performs no other
tasks. For example, although running a judgehost on the same machine as the
domserver is possible, it's not recommended except for testing purposes.
Judgehosts should also not double as local workstations for jury members.
Having all judgehosts be of uniform hardware configuration helps in creating a fair,
reproducible setup; in the ideal case they are run on the same type of machines
that the teams use.
DOMjudge supports running multiple judgedaemons in parallel on a
single judgehost machine. This might be useful on multi-core machines.
Note that although each judgedaemon process can be bound to one single
CPU core (using Linux cgroups), shared use of other resources such as
disk I/O might still have a minor effect on run times. For more
details on using this, see the section
Installation: optional features.
System requirements
The requirements for the deployment of DOMjudge are:
- Computers for the domserver and judgehosts must run Linux (or
the domserver possibly a Unix variant). This software has been
developed mostly under Debian GNU/Linux, and the manual adds
some specific hints for that, which also apply to Debian
derivative distributions like Ubuntu. DOMjudge has also been
tested under RedHat-like Linux distributions. We try to adhere
to POSIX standards, but especially the judgehost security
solution is Linux-specific.
- (Local) root access on the domserver and judgehosts for configuring sudo,
installing some files with restricted permissions
and for (un)mounting the proc file system when using Java (or other
interpreted languages).
See
Security: root privileges
for more details.
- A TCP/IP network which connects all DOMjudge and team computers.
Extra network security which restricts internet access and
access to other services (ssh, mail, talk, etc..) is advisable,
but not provided by this software, see
Security: external security for
more details. All network-based interactions are done over HTTP
or HTTPS (tcp port 80 or 443):
- HTTP traffic from teams, the public and jury to the web server.
- The judgehosts connect to the DOMjudge API over HTTP.
- The `submit' command line client connects to the web server also
via HTTP.
When using the IP_ADDRESS
authentication scheme, then each team
computer needs to have a unique IP address from the view of the
DOMjudge server, see
Contest setup: team authentication for more details.
Software requirements
The following software is required for running DOMjudge.
- For every supported programming language a compiler is needed;
preferably one that can generate statically linked stand-alone
executables.
- Apache web server with support for PHP >= 5.3.3 and the mysqli,
GD, curl and json extensions for PHP. PHP needs to be running as an
Apache module (the most common configuration); a (fast)CGI setup
is not currently supported. We also recommend the posix extension
for extra debugging information. A configuration file for the
Nginx webserver is also included, and may be used instead of
Apache. However, this setup is less well tested and documented.
- MySQL or MariaDB >= 4.1.x database and client software.
- PHP >= 5.3.3 command line interface and the curl and json
extensions.
- A POSIX compliant shell in
/bin/sh
(e.g. bash or ash).
- A statically compiled POSIX shell, located in
lib/judge/sh-static
(dash is included for Linux IA32).
- A lot of standard (GNU) programs, a probably incomplete list:
hostname, date, dirname, basename, touch, chmod, cp, mv, cat,
grep, diff, wc, mkdir, mkfifo, mount, sleep, head, tail, pgrep,
zip, unzip.
- Sudo to gain root privileges.
- A LaTeX installation to regenerate the team PDF-manual with
site specific configuration settings included.
The following items are optional, but may be required to use certain
functionality or are generally useful.
-
phpMyAdmin,
to be able to access the database in an emergency
or for data import/export
- An NTP daemon (for keeping the clocks between jury
system and team workstations in sync)
-
libcgroup,
to enable support for Linux cgroup accounting and security on
the judgehosts. This is strongly recommended to improve Java
memory limit measurements. See section
Linux cgroups.
-
libcurl
and
libJSONcpp
to use the command line submit client.
-
libmagic
(for command line submit client to detect binary file submissions)
-
PECL xdiff extension
(to reliably make diffs between submissions, DOMjudge will try
alternative approaches if it is not available)
-
beep for
audible notification of errors, submissions and judgings, when
using the default
alert
script.
Software required for building DOMjudge:
- gcc and g++ with standard libraries. Other compilers and
libraries might also work: we have successfully compiled
DOMjudge sources with
Clang from the LLVM project; the C
library should support the POSIX.1-2008 specification.
- GNU make
Requirements for team workstations
In the most basic setup the team workstations only need (next to the tools needed
for program development) a web browser. The web interface fully works with any
known browser, but a HTML5-capable browser adds more convenience functions. With
JavaScript disabled, all basic functionality remains working, with the notable
exception of multiple file uploads on non-HTML5-ready browsers.
Next
Previous
Contents