ジャッジ / API のソースコードです
- Ubuntu 18.04(Judge Server)
- docker, docker-compose(API, SQL)
dockerグループに自分を登録することでsudoなしでdockerが使えるようになる Reference sudoをつけて実行してもいいが、色んなところにrootでフォルダが作られて面倒な事になるので、非推奨
sudo gpasswd -a $USER docker
sudo systemctl restart docker
APIサーバー(localhost:50051)とSQL(Postgre SQL)がdocker-composeで立ち上がり、aplusb, unionfind
がデプロイされる。
APIサーバーへは gRPC でアクセスします。例えばクライアントとして evans を使うなら、以下のようにアクセス
./launch_local.sh
launch_local.sh
は default だと aplusb
しかデプロイしないので、必要ならば deploy/problems_deploy.py
も叩くとよい。
通常の gRPC 版と gRPC-Web 版のふたつが建つ
evans --host localhost --port 50051 api/proto/library_checker.proto
evans --host localhost --port 58080 api/proto/library_checker.proto --web
ジャッジサーバーはgoで書かれたAPIサーバーと通信するクライアント(/judge
)と、このクライアントが呼び出す軽量コンテナ(/executor
)からなる。
sudo apt install postgresql-client libpq-dev python3 python3-dev python3-pip g++ cgroup-tools libcap2-bin
pip3 install termcolor toml psycopg2 psutil
pip3 install -r deploy/requirements.txt
pip3 install -r ../library-checker-problems/requirements.txt
など
executorのREADMEを参照。Ubuntu以外で動作確認をしていない、かつ色々準備が必要なので注意。
executor
をビルドして PATH の通ったところに置く。
cd library-checker-judge/executor
cargo install --path . --features sandbox
# or: cargo build --release --features sandbox && cp target/release/executor_rust path/to/...
設定情報が書かれたファイル judge/secret.toml
を作る。
cd library-checker-judge/judge
./make_secret.sh
ユーザの提出を実行するための処理系をインストールする。 api/langs.toml を見ながら適当にする。
sudo apt install g++ clang++ python3.8 pypy3 openjdk-11-jdk haskell-stack sbcl ...
cd library-checker-judge/judge
go run .
- library-checker-problems / library-chcker-judge は同じディレクトリにcloneしておくこと
今のgo sourceではなく、今立ち上がってるAPIサーバーに対してテストすることに注意
cd library-checker-judge/api
go test . -v
cd library-checker-judge/judge
sudo go run *.go
各種機能をガンガン使うのでrootじゃないと動かない 多分
gcloud auth application-default login
cd packer
packer build .
Library Checkerで稼働するジャッジサーバーのイメージはpackerでビルドされている。
なんでも歓迎
- problems: library-checker-problems
- judge: library-checker-judge
- frontend: library-checker-frontend