我的 VPS 现在都用 NixOS 统一管理,但是 nix eval 所需的内存和 CPU 在这些低配机器上不太吃得消,所以我一直是在本地构建完再远程部署。
nixos-rebuild 的默认行为是,把本地 nix store 中的文件通过 ssh 传给远程服务器( nix copy),我的小水管每次都要跑很长时间。
昨天我忍无可忍,翻了翻文档,发现有 --use-substitutes 这个选项。加上就能让远程优先直接从二进制缓存中拉取文件。
同时你还可以使用 ssh 跳板,我的场景是校园网直连服务器太慢,只能通过家里云中转。配置环境变量 NIX_SSHOPTS 就能控制传递给 ssh 的选项,使用 -J <跳板机> 即可。
使用跳板机 vmlatl,部署配置 racknerd 到远程机器 rn,完整的命令如下:NIX_SSHOPTS="-J vmlatl" nixos-rebuild switch --flake .\#racknerd --target-host rn --use-substitutes --sudo --ask-sudo-password
另外我还需要定期清理 nix store,试了试 just 搭配 ananta 不太好用,准备自己写一个命令执行器。不过或许试试看 ansible / pyinfra?