Система проведения турниров по программированию ejudge

Содержание

Введение
Установка
Настройка
Запуск
Приложение

Введение

ejudge - это система для проведения различных мероприятий, в которых необходима автоматическая проверка программ. Система может применяться для проведения олимпиад и поддержки учебных курсов.

Система ejudge состоит из нескольких программ, причём интерфейс участника турнира и администратора турнира предоставляется через WEB. Программы master, judge, team, register, users являются CGI-программами, то есть запускаются из-под httpd-сервера.

Проверьте, что ejudge доступна в собранном виде в репозитории Вашего дистрибутива. В этом случае лучше использовать версию из дистрибутива. Если же готовой версии ejudge для Вашего дистрибутива нет, необходимо скомпилировать систему из исходных кодов. (Замечание: на момент написания статьи для дистрибутивов Debian/Ubuntu пакета с системой ejudge не существует.)

Далее приведен процесс установки и настройки системы ejudge из исходных кодов для Ubuntu Linux. При установке системы были использованы материалы с официального сайта тестирующей системы ejudge (www.ejudge.ru) и ejudge Wiki.

Установка

Подготовка рабочей среды для установки ejudge

Подготовка рабочей среды состоит из следующих шагов:
  1. Необходимо установить следующие сторонние программы и библиотеки:
  2. Создаем пользователя ejudge группы ejudge с домашним каталогом /home/ejudge/:
    # groupadd ejudge
    # useradd ejudge -s /bin/bash -m -d /home/ejudge -g ejudge
  3. Переключаемся на вновь созданного пользователя, для этого в консоли нужно набрать:
    # su ejudge
  4. Выполняем инсталляцию библиотеки reuse:

Установка системы ejudge

Предполагается (если не указано особо), что все действия совершаются от имени пользователя ejudge
  1. Создайте каталог /home/judges и дайте ему права пользователя ejudge, набрав в консоли от имени root: # mkdir -p /home/judges
    # chown ejudge:ejudge /home/judges
    # chmod 755 /home/judges
  2. Скачайте в домашний каталог пользователя ejudge архив с исходными файлами текущей версии ejudge с главной страницы проекта.
  3. Для установки ejudge наберите в консоли следующие команды:
    $ tar -xvzf ejudge-VERSION.tgz
    $ cd ejudge
    $ ./configure PARAMS
    $ make && make install

    В нашем случае PARAMS принимает следующие значения:
    Параметр Описание
    --prefix=/home/ejudge/inst-ejudge корневой каталог программы
    --with-reuse=/home/ejudge/reuse каталог с reuse
    --enable-contests-home-dir=/home/judges каталог для контестов judges
    --with-httpd-cgi-bin-dir=/usr/lib/cgi-bin каталог cgi-bin сервера apache2
    --with-httpd-htdocs-dir=/var/www каталог, в который кладутся веб-файлы (.html, .php, etc).
    В него будет помещен каталог ejudge/ с несколькими файлами *.js и *.css
    --enable-ajax включает движок ajax для системы

    Таким образом команда ./configure будет иметь вид:

    $ ./configure --prefix=/home/ejudge/inst-ejudge --with-reuse=/home/ejudge/reuse --enable-contests-home-dir=/home/judges --with-httpd-cgi-bin-dir=/usr/lib/cgi-bin --with-httpd-htdocs-dir=/var/www/ --enable-ajax


    Здесь перечислены обязательные параметры для конфигурирования. Чтобы узнать остальные параметры необходимо выполнить:
    $ ./configure --help

    ЗАМЕЧАНИЕ:
    Пользователь ejudge должен обладать правами доступа к каталогам веб-файлов и cgi-bin сервера apache2. Если это не выполняется, то установите требуемые права доступа к этим каталогам.

Настройка

Для начала необходимо создать конфигурацию ejudge. Для этого предназначен скрипт ejudge-setup:

$ ./ejudge-setup

В появившемся меню меняем следующие параметры:
  1. Пункт меню "Edit global settings"
    "Sendmail program" - полный путь к программе отсылки почты. Присваиваем этому параметру значение '/usr/sbin/sendmail' (если это значение по умолчанию пусто, то необходимо установить пакет с sendmail).
    "Create Workdisk?" - устанавливаем в значение 'no'. (значение 'yes' - создание файла, который будет использован как рабочая виртуальная файловая система ext2; 'no' - создание общий для всех турниров рабочего каталога). После этого необходимо вернуться в меню "Edit Path" и присвоить параметру "Testing Working Dir" какой-нибудь доступный пустой каталог, в нашем случае это '/home/ejudge/ejudge/testing_dir'.
  2. Пункт меню "Edit Administrator Identity"
    Заполняем следующим образом:

После заполнения сохраняем файл, выбрав пункт "Save Setup Script", затем от пользователя root запускаем установку:

# ./ejudge-install.sh

Осталось выставить права на доступ к ссылкам на исполняемые файлы, которые установил ejudge в указанный ранее каталог cgi-bin: # cd /usr/lib/cgi-bin # chmod 755 new-* judge master register serve-control team users

Запуск

Запуск ejudge производится от имени ejudge:

$ cd /home/ejudge/inst-ejudge/bin/
$ ./ejudge-control start


ЗАМЕЧАНИЕ: Если после этого ваш вебсервер выдаёт ошибку - попробуйте удалить все файлы в каталоге cgi-bin (на самом деле это ссылки на файлы) и скопировать туда файлы из /home/ejudge/inst-ejudge/libexec/ejudge/cgi-bin:

$ cd /usr/lib/cgi-bin
$ rm -rf new-* judge master register serve-control team users
$ cp EJUDGE_PREFIX/libexec/ejudge/cgi-bin/* ./


Теперь можно в строке URL браузера (естественно, httpd-сервер должен быть запущен) указать:

http://localhost/cgi-bin/serve-control

Приложение

Настройка веб-сервера Apache2

Для работы ejudge рекомендуется web-сервер apache2 (возможна работа и с сервером apache).

  1. Найдите в конфигурационном файле директиву <Directory "${CGI_BIN}">, где ${CGI_BIN} в нашем случае - это /usr/lib/cgi-bin. Фрагмент конфигурационного файла должен выглядеть следующим образом:

    <Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options FollowSymLinks Includes
    AddOutputFilterByType INCLUDES text/html
    Order allow,deny
    Allow from all
    </Directory>

  2. Добавьте в конфигурационный файл следующий фрагмент:

    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml

  3. Для досутпа apache к файлам *.css и *.js системы ejudge, а также к директории с изображениями, добавьте следующий фрагмент:

    Alias /ejudge/ /home/ejudge/inst-ejudge/share/ejudge/style/
    <Directory "/home/ejudge/inst-ejudge/share/ejudge/style">
    AllowOverride None
    Order allow,deny
    allow from all
    </Directory>

Патч к ядру Linux

Ejudge поддерживает безопасный режим запуска программ, в котором запускаемая программа не может выполнять никаких системных вызовов. Для поддержки безопасного запуска необходима установка ядра со специальным патчем. Скачать патч и посмотреть документацию по установке патча можно на главной странице проекта.

Патч не является обязательным для работы системы ejudge. Кроме того, патч может быть добавлен даже после компиляции системы ejudge. Как только при работе ejudge будет обнаружено, что поддерживаются возможности, предоставляемые патчем, они будут использоваться системой ejudge.