NixOS/zh: Difference between revisions

Weijia (talk | contribs)
Created page with "每当使用 <code>nixos-rebuild switch</code> 命令重构系统状态时,都将创建一个新的世代(generation)。您可以随时回滚到上一个世代,这在配置更改(或系统更新)被证明是有害时非常有用。"
Tags: Mobile edit Mobile web edit
Ardenet (talk | contribs)
No edit summary
 
(24 intermediate revisions by 4 users not shown)
Line 3: Line 3:
{{Expansion|reason=此篇文章需要是一个简单的入门介绍,因为它将是新用户在此处阅读的首批文章之一。因此,内容需要简化一些,更复杂的主题应转移到其他文章中。}}
{{Expansion|reason=此篇文章需要是一个简单的入门介绍,因为它将是新用户在此处阅读的首批文章之一。因此,内容需要简化一些,更复杂的主题应转移到其他文章中。}}


[https://nixos.org/ NixOS] 是一个基于 [[Special:MyLanguage/Nix|Nix]] 包管理器与构建系统的 Linux 发行版。它支持[https://en.wikipedia.org/wiki/Declarative_programming 声明式]的系统级[https://en.wikipedia.org/wiki/Configuration_management 配置管理]以及[https://en.wikipedia.org/wiki/Atomicity_(database_systems) 原子化]升级和回滚,同时它仍支持[https://en.wikipedia.org/wiki/Imperative_programming 命令式]的包管理和用户管理。在 NixOS 中,发行版的所有组件 &mdash; 包括[https://en.wikipedia.org/wiki/Linux_kernel 系统内核]、已安装的[https://en.wikipedia.org/wiki/Package_manager 软件包]和系统配置文件 &mdash; 均由 [[Special:MyLanguage/Nix|Nix]] 从被称为 [[Special:MyLanguage/Nix Expression Language|Nix 表达式]] 的[[Wikipedia:Pure function|纯函数]]中构建。
[https://nixos.org/ NixOS] 是一个基于 [[Special:MyLanguage/Nix|Nix]] 包管理器与构建系统的 Linux 发行版。它支持 [https://en.wikipedia.org/wiki/Declarative_programming 声明式] 的系统级 [https://en.wikipedia.org/wiki/Configuration_management 配置管理] 以及 [https://en.wikipedia.org/wiki/Atomicity_(database_systems) 原子化] 升级和回滚,同时它仍支持 [https://en.wikipedia.org/wiki/Imperative_programming 命令式] 的包管理和用户管理。在 NixOS 中,发行版的所有组件 &mdash; 包括 [https://en.wikipedia.org/wiki/Linux_kernel 系统内核]、已安装的 [https://en.wikipedia.org/wiki/Package_manager 软件包] 和系统配置文件 &mdash; 均由 [[Special:MyLanguage/Nix|Nix]] 从被称为 [[Special:MyLanguage/Nix Expression Language|Nix 表达式]] 的 [[Wikipedia:Pure function|纯函数]] 中构建。


由于 Nix 使用了[https://en.wikipedia.org/wiki/Executable 二进制]缓存机制,这便为面向二进制分发(如 Debian)和面向[https://en.wikipedia.org/wiki/Source_code 源码]分发(如 Gentoo)的方法提供了一种独特的折中方案。预编译的二进制程序被视作标准组件,在其无法获取时,自助编译的软件包与模块将被自动构建。
由于 Nix 使用了 [https://en.wikipedia.org/wiki/Executable 二进制] 缓存机制,这便为面向二进制分发(如 Debian)和面向 [https://en.wikipedia.org/wiki/Source_code 源码] 分发(如 Gentoo)的方法提供了一种独特的折中方案。预编译的二进制程序被视作标准组件,在其无法获取时,自助编译的软件包与模块将被自动构建。


NixOS 稳定版本每年发布两次(大约在五月底和十一月底)。NixOS 由 [https://edolstra.github.io/ Eelco Dolstra] 和 [https://en.wikipedia.org/wiki/Armijn_Hemel Armijn Hemel] 创建,并于 2003 年首次发布。目前由 [[Special:MyLanguage/Nix_Community#NixOS_Foundation|NixOS 基金会]] 管理下的社区开发与维护。
NixOS 稳定版本每年发布两次(大约在五月底和十一月底)。NixOS 由 [https://edolstra.github.io/ Eelco Dolstra] 和 [https://en.wikipedia.org/wiki/Armijn_Hemel Armijn Hemel] 创建,并于 2003 年首次发布。目前由 [[Special:MyLanguage/Nix_Community#NixOS_Foundation|NixOS 基金会]] 管理下的社区开发与维护。
Line 14: Line 14:
完整的安装指南请参阅 [https://nixos.org/nixos/manual/index.html#ch-installation  NixOS 手册的 Installation 章节]。此维基还包含替代或补充指南,例如 [[Special:MyLanguage/NixOS as a desktop|桌面设备上的 NixOS]]。
完整的安装指南请参阅 [https://nixos.org/nixos/manual/index.html#ch-installation  NixOS 手册的 Installation 章节]。此维基还包含替代或补充指南,例如 [[Special:MyLanguage/NixOS as a desktop|桌面设备上的 NixOS]]。


大多数用户通过 [https://nixos.org/download/#nixos-iso 任一 ISO 镜像] 安装 NixOS。每个支持架构均有 “graphical”(图形化安装)和 “minimal”(最小化安装)两种 ISO 变体;“graphical” 镜像适用于计划安装桌面环境的用户,而 “minimal” 镜像适用于计划将 NixOS 充当服务器或期望更小 ISO  镜像文件的用户。ISO 镜像为混合镜像,可以刻录到光盘介质或原封不动地复制到 USB 驱动器上并直接启动。请参阅安装指南以了解详情。
大多数用户通过 [https://nixos.org/download/#nixos-iso 任一 ISO 镜像] 安装 NixOS。每个支持架构均有 “graphical”(图形化安装)和 “minimal”(最小化安装)两种 ISO 变体;图形化镜像适用于计划安装桌面环境的用户,而最小化镜像适用于计划将 NixOS 充当服务器或期望更小 ISO  镜像文件的用户。ISO 镜像为混合镜像,可以刻录到光盘介质或原封不动地复制到 USB 驱动器上并直接启动。请参阅安装指南以了解详情。


除了 ISO 镜像,[https://nixos.org/download/#nixos-iso 下载页面] 还提供了多种安装 NixOS 的替代方法。这些方法包括:
除了 ISO 镜像,[https://nixos.org/download/#nixos-iso 下载页面] 还提供了多种安装 NixOS 的替代方法。这些方法包括:
Line 29: Line 29:


<span id="32-bit_x86_architectures"></span>
<span id="32-bit_x86_architectures"></span>
==== 32位 x86 架构 ====
==== 32 位 x86 架构 ====


于32位 x86 架构(即 <code>i686</code>)的支持正在减少。大多数包仍然可以编译和运行,但它们的缓存可用性显著降低<ref>https://discourse.nixos.org/t/limited-cache-availability-for-i686-32-bits-x86-architecture/37626</ref>。32位 x86 架构不再提供预构建的 ISO 镜像文件,但其仍可手动构建。
于 32 位 x86 架构即 <code>i686</code>的支持正在减少。大多数包仍然可以编译和运行,但它们的缓存可用性显著降低<ref>https://discourse.nixos.org/t/limited-cache-availability-for-i686-32-bits-x86-architecture/37626</ref>。32 位 x86 架构不再提供预构建的 ISO 镜像文件,但其仍可手动构建。


<span id="64-bit_x86_architectures"></span>
<span id="64-bit_x86_architectures"></span>
==== 64位 x86 架构 ====
==== 64 位 x86 架构 ====


大多数 <code>x86_64</code> 设备都能顺利运行 NixOS。
大多数 <code>x86_64</code> 设备都能顺利运行 NixOS。


<span id="32-bit_ARM_architectures"></span>
<span id="32-bit_ARM_architectures"></span>
==== 32位 ARM 架构 ====
==== 32 位 ARM 架构 ====


{{Main|NixOS on ARM}}
{{Main|NixOS on ARM}}
NixOS 不官方支持 ARM32 设备(例如 <code>armv6</code> 和 <code>arm71</code>),不过对于其中部分设备,可能存在社区支持。
NixOS 不官方支持 ARM32 设备(例如 <code>armv6</code> 和 <code>armv7l</code>),不过对于其中部分设备,可能存在社区支持。


<span id="64-bit_ARM_architectures"></span>
<span id="64-bit_ARM_architectures"></span>
==== 64位 ARM 架构 ====
==== 64 位 ARM 架构 ====


{{Main|NixOS on ARM}}
{{Main|NixOS on ARM}}
Line 55: Line 55:
{{Main|NixOS on MIPS}}
{{Main|NixOS on MIPS}}
NixOS 对于 MIPS 架构的支持有限, Nixpkgs 中可能存在部分对于此架构的支持。但并未有官方支持。
NixOS 对于 MIPS 架构的支持有限, Nixpkgs 中可能存在部分对于此架构的支持。但并未有官方支持。
<span id="RISC-V_architectures"></span>
==== RISC-V 架构 ====
{{Main|RISC-V}}
NixOS 不为 RISC-V 设备提供官方支持。不过,一些设备可能会受到社区支持。


<span id="Usage"></span>
<span id="Usage"></span>
Line 96: Line 103:
=== 与传统 Linux 发行版比较 ===
=== 与传统 Linux 发行版比较 ===


''Main Article: [[Special:MyLanguage/Nix vs. Linux Standard Base|Nix vs. Linux Standard Base]]''
''Main Article: [[Special:MyLanguage/Nix vs. Linux Standard Base|比较Nix和Linux标准基础]]''


NixOS 与其他 Linux 发行版的主要区别在于,NixOS 不遵循 [https://en.wikipedia.org/wiki/Linux_Standard_Base Linux 标准规范(LSB)] 的文件系统结构。在遵循 LSB 的系统中,软件通常存储在 <code>/{,usr}/{bin,lib,share}</code> 目录下,而配置文件通常存储在 <code>/etc</code>。如果程序的可执行文件被放置在 LSB 的某个 <code>/bin</code> 目录下,那么它就可以在用户环境中被访问。当一个程序引用动态链接库时,它将在 LSB 目录(<code>/lib</code>、<code>/usr/lib</code>)中搜索所需的库。
NixOS 与其他 Linux 发行版的主要区别在于,NixOS 不遵循 [https://en.wikipedia.org/wiki/Linux_Standard_Base Linux 标准规范(LSB)] 的文件系统结构。在遵循 LSB 的系统中,软件通常存储在 <code>/{,usr}/{bin,lib,share}</code> 目录下,而配置文件通常存储在 <code>/etc</code>。如果程序的可执行文件被放置在 LSB 的某个 <code>/bin</code> 目录下,那么它就可以在用户环境中被访问。当一个程序引用动态链接库时,它将在 LSB 目录(<code>/lib</code>、<code>/usr/lib</code>)中搜索所需的库。
Line 108: Line 115:
=== Nix Store 的使用 ===
=== Nix Store 的使用 ===


新手的大多数困惑源于配置文件和所有已安装软件包均存储于只读的 <code>/nix/store</code> 目录树下这一事实。这实际上使得手动编辑系统配置变得不可能;所有配置更改必须通过编辑 <code>/etc/nixos/configuration.nix</code> 文件并运行 <code>nixos-rebuild switch</code> 后才可生效。NixOS 提供了[[Special:MyLanguage/NixOS_modules|模块系统]]以供编辑所有需要的配置。用户应在期望通过低层级的 NixOS 功能(如 activation scripts)手动添加文件或配置之前,首先使用[https://search.nixos.org/options 配置选项搜索工具]检查所需选项是否已存在。
新手的大多数困惑源于配置文件和所有已安装软件包均存储于只读的 <code>/nix/store</code> 目录树下这一事实。这实际上使得手动编辑系统配置变得不可能;所有配置更改必须通过编辑 <code>/etc/nixos/configuration.nix</code> 文件并运行 <code>nixos-rebuild switch</code> 后才可生效。NixOS 提供了 [[Special:MyLanguage/NixOS_modules|模块系统]] 以供编辑所有需要的配置。用户应在期望通过低层级的 NixOS 功能(如 activation scripts)手动添加文件或配置之前,首先使用 [https://search.nixos.org/options 配置选项搜索工具] 检查所需选项是否已存在。


系统的纯粹性(purity)使得系统配置的集中存储成为可能,而无需编辑多个文件。此配置方式可以根据需要进行分发或版本控制。它还提供了确定性:如果您提供相同的输入、相同版本的 Nixpkgs 和相同的 <code>/etc/nixos/configuration.nix</code> 文件,您将得到完全相同的系统状态。
系统的纯粹性(purity)使得系统配置的集中存储成为可能,而无需编辑多个文件。此配置方式可以根据需要进行分发或版本控制。它还提供了确定性:如果您提供相同的输入、相同版本的 Nixpkgs 和相同的 <code>/etc/nixos/configuration.nix</code> 文件,您将得到完全相同的系统状态。
Line 150: Line 157:
=== 世代 ===
=== 世代 ===


每当使用 <code>nixos-rebuild switch</code> 命令重构系统状态时,都将创建一个新的世代(generation)。您可以随时回滚到上一个世代,这在配置更改(或系统更新)被证明是有害时非常有用。
每当使用 <code>nixos-rebuild switch</code> 命令重构系统状态时,都将创建一个新的世代(generation)。您可以随时回滚到上一个世代,这在配置更改(或系统更新)被证明造成破坏时非常有用。


<div lang="en" dir="ltr" class="mw-content-ltr">
您可以通过以下命令回滚:
You can roll back via:
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<syntaxHighlight lang=shell>
<syntaxHighlight lang=shell>
$ nix-env --rollback              # roll back a user environment
$ nix-env --rollback              # 回滚用户环境
$ nixos-rebuild switch --rollback  # roll back a system environment
$ nixos-rebuild switch --rollback  # 回滚系统环境
</syntaxHighlight>
</syntaxHighlight>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
NixOS 还会在引导加载程序菜单中放置前几代系统的条目,因此,作为最后的手段,您可以通过重启来恢复到之前的配置。将当前启动的版本设置为默认运行:
NixOS also places entries for previous generations in the bootloader menu, so as a last resort you can always revert to a previous configuration by rebooting. To set the currently booted generation as the default run
</div>


<syntaxHighlight lang=shell>
<syntaxHighlight lang=shell>
Line 171: Line 172:
</syntaxHighlight>
</syntaxHighlight>


<div lang="en" dir="ltr" class="mw-content-ltr">
由于 NixOS 会保留前几代系统状态以供回滚,因此更新后不会立即从系统中删除旧软件包版本。您可以手动删除旧版本:
Because NixOS keeps previous generations of system state available in case rollback is desired, old package versions aren't deleted from your system immediately after an update. You can delete old generations manually:
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<syntaxHighlight lang=shell>
<syntaxHighlight lang=shell>
# delete generations older than 30 days
# 删除早于 30 天前的世代
$ nix-collect-garbage --delete-older-than 30d
$ nix-collect-garbage --delete-older-than 30d
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
# 删除之前的所有世代 - 运行此命令后您将无法回滚
# delete ALL previous generations - you can no longer rollback after running this
$ nix-collect-garbage -d                       
$ nix-collect-garbage -d                       
</syntaxHighlight>
</syntaxHighlight>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
列出世代:
List generations:
<syntaxHighlight lang=shell>
<syntaxHighlight lang=shell>
# as root
# root 用户身份
$ nix-env --list-generations --profile /nix/var/nix/profiles/system
$ nix-env --list-generations --profile /nix/var/nix/profiles/system
</syntaxHighlight>
</syntaxHighlight>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
切换世代:
Switch generations:
<syntaxHighlight lang=shell>
<syntaxHighlight lang=shell>
# as root switch to generation 204
# root 用户身份切换至 204 世代
$ nix-env --profile /nix/var/nix/profiles/system --switch-generation 204
$ nix-env --profile /nix/var/nix/profiles/system --switch-generation 204
</syntaxHighlight>
</syntaxHighlight>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
删除损坏的世代:
delete broken generation(s):
<syntaxHighlight lang=shell>
<syntaxHighlight lang=shell>
# as root delete broken generations 205 and 206  
# root 用户身份删除损坏的 205 206 世代
$ nix-env --profile /nix/var/nix/profiles/system --delete-generations 205 206
$ nix-env --profile /nix/var/nix/profiles/system --delete-generations 205 206
</syntaxHighlight>
</syntaxHighlight>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
您可以通过设置 <code>/etc/nixos/configuration.nix</code> 中的 [https://search.nixos.org/options?query=nix.gc nix.gc] 选项来配置自动垃圾回收。这是推荐操作,因为它可以降低 Nix Store 的大小。
You can configure automatic garbage collection by setting the [https://search.nixos.org/options?query=nix.gc nix.gc] options in <code>/etc/nixos/configuration.nix</code>. This is recommended, as it keeps the size of the Nix store down.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="See_also"></span>
== See also ==
== 另见 ==
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
* [[Special:MyLanguage/NixOS modules|NixOS 模块]] - 一个用于模块化 [[Special:MyLanguage/Overview of the Nix Expression Language#Expressions|Nix 表达式]]的库,为 [[#declarative-configuration|NixOS 的声明式配置]] 提供支持。
* [[Special:MyLanguage/NixOS modules|NixOS modules]], a library for modular [[Special:MyLanguage/Overview of the Nix Expression Language#Expressions|Nix expressions]] which powers [[#declarative-configuration|the declarative configuration of NixOS]].
* [[Special:MyLanguage/NixOS VM tests|NixOS VM 测试]] - 一个基于  [[Special:MyLanguage/Nixpkgs|Nixpkgs]][[Special:MyLanguage/NixOS|NixOS]]、QEMU 和 Perl 用于创建可复现基础设施测试的库。
* [[Special:MyLanguage/NixOS VM tests|NixOS VM tests]], a library for creating reproducible infrastructure tests, based on [[Special:MyLanguage/Nixpkgs|Nixpkgs]], [[Special:MyLanguage/NixOS|NixOS]], QEMU and Perl.
* [https://github.com/ryan4yin/nixos-and-flakes-book NixOS & Flakes Book] (Ryan4yin, 2023) - 🛠️ ❤️ 一本非官方的 NixOS & Flakes 新手入门书籍。
* [https://github.com/ryan4yin/nixos-and-flakes-book NixOS & Flakes Book] (Ryan4yin, 2023) - 🛠️ ❤️ An unofficial NixOS & Flakes book for beginners.
</div>


[[Category:Pedias]]
[[Category:Pedias]]
[[Category:NixOS]]
[[Category:NixOS]]
[[Category:Nix{{#translation:}}]]
[[Category:Nix{{#translation:}}]]