Nix (package manager)/zh-hans: Difference between revisions
Loxodoromy (talk | contribs) Created page with "Nix命令在[https://nixos.org/manual/nix/stable/command-ref/command-ref Nix参考手册]中有详细说明,分为主要命令、工具命令和实验性命令。在2.0版本(发布于2018年2月)之前,命令有所不同。" |
Loxodoromy (talk | contribs) Created page with "独立的Nix通过<code>nix.conf</code>(通常在<code>/etc/nix/</code>下)配置。可用选项的细节[https://nixos.org/manual/nix/stable/command-ref/conf-file 在Nix参考手册中]。" |
||
Line 17: | Line 17: | ||
[[Nix (command line utilities)|Nix命令]]在[https://nixos.org/manual/nix/stable/command-ref/command-ref Nix参考手册]中有详细说明,分为主要命令、工具命令和实验性命令。在2.0版本(发布于2018年2月)之前,命令有所不同。 | [[Nix (command line utilities)|Nix命令]]在[https://nixos.org/manual/nix/stable/command-ref/command-ref Nix参考手册]中有详细说明,分为主要命令、工具命令和实验性命令。在2.0版本(发布于2018年2月)之前,命令有所不同。 | ||
=== 配置 === | |||
== | 在NixOS上,Nix可通过[https://search.nixos.org/options?query=nix. <code>nix</code>选项]配置。 | ||
独立的Nix通过<code>nix.conf</code>(通常在<code>/etc/nix/</code>下)配置。可用选项的细节[https://nixos.org/manual/nix/stable/command-ref/conf-file 在Nix参考手册中]。 | |||
<div lang="en" dir="ltr" class="mw-content-ltr"> | <div lang="en" dir="ltr" class="mw-content-ltr"> |
Revision as of 10:37, 26 September 2025
Nix是一个包管理器和构建系统,它解析由Nix表达式语言 (一种惰性求值的纯函数式语言) 指定的可复现的构建指令。Nix表达式是纯函数[1],它接受依赖作为参数,并为该软件包生成一个指定可复现构建环境的derivation。Nix把构建结果存储在由整个依赖树的哈希值指定的唯一地址,从而创建一个不可变的包存储 (即nix store),使得原子升级、回滚、同时安装同一软件包的不同版本成为可能,从根本上消除了依赖地狱。
用法
安装
在NixOS上,Nix已经被自动安装。
在其他Linux发行版或macOS上,你可以按照Nix手册中的安装部分来安装Nix。
Nix命令
Nix命令在Nix参考手册中有详细说明,分为主要命令、工具命令和实验性命令。在2.0版本(发布于2018年2月)之前,命令有所不同。
配置
在NixOS上,Nix可通过nix
选项配置。
独立的Nix通过nix.conf
(通常在/etc/nix/
下)配置。可用选项的细节在Nix参考手册中。
You can also configure Nix using Home Manager, which manages declarative environments for a single user. For system-wide configuration, you can use System Manager on Linux and nix-darwin on macOS.
Internals
Nix store
Packages built by Nix are placed in the read-only Nix store, normally found in /nix/store
. Each package is given a unique address specified by a cryptographic hash followed by the package name and version, for example /nix/store/nawl092prjblbhvv16kxxbk6j9gkgcqm-git-2.14.1
. These prefixes hash all the inputs to the build process, including the source files, the full dependency tree, compiler flags, etc. This allows Nix to simultaneously install different versions of the same package, and even different builds of the same version, for example variants built with different compilers. When adding, removing or updating a package, nothing is removed from the store; instead, symlinks to these packages are added, removed or changed in profiles.
Cleaning the Nix store
For information relating to cleaning the Nix store, refer to NixOS Manual: Chapter - Cleaning the Nix Store.
Nix store corruption
For information relating to fixing a corrupted Nix store, refer to NixOS Manual: Chapter - Nix Store Corruption.
Valid Nix store names
- Main article: Valid Nix store path names
Profiles
In order to construct a coherent user or system environment, Nix symlinks entries of the Nix store into profiles. These are the front-end by which Nix allows rollbacks: since the store is immutable and previous versions of profiles are kept, reverting to an earlier state is simply a matter of change the symlink to a previous profile. To be more precise, Nix symlinks binaries into entries of the Nix store representing the user environments. These user environments are then symlinked into labeled profiles stored in /nix/var/nix/profiles
, which are in turn symlinked to the user's ~/.nix-profile
.
Sandboxing
When sandbox builds are enabled, Nix will setup an isolated environment for each build process. It is used to remove further hidden dependencies set by the build environment to improve reproducibility. This includes access to the network during the build outside of fetch*
functions and files outside the Nix store. Depending on the operating system access to other resources are blocked as well (ex. inter process communication is isolated on Linux); see nix.conf section in the Nix manual for details.
Sandboxing is enabled by default on Linux, and disabled by default on macOS.
In pull requests for Nixpkgs people are asked to test builds with sandboxing enabled (see Tested using sandboxing
in the pull request template) because in official Hydra builds sandboxing is also used.
To configure Nix for sandboxing, set sandbox = true
in /etc/nix/nix.conf
; to configure NixOS for sandboxing set nix.useSandbox = true;
in configuration.nix
. The nix.useSandbox
option is true
by default since NixOS 17.09.
Alternative Interpreters
There is an ongoing effort to reimplement Nix, from the ground up, in Rust.
There is also a community-led fork of Nix 2.18 named Lix, focused on correctness, usability, and growth. While it has also ported some components of Nix to Rust, it is not a ground-up rewrite like Tvix.
Earlier attempts can be found on riir-nix
Notes
- ↑ 值在计算过程中不会改变。当输入不变时,函数总是得到相同的输出。