Nix (package manager)/zh: Difference between revisions

Weijia (talk | contribs)
Created page with "早期尝试可以在 [https://riir-nix.github.io/ riir-nix] 找到"
Weijia (talk | contribs)
 
(19 intermediate revisions by the same user not shown)
Line 15: Line 15:
=== Nix 命令 ===
=== Nix 命令 ===


[[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 月发布)之前,命令有所不同。


=== 配置 ===
=== 配置 ===
Line 27: Line 27:
== 内部组成 ==
== 内部组成 ==


<span id="Nix_store"></span>
=== Nix store ===
=== Nix store(Nix存储库) ===


<div lang="en" dir="ltr" class="mw-content-ltr">
{{Split|reason=nix store 在概念上有足够的独立性,值得单独成文。}}
{{Split|reason=The nix store is conceptually separate enough that it warrants a separate article.}}
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Nix 构建的软件包会被放置在只读的 ''Nix store'' 中,通常位于 <code>/nix/store</code>。每个软件包都会被赋予一个唯一的地址,该地址由加密哈希值、软件包名称和版本组成,例如 <code>/nix/store/nawl092prjblbhvv16kxxbk6j9gkgcqm-git-2.14.1</code>。这些前缀对构建过程中的所有输入进行哈希,包括源文件、完整的依赖树、编译器参数等。这使得 Nix 能够同时安装同一软件包的不同版本,甚至是同一版本的不同构建(例如使用不同编译器构建的变体)。在添加、移除或更新软件包时,存储中的内容不会被删除;相反,''profiles'' 中指向这些软件包的符号链接会被添加、移除或更改。
Packages built by Nix are placed in the read-only ''Nix store'', normally found in <code>/nix/store</code>. Each package is given a unique address specified by a cryptographic hash followed by the package name and version, for example <code>/nix/store/nawl092prjblbhvv16kxxbk6j9gkgcqm-git-2.14.1</code>. 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''.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Cleaning_the_Nix_store"></span>
==== Cleaning the Nix store ====
==== 清理 Nix store ====
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
有关清理 Nix store 的信息,请参阅 {{NixOS Manual|name=NixOS 手册:章节 - 清理 Nix 存储|anchor=#sec-nix-gc}}
For information relating to cleaning the Nix store, refer to {{NixOS Manual|name=NixOS Manual: Chapter - Cleaning the Nix Store|anchor=#sec-nix-gc}}.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Nix_store_corruption"></span>
==== Nix store corruption ====
==== Nix store 损坏 ====
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
有关修复 Nix store 损坏的信息,请参阅 {{NixOS Manual|name=NixOS 手册:章节 - Nix store 损坏|anchor=#sec-nix-store-corruption}}
For information relating to fixing a corrupted Nix store, refer to {{NixOS Manual|name=NixOS Manual: Chapter - Nix Store Corruption|anchor=#sec-nix-store-corruption}}.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Valid_Nix_store_names"></span>
==== Valid Nix store names ====
==== 有效的 Nix store 名称 ====
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
{{main|Valid Nix store path names}}
{{main|Valid Nix store path names}}
</div>


<span id="Profiles"></span>
=== Profiles ===
=== Profiles(系统画像) ===


了建个连贯的用户或统环, Nix将Nix存储库中的目符号链接到''profile''. 这些是Nix允许"前端": 因为存储库是不可, 而的profile版本被保留了下来, 回更早状态只需要简单号链接指向一个先前的profile. 更精说, Nix将进制文件号链接到Nix存储库描述户环境的目中. 这些用户环随之被符号链接到<code>/nix/var/nix/profiles</code>中带有标签的profile, 这些profile又被号链接到用的<code>~/.nix-profile</code>.
建一個一致的用戶和統環,Nix 會將 Nix store 中的目符號連結到 ''profiles'' 中。這是 Nix 實現的前端:由於 store 是不可的且保留先前版本的 profile,將系統還原先前狀態只需簡單號連結更改為先前的 profile。更精說,Nix 將進位檔號連結到 Nix store 代表戶環境的目中。這些用戶環隨後被符號連結儲存在 <code>/nix/var/nix/profiles</code> 被標注的 profile,它們則進一步號連結使的 <code>~/.nix-profile</code>


<span id="Sandboxing"></span>
<span id="Sandboxing"></span>
=== 沙盒===
=== 沙盒 ===


当沙盒构建被启用, Nix会为每个构建程设置一个孤立的环境.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 <code>fetch*</code> 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 [https://nixos.org/nix/manual/#sec-conf-file nix.conf section] in the Nix manual for details.
启用沙盒构建时,Nix 会为每个构建程设置一个隔离的环境。这样可以去除构建环境中额外的隐藏依赖,以提高可复现性。这包括在构建过程中禁止访问 <code>fetch*</code> 函数之外的网络,以及禁止访问 Nix store 之外的文件。根据操作系统的不同,对其他资源的访问也会被阻止(例如在 Linux 上进程间通信会被隔离);详细信息请参阅 Nix 手册中的 [https://nixos.org/nix/manual/#sec-conf-file nix.conf 章节]


<div lang="en" dir="ltr" class="mw-content-ltr">
沙盒在 Linux 上預設是開啟的,在 macOS 上則否。
Sandboxing is enabled by default on Linux, and disabled by default on macOS.
[https://github.com/NixOS/nixpkgs/ Nixpkgs] 的提取請求 (pull request) 中,請開啟沙盒模式進行測試(請見提取請求模版中的 <code>Tested using sandboxing</code>),因為在 [https://nixos.org/hydra/ 官方 Hydra 構建]中,沙盒會被使用。
In pull requests for [https://github.com/NixOS/nixpkgs/ Nixpkgs] people are asked to test builds with sandboxing enabled (see <code>Tested using sandboxing</code> in the pull request template) because in [https://nixos.org/hydra/ official Hydra builds] sandboxing is also used.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
要为 Nix 配置沙盒,请在 <code>/etc/nix/nix.conf</code> 中设置 <code>sandbox = true</code>;要为 NixOS 配置沙盒,请在 <code>configuration.nix</code> 中设置 <code>nix.useSandbox = true;</code>。自 NixOS 17.09 起,<code>nix.useSandbox</code> 选项默认为 <code>true</code>
To configure Nix for sandboxing, set <code>sandbox = true</code> in <code>/etc/nix/nix.conf</code>; to configure NixOS for sandboxing set <code>nix.useSandbox = true;</code> in <code>configuration.nix</code>. The <code>nix.useSandbox</code> option is <code>true</code> by default since NixOS 17.09.
</div>


<span id="Alternative_Interpreters"></span>
<span id="Alternative_Interpreters"></span>
Line 92: Line 73:
* [https://lix.systems/ lix]
* [https://lix.systems/ lix]


早期尝试可以在 [https://riir-nix.github.io/ riir-nix] 找到
早期尝试可以在 [https://riir-nix.github.io/ riir-nix] 找到


<div lang="en" dir="ltr" class="mw-content-ltr">
== 备注 ==
==Notes==
<references />
<references />
</div>




<div lang="en" dir="ltr" class="mw-content-ltr">
[[Category:Pedias]]
[[Category:Pedias]]
[[Category:Nix]]
[[Category:Nix]]
[[Category:Incomplete]]
[[Category:Incomplete]]
[[Category:Software]]
[[Category:Software]]
</div>