)
Nix 纯函数式包管理器安装与首次配置完全指南多用户 / 单用户 / 源码构建【免费下载链接】nixNix, the purely functional package manager项目地址: https://gitcode.com/gh_mirrors/ni/nixNix 是一个纯函数式包管理器其安装器为不同平台提供了多用户daemon 模式与单用户两种安装方式并支持固定版本安装、二进制 tarball 手工安装、Docker 容器使用以及从源码构建等途径。本文以官方手册的 安装章节 为主线结合仓库中的安装脚本与源码实现完整覆盖安装方式选择、命令执行、安装后环境配置、升级与卸载帮助你在 Linux / macOS 上获得一套可长期维护的 Nix 环境。安装方式总览先想清楚你的需求官方手册将安装方式划分为两类选择依据很简单安装方式适用场景前置条件安全性 / 隔离性多用户Multi-user即--daemon推荐选项多用户共享一台机器Linux 运行 systemd 且关闭 SELinux或 macOS更好的共享、隔离与安全单用户Single-user即--no-daemon无 systemd 的 Linux 系统、个人单机系统上没有 systemdmacOS 不支持共享、隔离、安全能力较弱Linux 和 macOS 上的当前推荐选项是多用户安装单用户安装适合没有 systemd 的系统。安装器脚本会根据平台自动选择默认安装类型也可以显式指定多用户Linux 带 systemd 且无 SELinux、macOS单用户Linux 无 systemd、Linux 带 SELinux如果你的平台支持多用户且你能用sudo认证官方建议优先选择多用户安装。多用户安装推荐--daemon一条命令完成安装在 Linuxsystemd、SELinux 关闭或 macOS 上执行$ curl -L https://nixos.org/nix/install | sh -s -- --daemon也可以等价地写成 bash 显式执行$ bash (curl -L https://nixos.org/nix/install) --daemon你可以在普通用户账户或root下运行该命令脚本会在需要时自动调用sudo。macOS 15 Sequoia 更新提示如果升级到 macOS 15 Sequoia 后运行 Nix 命令报错error: the user _nixbld1 in the group nixbld does not exist这是已知的升级兼容问题可参考仓库中 installing-binary.md 顶部提示的对应 issueNixOS/nix#10892给出的修复指引无需重装即可恢复。多用户模式的底层原理多用户安装会创建系统用户与一个 Nix daemon 系统服务。其核心设计目标详见 multi-user.md是让多个用户安全共享同一个 Nix store。关键约束是普通用户不能以任意方式运行会篡改 Nix store 或数据库的构建器否则可能植入木马程序危及他人账户。为此多用户模式采用如下架构Nix store 与数据库归特权用户所有通常为root构建在专用构建用户账户下执行通常命名为nixbld1、nixbld2…非特权用户执行 Nix 命令时凡涉及 Nix store 的操作如构建都会转发给 Nix daemonnix-daemon由 store 所有者执行。创建构建用户Linux。构建用户是执行构建的特殊 UID全部属于nixbld构建用户组该组不应有其他成员构建用户也不应属于其他组。创建命令$ groupadd -r nixbld $ for n in $(seq 1 10); do useradd -c Nix build user $n \ -d /var/empty -g nixbld -G nixbld -M -N -r -s $(which nologin) \ nixbld$n; done上面的命令创建 10 个构建用户。并发的构建数永远不会超过构建用户的数量如果预计会同时进行大量构建可以调大这个数量。运行 daemon。以root启动$ nix-daemon建议把这行放入系统启动脚本。要让非特权用户使用 daemon需在其登录脚本中设置export NIX_REMOTEdaemon限制访问。可以通过/nix/var/nix/daemon-socket目录的权限限制可执行 Nix 操作的用户。例如只允许nix-users组成员使用$ chgrp nix-users /nix/var/nix/daemon-socket $ chmod ugrwx,o /nix/var/nix/daemon-socket这样不在nix-users组的用户无法连接 Unix 域套接字/nix/var/nix/daemon-socket/socket也就无法执行 Nix 操作。更多细节可参考 nix-daemon 命令参考 与 环境变量通用说明。多用户模式的一个重要限制只有root和nix.conf中指定的受信用户才能指定任意二进制缓存binary cache。非特权用户可以从任意 Nix 表达式安装包但可能拿不到预编译好的二进制产物。macOS 上的多用户安装做了什么现代 macOS 的根文件系统只读新版安装器会自动完成对只读根文件系统的适配无需手动干预了解其步骤有助于排查问题详见 installing-binary.md为 Nix store 新建一个 APFS 卷更新/etc/synthetic.conf让 macOS 创建一个合成的空根目录用于挂载该卷在/etc/fstab中为该卷指定挂载选项rw读写noauto禁止系统自动挂载改由下方 LaunchDaemon 控制挂载时机避免掩盖挂载服务的问题nobrowse防止 Nix Store 卷显示在桌面同时避免 Spotlight 耗费资源为其建索引若启用了 FileVault生成加密口令、写入系统钥匙串并用其加密该卷创建一个系统 LaunchDaemon在开机早期挂载该卷避免加载或恢复依赖 Nix store 的程序时出问题。单用户安装--no-daemon单用户安装不支持 macOS。 且安装脚本会提示warning: installing Nix as root is not supported by this script!显式选择单用户安装$ curl -L https://nixos.org/nix/install | sh -s -- --no-daemon或$ bash (curl -L https://nixos.org/nix/install) --no-daemon单用户模式下所有访问prefix/var/nix/db数据库或修改prefix/store的操作都必须以拥有这些目录的用户 ID 执行通常是rootRPM 包装版本默认即如此原理详见 single-user.md。在单用户机器上常把目录chown给普通用户账户省去反复su到 root 的麻烦。单用户安装中/nix归调用用户所有脚本会在必要时调用sudo创建/nix如果没有sudo可手动以root创建$ su root # mkdir /nix # chown alice /nix单用户安装对系统的要求比多用户少但无法提供同等的共享、隔离与安全能力。定制安装器参数、环境变量与固定版本查看可用命令行参数$ curl -L https://nixos.org/nix/install | sh -s -- --help安装器支持多种命令行参数与环境变量想进一步了解其行为与定制方式可以直接阅读第二阶段安装脚本install.in下载二进制 tarball 后会解包并执行其中install脚本详见下文源码解析。从 URL 安装固定版本所有 Nix 版本1.11.16 起的版本化安装地址可通过releases.nixos.org的nix/前缀目录获取每个版本目录内含对应的 SHA-256 校验值。安装脚本的调用方式一致$ export VERSION2.19.2 $ curl -L https://releases.nixos.org/nix/nix-$VERSION/install | sh从二进制 tarball 安装也可以下载包含 Nix 及其全部依赖的二进制 tarball选择版本与系统类型后解包并运行安装器示例$ pushd $(mktemp -d) $ export VERSION2.19.2 $ export SYSTEMx86_64-linux $ curl -LO https://releases.nixos.org/nix/nix-$VERSION/nix-$VERSION-$SYSTEM.tar.xz $ tar xfj nix-$VERSION-$SYSTEM.tar.xz $ cd nix-$VERSION-$SYSTEM $ ./install $ popd安装器可用install-multi-user文件中声明的环境变量进一步定制install-multi-user由 binary-tarball.nix 从 install-multi-user.sh 替换生成。代理与证书环境变量Nix 安装器对以下代理环境变量有特殊处理http_proxy、https_proxy、ftp_proxy、all_proxy、no_proxy及其大写形式。若安装时设置了其中任一变量安装器会创建/etc/systemd/system/nix-daemon.service.d/override.conf覆盖文件让nix-daemon使用这些代理。如果公司网络存在 HTTPS 拦截代理可指定自定义证书包详见 env-variables.md$ export NIX_SSL_CERT_FILE/etc/ssl/my-certificate-bundle.crt $ curl -L https://nixos.org/nix/install | sh并在 shell profile如/etc/bashrc、/etc/zshrc中加入同样的一行。注意不要先写好导出再执行安装安装器检测到已存在 Nix 配置会中止。若使用 Nix daemon还需在/etc/nix/nix.conf中加入ssl-cert-file /etc/ssl/my-certificate-bundle.crt支持的平台与发行版安装器Nix 目前支持的平台详见 supported-platforms.mdLinuxi686、x86_64、aarch64macOSx86_64、aarch64仓库中安装器实际支持的平台映射更广。以 install.in 的平台检测逻辑uname -s与uname -m组合为例它覆盖x86_64-linux、i686-linux、aarch64-linux、armv6l/armv7l/ppc64/ppc64le/riscv64-linux、aarch64-darwin与x86_64-freebsd等系统类型并为每个平台内置了对应 tarball 的 SHA-256 校验值。此外Nix 社区为若干 Linux 发行版维护了原生打包格式的安装器位于nix-community/nix-installers仓库适合优先使用发行版原生包管理器的用户。安装后的环境配置安装完成后PATH应包含prefix/bin与~/.nix-profile/bin前者存放 Nix 工具本身后者是指向当前user environment一个由指向已安装包的符号链接自动生成的包的符号链接。最简单的做法是在~/.profile中引入source prefix/etc/profile.d/nix.sh多用户安装的安装脚本会自动配置 shell 初始化文件相关模板可参考 nix-profile.sh.in、nix-profile-daemon.sh.in 与 fish 对应模板。升级 Nix以下升级步骤适用于按本手册安装章节安装的 Nix。先查看将要安装的版本例如从nixpkgs-unstable频道$ nix-shell -p nix -I nixpkgschannel:nixpkgs-unstable --run nix --version nix (Nix) 2.18.1警告用较新版本 Nix 向本地 store 写入例如用nix-build或nix-store --realise构建派生式可能会改变数据库 schema回退到旧版本可能需要先清空 store 数据库才能继续使用。Linux 多用户升级$ sudo su # nix-env --install --file nixpkgs --attr nix cacert -I nixpkgschannel:nixpkgs-unstable # systemctl daemon-reload # systemctl restart nix-daemonmacOS 多用户升级$ sudo nix-env --install --file nixpkgs --attr nix cacert -I nixpkgschannel:nixpkgs-unstable $ sudo launchctl remove org.nixos.nix-daemon $ sudo launchctl load /Library/LaunchDaemons/org.nixos.nix-daemon.plist单用户全平台升级$ nix-env --install --file nixpkgs --attr nix cacert -I nixpkgschannel:nixpkgs-unstable卸载 Nix卸载方式取决于安装类型与操作系统完整步骤见 uninstall.md。要点如下Linuxsystemd多用户停止并禁用 daemon 服务systemctl stop nix-daemon.service、systemctl disable nix-daemon.socket nix-daemon.service、systemctl daemon-reload→ 删除/etc/nix、/etc/profile.d/nix.sh、/etc/tmpfiles.d/nix-daemon.conf、/nix及用户目录下的 Nix 相关文件 → 删除构建用户与组userdel nixbld$i、groupdel nixbld→ 清理/etc/bash.bashrc等 shell 初始化文件中的 Nix 引用。macOS 多用户恢复或手工编辑/etc/zshrc、/etc/bashrc、/etc/bash.bashrc删除 sourcenix-daemon.sh的片段→launchctl unload并删除org.nixos.nix-daemon.plist与org.nixos.darwin-store.plist→ 删除nixbld组与_nixbldN用户dscl→ 用vifs编辑 fstab 去掉挂载 Nix Store 卷的行 → 编辑/etc/synthetic.conf移除nix行 → 删除安装新增的文件 →diskutil apfs deleteVolume /nix删除 Nix Store 卷。卸载完成后仍会留下一个空/nix目录这是正常现象macOS Catalina 只读根目录会阻止手动删除该挂载点下次重启自动消失无需为了完成卸载而重启。单用户直接删除rm -rf /nix ~/.nix-channels ~/.nix-defexpr ~/.nix-profile ~/.local/share/nix ~/.local/state/nix ~/.cache/nix并手动清理~/.profile中的 Nix 引用。从源码构建安装如果没有可用的二进制包或想直接 hack Nix 源码可以从 Git 仓库构建详见 installing-source.md、obtaining-source.md。前置依赖版本下限以meson.build为准详见 prerequisites-source.mdMeson 构建系统、Ninja支持 C23 的 GCC 或 Clang比 Clang 19 / GCC 14 新的版本基本可用pkg-config、OpenSSL、cURL、SQLite3.6.19、Brotlilibbrotlienc/libbrotlidec、Boost 1.87.0、editline 1.14.0、libsodium、较新的 Bison 与 Flex可选依赖Boehm GC-Dlibexpr:gcenabled、libseccompLinux syscall 过滤可用-Dlibstore:seccomp-sandboxingdisabled关闭非必要不建议、libcpuidx86_64 专用-Dlibutil:cpuiddisabled可关除非指定meson setup build -Dunit-testsfalse还需要 GoogleTest 与 RapidCheck。安装器的源码实现解析理解安装器行为最直接的方式是阅读仓库中的 install.in约 134 行一段完整下载脚本。其关键流程如下平台检测与哈希内置根据uname -s/uname -m映射到具体system并取出该平台 tarball 的 SHA-256 预期值不支持的平台直接报错退出。下载与完整性校验优先用curl--fail -L否则回退wget随后用sha256sum/shasum/openssl计算哈希并与预期值比对不匹配即中止防止部分下载或中间人篡改。解包并执行第二阶段脚本解压 tarball 后执行其中的install脚本并设置INVOKED_FROM_INSTALL_IN1环境变量将用户传入的参数原样转发给第二阶段安装器。而 binary-tarball.nix 则负责把 install-multi-user.sh 等内容替换生成install-multi-user与install-single-user脚本打包进二进制 tarball——这正是定制安装器时所说环境变量声明的所在文件。多用户模式的 daemon 单元文件systemd / launchd模板则位于 misc/systemd、misc/launchd 等目录可供系统集成与排障参考。补充在 Docker 中运行 Nix若想快速体验或做隔离实验可直接使用官方镜像详见 installing-docker.md$ docker run -ti docker.io/nixos/nix官方镜像由pkgs.dockerTools.buildLayeredImage构建而非传统 Dockerfile未基于任何其他镜像仅包含运行 Nix 所需的最小依赖集nix、bashInteractive、coreutils-full、gnutar、gzip、gnugrep、which、curl、less、wget、man、cacert.out、findutils。也可以基于 docker.nix 自建含非 root 单用户 Nix 的镜像通过uid、gid、uname、gname参数定制。至此你已经掌握了从安装方式决策、实际安装命令、安装器定制、环境配置到升级、卸载与源码构建的完整链路。无论目标是个人单机、多用户共享服务器还是容器化实验环境都可以按本文在 Linux 或 macOS 上获得一个可靠的 Nix 环境若需进一步深入 daemon 协议、store 类型或 Nix 表达式语言可继续阅读手册的其余章节。【免费下载链接】nixNix, the purely functional package manager项目地址: https://gitcode.com/gh_mirrors/ni/nix创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考