Меню Рубрики

Установка и настройка ejudge

Установка и настройка 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

Установка системы 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:

В появившемся меню меняем следующие параметры:

  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»
    Заполняем следующим образом:
    • ID: 1
    • Login: ваш логин (например, admin)
    • E-Mail — ваша почта
    • Name — какое имя будет отображаться
    • Password — ваш пароль (надо ввести два раза)

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

Осталось выставить права на доступ к ссылкам на исполняемые файлы, которые установил 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-сервер должен быть запущен) указать:

Приложение

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

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

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

AllowOverride None
Options FollowSymLinks Includes
AddOutputFilterByType INCLUDES text/html
Order allow,deny
Allow from all

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

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

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

Alias /ejudge/ /home/ejudge/inst-ejudge/share/ejudge/style/

AllowOverride None
Order allow,deny
allow from all

Патч к ядру Linux

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

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

источник

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

Предполагается (если не указано особо), что все действия совершаются от имени юзера ejudge

Компиляция и установка

EJUDGE_HOME — Домашний каталог пользователя ejudge (который вы указывали при создании)

Создайте каталог /home/judges и дайте ему права пользователя ejudge. Делается это так (от имени root):

Если нет прав root — то можно создавать каталог EJUDGE_HOME/judges. Далее я буду называть этот каталог JUDGES_DIR

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

При помощи wget (VERSION — версия):

Для установки — следующие команды:

PARAMS — параметры конфигурации

Ниже — некоторые параметры (которые обычно требуются)

  • —prefix=EJUDGE_PREFIX — корневой каталога программы. Если не задавать его, могут возникнуть проблемы. PREFIX предлагается задать как EJUDGE_HOME/inst-ejudge
  • —enable-contests-home-dir=JUDGES_DIR — Каталог для контестов. JUDGES_DIR мы уже задавали выше.
  • —with-httpd-cgi-bin-dir=CGI-BIN-DIR — каталог cgi-bin вашего сервера. Где он находится — можно узнать в конфигурации вашего веб-сервера.
  • —with-httpd-htdocs-dir=HTDOCS-DIR — каталог, в который кладутся веб-файлы (.html, .php, etc). Где он находится — опять же написано в конфигурации вашего сервера. В HTDOCS-DIR/ejudge будут помещены несколько js и css файлов
  • —enable-ajax — включает движок ajax для системы

Параметры, которые необязательно ставить:

  • —enable-charset=ENCODING — использование определенной кодировки в программе. ENCODING может быть, например, «UTF-8» или «KOI8-R». Значение по умолчанию — UTF-8.
  • —with-mysql=MYSQL-DIR — Каталог с mysql. Если компилировали mysql с нестандартным префиксом, то надо его указать. Вообще это необязательный параметр, MySQL может понадобиться только для некоторых необязательных плагинов

Что бы узнать все остальные параметры надо набрать:

Если в процессе компиляции возникла ошибка, надо перепроверить конфигурационный скрипт или обратиться к разработчику.

Итак, мы выполнили ./configure, make, make install. Но это еще не все.

Настройка

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

Заходим по очереди в каждый пункт меню и меняем все, что неверно, на верные параметры.

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

Осталось лишь выставить права на доступ к ссылкам на исполняемые файлы, которые установил ejudge:

Запуск

Теперь можно запустить ejudge (это делается только от имени ejudge!):

Если после этого ваш вебсервер выдаёт ошибку — попробуйте удалить все файлы в CGI_BIN_DIR (на самом деле это ссылки на файлы) и скопировать туда файлы из EJUDGE_PREFIX/libexec/ejudge/cgi-bin:

Если и после этого появляется ошибка — стоит обратиться к разработчику

источник

Ods Cpp

долгий путь к Будущему

Ejudge для чайников

Поставить Ejudge, это всегда для меня было чем-то невыполнимым. Только истинные задры, как Герман аби могут такое творить.

Первый раз я встретил Ejudge в Алмате на летнем кампе для восьмиклассников в 2009 году. Тогда Герман аби нам ставил контесты на нем, а днем он с Мадияром аби рассказывал что-то новое. Тогда это были графы.

Теперь, когда у меня появились хоть какие-то навыки обращения с линукс-дистрибутивом, я решил научится ставить ejudge сам. Естественно, без помощи Герман аби не обошлось. Кроме его статьи в блоге мне потребовалось около 20 писем переписки с ним, чтобы понять что, да как.

