NixOS/zh: Difference between revisions

FuzzyBot (talk | contribs)
Updating to match new version of source page
Ardenet (talk | contribs)
No edit summary
 
(11 intermediate revisions by 2 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 中,发行版的所有组件 — 包括[https://en.wikipedia.org/wiki/Linux_kernel 系统内核]、已安装的[https://en.wikipedia.org/wiki/Package_manager 软件包]和系统配置文件 — 均由 [[Special:MyLanguage/Nix|Nix]] 从被称为 [[Special:MyLanguage/Nix Expression Language|Nix 表达式]] 的[[Wikipedia:Pure function|纯函数]]中构建。
[https://nixos.org/ NixOS] 是一个基于 [[Special:MyLanguage/Nix|Nix]] 包管理器与构建系统的 Linux 发行版。它支持 [[Wikipedia:Declarative programming|声明式]] 的系统级 [[Wikipedia:Configuration management|配置管理]] 以及 [[Wikipedia:Atomicity (database_systems)|原子化]] 升级和回滚,同时它仍支持 [[Wikipedia:Imperative programming|命令式]] 的包管理和用户管理。在 NixOS 中,发行版的所有组件 — 包括 [[Wikipedia:Linux kernel|系统内核]]、已安装的 [[Wikipedia:Package manager|软件包]] 和系统配置文件 — 均由 [[Special:MyLanguage/Nix|Nix]] 从被称为 [[Special:MyLanguage/Nix (language)|Nix 表达式]] 的 [[Wikipedia:Pure function|纯函数]] 中构建。


由于 Nix 使用了[https://en.wikipedia.org/wiki/Executable 二进制]缓存机制,这便为面向二进制分发(如 Debian)和面向[https://en.wikipedia.org/wiki/Source_code 源码]分发(如 Gentoo)的方法提供了一种独特的折中方案。预编译的二进制程序被视作标准组件,在其无法获取时,自助编译的软件包与模块将被自动构建。
由于 Nix 使用了 [[Wikipedia:Executable|二进制]] 缓存机制,这便为面向二进制分发(如 Debian)和面向 [[Wikipedia: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] 和 [[Wikipedia:Armijn Hemel| Armijn Hemel]] 创建,并于 2003 年首次发布。目前由 [[Special:MyLanguage/Nix_Community#NixOS_Foundation|NixOS 基金会]] 管理下的社区开发与维护。


<span id="Installation"></span>
<span id="Installation"></span>
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 42: Line 42:


{{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>
Line 48: Line 49:


{{Main|NixOS on ARM}}
{{Main|NixOS on ARM}}
只要设备支持通用 systemd 引导过程,NixOS 便可开箱即用。但是,使用专有引导加载程序的特定设备可能存在运行问题。
只要设备支持通用 systemd 引导过程,NixOS 便可开箱即用。但是,使用专有引导加载程序的特定设备可能存在运行问题。


Line 54: Line 56:


{{Main|NixOS on MIPS}}
{{Main|NixOS on MIPS}}
NixOS 对于 MIPS 架构的支持有限, Nixpkgs 中可能存在部分对于此架构的支持。但并未有官方支持。
NixOS 对于 MIPS 架构的支持有限, Nixpkgs 中可能存在部分对于此架构的支持。但并未有官方支持。


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="RISC-V_architectures"></span>
==== RISC-V architectures ====
==== RISC-V 架构 ====
</div>


{{Main|RISC-V}}
{{Main|RISC-V}}


<div lang="en" dir="ltr" class="mw-content-ltr">
 
NixOS does not provide official support for RISC-V devices. However, several devices may benefit from community support.
NixOS 不为 RISC-V 设备提供官方支持。不过,一些设备可能会受到社区支持。
</div>


<span id="Usage"></span>
<span id="Usage"></span>
Line 70: Line 71:


<span id="declarative-configuration"></span>
<span id="declarative-configuration"></span>
<span id="Declarative_Configuration"></span>
<span id="Declarative_Configuration"></span>
=== 声明式配置 ===
=== 声明式配置 ===
Line 98: Line 100:
在使用频道时,您的系统或 [[Special:MyLanguage/User Environment|用户环境]] 会从一个 URL 拉取软件包定义和选项,该 URL 指向 Nix 软件包集合(Nixpkgs)及相关 NixOS 模块的特定快照。
在使用频道时,您的系统或 [[Special:MyLanguage/User Environment|用户环境]] 会从一个 URL 拉取软件包定义和选项,该 URL 指向 Nix 软件包集合(Nixpkgs)及相关 NixOS 模块的特定快照。


关于如何使用和配置 Nix 频道的更多信息,请参阅 [[Special:MyLanguage/channel branches|频道分支]]。
关于如何使用和配置 Nix 频道的更多信息,请参阅 [[Special:MyLanguage/Channel branches|频道分支]]。


<span id="Internals"></span>
<span id="Internals"></span>
Line 108: Line 110:
''Main Article: [[Special:MyLanguage/Nix vs. Linux Standard Base|比较Nix和Linux标准基础]]''
''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 不遵循 [[Wikipedia: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 中,<code>/lib</code> 和 <code>/usr/lib</code> 目录并不存在。相反,所有系统库文件、可执行文件、内核、固件和配置文件都存放在 [[Special:MyLanguage/Nix#Nix store|Nix store]] 中。<code>/nix/store</code> 下的文件和目录均由构建数据的描述信息经哈希后命名。所有位于 Nix Store 的文件与目录均不可变。
然而,在 NixOS 中,<code>/lib</code> 和 <code>/usr/lib</code> 目录并不存在。相反,所有系统库文件、可执行文件、内核、固件和配置文件都存放在 [[Special:MyLanguage/Nix (package_manager)#Nix store|Nix store]] 中。<code>/nix/store</code> 下的文件和目录均由构建数据的描述信息经哈希后命名。所有位于 Nix Store 的文件与目录均不可变。
<code>/bin</code> 和 <code>/usr/bin</code> 几乎不存在:它们分别只包含 <code>/bin/sh</code> 和 <code>/usr/bin/env</code>,以提供与使用 shebang 行的现有脚本的最低兼容性。用户级环境通过大量指向所需软件包和辅助文件的符号链接来实现。
<code>/bin</code> 和 <code>/usr/bin</code> 几乎不存在:它们分别只包含 <code>/bin/sh</code> 和 <code>/usr/bin/env</code>,以提供与使用 shebang 行的现有脚本的最低兼容性。用户级环境通过大量指向所需软件包和辅助文件的符号链接来实现。
这些环境被称作 [[Special:MyLanguage/Nix#Profiles|Profiles]],被存储于 <code>/nix/var/nix/profiles</code>,每个用户拥有其独有的 Profiles。
这些环境被称作 [[Special:MyLanguage/Nix#Profiles|Profiles]],被存储于 <code>/nix/var/nix/profiles</code>,每个用户拥有其独有的 Profiles。
Line 118: Line 120:
=== 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 139: Line 141:
}
}
</nowiki>}}
</nowiki>}}
{{file|/etc/nixos/basic-webserver.nix|nix|<nowiki>
{{file|/etc/nixos/basic-webserver.nix|nix|<nowiki>
{
{
Line 147: Line 150:
}
}
</nowiki>}}
</nowiki>}}
{{file|/etc/nixos/blog.nix|nix|<nowiki>
{{file|/etc/nixos/blog.nix|nix|<nowiki>
{
{
Line 155: Line 159:
</nowiki>}}
</nowiki>}}


请参阅 [https://nixos.org/nixos/manual/index.html#sec-writing-modules NixOS 手册的模块部分] 以获取更多详细信息。
请参阅 [https://nixos.org/manual/nixos/stable/index.html#sec-writing-modules NixOS 手册的模块部分] 以获取更多详细信息。


<span id="Generations"></span>
<span id="Generations"></span>
=== 世代 ===
=== 世代 ===


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


您可以通过以下命令回滚:
您可以通过以下命令回滚:


<syntaxHighlight lang=shell>
<syntaxHighlight lang=console>
$ nix-env --rollback              # 回滚用户环境
$ nix-env --rollback              # roll back a user environment
$ nixos-rebuild switch --rollback  # 回滚系统环境
$ nixos-rebuild switch --rollback  # roll back a system environment
</syntaxHighlight>
</syntaxHighlight>


NixOS 还会在引导加载程序菜单中放置前几代系统的条目,因此,作为最后的手段,您可以通过重启来恢复到之前的配置。将当前启动的版本设置为默认运行:
NixOS 还会在引导加载程序菜单中放置前几代系统的条目,因此,作为最后的手段,您可以通过重启来恢复到之前的配置。将当前启动的版本设置为默认运行:


<syntaxHighlight lang=shell>
<syntaxHighlight lang=console>
$ /run/current-system/bin/switch-to-configuration boot
$ /run/current-system/bin/switch-to-configuration boot
</syntaxHighlight>
</syntaxHighlight>
Line 177: Line 181:
由于 NixOS 会保留前几代系统状态以供回滚,因此更新后不会立即从系统中删除旧软件包版本。您可以手动删除旧版本:
由于 NixOS 会保留前几代系统状态以供回滚,因此更新后不会立即从系统中删除旧软件包版本。您可以手动删除旧版本:


<syntaxHighlight lang=shell>
<syntaxHighlight lang=console>
# 删除早于 30 天前的世代
$ # delete generations older than 30 days
$ nix-collect-garbage --delete-older-than 30d
$ nix-collect-garbage --delete-older-than 30d


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


列出世代:
列出世代:
<syntaxHighlight lang=shell>
 
# root 用户身份
<syntaxHighlight lang=console>
$ # as root
$ nix-env --list-generations --profile /nix/var/nix/profiles/system
$ nix-env --list-generations --profile /nix/var/nix/profiles/system
</syntaxHighlight>
</syntaxHighlight>


切换世代:
切换世代:
<syntaxHighlight lang=shell>
 
# root 用户身份切换至 204 世代
<syntaxHighlight lang=console>
$ # as root switch to generation 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>


删除损坏的世代:
删除损坏的世代:
<syntaxHighlight lang=shell>
 
# root 用户身份删除损坏的 205 206 世代
<syntaxHighlight lang=console>
$ # as root delete broken generations 205 and 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>
Line 210: Line 217:
* [[Special:MyLanguage/NixOS modules|NixOS 模块]] - 一个用于模块化 [[Special:MyLanguage/Overview of the Nix Expression Language#Expressions|Nix 表达式]]的库,为 [[#declarative-configuration|NixOS 的声明式配置]] 提供支持。
* [[Special:MyLanguage/NixOS modules|NixOS 模块]] - 一个用于模块化 [[Special:MyLanguage/Overview of the Nix Expression Language#Expressions|Nix 表达式]]的库,为 [[#declarative-configuration|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 测试]] - 一个基于  [[Special:MyLanguage/Nixpkgs|Nixpkgs]]、[[Special:MyLanguage/NixOS|NixOS]]、QEMU 和 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) - 🛠️ ❤️ 一本非官方的 NixOS & Flakes 新手入门书籍。


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