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

问题描述 投票:0回答:2

因此,在 NixOS 上,我们可以编辑文件

/etc/nixos/configuration.nix
来指定我们的“输入”系统配置。 然而,当我们运行
nixos-rebuild switch
来构建并激活我们的“输入”配置时,严格来说,激活的实际配置并不完全是我们在“输入”中的配置,而是基于该“输入”的“输出”配置”.

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

我的问题是,有谁知道查看此“最终”生成的“输出”配置的命令或过程是什么,该配置将是系统在

nixos-rebuild switch
之后构建、激活和运行的实际配置?

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

nix nixos
2个回答
11
投票

您提到的最终配置是模块使用的

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中。截至撰写本文时,它还不太理想,但本期将描述实现此目的的最佳方法。

借助 Hercules CI Effects,使用模块系统的部署通常会出于相同目的提供

.prebuilt.config
属性。这是一个 用于 runNixOS


0
投票

罗伯特的答案很接近,但没有给出当前系统的当前输出。

NixOS & Flakes 书中有一个关于 使用

nix repl
进行调试的部分,它研究了如何查看最终输出:

$ cd /etc/nixos
$ nix repl
Lix 2.91.1
Type :? for help.

# I use a flake-based configuration, so...
nix-repl> :lf . 
Added 11 variables.

# Now I can inspect outputs:
# this is my hostname...
nix-repl> outputs.nixosConfigurations.antikythera.config.networking.hostName
"antikythera"

# ...I use GNOME, not Xfce
nix-repl> outputs.nixosConfigurations.antikythera.config.services.xserver.displayManager.gdm.enable
true

nix-repl> outputs.nixosConfigurations.antikythera.config.services.xserver.desktopManager.xfce.enable
false

# ...I customise my GRUB theme
nix-repl> outputs.nixosConfigurations.antikythera.config.boot.loader.grub.theme
«derivation /nix/store/zmdbjdnwbv7jbzavwmgxxlhr2m6wld1k-distro-grub-themes.drv»

# You can remove the type attribute so it prints out the set:
nix-repl> builtins.removeAttrs outputs.nixosConfigurations.antikythera.config.boot.loader.grub.theme ["type"]
{
  __ignoreNulls = true;
  __structuredAttrs = false;
  all = [ ... ];
  args = [ ... ];
  buildInputs = [ ];
  builder = "/nix/store/5mh7kaj2fyv8mk4sfq1brwxgc02884wi-bash-5.2p37/bin/bash";
  ...
}

© www.soinside.com 2019 - 2024. All rights reserved.