Подготовка: в Убунту установим кучу нужных нам пакетов для компиляции ejudge. Все дальнейшие действия выполняем в консоли.
sudo apt-get install bison flex gettext expat libexpat1-dev zlib1g-dev libncurses5-dev libncursesw5-dev sendmail gawk apache2 libcurl4-gnutls-dev libzip-dev libiconv-hook-dev
Если вы хотите, чтобы скомпилировались плагины для работы с mysql, то еще ставим:
sudo apt-get install libmysqlclient-dev mysql-server mysql-client
Если хотите, чтобы работал русский язык, обязательно ставим еще:
sudo apt-get install gettext

Далее скачаем ejudge и распакуем его туда же(в папку distr).
wget http://ejudge.ru/download/ejudge-2.3.24.tgz
tar xvzf ejudge-2.3.24.tgz
cd ejudge

Тут создаем файл myconfigure.sh для простой настройки с таким содержанием:
#!/bin/bash
./configure —prefix=/home/ejudge/ejudge/ —enable-contests-home-dir=/home/ejudge/judges —with-httpd-cgi-bin-dir=/usr/lib/cgi-bin —with-httpd-htdocs-dir=/home/ejudge/public/mincostflow.com/public/ —enable-ajax —enable-h >
И запустим его
sh myconfigure.sh
Если нет никаких проблем, то компилируем и ставим.
make && make install

/ejudge у нас есть установленный, но не настроенный ejudge. Запускаем генератор скрипта с настройками:
cd

Там мы должны отметить все настройки и сохранить скрипт. Запускаем полученный скрипт:
sh ejudge-install.sh

Пишем все настройки для apache, для этого нужно отредактировать файл настроек от рута:
sudo gedit /etc/apache2/httpd.conf
Пишем туда конфигурацию apache, ниже приведен пример, который не точен, но должен показать суть.

ServerName algoprog.kz
ServerAdmin algoprog.kz@gmail.com
DocumentRoot /var/www/algoprog.kz/
ScriptAlias /cgi-bin/ /home/ejudge/ejudge/libexec/ejudge/cgi-bin/

Options +ExecCGI
AllowOverride Options

SetHandler None

Создадим себе страничку в помощь:

sudo mkdir /var/www/yaap.kz
sudo gedit /var/www/yaap.kz/index.html
и там копируем такой текст.

Для работы ajax авто-обновления страницы(нужные папки предварительно создайте):
./ejudge-upgrade-web /var/www/yaap.kz/

Для работы русского языка, вроде нужно, чтобы ваша текущая локаль была русской.

Запускаем apache
sudo invoke-rc.d apache2 start
Запускаем ejudge

Чтобы работали все элементы дизайна и декорации, а так же ajax, необходимо запустить

/ejudge/libexec/ejudge/cgi-bin
(возможно, нужно будет сделать это от рута, а потом поменять права доступа к файлам)

источник

Как нельзя проводить олимпиаду или настройка ejudge с распределением вычислений

В одном нецентральномотдаленном регионе нашей необъятной страны как-то раз проходил очередной региональный этап Всероссийской олимпиады школьников по информатике и программированию. До 2014 года всё было хорошо, проводили олимпиаду на старой системе, написанной в далеких 2004 годах очень одаренным программистом, на Delphi. С тех пор его никто не менял — работал, ну и ладно. В 2014 году решили попробовать ejudge. Поднимать всё с исходников не стали, решили взять готовое, образ для виртуальной машины. Всё было хорошо, все работало.

Но тут наступил 2015 год, в котором некоторые пункты проведения олимпиады немножко, совсем чуть-чуть поменяли, и нужные «человеки» об этих изменениях узнали только за 1-2 дня до начала…

Тут-то и начинается самое веселое.

Дело в том, что почти все эти изменения касались только нас двоих(я + ripatti).
Я отвечал за сервер (fedora19, ejudge) и его работоспособность, он отвечал за подготовку тестов, конфигурации туров в целом. У него в этом довольно богатый опыт.

Итак, пойду по хронологическому порядку.

21 января, среда

Меня спрашивают, смогу ли я поднять сервер для олимпиады на базе выделенных машин университета, на что я отвечаю отрицательно, ибо времени оставалось мало, и среда для меня может быть незнакомой (думал, что там VMWare, а я только на Virtual Box мог). В общем, я не смог дать гарантию, что всё будет хорошо.

