微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法查看在 NixOS 上构建和激活的实际计算/生成的“输出”系统配置?

如何解决有没有办法查看在 NixOS 上构建和激活的实际计算/生成的“输出”系统配置?

因此在 NixOS 上,我们可以编辑文件 /etc/nixos/configuration.nix 来指定我们的“输入”系统配置。然而,当我们运行 nixos-rebuild switch 来构建和激活我们的“输入”配置时,严格来说,激活的实际配置将不完全是我们在“输入”中的配置,而是基于它的“输出”配置“输入”。

具体来说,某些杂项配置参数可能会导致 NixOS 逻辑为“输入”配置中未严格指定的其他服务插入配置。例如,这里的 https://github.com/NixOS/nixpkgs/blob/724ed08df02546fea2ab38613d615dd47461528c/nixos/modules/services/web-apps/wordpress.nix#L279 是一些 NixOS 逻辑,将 MysqL / MariaDB 服务的配置插入到最终的“输出”系统配置中,但不是因为在“输入”配置中直接请求了 MysqL 服务,而是因为wordpress 配置已指定,MysqL 服务正在自动激活,以方便 wordpress 实例的运行。

我的问题是,有人知道查看这个“最终”生成的“输出”配置的命令或程序是什么,该配置将是系统在 nixos-rebuild switch 之后构建、激活和运行的实际配置?

这对于故障排除很有用,以便能够评估正在运行的所有内容及其运行的实际配置。

解决方法

您提到的最后一个配置是模块使用的 config 变量。 它的值不包含纯粹的数据,所以你不能只是序列化它。一些选项是函数类型的。并非所有这些都与您的配置相关,因为所有模块始终加载到此变量中。即使他们的主要 enable 选项仍然具有 false 值,它仍然存在。

因此,对于故障排除,您最好的选择是 nix repl

$ nix repl '<nixpkgs/nixos>'

Loading '<nixpkgs/nixos>'...
Added 6 variables.

nix-repl> config.services.mysql.[press TAB key]
config.services.mysql.bind              config.services.mysql.extraOptions      config.services.mysql.port
config.services.mysql.configFile        config.services.mysql.group             config.services.mysql.replication
config.services.mysql.dataDir           config.services.mysql.initialDatabases  config.services.mysql.rootPassword
config.services.mysql.enable            config.services.mysql.initialScript     config.services.mysql.settings
config.services.mysql.ensureDatabases   config.services.mysql.package           config.services.mysql.user
config.services.mysql.ensureUsers       config.services.mysql.pidDir
nix-repl> config.services.mysql.ensureDatabases
[ ]

nix-repl>

所以我的笔记本电脑上没有任何 mysql 数据库。

如果您使用的是薄片,这些值在 nixosConfigurations.<hostname> 属性中可用。

在repl中也可以加载flake。在撰写本文时,它还不是很理想,但 this issue 将描述这样做的最佳方法。

对于 Hercules CI Effects,使用模块系统的部署通常会出于相同目的提供 .prebuilt.config 属性。这是一个for runNixOS

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。