nix 用户包与系统包

nix user packages vs system packages

我使用 Vagrant + virtualBoxDebian 8 / Ubuntu 图像作为我的开发环境。

我想使用 nix 进行配置,但我无法让 nixOS 完全正常工作(即使用网络、配置...),但我不止很高兴切换。所以我回退到 nix + Debian 8nix + Ubuntu 来模仿生产服务器。

我不太明白 user packagessystem packages 之间的区别,以及在我的上下文中更适合使用什么,以便能够将其重用到生产服务器中。

我应该使用 nix -i 安装软件包,还是编辑 configuration.nix 文件?

您应该将软件包安装到系统配置文件还是用户配置文件中取决于您想要实现的目标。没有单一的正确答案。相反,两种类型的安装包各有优缺点。

系统包在通常位于 /etc/nixos/configuration.nix 中的全局配置文件中定义。 root 以外的用户通常无法编辑该文件,因此无法在列表中添加或删除包。那里定义的包将作为 nixos-rebuild 的一部分安装,并且它们将在 $PATH 中提供给您系统的每个用户。但是,如果这些软件包中的任何一个由于某种原因无法编译,那么您将无法重建系统,即您可能会发现自己处于无法更新内核的境地,因为 nano 无法编译。关注 Nixpkgs git 存储库 master 分支的人可能会经常遇到这个问题,但对于 unstablerelease-x.y 频道的用户来说,这种情况不会经常发生.

用户包可以由您系统上的任何用户安装、更新和卸载,无需超级用户权限。一个用户的包对另一个用户不可见(除非她有意识地将它们导入 $PATH)。因此,两个用户可以安装同一包的两个不同版本。

如果用户不定期更新她的个人资料,那么您将在您的 Nix 商店中积累无法被垃圾收集的旧包。这可能是一个问题或一个功能,这取决于您如何看待它。另一方面,系统包在您每次更新系统时都会更新,因此它们的磁盘占用空间往往较小 space。

就个人而言,我更喜欢让我的系统配置文件尽可能小;我主要将软件包安装到 nix-env 的用户配置文件中。然而,我认识很多人,他们做的恰恰相反,我们都相处得很好。 :-)