22 января, четверг

Узнаю, что появилось такое понятие, как токены. Это означало лишь одно: решения участников должно проверяться во время тура, а не после. Вспомнив прошлогодний тур, решил, что один сервер всё потянет. В прошлом году же ничего не упало, все сработало, все были довольны. Начал работать над сервером. Привез машину (железо) в стены университета.

Вечером узнаю от напарника, что предыдущая версия ejudge (2.3) не удовлетворяет требованиям. Как раз к этому времени Александр Чернов выложил рабочую версию. Даже специально завел новый репозиторий со всеми настройками пробного тура. Было очень заманчиво, потому что у меня в голове была идея настроить старую версию. Решили собрать новую версию из исходников, так как готового образа не было. Тут начались первые проблемы.

Проблема: как пустить ssh по не 22 порту?

Дело тут в университете. Они, как и любая организацию, блокируют 22 порт снаружи. Мы могли в стенах универа работать спокойно, а вот за стенами начились бы проблемы. Слава Богу, мой научный руководитель был администратором кластера, у которого был внешний IP, но доступ к нему был запрещен. Попросил его помочь, в итоге он нам полностью всё настроил. На самом деле, я попросил дать мне ssh доступ к кластеру (откуда я спокойно попадал на свой сервер по 22 порту), но ему очень не хотелось раздавать доступ налево-направо. Решили «кардинально решить проблему». Я ему даю все пароли, логины, а он обещал посмотреть. Да, человек я доверчивый.

На самом деле, я и сам пытался это сделать, но не смог.

Вырезки из того, что он потом прислал:

… в-третьих, настройки ssh-сервера хранятся в /etc/ssh/sshd_config, а не ssh_config, я добавил в первом

Port 22
Port 5000
PermitRootLogin no

и все вывесилось как надо:
[root@localhost ssh]# service sshd status
Redirecting to /bin/systemctl status sshd.service
sshd.service — OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
Active: active (running) since Thu 2015-01-22 21:01:38 YEKT; 4min 53s ago

В 7 утра позвонил (разбудил напарника), всё рассказал. Проблема стояла в том, что мы тупо не могли скомпилировать исходный код, ибо некотоые библиотеки отсутствовали, я стягивать их нельзя (ssh 5000). Пытался по одному, но там, блин, зависимости, очень хорошие.

Решили создать другой сервер с полными настройками ejudge (3.3) так, чтобы потом не пришлось заходить к серверу (она находилась в серверной, под замком, было проблематично получить физический доступ к машине).

23 января, пятница, начало пробного тура в 16:00

В 9 утра иду сдавать коллоквиум по Функану, декан что-то поставил, не смотрел. Вроде не «неуд».
В 10 часов начинаю собирать новый ejudge параллельно с Артемом. У него это получается чуть быстрее, я же остановился на мелком шаге и перестал дальше думать.
Вторая проблема.

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

Да, именно, ejudge-conrtol подцепил старую версию.
Всё заработало, заходим на веб версию — видим старое.
Переименовал папку, где находился старая версия бинарника. При этом преследовал 2 цели: сделать так, чтобы он пропал из путей и сделать бэкап старой версии.

Теперь запускаем заново ejudge-control, который находится в /usr/bin/ejudge-control:

Ещё немножко шаманства, и пробный тур готов!

Это мы сказали, когда время было примерно 17:00.

Я побежал с дистрибутивом в серверную. Прихожу, а там экран только потух. Думал, уснул монитор. Всё хуже — только что сисадмин по непонятной мне причине отрубил питание у моего железа. Теперь я жду, пока windows server 2008 загрузится, дальше копирую, импортирую в virtual box, запускаю, проставляю статические адреса, настраиваю ssh. Из-за того, что в прошлый раз мне его настраивал мой науч.рук (Юлдашев Артур Владимирович), в этот раз пришлось потратить кучу времени. Усугублялось всё это тем, что в серверной у меня не было возможности погуглить.

Время 17:45, пробный тур почти закончился, у нас сервер до сих пор не встал… Поступают множество звонков — отвечаем, мол, всё, закругляемся, сервер не успеем поднять.

Время 18:00, сервер ещё не встал. Собрались с другими жюри, думаем, как выйти из этой ситуации.

