Nix (简体中文)

From ArchWiki

Tango-preferences-desktop-locale.png本文或本节需要翻译。要贡献翻译,请访问简体中文翻译团队Tango-preferences-desktop-locale.png

附注: Needs updating since archlinux-nix was removed from AUR.(在 Talk:Nix (简体中文)# 中讨论)
翻译状态:本文是 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[损坏的链接:package not found] 可以通过设置用户组与权限的方式来“引导”一个与 Arch Linux 兼容的 Nix 系统。

在安装 nix 之后,再安装 archlinux-nixAUR[损坏的链接:package not found]

查看命令帮助:

$ 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 服务。

参阅