Jump to content

Nix (package manager)/zh: Difference between revisions

From Official NixOS Wiki
Ardenet (talk | contribs)
No edit summary
Tags: Mobile edit Mobile web edit
FuzzyBot (talk | contribs)
Updating to match new version of source page
Tags: Mobile edit Mobile web edit
Line 8: Line 8:
== 用法 ==
== 用法 ==


<span id="Installation"></span>
<div class="mw-translate-fuzzy">
=== 安装 ===
=== 安装 ===
在 [[NixOS|NixOS]] 上,Nix 已经自动安装好了。
在 [[$1|NixOS]] 上,Nix 已经自动安装好了。
</div>
 
<div lang="en" dir="ltr" class="mw-content-ltr">
On [[NixOS|NixOS]], Nix is automatically installed.
</div>


如果您想在其他 Linux 发行版或在 macOS 上使用, 您可以按照 [https://nix.dev/manual/nix/stable/installation/ Nix 手册的安装章节] 来安装 Nix。
如果您想在其他 Linux 发行版或在 macOS 上使用, 您可以按照 [https://nix.dev/manual/nix/stable/installation/ Nix 手册的安装章节] 来安装 Nix。
Line 18: Line 25:
[[Nix (command line utilities)|Nix 命令]] 在 [https://nix.dev/manual/nix/stable/command-ref/ Nix 参考手册] 中有详细记录:主要命令、工具命令和实验性命令。在 2.0 版本(于 2018 年 2 月发布)之前,命令有所不同。
[[Nix (command line utilities)|Nix 命令]] 在 [https://nix.dev/manual/nix/stable/command-ref/ Nix 参考手册] 中有详细记录:主要命令、工具命令和实验性命令。在 2.0 版本(于 2018 年 2 月发布)之前,命令有所不同。


<span id="Configuration"></span>
<div class="mw-translate-fuzzy">
=== 配置 ===
=== 配置 ===
在 NixOS 上, Nix 可以通过 [https://search.nixos.org/options?query=nix <code>nix</code> 选项] 进行配置。
在 NixOS 上, Nix 可以通过 [$1 <code>nix</code> 选项] 进行配置。
</div>
 
<div lang="en" dir="ltr" class="mw-content-ltr">
On NixOS, Nix can be configured using the [https://search.nixos.org/options?query=nix <code>nix</code> option].
</div>


独立安装的 Nix 通过 <code>nix.conf</code> 进行配置(其通常位于 <code>/etc/nix/</code>)。可用选项的详细说明可在 [https://nix.dev/manual/nix/stable/command-ref/conf-file Nix 参考手册] 中找到.  
独立安装的 Nix 通过 <code>nix.conf</code> 进行配置(其通常位于 <code>/etc/nix/</code>)。可用选项的详细说明可在 [https://nix.dev/manual/nix/stable/command-ref/conf-file Nix 参考手册] 中找到.  
Line 76: Line 90:
早期尝试可以在 [https://riir-nix.github.io/ riir-nix] 中找到。
早期尝试可以在 [https://riir-nix.github.io/ riir-nix] 中找到。


<span id="Notes"></span>
<div class="mw-translate-fuzzy">
== 备注 ==
== 备注 ==
<references />
<references />
</div>


<references />


[[Category:Pedias]]
[[Category:Pedias]]

Revision as of 15:29, 2 June 2026

Introduction to Nix

Tools and applications

⤧︎
Disambiguation: 本文介紹的是 Nix 包管理器。不要與 Nix 生態系統Nix 語言Nix 命令 混淆。

Nix 是一個軟件包管理器和構建系統,它解析由 Nix 表達式語言 (惰性求值的純函數式語言) 指定的可復現的構建指令。Nix 表達式是純函數[1],它接受依賴作為參數,並生成一個 derivation,用於指定該軟件包的可復現的構建環境。Nix 把構建結果存儲在由完整依賴樹的哈希值指定的唯一地址中,從而創建了一個不可變的包存儲 (即 nix store),使得原子升級、回滾、以及同時安裝同一軟件包的不同版本成為可能,從根本上消除了 依賴地獄

用法

安裝

NixOS 上,Nix 已經自動安裝好了。

On NixOS, Nix is automatically installed.

如果您想在其他 Linux 發行版或在 macOS 上使用, 您可以按照 Nix 手冊的安裝章節 來安裝 Nix。

Nix 命令

Nix 命令Nix 參考手冊 中有詳細記錄:主要命令、工具命令和實驗性命令。在 2.0 版本(於 2018 年 2 月發布)之前,命令有所不同。

配置

在 NixOS 上, Nix 可以通過 [$1 nix 選項] 進行配置。

On NixOS, Nix can be configured using the nix option.

獨立安裝的 Nix 通過 nix.conf 進行配置(其通常位於 /etc/nix/)。可用選項的詳細說明可在 Nix 參考手冊 中找到.

你也可以使用 Home Manager 配置 Nix,它為單用戶提供管理聲明式環境的能力。對於系統範圍的配置,可以在 Linux 上使用 System Manager,在 macOS 上使用 nix-darwin

內部機制

Nix store

↱︎
This section is a candidate for splitting off into a separate article. Nix store 在概念上有足夠的獨立性,值得單獨成文。 For more information, consult the related discussion page.

由 Nix 構建的軟件包會被放置在只讀的 Nix store 中,通常位於 /nix/store。每個軟件包都會被賦予一個唯一的地址,該地址由加密哈希值、軟件包名稱和版本組成,例如 /nix/store/nawl092prjblbhvv16kxxbk6j9gkgcqm-git-2.14.1。這些前綴對構建過程中的所有輸入進行哈希,包括源文件、完整的依賴樹、編譯器參數等。這使得 Nix 能夠同時安裝同一軟件包的不同版本,甚至是同一版本的不同構建(例如使用不同編譯器構建的變體)。在添加、移除或更新軟件包時,存儲中的內容不會被刪除;相反,profiles 中指向這些軟件包的符號連結會被添加、移除或更改。

清理 Nix store

有關清理 Nix store 的信息,請參閱 NixOS 手冊:章節 - 清理 Nix 存儲

Nix store 損壞

有關修復 Nix store 損壞的信息,請參閱 NixOS 手冊:章節 - Nix store 損壞

有效的 Nix store 名稱

Main article: Valid Nix store path names

Profiles

為了構建一個連續的用戶或系統環境,Nix 會將 Nix 存儲庫中的條目軟連結到 配置(profiles) 中。這些配置文件是 Nix 實現回滾的前端:由於存儲庫是不可變的,並且會保留配置文件的先前版本,因此恢復到之前的狀態只需更改指向先前配置文件的符號連結即可。更準確地說,Nix 會將二進制文件軟連結到 Nix 存儲庫中代表用戶環境的條目。這些用戶環境隨後會被軟連結到存儲在 /nix/var/nix/profiles 目錄下的帶標籤的配置文件中,而這些配置文件又會被軟連結到用戶的 ~/.nix-profile 文件。

沙盒

啟用沙盒構建後,Nix 將為每個構建過程設置一個隔離環境。這用於移除構建環境中的的其它隱藏依賴項,以提高構建結果的可復現性。這包括在構建過程中對 fetch* 函數之外的網絡訪問,以及對 Nix Store 之外的文件訪問的不可行。根據作業系統的不同,對其他資源的訪問也會被阻止(例如,在 Linux 上,進程間通信也是被隔離的)。

Linux 系統默認啟用沙盒,而 macOS 系統則默認禁用沙盒。 在 Nixpkgs 的拉取請求中,提交者被要求啟用沙盒進行構建測試(請參閱拉取請求模板中的 Tested using sandboxing),因為 官方 Hydra 構建 中也使用了沙盒。

要為 Nix 配置沙盒,請在 /etc/nix/nix.conf 中設置 sandbox = true;要為 NixOS 配置沙盒,請在 configuration.nix 中設置 nix.useSandbox = true;。自 NixOS 17.09 起,nix.useSandbox 選項默認為 true

可選的解釋器

目前正在進行一項計劃,從零開始使用 Rust 重新實現 Nix。

Nix 2.18 還有一個名為 Lix 的社區分支,專注於正確性、易用性和可擴展性。雖然它也把 Nix 的一些組件移植到了 Rust,但它不像 Tvix 那樣是從零開始重寫的。

早期嘗試可以在 riir-nix 中找到。

備註

  1. 值在計算過程中不會改變。當函數的輸入不變時,函數總是輸出相同的結果。