Было решено следующее: Мы с Артемом не спим, допиливаем пробный тур и первый, приготовим всё к 10, с 10:00 по 11:00 запускаем пробный тур, а в 11:00 запускаем 1 тур. Так мы лишились сна на 2 ночь.

Попрощались и поехали домой. Дома стали заново всё настраивать, настроили. К утру всё было готово.

24 января, суббота, 1 тур (официальное расписание)

Начинается пробный тур, и тут мы, наконец, поняли, с чем имеем дело.

Что это такое?
В прошлом году была следующая ситуация: участник отправляет исходный код на тестирующую систему, которая, в свою очередь, проверяет только на тестах, которые показаны на примере к задаче. Если посылка их не проходит, то она не становится в очередь для полной проверки. Поэтому наш почетный один сервер спокойно справлялся со всей нагрузкой(всего было 150 участников).

В этом году мы должны были проверять решение сразу на всех тестах. Чтобы участники не злоупотребляли этим, было введено это понятие — токены. Это, так сказать, право посмотреть результат своей посылки. Он был равен 10. То есть, я могу посылать решение задачи сколько угодно раз, но посмотреть смогу лишь 10 раз. Последующие посылки на свой страх и риск.

Пробный тур начался, а у нас задержка сервера уже 15 минут. То есть участник отправляет решение на сервер, а оно там проверяется только через 15 минут. Не испугались мы этого. А зря. Подумали, что пройдет.

Я делаю Reload contest, сбрасываю весь очередь посылок. При этом никому об этом не сообщил. В итоге за 10 минут до конца пробного тура нас снова забрасывают посылками. Тихонько закрываем контест, открываем контест 1 тура.

11:00, 1 тур

Наконец, закончился! Задержка проверки — 1 час. Участник должен был отправить решение за час до конца, чтобы успеть посмотреть протокол проверки.

16:00, иду в актовый зал. Встречаю недовольные глаза. Ещё бы, я только что лишил детей выхода на финал. Как на меня ещё можно было смотреть. С одним очень известным учителем пересекся, рассказал, в чем проблема, какие есть решения — распараллелить. Пожелал мне удачи.

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

Вариант №1. Поставить в каждом дисплейном классе по 1 серверу, в больших классах — по 2. После олимпиады все результаты соберем, проблем с сетью не будет ни у кого, нагрузку можно будет снизить в порядок, что и даст возможность отвечать всем требованиям на 100%. Очевидны изъяны: сейчас суббота, почти все дисплейный классы уже закрыты, в том числе серверная. Серверов у нас под рукой нет, образов 2 тура тоже. Дисплейные классы находятся слишком далеко друг от друга, в 3 корпусах. Про доступ по ssh можно и не говорить. 2 тур начинается в понедельник 9 утра, железно. За утро понедельника такое дело не сделать, ибо нас всего лишь двое.

Вариант №2: подключить вычисляющие узлы к основному серверу. Этот случай идеальный. Ничего не нужно менять в плане организации олимпиады. Единственная проблема — создать эти вычисляющие узлы.

Под рукой тогда ничего не было. 1 звонок — и через час у нас 13 ноутбуков, core-i7, по 8 ГБ ОЗУ. Единственный образ машины, который у меня был — образ пробного тура.

20:00, сидим на кафедре, настраиваем сервер для 1 ноутбука. Позвонили Артему, пусть приезжает, помогает мне всё настроить (я не умел настраивать тур). Вдруг в голову организатора приходит мысль — дом же пустой (жена с внуками прилетает только воскресенье днем), пойдем ко мне, на ночь.

Все довольны, точнее, мы с Артемом. С нами едет ещё один учитель, помогать нам.

25 января, ночь — день

Взяли с собой 7 ноутов, приехали, распаковались. Приготовили нам вкусную еду, и мы, набравшись сил, начали.
Настроили 2-й тур, скинули образ в накопитель и задумались, а может попробовать распараллелить?
Времени много, сил, вроде, тоже.

