Nix (简体中文) - ArchWiki

Jump to content

# Nix (简体中文)

From ArchWiki

本文或本节需要翻译。要贡献翻译，请访问简体中文翻译团队。

附注： 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 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` 服务。

## 参阅

- Nix 官网
- Nix Wiki
- Nix 包管理器指南
- Wikipedia:Nix package manager

Category:

- Package management (简体中文)

Hidden categories:

- Pages or sections flagged with Template:Translateme (简体中文)
- Pages with broken package links