config - 如何在 NixOS 中将文本附加到/etc/... 配置文件?

标签 config pam nixos

[披露:我早些时候在 NixOS channel 上问过这个问题,但 30 分钟后没有得到答复,这是一个繁忙的 channel 。如果我在那里得到一个,我会在这里复制它]

我正在尝试向 NixOS 中的配置文件添加一些行(例如 /etc/pam.d/sudo )。 pam.nix 中可用的配置选项不包括我想添加的行(在本例中为 account requisite pam_time.so ),并且不包括 extraConfig选项。

我知道我可以使用 environement.etc.filename.text 创建新的配置文件所以我去了,但是 sudo nixos-rebuild switch然后提示它有两个配置文件的来源,官方的和我的( mismatched duplicate entry /nix/… <-> /nix/… ):

environment.etc."pam.d/sudo".text = ''blah'';

在 NixOS 中是否有附加到/etc/配置文件(或修补它)的通用方法?

或者是修改系统 .nix 文件的唯一方法(例如修改 pam.nix ,我不愿意这样做,因为它会与 future 的更新发生冲突)?

最佳答案

您可以将行添加到默认值 security.pam.services.sudo.text使用 mkOverride或快捷方式 mkDefault为您的值赋予与默认值相同的优先级。您可以使用 mkOrder 控制订单或快捷方式 mkBeforemkAfter .所以要追加,你可以这样做:

security.pam.services.sudo.text = pkgs.lib.mkDefault( pkgs.lib.mkAfter "# hi" );

当一个选项有多个值时,只保留优先级最低的值。如果仍然有多个值,则对它们进行排序和合并。 mkOverridemkOrder创建特殊值,代码在 modules.nix识别它何时执行此操作。普通值具有默认优先级 (100) 和排序顺序 (1000)。 pam.nix用途 mkDefault它为 text 创造的值(value)选项,它使优先级为 1000,因此普通值将替换它而不是被合并。

NixOS manual section on Modularity再解释一下。

我不认为你可以为 environment.etc 一般地做这件事因为目标文件不必匹配属性名称,而 pam.nix特别是在 environment.etc 中没有命名它的任何条目。 .它更像是一个按顺序处理的指令列表。见 etc.nix
make-etc.sh

关于config - 如何在 NixOS 中将文本附加到/etc/... 配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45575297/

相关文章:

debian - Pam_tally2 没有在成功时重置失败

linux - ldap 用户的 nslcd 身份验证失败,错误为 "lookup failed: No results returned"

haskell - 如何在 NixOS 上使用新的 haskell-ng 基础架构?

nix - node2nix 覆盖;包裹程序 : command not found

带有 spring.config.location 的 Spring

java - 寻找用于加载配置文件的酷 Java 工具

spring-boot - consul first bootstrap with spring cloud 配置

mysql - 通过性能指标提高mysql数据库性能

linux - 使用 pam 设置用户密码

nix - 如何在 Nixos 上重新启动服务?