sudo,但首次部署和更新系统配置需要管理员权限。
本页只介绍 NixOS 的部署入口。Docker profile 本身是 Linux 宿主能力,不是 NixOS 专属能力。Ubuntu、
Debian 与其它 systemd Linux 需要安装等价的宿主服务。macOS 用户可以在 OrbStack Linux machine 内运行
NiceEval 和对应的 Linux 宿主服务;Apple container 当前需要独立 NiceEval Provider。具体边界与命令见
让 Sandbox 使用 Docker。
如果任务可以信任 Agent,或者只在一次性 VM 中运行,先阅读让 Sandbox 使用 Docker
选择 Docker socket 或 raw privileged DinD。它们不需要本页的宿主 profile。
前置条件
开始前确认:- NixOS 使用 flake 管理系统配置;
- 宿主使用 systemd 和 cgroup v2;
- 你知道日常运行 NiceEval 的 NixOS 用户名;
- 宿主有足够的 CPU、内存和磁盘留给评估容器。
flake.nix,配置名是 my-host,日常用户名是 alice。请把它们替换成
自己的值。
引入 NiceEval module
在系统配置的flake.nix 中加入 NiceEval input,并把 module 放进主机的 modules:
flake.nix
flake.lock。提交这份锁文件,避免
不同机器在未确认的时间使用不同 module 版本。
声明 profile
在 NixOS 配置中声明一个名为default 的 profile:
configuration.nix
capacity 是 NiceEval 可以分配给评估任务的预算。ephemeralDiskBytes 是每个 Docker data allocation
的硬上限,dockerDataAllocationCount 是 profile 可同时授予的 Docker data allocation 数量。aggregate 是 daemon、构建进程、
watchdog 和评估容器共同受到的硬限制,因此每一项都不能小于 capacity。两者之间的余量留给宿主侧开销。
loop-ext4 会在 /var/lib/niceeval/docker-profiles/default.img 创建独立的 ext4 quota 文件系统。
watchdog 从中分配私有目录,并把目录挂到每个 Sandbox 的 /var/lib/docker。不要再为该路径声明
tmpfs;inner image layer 和 BuildKit cache 应占磁盘,不应计入宿主 Shmem。
应用系统配置
先检查配置能够求值,再切换系统:alice 加入 profile 的 access group。rebuild 完成后退出当前登录会话并重新登录,让新组
成员身份生效。只在旧 shell 中重新运行命令不会刷新 supplementary groups。
重新登录后检查服务:
active (running)。失败时读取对应 unit 的日志:
验证 profile
进入已经安装 NiceEval 的评估项目,以日常用户运行:list 应显示 default。doctor 始终检查 descriptor、Unix socket、cgroup、容量、watchdog、离线资产、cold build,
然后启动一个受限的外层容器及一个内层 Alpine 容器。所有项目都通过后,宿主 profile 才可以用于正式
评估。
不要用 sudo pnpm exec niceeval ... 绕过权限错误。日常用户无法访问 profile 时,先确认用户名已经写入
accessUsers,再重新登录并重跑 doctor。
在 Experiment 中使用
宿主通过验收后,在 Experiment 的 Docker Sandbox 中引用同一个别名:dockerDataBytes、只读 rootfs 和其余可写路径的 tmpfs。完整配置见
让 Sandbox 使用 Docker。先用较小的
maxConcurrency 运行一次,再根据 profile 的 capacity 增加并发。