Nix (简体中文)
Nix 是一个纯函数式包管理器,旨在使软件包管理可靠且可重现。
有关更多信息,请参见Nix 包管理器指南。
安装
目前有 3 种方法来安装 Nix,一种是受 Arch Linux 支持的,另一种是受 Nix 官方支持的,而最后一种是完全没有支持的。
通过 Pacman 安装
安装 nix
Nix 默认安装在 /nix
目录中。
使用 Nix 官方(上游)安装脚本
下载安装脚本:
$ curl --proto '=https' --tlsv1.2 -sSf https://nixos.org/nix/install -o nix-install.sh
查看脚本:
$ less ./nix-install.sh
运行脚本以开始安装:
$ /nix-install.sh --daemon
curl some-url | sh
可能是一种安全风险,因为它会执行未知的代码,再者它可能在下载过程中已经损坏。因此,请在执行安装脚本前手动检查它。使用 archlinux-nix 安装
archlinux-nixAUR 可以通过设置用户组与权限的方式来“引导”一个与 Arch Linux 兼容的 Nix 系统。
在安装 nix 之后,再安装 archlinux-nixAUR。
查看命令帮助:
$ archlinux-nix
准备用于 Nix 安装的 Arch(需要 root 权限):
$ archlinux-nix setup-build-group # 设置构建所需的用户组 $ archlinux-nix bootstrap # 引导系统
配置
要完成安装,请按照下列步骤操作:
为了使得 Nix 守护程序能够在系统启动时一并启动,需要启用 nix-daemon.service
。
$ systemctl enable nix-daemon.service
首次安装后直到重新启动前,请在每个新的 Shell 中激活 Nix:
$ source /etc/profile.d/nix{,-daemon}.sh
这使 Nix 的守护程序(和包管理器)可以正常运行而无需重新启动。
它会按照 Nix 的要求更新你的 PATH,你可以运行 echo $PATH
来检查它。在每个新的 Shell 会话中运行该命令,直到重新启动为止。
将需要运行 Nix 的用户添加到 nix-users 用户组中以获取与守护程序套接字连接的权限:
$ sudo gpasswd -a $USER nix-users
添加一个(默认的) Nix 通道并并进行更新(建议使用 Root 权限执行):
$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable $ nix-channel --update
初始化最新版本的 Nix 环境到当前用户目录下:
$ nix-env -u
提示与技巧
你可以使用 Root 添加通用的更新频道,这样你就不需要在其他用户下添加了
$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable $ nix-channel --update
当 Shell 配置完成后,接下来应该安装 hello 程序到你已经更新过的 PATH (/nix/store/[hash]-hello-[version]/bin/hello
)中
$ nix-env -iA nixpkgs.hello
运行 hello 程序以确保 PATH 配置正确,如果工作正常,你可以卸载它:
$ nix-env --uninstall hello
或者你可以检查已经安装的程序列表(q 意指 query):
$ nix-env -q
你也可以查询迭代版本
$ nix-env --list-generations
更多信息参见 nix-env(1)
故障排查
权限错误
运行 nix repl
或 nix-env -u
时提示:
cannot connect to daemon at '/nix/var/nix/daemon-socket/socket: permission denied
如果你刚安装 Nix,请重启系统。不过更多的时候,是你没有添加用户到 nix-users 用户组。
关于 Root 用户更新频道的警告
warning: Nix search path entry '/nix/var/nix/profiles/per-user/root/channels' does not exist, ignoring
如果在使用 Nix 时出现上述信息,则 Root 用户需要更新他们的软件更新频道信息。
# nix-channel --update
沙盒构建问题
error: while setting up the build environment: executing '/usr/bin/bash': No such file or directory error: builder for '/nix/store/mh8hl6c7gyyqrnzrln4j2jxg79n32slf-nixpkgs-21.11pre300283.f930ea227ce.drv' failed with exit code 1 error: build of '/nix/store/mh8hl6c7gyyqrnzrln4j2jxg79n32slf-nixpkgs-21.11pre300283.f930ea227ce.drv' failed error: program '/usr/bin/nix-env' failed with exit code 100
error: while setting up the build environment: mounting /proc: Operation not permitted error: program '/usr/bin/nix-env' failed with exit code 1
这是个已知的上游问题:#2311, #3000, 与 #4636。
最常见的解决方法是在配置文件中禁用沙盒,然后重启 nix-daemon
服务。