Установка Ejudge В Ubuntu 18.04

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

Система позволяет проведение турниров с автоматической проверкой задач. Такие как: icpc, ioi и другие. Можно проводить несколько турниров одновременно.

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

С другой стороны, недостатком в этой системе для меня стал высокий порог вхождения и сложная документация.

Все команды которые начинаются с sudo запускаются от имени root или с правами sudo

Более подробно можете прочитать с этих ресурсов

1. Подготовка системы

1.1 Установка локали

sudo locale-gen en_US.UTF-8 ru_RU.UTF-8 kk_KZ.UTF-8
sudo update-locale

1.2 Установка необходимых программ и библиотек

sudo apt-get update

sudo apt-get install -y software-properties-common

sudo apt-get install -y --allow-unauthenticated \
                       wget locales ncurses-base libncurses-dev libncursesw5 \
                       libncursesw5-dev expat libexpat1 libexpat1-dev \
                       zlib1g-dev libelf-dev mysql-client-5.7 libmysqlclient-dev \
                       g++ gawk apache2 gettext fpc mc openjdk-8-jdk-headless \
                       libcurl4-openssl-dev libzip-dev uuid-dev bison flex \
                       mono-devel mono-runtime mono-vbnc perl python python3 \
                       sendmail

1.3 Установка MariaDB

MariaDB можно заменить MySQL

sudo apt-get install -y mariadb-server mariadb-client

1.4 Настройка MariaDB

Запускаем mysql

sudo mysql

Создайте пользователя ejudge с вашим паролем, например X93ZTC3GJm, и дайте необходимые права

CREATE USER 'ejudge'@'%' IDENTIFIED BY 'X93ZTC3GJm';
GRANT USAGE ON * . * TO 'ejudge'@'%' IDENTIFIED BY 'X93ZTC3GJm' 
WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `ejudge` ;
GRANT ALL PRIVILEGES ON `ejudge` . * TO 'ejudge'@'%';
exit;

1.5 Установка Apache2

sudo rm /etc/apache2/sites-enabled/*

Создайте конфигурационнный файл для Apache2

sudo bash -c 'cat > /etc/apache2/sites-enabled/ejudge.conf' << EOF
<VirtualHost *:80>
    DocumentRoot /var/www/ejudge/htdocs

    ScriptAlias /cgi-bin/ "/var/www/ejudge/cgi-bin/"

    <Directory "/var/www/ejudge/cgi-bin">
        Options +ExecCGI +FollowSymLinks +Includes
        AllowOverride None
        Require all granted
    </Directory>

    <Directory "/var/www/ejudge/htdocs">
        Require all granted
    </Directory>

    ErrorLog /var/log/apache2/error.log
    CustomLog /var/log/apache2/access.log combined

</VirtualHost>

EOF

Активируйте cgi модуль и перезагрузите apache2

sudo a2enmod cgi 
sudo service apache2 restart

1.6 Создание группы и пользователя ejudge

sudo groupadd ejudge
sudo useradd ejudge -r -s /bin/bash -g ejudge

1.7 Создание деректив

EJUDGE_HOME

sudo mkdir -p /home/ejudge
sudo chown ejudge:ejudge /home/ejudge
sudo chmod 0755 /home/ejudge

JUDGES_DIR и WORK_DIR

sudo mkdir -p /home/judges /home/judges/test_work
sudo chown ejudge:ejudge /home/judges /home/judges/test_work
sudo chmod 0755 /home/judges /home/judges/test_work

CGI-BIN-DIR и HTDOCS-DIR

sudo mkdir -p /var/www/ejudge/cgi-bin
sudo mkdir -p /var/www/ejudge/htdocs
sudo chmod 0777 /var/www/ejudge/cgi-bin /var/www/ejudge/htdocs

2. Инсталляция системы

Дальше выполняется от имени ejudge

Чтобы переключиться на ejudge

sudo su ejudge

2.1 Скачивание и распаковка

cd /home/ejudge
wget -O ejudge.tar.gz --no-check-certificate http://www.ejudge.ru/download/ejudge-3.8.0.tgz

tar -xvf ejudge.tar.gz 
rm ejudge.tar.gz

2.2 Установка Ejudge

cd /home/ejudge/ejudge

./configure --prefix="/home/ejudge/inst-ejudge" \
            --enable-contests-home-dir="/home/judges" \
            --with-httpd-cgi-bin-dir="/var/www/ejudge/cgi-bin" \
            --with-httpd-htdocs-dir="/var/www/ejudge/htdocs" \
            --enable-ajax \
            --enable-charset=utf-8 \
            --with-primary-user="ejudge" \
            --with-exec-user="ejudge" \
            --with-compile-user="ejudge" 
make
make install

Если вы поменяли параметры: --with-primary-user, --with-exec-user, --with-compile-user, то нужно запустить следующий код. Эта программа установит необходимые права на привилегированные исполняемые файлы.

Нужно запустить от имени root

cd home/ejudge/inst-ejudge/bin/
sudo ./ejudge-suid-setup

2.3 Настройка

Запускаете от имени ejudge

cd /home/ejudge/ejudge/
./ejudge-setup

Меняем настройки на верные параметры:

  1. Testing working dir меняем на /home/judges/test_work
  2. Меняем логин и пароль от MySQL

Сохраняем скрипт под названием ejudge-install.sh

2.4 Установка

От имени пользователя root запускаем установку

sudo /home/ejudge/ejudge/ejudge-install.sh

3. Запуск

cd /home/ejudge/inst-ejudge/bin
./ejudge-upgrade-web

./ejudge-control start

Сервис будет доступен по адресу http://localhost/cgi-bin/serve-control