Nix
Nix 是一个纯函数式包管理器,旨在使包管理可重现、声明式且可靠。
安装[编辑 | 编辑源代码]
有四种安装 Nix 的方法:
- 原生的 Arch Linux 包,
- 官方支持的 Nix 上游安装脚本,
- 由 Determinate Systems 提供的 Zero to Nix 脚本,该公司为 Nix 提供第三方支持,
- 以及由热情的 Nix 社区成员提供的 Lix 脚本,旨在通过提供 Nix 包管理器的硬分叉版本来改进 Nix 生态系统。
原生安装[编辑 | 编辑源代码]
上游安装脚本[编辑 | 编辑源代码]
使用 curl --proto '=https' --tlsv1.2 -sSfL https://nixos.org/nix/install -o nix-install.sh
下载文件,查看它:less ./nix-install.sh
,然后运行脚本 ./nix-install.sh --daemon
来开始安装 Nix。
curl some-url | sh
,如 Nix 文档所建议的,被认为存在安全风险,因为它会执行未知代码。因此建议在执行脚本前手动下载并检查它。Zero to Nix 安装脚本[编辑 | 编辑源代码]
为了更简单和更不复杂的 Nix 设置,您可以使用 Determinate Systems 提供的设置。使用 curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix -o nix-install.sh
下载文件,查看它:less ./nix-install.sh
,然后运行脚本 sh ./nix-install.sh install
来开始安装。
curl some-url | sh
,如 Determinate Systems 所建议的,被认为存在安全风险,因为它会执行未知代码。因此建议在执行脚本前手动下载并检查它。sh ./nix-install.sh install --diagnostic-endpoint=""
。更多信息请参阅 Determinate Systems 的手册。
Lix 安装脚本[编辑 | 编辑源代码]
使用 curl --proto '=https' --tlsv1.2 -sSf -L https://install.lix.systems/lix -o lix-install.sh
下载文件,查看它:less ./lix-install.sh
,然后运行脚本 sh ./lix-install.sh
来开始安装。
curl some-url | sh
,如 Lix 所建议的,被认为存在安全风险,因为它会执行未知代码。因此建议在执行脚本前手动下载并检查它。更多信息请参阅 Lix Installer 的手册。
uninstallnix.sh
#!/bin/sh for i in {01..10}; do userdel "nixbld$i" +done +groupdel nixbld +
配置[编辑 | 编辑源代码]
要使 Nix 守护程序在系统启动时启动,启用 nix-daemon.service
。
将需要运行 Nix 的用户添加到 nix-users
用户组中以获取与守护程序套接字连接的权限。重启会话以使更改生效。
添加一个 频道 并更新它。
$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable $ nix-channel --update
使用[编辑 | 编辑源代码]
~/.nix-profile/bin
目录添加到您的 PATH 中。在 shell 配置完成后,以下内容应该将 hello 安装到您已经更新过的 PATH 中:
$ nix-env -iA nixpkgs.hello
二进制文件本身将位于 /nix/store/[hash]-hello-[version]/bin/hello
。
运行 hello
并确保它在正确的 PATH 中。如果它工作正常,您可以卸载它:
$ nix-env --uninstall hello
或者您可以检查已安装的程序列表:
$ nix-env --query
您还可以列出迭代版本:
$ nix-env --list-generations
更多详细信息请参阅 nix-env(1) 手册。
提示与技巧[编辑 | 编辑源代码]
最大任务数[编辑 | 编辑源代码]
nix 默认只同时进行一个构建。以下内容将可以使 nix 同时进行与 CPU 数量相同的构建:
/etc/nix/nix.conf
max-jobs = auto
图形加速[编辑 | 编辑源代码]
要运行 OpenGL 和 Vulkan 应用程序,请使用 NixGL。
桌面集成[编辑 | 编辑源代码]
要将 Nix 应用程序与您的桌面环境集成,请将 ~/.nix-profile/share
目录添加到您的 $XDG_DATA_DIRS
中,例如使用 export XDG_DATA_DIRS=$HOME/.nix-profile/share:$XDG_DATA_DIRS
。
Zsh 集成用于 nix-shell[编辑 | 编辑源代码]
nix-shell
默认启动 Bash。zsh-nix-shellAUR 允许您在 nix-shell
环境中使用 Zsh 作为默认 shell。一些提示插件如 zsh-theme-powerlevel10kAUR 和 zsh-pure-promptAUR 提供了 nix-shell
指示器。
命令补全[编辑 | 编辑源代码]
Zsh[编辑 | 编辑源代码]
nix-zsh-completionsAUR 提供了 Zsh 对 nix 命令的补全,如 nix-env
和 nix-shell
。
故障排查[编辑 | 编辑源代码]
打开的文件太多[编辑 | 编辑源代码]
一些构建可能会遇到类似如下的问题:
error: opening directory '/nix/store/...': Too many open files
编辑 nix-daemon.service
并增大文件限制:
[Service] LimitNOFILE=65536
关于 root 用户更新频道的警告[编辑 | 编辑源代码]
如果在使用 Nix 时出现以下错误:
warning: Nix search path entry '/nix/var/nix/profiles/per-user/root/channels' does not exist, ignoring
root 用户需要更新他们的频道:
# nix-channel --update
用户相关的 Nix 搜索路径条目不存在,忽略[编辑 | 编辑源代码]
warning: Nix search path entry '/nix/var/nix/profiles/per-user/<USER>/channels' does not exist, ignoring
参见 FS#78828。或者,您可以使用 #上游安装脚本 或 #Zero to Nix 安装脚本,它们不会出现此问题。
错误:在 Nix 搜索路径中未找到文件 'nixpkgs'(使用 $NIX_PATH 或 -I 添加它)[编辑 | 编辑源代码]
参见 FS#78828。或者,您可以使用 #上游安装脚本 或 #Zero to Nix 安装脚本,它们不会出现此问题。
沙盒构建问题[编辑 | 编辑源代码]
其他沙盒问题[编辑 | 编辑源代码]
error: while setting up the build environment: mounting /proc: Operation not permitted error: program '/usr/bin/nix-env' failed with exit code 1
1: package 'utils' in options("defaultPackages") was not found 2: package 'stats' in options("defaultPackages") was not found Error: .onLoad failed in loadNamespace() for 'utils', details: call: system(paste(which, shQuote(names[i])), intern = TRUE, ignore.stderr = TRUE) error: cannot popen '/nix/store/fnkvlbls29d01jcx3wsdnhykyrl7087r-which-2.21/bin/which 'uname' 2>/dev/null', probable reason 'Cannot allocate memory'
这是已知的上游问题:#2311、#3000 和 #4636。
nixpkgs
中的所有内容都指望在启用沙盒的情况下构建。最常见的解决方法是在配置文件中禁用沙盒:
/etc/nix/nix.conf
# 禁用沙盒 sandbox = false
然后 重启 nix-daemon
服务。
区域设置警告[编辑 | 编辑源代码]
Nixos wiki 建议运行 export LOCALE_ARCHIVE=/usr/lib/locale/locale-archive
。或者,导出环境变量 LC_ALL=C
。