2023-03-01 08:52:02 +08:00
|
|
|
|
[#]: subject: "NixOS Series #1: Why Should You Consider Using NixOS?"
|
|
|
|
|
[#]: via: "https://itsfoss.com/why-use-nixos/"
|
|
|
|
|
[#]: author: "Sagar Sharma https://itsfoss.com/author/sagar/"
|
|
|
|
|
[#]: collector: "lkxed"
|
|
|
|
|
[#]: translator: "geekpi"
|
2023-03-08 15:02:20 +08:00
|
|
|
|
[#]: reviewer: "wxy"
|
|
|
|
|
[#]: publisher: "wxy"
|
|
|
|
|
[#]: url: "https://linux.cn/article-15606-1.html"
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
|
|
|
|
NixOS 系列 #1:你为什么要考虑使用 NixOS?
|
|
|
|
|
======
|
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
![][0]
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
NixOS……又一个使用不同软件包管理器的发行版?🤯
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
好吧,NixOS 是 [高级 Linux 发行版][1] 之一。
|
|
|
|
|
|
|
|
|
|
所以如果我写这个,我一定有一个充分的理由,对吗?嗯,有很多!
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
|
|
|
|
我已经使用它 3 个月了,它是如此之好,以至于我正在考虑从我一直以来最喜欢的 **Pop!_OS 切换到 NixOS**。
|
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
在本指南中,我将分享 NixOS 在众多 Linux 发行版中脱颖而出的主要特点。
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
别担心,在我们继续之前,让我告诉你什么是 NixOS:
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
> 它是一个以 Nix 包管理器为核心的 Linux 发行版,为你省去了在其它的 Linux 发行版上设置 Nix 的麻烦,可以让你充分利用它的优势。由开发 Nix 的同一个团队构建。
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
|
|
|
|
### 使用 NixOS 的 6 个理由
|
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
NixOS 是一个有趣的从零开始构建的 [独立 Linux 发行版][2]。
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
|
|
|
|
每个人都可以通过使用 NixOS 学到很多东西,但**在我看来**,如果你是一个开发人员或计算机科学的学生,NixOS 应该非常合适。
|
|
|
|
|
|
|
|
|
|
![nix os screenshot with gnome][3]
|
|
|
|
|
|
|
|
|
|
让我告诉你为什么。
|
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
#### 1、不易损坏/易于恢复
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
|
|
|
|
就其核心而言,NixOS 是为长期使用而构建的。
|
|
|
|
|
|
|
|
|
|
这并不意味着它像 Debian 那样用多年前的软件包来保证稳定性,而是遵循一种不同的方法。
|
|
|
|
|
|
|
|
|
|
为了理解 NixOS 为何如此稳定,让我们谈谈用户一般是如何破坏他们的系统的,即“_依赖性问题或软件包冲突_”
|
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
在更新系统或安装一个新的软件包时,你一般会面临系统崩溃的风险。主要是因为你的软件包管理器无法满足依赖性,或者安装的软件包与现有系统冲突导致的。
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
**而 NixOS 有一个非常聪明的方法来处理这个问题。**
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
你看,每当你升级你的系统或安装一个软件包时,**系统的状态就会被重建**,被称为超过当前的“<ruby>新世代<rt>new generation</rt></ruby>”。
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
|
|
|
|
![nix os listing generations via terminal][4]
|
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
因此,如果你在使用新的软件包或更新时遇到任何麻烦,你可以随时回滚到“<ruby>旧世代<rt>old generation</rt></ruby>”,在那里你会找到**系统以前的状态**。
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
即使系统无法访问,你也能在启动时找到以前几代。
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
#### 2、可重复性
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
|
|
|
|
通过一个配置文件,你可以为其他物理系统创建一个你当前环境的副本。
|
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
这个功能给你带来的好处是,你可以使用 Nix 配置文件进行安装和配置。
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
当你有了适合你的用途的配置文件,将该文件发送到新的系统中,用你的配置文件替换默认的配置文件。就是这么简单!
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
|
|
|
|
**重建配置,升级系统,并通过给定的命令进行切换:**
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
sudo nixos-rebuild switch --upgrade
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
你将在几分钟内拥有与你的主机上完全相同的开发环境,并进行复制。
|
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
#### 3、轻松回滚
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
虽然你可能已经从 NixOS 的 “<ruby>世代<rt>generation</rt></ruby>” 特性中得到了灵感。
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
但还有更多的内容。🕵️
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
|
|
|
|
NixOS 在很大程度上依赖于符号链接。如果这对你来说是一个新概念,请参考下面的指南:
|
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
> **[如何在 Linux 中创建符号链接(完整指南)][5]**
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
|
|
|
|
一般来说,在其他 Linux 发行版中,当你升级一个软件包时,新的软件包会取代旧的。
|
|
|
|
|
|
|
|
|
|
但 NixOS 不是这样的。
|
|
|
|
|
|
|
|
|
|
在 NixOS 中,软件包被隔离并存储在一个单独的目录中,这就是使用符号链接的原因。
|
|
|
|
|
|
|
|
|
|
每当你升级一个软件包时,**NixOS 会调整符号链接来定位新的软件包,但不会删除旧的**。
|
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
因此,如果你面临与新包的冲突,只需切换到旧世代,符号链接有助于定位旧版本的包。😌
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
#### 4、Nix 包管理器
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
Nix 包管理器允许你访问超过 80,000 个软件包!不仅仅局限于 Linux,它还可以在 **macOS、WSL2、Docker 等平台**上使用。
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
而且,软件包的可用性与 AUR 相似,甚至比 AUR 更好,因为你应该在 Nix 包管理器上找到几乎所有的东西(我是认真的)。
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
|
|
|
|
例如,我想安装 Librewolf 浏览器,这在大多数 Linux 发行版的默认仓库中是不可用的。
|
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
但是,Nix 有它!这意味着你可以依靠 Nix 包管理器来安装几乎所有的软件包。
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
|
|
|
|
如果你有先前的 Linux 经验,它也相对容易理解。总而言之,**Nix 包管理器令人印象深刻**!
|
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
#### 5、使用同一软件包的多个版本
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
|
|
|
|
这对开发者来说可能是至关重要的,有些应用需要特定依赖的旧版本,而有些则需要最新的版本。
|
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
而且,正如我前面提到的,Nix 将包安装到一个特定的子目录中,每个包都是隔离的,所以一个包不会干扰另一个包!
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
|
|
|
|
在使用 Nix 之前,我使用虚拟机和容器来满足同一软件包的不同依赖性,尤其是 PHP,但 NixOS 为我的工作流程带来了奇迹。
|
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
#### 6、无需安装就能测试软件包的能力
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
你可以使用 [nix-shell][9],它通过临时修改 `$PATH` 环境变量来测试一个包。
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
而且没有任何限制。你能够测试每一个可供安装的软件包!
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
|
|
|
|
### NixOS 系列:让我们探索更多!
|
|
|
|
|
|
|
|
|
|
这是我们 Nix 系列的第一部分,我介绍了使用 NixOS 的原因。我相信更多的 Linux 用户应该去了解它,如果他们还没有了解的话。
|
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
在下一部分,我将解释如何在你的虚拟机中安装 NixOS。
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
2023-03-08 15:02:20 +08:00
|
|
|
|
💬 欢迎在下面的评论中分享关于 NixOS 的其他内容的建议。
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
via: https://itsfoss.com/why-use-nixos/
|
|
|
|
|
|
|
|
|
|
作者:[Sagar Sharma][a]
|
|
|
|
|
选题:[lkxed][b]
|
|
|
|
|
译者:[geekpi](https://github.com/geekpi)
|
2023-03-08 15:02:20 +08:00
|
|
|
|
校对:[wxy](https://github.com/wxy)
|
2023-03-01 08:52:02 +08:00
|
|
|
|
|
|
|
|
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
|
|
|
|
|
|
|
|
|
[a]: https://itsfoss.com/author/sagar/
|
|
|
|
|
[b]: https://github.com/lkxed/
|
|
|
|
|
[1]: https://itsfoss.com/advanced-linux-distros/
|
|
|
|
|
[2]: https://itsfoss.com/independent-linux-distros/
|
|
|
|
|
[3]: https://itsfoss.com/content/images/2023/02/nix-os-gnome.png
|
|
|
|
|
[4]: https://itsfoss.com/content/images/2023/02/nix-os-generations.png
|
|
|
|
|
[5]: https://linuxhandbook.com/symbolic-link-linux/
|
2023-03-08 15:02:20 +08:00
|
|
|
|
[9]: https://nixos.org/manual/nix/stable/command-ref/nix-shell.html
|
|
|
|
|
[0]: https://img.linux.net.cn/data/attachment/album/202303/08/150044jhtdyahoax5ghbxn.jpg
|