编译器
从 2022/8/12 开始,Hydro 为了避免宿主机环境变化对于评测的影响,对于 此后新安装的实例 默认使用 nix 管理环境。
如果你是在这之前安装的 Hydro,请使用 apt 安装编译器后使用 pm2 restart hydro-sandbox
重启沙箱,并忽略本章节。
以下是 nix 的简要操作说明:
使用 nix-env -iA nixpkgs.编译器名
安装新编译器,后重启沙箱 pm2 restart hydro-sandbox
生效。
可以在 Nixos Search 中搜索你需要的编译器。
以下是常用编译器的示例:
使用 nix-env -q
查看已安装的列表,后使用 nix-env -e 编译器名
即可删除对应的编译器。
请注意不要误删 Hydro 基础组件,且操作完成后需要重启沙箱 pm2 restart hydro-sandbox
生效。
部分语言(特指 Java 等)因为语言特性,编译需要使用较长的 CPU 时间,这在单核机器上尤为明显,
可能需要花费数秒甚至数十秒才能完成 A+B 的编译。
预期性能可以通过在主机上手动运行编译命令来测试:
同时部分编译器在可能时会尝试创建大量进程利用多核并行编译,请确保 judge 设置中 processLimit
项足够大,
否则会因编译器无法创建进程失败导致编译失败。
在编译器利用多核并行编译时,Hydro 会统计这些进程的 CPU 占用之和作为 CPU 资源限制,如出现编译超时错误,
请调整系统设置中对应语言选项下的 compile_time_limit
项(单位 ms)。
在使用 sh nix-env -iA nixpkgs.python3Packages.xxxxx
安装 pyhton
包后,如果在沙箱环境中无法找到依赖。
请参照 在沙箱中引入 Python 包 教程更新环境变量。
进阶
如果你需要更加复杂的编译环境配置,我们建议使用编写单独的 nix 文件。
复制以上文件,保存为 default.nix
,使用 nix-build
进行构建。
构建后会产生一个 result
文件夹,记住该文件夹所在的路径。
打开 ~/.hydro/mount.yaml
将其中 /root/.nix-profile
替换为编译出的 result
文件夹(切换到新的环境)
之后保存并重启沙箱。
后续若需更改环境配置,仅需要修改 default.nix
文件之后 nix-build
重新构建,再重启沙箱即可生效。
构建过程中的缓存文件可以使用 nix-collect-garbage
进行清理。
更详细的 nix 语言介绍,请参照 Nix Guide 和 Nix Manual。