在恶劣环境的行动指南
所谓恶劣环境,通常不是某一个问题,而是几个问题叠在一起:网络慢、权限少、系统旧、磁盘紧、机器随时可能被重装。行动的原则不是优雅,而是可验证、可回滚、可重复。
第一部分:安装 Nix
Nix 的价值在于把“环境”从机器里拆出来。只要 /nix/store 和配置还在,软件、依赖和构建结果就有机会被复用;即使机器被换掉,也能把环境重新拉起来。
但要先接受一个事实:Nix 不是一个普通的用户态小工具。它默认需要 /nix,多用户安装还需要创建构建用户和启动 nix-daemon。如果现场完全没有 sudo,也不能让管理员帮你创建 /nix,那就不要在这一步硬拼,先改用容器、跳板机,或者争取一次性初始化权限。
1. 判断现场
先确认系统、权限、磁盘和网络:
1 | uname -a |
按下面的顺序选安装方式:
- Linux + systemd + 有
sudo:优先多用户安装。 - macOS:使用官方 macOS 安装命令。
- WSL2 + systemd:按 Linux 多用户安装处理。
- 单用户机器、临时机器、权限有限但能创建
/nix:考虑单用户安装。 - 完全没有
/nix创建或写入权限:暂停,不要把时间浪费在伪装成安装的失败上。
2. 多用户安装
这是 Linux 上最推荐的方式,适合服务器、工作站和多人共用机器:
1 | curl --proto '=https' --tlsv1.2 -L https://nixos.org/nix/install | sh -s -- --daemon |
安装脚本会做几件关键的事:
- 创建
/nix。 - 创建
nixbld构建用户组和若干构建用户。 - 安装并启用
nix-daemon。 - 修改系统级 shell 初始化文件,让新 shell 能找到 Nix。
安装结束后,重新打开一个 shell,或者手动加载环境:
1 | if [ -e /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh ]; then |
如果是 systemd 系统,再检查 daemon:
1 | systemctl status nix-daemon.socket nix-daemon.service |
3. macOS 安装
macOS 直接使用官方安装命令:
1 | curl --proto '=https' --tlsv1.2 -L https://nixos.org/nix/install | sh |
安装后重新打开终端,再检查:
1 | nix --version |
如果刚升级过 macOS,又遇到 _nixbld1、nixbld 之类的构建用户错误,先不要反复重装。优先查官方安装页和对应的 Nix issue,因为这类问题通常和系统升级后的用户、卷或 daemon 状态有关。
4. 单用户安装
单用户安装适合个人临时环境,不适合多人共享机器:
1 | curl --proto '=https' --tlsv1.2 -L https://nixos.org/nix/install | sh -s -- --no-daemon |
注意两点:
- 不要在
root用户下做单用户安装。 - 如果
/nix已经存在但权限不对,先停下来确认它是谁创建的,不要直接chown -R。
加载环境并验证:
1 | if [ -e "$HOME/.nix-profile/etc/profile.d/nix.sh" ]; then |
5. 打开新命令和 flakes
很多现代 Nix 用法依赖 nix-command 和 flakes。单独安装的 Nix 可以先写到用户配置:
1 | mkdir -p ~/.config/nix |
多用户安装如果希望对所有用户生效,可以写入 /etc/nix/nix.conf:
1 | sudo mkdir -p /etc/nix |
验证:
1 | nix flake --help >/dev/null |
6. 国内网络下的 binary cache
如果访问 cache.nixos.org 很慢,可以先给 Nix 增加国内镜像。单用户安装改 ~/.config/nix/nix.conf:
1 | mkdir -p ~/.config/nix |
多用户安装改 /etc/nix/nix.conf:
1 | sudo mkdir -p /etc/nix |
这一步只替换包缓存,不等于解决所有网络问题。Flake input、GitHub、GitLab、私有仓库、Cachix 仍然可能慢。真正恶劣的网络里,要把“能缓存的东西缓存起来”,不要期待每台机器都从公网现拉。
7. 最小可用性检查
安装结束后,不要立刻开始写复杂配置。先做最小闭环:
1 | nix --version |
如果这些命令通过,说明 Nix 本体、环境变量、daemon 或单用户 profile、基础下载和执行路径都基本可用。
8. 失败时先看这几处
nix: command not found:
1 | test -e /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh && \ |
daemon 不工作:
1 | systemctl status nix-daemon.socket nix-daemon.service |
下载慢:
1 | nix --option substituters 'https://mirrors.ustc.edu.cn/nix-channels/store https://cache.nixos.org/' \ |
磁盘不够:
1 | df -h /nix |
环境混乱:
1 | type -a nix |
9. 参考
- Nix 官方下载与安装页:https://nixos.org/download/
- Nix Reference Manual:https://nix.dev/manual/nix/stable/installation/installing-binary
- USTC Nix Channels 镜像说明:https://mirrors.ustc.edu.cn/help/nix-channels.html