А теперь самое интересное. Как устроен ejudge.
Есть служба (демон), отвечающий за компиляцию, запуск, тестирование программ — ej-super-run. Данные он берет из /home/judges/, где обычно расположены конфигурационные файлы, тесты, чекеры и присланные решения.
Не знаю, какой именно процесс отвечает за веб-интерфейс, но мы запускали ejudge-control, который запускал всю систему. Вдаваться в подробности не стал.
Под распараллеливанием предлагалось расшарить папку /home/judges/. Причем не важно как — SSHFS, Samba, NFS.
Но для этого нужно собрать заново с определенным ключом рабочие узлы, как их называют в распределенных системах — slaves. Лабораторные работы по ОС включали в себя создание сетевых папок при помощи NFS и Samba. Я с легкостью принялся за самбу и тут же уперся в первую проблему, которую уже лень было решать. бросив его, принялся за NFS. Закономерно было ожидать, что тут я тоже встречу множество проблем. Осталось последнее, более знакомое мне SSHFS. Знакомо потому, что с SSH я как-то дружил, часто работал с ним.

Сперва убедимся, директория /home/judges/ пуст, иначе очищаем её.

После этого директория /home/judges/ становится общей с серверным. Для полного удобства можно смонтировать его, но мы этого не стали делать, ибо уже утро.

Если нужно указать другой порт, то следует добавить параметр -p

В случае с нашим сервером это было актуально.

В качестве сервера выбрали один ноут, в качестве slave — другой. Речь идет и виртуальных машинах, поднятых на них.
Через веб интерфейс запустил 2 посылки (с while(true), чтобы выдавал на всех тестах TLE), которую сам же сервер и выполнил, засекли время. Запустили ej-super-run на рабочем узле, снова отправили на перепроверку 2 задачи — счастье.
Рабочий узел подхватил посылку, начал тестировать. Время проверки почти в 2 раза меньше, 30 секунд против 50.

Следующим шагом связали рабочий узел с реальным сервером, ведь теперь 5000 порт нам не страшен.

Начали заливать на остальные ноуты, попутно оптимизируя настройки. Хотели скрипт красивый написать, который легко мог бы прописать все настройки, но, увы — кривые руки на то и кривые, что такие вещи сразу не могут сделать. Все настройки прописывал руками. На сервере остановили процесс ej-super-run, пусть занимается только веб интерфейсом.
Далее мы задумались: на каждом ноуте имеется 4 ядра, 1 рабочий узел может проверять только в однопоточном режиме.

Дай человеку гору золота, он ещё одну захочет

Либо мы поднимаем 1 виртаульную машину, даем ему много ресурсов, а в ней распараллеливаем по ядрам, либо просто поднимаем 2 виртуальные машины, по 2 ядра.
Нам было всё равно, насколько ускорялась система — в 2 или 3 раза, если всё равно машин у нас много. Решили остановиться на достигнутом, поднимать по 2 машины на ноуте. Когда все 7 ноутбуков были готовы, мы решили себя наградить сном в 12 часов.

26 января, 08:30

Уже свеженький, в университете, Артем тоже приехал. Достали все 13 ноутов, ребята из «службы по сетям» оперативно обжали провода, настроили сеть, в итоге 12 из них уже были в сети, 13-ый ноут выхода в интернет так и не получил, провод, видимо, был старый. Быстро поднял 7 первых, после чего веб интерфейс начал ужасно тормозить, видимо sshfs скачивал к себе всю директорию, которая была довольно-таки пухленькой.

2 тур начался, у нас уже 14 рабочих узлов! Тихонько стал подключать узлы к системе, по одному, чтобы не перегружать систему.

Очереди на сервере не превышало 10 одновременно выполнявшихся тестирований. То есть, в принципе, достаточно и 5 ноутов, чтобы провести полноценный тур.

Приходили из телевидения, им сказали, что у нас 24 рабочих узла. Пришлось до конца олимпиады поднять все, чтобы сдержать слово.

В итоге 2-й тур участники написали гораздо лучше, чем 1-й, хотя в 1-м туре был участник, который написал на 400, а на 2 туре, набрали только 370.

Альтернатива

На самом деле, всем всё было давно известно, и для этого даже прибегли к помощи Яндекса. Последний принимал заявки от регионов, которые не могли самостоятельно провести региональный этап по новым требованиям. Заявки нужно было подать за 10 дней до олимпиады, поэтому мы этот способ не рассматривали. К Яндексу обратились 26 регионов.
Также сказали, что в других регионах тоже не всё хорошо, баллы низкие в целом.

Вот так мы, технические жюри, позорно провели региональный этап Всероссийской олимпиады.

источник

Читайте также:  Установка индивидуального счетчика воды

Добавить комментарий