我使用Vagrant
+ virtualBox
和Debian 8
/ Ubuntu
图片作为我的开发环境。
我想使用nix进行配置,但我无法让nixOS
完全正确地工作(例如,使用网络,配置......),但我会这样做切换乐于开心。所以我要回到nix + Debian 8
或nix + Ubuntu
来模仿生产服务器。
我无法理解user packages
和system packages
之间的差异以及在我的上下文中使用的优点,以便能够将其重用到生产服务器中。< / p>
我应该使用nix -i
安装软件包,还是编辑configuration.nix
文件?
答案 0 :(得分:6)
是否应将软件包安装到系统配置文件或用户配置文件中取决于您希望实现的目标。没有一个正确的答案。相反,两种类型的安装包都有不同的优缺点。
系统包在全局配置文件中定义,该文件通常位于/etc/nixos/configuration.nix
中。 root
以外的用户通常无法编辑该文件,因此无法在列表中添加或删除包。其中定义的软件包将作为nixos-rebuild
的一部分安装,并且$PATH
中的软件包可供系统的每个用户使用。但是,如果这些软件包中的任何软件包由于某些原因而无法编译,那么您就无法重建系统,即您可能会发现自己处于无法更新内核的情况,例如,nano
没有&#39 ; t编译。关注Nixpkgs git存储库的master
分支的人可能会经常遇到此问题,但对unstable
或release-x.y
频道的用户来说,这种情况并非如此。< / p>
系统上的任何用户都可以安装,更新和卸载用户软件包,而无需超级用户权限。一个用户的软件包将不会被其他用户看到(除非她有意识地将它们导入$PATH
)。因此,两个用户可以安装同一个包的两个不同版本。
如果用户没有定期更新她的个人资料,那么您将在Nix商店中累积旧包,这些包不能被垃圾回收。这可能是一个问题或功能,具体取决于您如何看待它。另一方面,系统软件包在每次更新系统时都会更新,因此这些软件包占用的磁盘空间更小。
就个人而言,我更喜欢保持我的系统配置文件尽可能小;我主要将软件包安装到nix-env
的用户配置文件中。然而,我知道很多人做的恰恰相反,我们都相处得很好。 : - )