Привет всем. Хочу рассказать про свою разработку — тестирующую систему Solve с открытым исходным кодом. Да, можно сказать Yet Another Online Judge :) Но не стоит сразу расходиться, у нее есть некоторые крутые моменты и может быть вам захочется поднять собственную инсталляцию для проведения какого-нибудь соревнования.
Вообще, система разрабатывается уже давно, но вот почему я решил написать только сейчас. Да потому что стабильный релиз вышел совсем недавно и полноценного тестирования до этого момента не проводилось.
Для кого этот пост
- Для тех кто хочет проводить соревнования по СП.
- Для тех, кто готовит задачи преимущественно в великолепной системе Polygon.
- Для тех, кто хочет запустить свою систему без разработки с нуля (например огранизации).
- Для тех, кто просто интересуется.
Ключевая функциональность
- Поддержка пакетов Polygon. Чтобы добавить задачу, вам нужно просто скачать пакет задачи из Polygon и загрузить его в систему. В дальнейшем будет добавлена поддержка автоматического скачивания пакета по URL задачи полигона.
- Поддержка форматов соревнований ICPC и IOI. Тут все стандартно — работает так же как и везде, есть заморозка.
- Поддержка контейнеризованных компиляторов. Очень полезная функциональность. По умолчанию система поставляется без единого компилятора. Компиляторы добавляются путем загрузки .tar.gz корневой файловой системы через API системы. Для удобства есть отдельная утилита с уже готовыми образами компиляторов.
- AWS S3. Если вам надо надежно хранить все ресурсы (пакеты задач, архивы компиляторов, исходники решений), или же вы хотите запустить сразу несколько инстансов системы, данная опция будет для вас полезна. Если же вам все это не надо, то можете использовать локальный диск для хранения всех данных, это подходит для проведения небольших контестов и сборов.
- Поддержка Scope Users — аналог внутренних пользователей Я.Контеста.
Как все это выглядит
Структура системы
Сама система разделена на 3 части:
- Репозиторий бекенда Solve: https://github.com/udovin/solve
- Репозиторий фронтенда Solve: https://github.com/udovin/solve-web
- Репозиторий с утилитой для Solve: https://github.com/udovin/solve-tools
Такое разделение открывает большой простор. Во-первых, вы можете изменить или реализовать с нуля фронтенд и получить уникальный интерфейс для своих нужд (или нужд огранизации). Во-вторых вы можете выбрать, какие компиляторы вам нужны, а какие можно не загружать (например в целях экономии места на диске).
Как попробовать
Поднять бекенд можно по инструкции в репозитории: https://github.com/udovin/solve/blob/master/README.md
Поднять фронтенд можно командой npm install && npm start
в репозитории (необходимо наличие node): https://github.com/udovin/solve-web
Загрузить набор компиляторов можно выполнив команду: go build . && ./solve-tools compilers create
в репозитории: https://github.com/udovin/solve-tools
Можете также воспользоваться Docker образами: udovin/solve
и udovin/solve-web
. При этом udovin/solve
необходимо запускать с опцией --priviledged
(иначе Docker смонтирует /sys/fs/cgroup
в read-only, и запуск решений не будет работать).
Какие требования
Операционная система: Linux 5.11+.
Настроенные cgroup2. Как настроить можно почитать тут: https://rootlesscontaine.rs/getting-started/common/cgroup2/
На этом пока все. Пост будет дополняться при необходимости. Интересны также пожелания, претензии и рассуждения в комментариях.