Версия 2.1.30 (20040619) ======================== Если в результате тестирования этой версии не будет обнаружено ошибок, следующая версия (полностью совпадающая с текущей) получит номер 2.2.0. Таким образом произойдёт переход к новой стабильной версии системы ejudge. Полностью переработана процедура компиляции и инсталляции системы в сторону большего соответствия стандартам GNU. Процесс инсталляции системы и настройки тестового турнира подробно описан в файле INSTALL.RUS. Для настройки под текущую систему теперь используется скрипт configure, генерируемый с помощью утилиты autoconf. Утилита configure принимает большое количество опций, которые подробно описаны в файле INSTALL.RUS. configure --------- При конфигурировании системы с помощью configure можно указать значения по умолчанию для важнейших конфигурационных параметров системы ejudge, например, для пути к каталогу файлов конфигурации турниров или для пути к сокету связи с сервером базы пользователей и т. д. Теперь если соответствующая переменная в конфигурационном файле не установлена, программы системы ejudge будут использовать "встроенное" (т. е. указанное при конфигурировании системы) значение. В случае CGI-программ `master', `judge', `team', `register', `users' это позволяет вообще обходиться без конфигурационных файлов, если значения всех переменных заданы при конфигурировании системы. Если используется путь к конфигурационному файлу, заданный при конфигурировании системы, можно не указывать его как параметр запуска программ edit-userlist, userlist-server и т. д. Таким образом, процесс конфигурирования системы ejudge перенесён отчасти и на процесс компиляции системы из исходников. Использование скрипта configure позволяет автоматически адаптироваться к некоторым вариантам системы Linux. Так, если в системе не установлен патч на ядро для понижения привилегий процессов, не будут компилироваться соответствующие утилиты. Если не установлены утилиты локализации, локализация будет отключена. Для более подробного описания см. INSTALL.RUS. По прежнему поддерживается только Linux, попыток переноса системы на другие платформы пока не принималось. Скрипт configure определяет присутствие в системе некоторых систем программирования на языках C, C++, Java, Pascal и др. В случае их обнаружения автоматически настраиваются скрипты компиляции. Если системы программирования располагаются не в стандартных каталогах, их местоположение можно указать явно с помощью ключей configure. ejudge-setup ------------ Появилась новая утилита ejudge-setup, предназначенная для начальной настройки системы ejudge после её компиляции. Утилита предоставляет интерфейс меню и работает в консольном режиме. С помощью неё можно уточнить настройки системы ejudge. Задача этой утилиты --- сгенерировать настроечный скрипт, который, будучи выполненым, создаст все необходимые каталоги и скопирует в них необходимые файлы. Утилита начальной настройки может запускаться из-под обычного непривилегированного пользователя, в то время как для выполнения настроечного скрипта необходимы, как правило, привилегии суперпользователя root. Сгенерированная утилита начальной настройки создаёт все необходимые конфигурационные файлы, создаёт базу пользователя с единственным пользователем (параметры которого определяются с помощью ejudge-setup), обладающим всеми полномочиями системы ejudge, создаёт конфигурационные файлы для сервера компиляции с поддержкой всех обнаруженных при конфигурировании системы систем программирования, создаёт конфигурационные файлы для тестового турнира и копирует тесты в каталог тестового турнира. Кроме этого автоматически создаётся рабочий диск для тестирования программ, а также в каталог CGI-программ веб-сервера устанавливаются символические ссылки на CGI-программы системы ejudge. Скомпилированные программы и файлы, необходимые для их работы, по команде `make install' инсталлируются в каталог, указанный с помощью опции --prefix=PREFIX скрипта configure. Если эта опция не указана, используется путь по умолчанию, равный HOME/inst-ejudge, где HOME --- домашний каталог пользователя, запустившего configure. В каталоге PREFIX при инсталляции создаются следующие каталоги: bin/ исполняемые файлы cgi-bin/ исполняемые файлы CGI программ include/ заголовочные файлы библиотеки libchecker lib/ объектные модули библиотеки libchecker libexec/ejudge различные вспомогательные скрипты и программы share/ejudge исходный код библиотеки testlib (pascal) share/locale каталог сообщений То есть, за исключением каталога cgi-bin структура каталогов соответствует стандартам GNU. ejudge-config ------------- Данный скрипт предназначается для получения информации о параметрах системы ejudge (точнее, библиотеки libchecker), необходимой для компиляции проверяющих программ. Скрипт поддерживает следующие опции: --cflags возвращает флаги, необходимые для компилятора языка Си (например, путь к каталогам заголовочных файлов) --ldflags возвращает флаги, необходимые для компоновщика --libs возвращает необходимые библиотеки Таким образом, для компиляции проверяющей программы можно использовать следующую командную строку: gcc `ejudge-config --clags --ldflags` prog.c -o prog `ejudge-config --libs` Здесь предполагается, что скрипт ejudge-config находится в каталоге, указанном в переменной PATH. ejudge.xml ---------- Для хранения новых конфигурационных переменных расширен набор тегов в файле ejudge.xml. Поддерживаются следующие новые теги: charset, config_dir, contests_home_dir, full_cgi_data_dir, compile_home_dir, testing_work_dir, script_dir, serialization_key. Предполагается, что в дальнейшем эти элементы будут использоваться в утилите редактирования конфигурационных настроек системы. Кроме того, введён новый атрибут ejudge_user, являющийся синонимом атрибута local_user. Новое имя атрибута лучше отражает его семантику. run --- Система ejudge теперь поддерживает набор "стандартных проверяющих программ". К стандартным проверяющим программам, в частности, относятся программа, сравнивающая два файла текстуально, или программа, сравнивающая два целых числа в файлах. Набор стандартных проверяющих программ компилируется вместе с компиляцией всей системы и инсталлируется в каталог скриптов (PREFIX/libexec/ejudge). Чтобы использовать стандартную проверяющую программу нужно в секции описания задачи установить конфигурационную переменную `standard_checker' в имя стандартной проверяющей программы. Например, standard_checker = cmp_int Набор стандартных проверяющих программ позволяет во многих случаях избежать написания новых проверяющих программ для задач. Для полного описания стандартных проверяющих программ обратитесь к документации. Местоположение стандартных проверяющих программ можно задать явно с помощью глобальной конфигурационной переменной `ejudge_checkers_dir'. По умолчанию её значение равно PREFIX/libexec/ejudge. Изменить значение по умолчанию можно либо при конфигурировании системы с помощью configure, либо при последующей начальной настройке с помощью ejudge-setup. libchecker ---------- Существенно доработана библиотека для написания проверяющих программ libchecker. Добавлены новые функции normalize_spaces_in_file, read_corr_unsigned_int, read_corr_unsigned_long_long, read_in_long_long, read_int, read_in_unsigned_int, read_in_unsigned_long_long, read_team_unsigned_int, read_team_unsigned_long_long, read_unsigned_int, read_unsigned_long_long. Заголовочные файлы библиотеки могут использоваться из программы на C++. serve, compile -------------- Поддерживается возможность передачи серверу компиляции compile произвольного количества переменных окружения в запросе на компиляцию. Переданные переменные окружения будут затем переданы далее в запускаемый скрипт компиляции. Чтобы установить переменные окружения, необходимо в конфигурационном файле турнира serve.cfg в секции описания языка программирования использовать конфигурационную переменную `compiler_env'. Каждое использование этой переменной устанавливает одну переменную окружения, но конфигурационная переменная `compiler_env' может повторяться в секции описания языка программирования несколько раз. run --- Поддерживается возможность передачи произвольных переменных окружения в проверяющую программу. Для задания переменных окружения используется конфигурационная переменная `checker_env', которая может появляться как в секции описания задачи, так и в секции описания тестировщика. Поддерживается наследоваение значений этой переменной от абстрактной задачи или абстрактного тестировщика. Переменные окружения, полученные из всех источников (секция описания задачи, секция описания тестировщика и т. д.) объединяются и передаются проверяющей программе. Каждое использование конфигурационной переменной `checker_env' позволяет установить одну переменную окружения, но конфигурационная переменная `checker_env' может быть использована несколько раз. serve, compile, run ------------------- Поддерживаются подстановки значений одних конфигурационных переменных в значения других конфигурационных переменных. Такие подстановки похожи на подстановки значений переменных в программах на языке shell и тому подобных. Например, чтобы в определении конфигурационной переменной `start_env' использовать глобальную конфигурационную переменную `script_dir', определение конфигурационной переменной `start_env' может выглядеть следующим образом: start_env = "LD_PRELOAD=${script_dir}/libdropcaps.so" Подстановки такого рода пока обрабатываются только для переменных `compiler_env', `checker_env' и `start_env'. Кроме того, в подстановках пока можно использовать только глобальные конфигурационные переменные. Механизм подстановок в чём-то дублирует механизм форматных преобразований, и, возможно, в следующих версиях появится некоторый объединённый механизм подстановок и форматных преобразований. serve ----- При старте сервер турнира может создать в каталогах html-документов веб-сервера символические ссылки на html файлы с таблицами текущего положения участников. В предыдущих версиях символические ссылки необходимо было создавать вручную. Чтобы автоматическое создание символических ссылок работало, необходимо, чтобы в файле конфигурации турнира serve.cfg была установлена глобальная конфигурационная переменная `htdocs_dir'. В ней должен быть указан путь к корневому каталогу html-документов веб-сервера (на многих Linux-системах это /home/httpd/html). Если переменная `htdocs_dir' не определена, используется значение по умолчанию, которое можно установить при конфигурировании системы с помощью configure. Все пути к символическим ссылкам указываются относительно этой конфигурационной переменной. Для указания пути, по которому должны быть созданы символические ссылки, используются глобальные конфигурационные переменные `stand_symlink_dir', `stand2_symlink_dir', `plog_symlink_dir' для основного файла таблицы результатов, дополнительного файла таблицы результатов и файла журнала посылкок. Все пути указываются относительно корневого каталога html документов, задаваемого в конфигурационной переменной `htdocs_dir'. Имена файлов в этих каталогах будут совпадать с именами файлов, задаваемыми в конфигурационных переменных `standings_file_name', `stand2_file_name', `plog_file_name'. Например, если переменная `standings_file_name' установлена в значение "standings.shtml", переменная `htdocs_dir' --- в значение /home/httpd/html, а переменная `stand_symlink_dir' --- в значение /contests/1, то при старте программы `serve' в каталоге /home/httpd/html/contests/1 будет создана символическая ссылка на файл с таблицей текущих результатов, которая будет иметь имя standings.shtml. Если в настройках веб-сервера нет особенностей (типа виртуальных хостов), то таблица результатов будет доступна по URL http://HOST/contests/1/standings.shtml. Естественно, чтобы `serve' мог создать символическую ссылку, необходимо, чтобы у пользователя, под которым работает `serve' было достаточно полномочий для записи в соответствующий каталог.