Nix (简体中文)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
翻译状态:本文是 Nix翻译。上次翻译日期:2020-08-23。如果英文版本有所更改,则您可以帮助同步翻译。

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
警告: 正如 Nix 文档所述,直接运行 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 replnix-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 服务。

参阅