Skip to content

Latest commit

 

History

History
142 lines (107 loc) · 4.1 KB

README.zh-CN.adoc

File metadata and controls

142 lines (107 loc) · 4.1 KB

rsjudge

rsjudge logo

一个用 Rust 编写的在线评测沙箱服务器,受到 go-judge 的启发,服务于 SASTOJ。

特性

  • 支持多种编程语言,可以在配置文件中轻松添加新的语言。

  • 支持多个编译器版本——只需使用你喜欢的工具链管理器并在配置文件中设置路径。

  • 支持自我测试和最终提交。

  • 通过 TOML 配置文件,轻松自定义编译和执行过程。

  • 可以监控和限制资源使用。

  • 与 SASTOJ 良好兼容。

  • 支持 RESTful API、gRPC 和 RabbitMQ,可通过 feature flag 或配置文件启用或禁用。

  • 采用服务器发送事件(SSE)或 gRPC 流实时流式返回评测结果。

  • 支持使用插件进行扩展。

  • 使用 Rust🦀编写,速度极快,安全性高。

发音和拼写

“rsjudge” 是 “Rust” 和 “judge” 的组合,发音为 “R-S-judge”。单词应该以小写字母书写,单词中间无空格,即使在标题或句子开头也是如此。

目录结构

src/

入口点的源代码,包括命令行接口和配置解析。

xtask/

用于构建和打包的额外任务,使用 cargo xtask <TASK> 调用。

crates/

项目的子 crate。

crates/rsjudge-grpc/

gRPC 服务器和客户端。

crates/rsjudge-judger/

答案比较和评判。

crates/rsjudge-rest/

RESTful API 服务器。

crates/rsjudge-runner/

执行各种命令的沙箱,提供用户切换、I/O 重定向、安全上下文等功能。

packaging/

用于生成 .deb.rpm 包的附加文件。

目录结构可视化

从源代码构建

先决条件

  • 符合 MSRV 的 Rust 工具链。

  • Linux 内核 >= 4.5

    • 这是为了支持 Seccomp BPF。

  • 对于 gRPC 支持(采用 grpc feature 控制)

    • protoc >= 3.15,

    • buf 用于 gRPC 依赖管理。

  • 对于 .deb 包的生成,需要安装了 dpkg-devliblzma-dev 的 Debian/Ubuntu 系统。

MSRV(最低支持的 Rust 版本)

rsjudge 采取 N - 2 的 MSRV 策略,其中 N 是当前的 Rust 稳定版本。例如,如果当前的 Rust 稳定版本是 1.79,则 MSRV 将会被设置为 1.77。

当前的 MSRV 可以从 Cargo.toml 中的 rust-version 字段中找到。在更新 MSRV 后,我们将不再支持任何比其更旧的 Rust 版本。这些版本可能仍然可以工作,或者无法正确编译或运行 rsjudge。

安装额外的依赖

Debian/Ubuntu

  1. 确保 PATH 中包含 protoc >= 3.15,可以从 发布页下载最新版本。

    • 在 Debian 12, Ubuntu 23.04 或更高版本的系统上,可以使用 apt 安装符合版本要求的 protoc

      sudo apt install -y protobuf-compiler libprotobuf-dev
      protoc --version
      # libprotoc <VERSION>
  2. 手动安装 buf

  3. 使用 apt 安装打包 .deb 需要的软件包:

    sudo apt install -y dpkg-dev liblzma-dev

Alpine

sudo apk add lld protoc protobuf-dev

# 安装 `buf` 工具
curl -sSL -o buf \
  "https://github.com/bufbuild/buf/releases/download/latest/buf-Linux-$(uname -m)"
# 您可以用自己喜欢的目录替换 `/usr/local/bin`,并确保将其添加到 `PATH` 中。
sudo install -Dm755 buf /usr/local/bin/buf

Arch Linux

sudo pacman -S --needed lld protobuf buf

构建

克隆仓库:

git clone https://github.com/NJUPT-SAST/rsjudge.git
cd rsjudge

使用 Cargo 构建项目:

cargo build --release

生成 .deb 包:

cargo xtask dist deb

生成的软件包位于 target/debian 目录下。