-*- mode: text; mode: auto-fill; coding: koi8-r -*-
$Id: FAQ.RUS 2006 2005-04-22 04:13:45Z cher $

Часто задаваемые вопросы
========================
Q.1. С помощью программы ejudge-setup был создан настроечный
скрипт, однако при запуске он завершается с ошибкой
bash: uudecode: command not found
Installation of ejudge.xml failed

A. Необходимо проинсталлировать программу uudecode. Обычно она
находится в пакете sharutils. Для руководства по инсталляции
пакетов обратитесь к документации по Вашему дистрибутиву Linux.

Q.2. При запуске тестового турнира из-под пользователя root
программа userlist-server успешно запустилась, однако при старте
программы serve выдаётся ошибка
DATE:error:teamdb_open_client: cannot became an admin process: permission denied
где DATE - текущие дата и время

A. Если посмотреть на сообщения программы userlist-server, можно
увидеть строку типа
DATE:error:ADMIN_PROCESS: PID, 0 -> root is not allowed
здесь PID - идентификатор процесса serve

Это означает, что программу serve просто нельзя запускать из-под
пользователя root. На самом деле никакую программу системы
ejudge категорически не рекомендуется запускать из-под
пользователя root. Дело в том, что возможность запуска
произвольных программ, вообще говоря, неизвестными
пользователями, создаёт сама по себе проблему в безопасности
системы, а запуск программ из-под пользователя root делает эту
проблему вообще нерешаемой.

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

Полезные советы
===============

1. Как компилировать решения на другом компьютере
Компиляция программы, как правило, не занимает много времени,
поэтому обычно оказывается достаточным запускать сервер
компиляции compile на том же компьютере, на котором работает
сервер турнира serve. Тем не менее, может возникнуть ситуация,
когда и компиляцию программ предпочтительнее выполнять на
отдельном компьютере. Этот компьютер может и тестировать
решения, а может быть специально выделен только для компиляции.

Сначала рассмотрим случай, когда на все турниры запускается
единственный сервер компиляции, к которому обращаются серверы
турниров. В частности, такая конфигурация генерируется
программой ejudge-setup и рекомендуется к использованию.

Обозначим через MAIN-COMP-HOME каталог, в котором на серверном
компьютере запускается сервер компиляции. Например, это может
быть каталог /home/judges/compile - значение, предлагаемое
программой ejudge-setup по умолчанию, если не было задано
никаких опций скрипта configure.

Программа compile получает запросы на компиляцию программ и
выдаёт результат компиляции с помощью специальным образом
организованных каталогов в файловой системе, поэтому для работы
программ `serve' и `compile' на разных машинах необходимо, чтобы
они могли использовать некоторую общую файловую систему.
Например, этого можно добиться проэкспортировав каталог
/home/judges на серверном компьютере с помощью NFS (см. описание
файла /etc/exports в документации по операционной системе) и
примонтировав его на другом компьютере. Кроме NFS можно
использовать любую другую файловую систему, например, SMB.

Пусть MOUNT-COMP-HOME - это каталог, в котором находится
серверный каталог MAIN-COMP-HOME на компьютере, на котором
предполается запускать сервер компиляции. Пусть COMP-HOST - это
имя этого компьютера. Например, если на компьютере COMP-HOST
каталог /home/judges монтируется как /mnt/server/judges, то
значением MOUNT-COMP-HOME будет /mnt/server/judges/compile, если
значение MAIN-COMP-HOME равно /home/judges/compile.

Очень важно, чтобы в качестве рабочего каталога программа
`compile' использовала каталог не на сетевой файловой системе.
Настройки программы `compile' по умолчанию таковы, что в
качестве рабочего каталога будет использоваться каталог
MAIN-COMP-HOME/var/work/compile, и эту настройку необходимо
поменять. В противном случае возможна ситуация, что несколько
программ `compile', работающих на разных компьютерах, будут
одновременно использовать один и тот же рабочий каталог, что
может привести к непредсказуемым результатам. Чтобы изменить
рабочий каталог программы `compile' достаточно в её
конфигурационном файле (MAIN-COMP-HOME/conf/compile.cfg)
добавить определение переменной `work_dir', например, следующим
образом:
work_dir = /tmp/ejudge
Определение этой переменной должно находиться в секции
определения глобальных переменных, то есть до секций описания
языков программирования. Каталог /tmp выбран потому, что он
обычно является локальным (не сетевым) для каждого компьютера в
сети.

Теперь необходимо исправить конфигурационный файл compile.cfg
так, чтобы в нём были прописаны корректные пути с точки зрения
компьютера COMP-HOST, так как изначально в нём прописаны пути
для серверного компьютера, которые могут быть неверны для
компьютера COMP-HOST. Проще всего это сделать заменив
определение конфигурационной переменной root_dir на определение
в зависимости от имени текущего компьютера:
@if host == "COMP-HOST"
root_dir = MOUNT-COMP-HOME
@else
root_dir = MAIN-COMP-HOME
@endif

Таким образом, файл compile.cfg должен быть отредактирован
следующим образом:
==== старая версия ====
root_dir = MAIN-COMP-HOME
==== новая версия ====
@if host == "COMP-HOST"
root_dir = MOUNT-COMP-HOME
@else
root_dir = MAIN-COMP-HOME
@endif
work_dir = /tmp/ejudge
====

Теперь всё готово к тому, чтобы запускать программу `compile' на
компьютере COMP-HOST. Выполните команды:
cd MOUNT-COMP-HOME
EJUDGE-BIN-DIR/compile conf/compile.cfg

Обратите внимание, что в такой конфигурации возможна
параллельная работа двух compile: на главном серверном
компьютере и на компьютере COMP-HOST. Добавление новых
компьютеров для компиляции выполняется аналогично.

2. Как тестировать решения на другом компьютере

3. Как тестировать решения на нескольких компьютерах

4. Как тестировать несколько турниров на одном компьютере одновременно

5. Как тестировать несколько турниров одной программой run
